diff --git a/DEPS b/DEPS index a4a516bf..20c46ef 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '24f19780d1e76595c049d8cad4352de839cfc6b5', + 'skia_revision': '65115a1b1a5c72b47492dc447d1d282353ae3121', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'dbb281193f8f277bdb38ff8979533b308b429fb8', + 'v8_revision': '1d6a302d9693e0e1fa2eb029fa82347609f1e57c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -64,7 +64,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '974b4a6c4bceb50bbe5bf316e9e273b62eaeceac', + 'pdfium_revision': 'a9caab94c1f16929e5acf2676117224617d80f53', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -96,7 +96,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '041b58513c9679b8d609c6e67f50e37ed7e893d3', + 'catapult_revision': 'c78686903901261433d5abf72d94f0052524b5c7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other.
diff --git a/build/android/AndroidManifest.xml b/build/android/AndroidManifest.xml index 143de62e..2c469aa0 100644 --- a/build/android/AndroidManifest.xml +++ b/build/android/AndroidManifest.xml
@@ -15,6 +15,6 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="dummy.package"> - <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" /> + <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" /> </manifest>
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index e27073c..de50e70 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -2642,34 +2642,40 @@ MainThreadScrollingReason::kNotScrollingOnMain; TRACE_EVENT0("cc", "LayerTreeHostImpl::ScrollBegin"); - ClearCurrentlyScrollingLayer(); - - gfx::Point viewport_point(scroll_state->position_x(), - scroll_state->position_y()); - - gfx::PointF device_viewport_point = gfx::ScalePoint( - gfx::PointF(viewport_point), active_tree_->device_scale_factor()); - LayerImpl* layer_impl = - active_tree_->FindLayerThatIsHitByPoint(device_viewport_point); - - if (layer_impl) { - LayerImpl* scroll_layer_impl = - active_tree_->FindFirstScrollingLayerOrScrollbarLayerThatIsHitByPoint( - device_viewport_point); - if (scroll_layer_impl && - !IsClosestScrollAncestor(layer_impl, scroll_layer_impl)) { - scroll_status.thread = SCROLL_UNKNOWN; - scroll_status.main_thread_scrolling_reasons = - MainThreadScrollingReason::kFailedHitTest; - return scroll_status; - } - } - + LayerImpl* scrolling_layer_impl = nullptr; bool scroll_on_main_thread = false; - LayerImpl* scrolling_layer_impl = FindScrollLayerForDeviceViewportPoint( - device_viewport_point, type, layer_impl, &scroll_on_main_thread, - &scroll_status.main_thread_scrolling_reasons); + if (scroll_state->is_in_inertial_phase()) + scrolling_layer_impl = CurrentlyScrollingLayer(); + + if (!scrolling_layer_impl) { + ClearCurrentlyScrollingLayer(); + + gfx::Point viewport_point(scroll_state->position_x(), + scroll_state->position_y()); + + gfx::PointF device_viewport_point = gfx::ScalePoint( + gfx::PointF(viewport_point), active_tree_->device_scale_factor()); + LayerImpl* layer_impl = + active_tree_->FindLayerThatIsHitByPoint(device_viewport_point); + + if (layer_impl) { + LayerImpl* scroll_layer_impl = + active_tree_->FindFirstScrollingLayerOrScrollbarLayerThatIsHitByPoint( + device_viewport_point); + if (scroll_layer_impl && + !IsClosestScrollAncestor(layer_impl, scroll_layer_impl)) { + scroll_status.thread = SCROLL_UNKNOWN; + scroll_status.main_thread_scrolling_reasons = + MainThreadScrollingReason::kFailedHitTest; + return scroll_status; + } + } + + scrolling_layer_impl = FindScrollLayerForDeviceViewportPoint( + device_viewport_point, type, layer_impl, &scroll_on_main_thread, + &scroll_status.main_thread_scrolling_reasons); + } if (scrolling_layer_impl) scroll_affects_scroll_handler_ = scrolling_layer_impl->layer_tree_impl()->have_scroll_event_handlers(); @@ -2718,11 +2724,7 @@ ScrollStateData scroll_state_end_data; scroll_state_end_data.is_ending = true; ScrollState scroll_state_end(scroll_state_end_data); - // TODO(Sahel): Once the touchpad scroll latching for Non-mac devices is - // implemented, the current scrolling layer should not get cleared after - // each animation (crbug.com/526463). ScrollEnd(&scroll_state_end); - ClearCurrentlyScrollingLayer(); } return scroll_status; } @@ -2809,7 +2811,6 @@ ScrollStateData scroll_state_data; scroll_state_data.position_x = viewport_point.x(); scroll_state_data.position_y = viewport_point.y(); - scroll_state_data.is_in_inertial_phase = true; ScrollState scroll_state(scroll_state_data); // ScrollAnimated is used for animated wheel scrolls. We find the first layer
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/InnerNode.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/InnerNode.java index fa3454bd..3d6c70b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/InnerNode.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/InnerNode.java
@@ -29,7 +29,7 @@ numItems += children.get(i).getItemCount(); if (position < numItems) return i; } - return -1; + throw new IndexOutOfBoundsException(position + "/" + numItems); } private int getStartingOffsetForChildIndex(int childIndex) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java index 6ebfa32..1db0394 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerView.java
@@ -483,9 +483,7 @@ * in {@link CardViewHolder#onBindViewHolder()}. */ public void dismissItemWithAnimation(final ViewHolder viewHolder) { - // We need to check the position, as the view holder might have been removed. - final int position = viewHolder.getAdapterPosition(); - if (position == RecyclerView.NO_POSITION) { + if (viewHolder.getAdapterPosition() == RecyclerView.NO_POSITION) { // The item does not exist anymore, so ignore. return; } @@ -513,13 +511,23 @@ @Override public void onAnimationEnd(Animator animation) { - getNewTabPageAdapter().dismissItem(position); + dismissItemInternal(viewHolder); NewTabPageRecyclerView.this.onItemDismissFinished(viewHolder); } }); animation.start(); } + private void dismissItemInternal(ViewHolder viewHolder) { + // Re-check the position in case the adapter has changed. + final int position = viewHolder.getAdapterPosition(); + if (position == RecyclerView.NO_POSITION) { + // The item does not exist anymore, so ignore. + return; + } + getNewTabPageAdapter().dismissItem(position); + } + /** * @param animations in/out list holding the animators to play. * @param view view to animate.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImplTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImplTest.java index 37dddba9..c3a5269e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImplTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImplTest.java
@@ -9,7 +9,6 @@ import android.content.pm.ResolveInfo; import android.test.suitebuilder.annotation.SmallTest; -import org.chromium.base.test.util.DisabledTest; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.test.ChromeActivityTestCaseBase; @@ -96,8 +95,7 @@ resolveInfos, packageName).size()); } - // @SmallTest - @DisabledTest(message = "crbug.com/673680") + @SmallTest public void testIsPackageSpecializeHandler_withEphemeralResolver() { String packageName = ""; ResolveInfo info = new ResolveInfo();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java index 58211da..311488b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java
@@ -777,9 +777,8 @@ * * @throws InterruptedException */ - // @MediumTest - // @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 - @DisabledTest(message = "crbug.com/673729") + @MediumTest + @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 public void testReverseOrderRestore() throws InterruptedException { TabModel model = getActivity().getTabModelSelector().getModel(false); ChromeTabCreator tabCreator = getActivity().getTabCreator(false);
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index fcdba71e..21b02760 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -15545,7 +15545,7 @@ Lock screen orientation when playing a video fullscreen. </message> <message name="IDS_FLAGS_VIDEO_FULLSCREEN_ORIENTATION_LOCK_DESCRIPTION" desc="Description of the flag for enabling orientation lock for fullscreen video playback."> - Lock the screen orientation of the device to match video orientation when a video goes fullscreen. + Lock the screen orientation of the device to match video orientation when a video goes fullscreen. Only on phones. </message> <if expr="is_win">
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index d48f020..44a84a8 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -584,7 +584,7 @@ "//third_party/WebKit/public:features", "//third_party/WebKit/public:resources", "//third_party/adobe/flash:flapper_version_h", - "//third_party/brotli", + "//third_party/brotli:dec", "//third_party/cacheinvalidation", "//third_party/cld:cld_version", "//third_party/icu",
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc index ba30139d..657bd72 100644 --- a/chrome/browser/ui/webui/about_ui.cc +++ b/chrome/browser/ui/webui/about_ui.cc
@@ -64,7 +64,7 @@ #include "net/http/http_response_headers.h" #include "net/url_request/url_fetcher.h" #include "net/url_request/url_request_status.h" -#include "third_party/brotli/dec/decode.h" +#include "third_party/brotli/include/brotli/decode.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/webui/jstemplate_builder.h" @@ -764,19 +764,26 @@ base::StringPiece raw_response = ResourceBundle::GetSharedInstance().GetRawDataResource(idr); if (idr == IDR_ABOUT_UI_CREDITS_HTML) { - size_t decoded_size; - const uint8_t* encoded_response_buffer = + const uint8_t* next_encoded_byte = reinterpret_cast<const uint8_t*>(raw_response.data()); - CHECK(BrotliDecompressedSize(raw_response.size(), encoded_response_buffer, - &decoded_size)); - - // Resizing the response and using it as the buffer Brotli decompresses - // into. - response.resize(decoded_size); - CHECK(BrotliDecompressBuffer(raw_response.size(), encoded_response_buffer, - &decoded_size, - reinterpret_cast<uint8_t*>(&response[0])) == - BROTLI_RESULT_SUCCESS); + size_t input_size_remaining = raw_response.size(); + BrotliDecoderState* decoder = + BrotliDecoderCreateInstance(nullptr /* no custom allocator */, + nullptr /* no custom deallocator */, + nullptr /* no custom memory handle */); + CHECK(!!decoder); + while (!BrotliDecoderIsFinished(decoder)) { + size_t output_size_remaining = 0; + CHECK(BrotliDecoderDecompressStream( + decoder, &input_size_remaining, &next_encoded_byte, + &output_size_remaining, nullptr, + nullptr) != BROTLI_DECODER_RESULT_ERROR); + const uint8_t* output_buffer = + BrotliDecoderTakeOutput(decoder, &output_size_remaining); + response.insert(response.end(), output_buffer, + output_buffer + output_size_remaining); + } + BrotliDecoderDestroyInstance(decoder); } else { response = raw_response.as_string(); }
diff --git a/chrome/gpu/DEPS b/chrome/gpu/DEPS index 3c43578..029c86d6 100644 --- a/chrome/gpu/DEPS +++ b/chrome/gpu/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+chrome/common", "+components/arc/common", + "+components/arc/video_accelerator", "+components/metrics", "+content/public/gpu", "+media/video",
diff --git a/chrome/gpu/arc_gpu_video_decode_accelerator.cc b/chrome/gpu/arc_gpu_video_decode_accelerator.cc index aa22e34..32e7ad7f 100644 --- a/chrome/gpu/arc_gpu_video_decode_accelerator.cc +++ b/chrome/gpu/arc_gpu_video_decode_accelerator.cc
@@ -198,7 +198,8 @@ bool ArcGpuVideoDecodeAccelerator::VerifyDmabuf( const base::ScopedFD& dmabuf_fd, - const std::vector<DmabufPlane>& dmabuf_planes) const { + const std::vector<::arc::ArcVideoAcceleratorDmabufPlane>& dmabuf_planes) + const { size_t num_planes = media::VideoFrame::NumPlanes(output_pixel_format_); if (dmabuf_planes.size() != num_planes) { DLOG(ERROR) << "Invalid number of dmabuf planes passed: " @@ -221,7 +222,7 @@ size_t rows = media::VideoFrame::Rows(i, output_pixel_format_, coded_size_.height()); base::CheckedNumeric<off_t> current_size(plane.offset); - current_size += plane.stride * rows; + current_size += base::CheckMul(plane.stride, rows); if (!current_size.IsValid() || current_size.ValueOrDie() > size) { DLOG(ERROR) << "Invalid strides/offsets"; @@ -238,7 +239,7 @@ PortType port, uint32_t index, base::ScopedFD dmabuf_fd, - const std::vector<DmabufPlane>& dmabuf_planes) { + const std::vector<::arc::ArcVideoAcceleratorDmabufPlane>& dmabuf_planes) { DCHECK(thread_checker_.CalledOnValidThread()); if (!vda_) {
diff --git a/chrome/gpu/arc_gpu_video_decode_accelerator.h b/chrome/gpu/arc_gpu_video_decode_accelerator.h index c1706af9..917be53 100644 --- a/chrome/gpu/arc_gpu_video_decode_accelerator.h +++ b/chrome/gpu/arc_gpu_video_decode_accelerator.h
@@ -45,7 +45,8 @@ void BindDmabuf(PortType port, uint32_t index, base::ScopedFD dmabuf_fd, - const std::vector<DmabufPlane>& dmabuf_planes) override; + const std::vector<::arc::ArcVideoAcceleratorDmabufPlane>& + dmabuf_planes) override; void UseBuffer(PortType port, uint32_t index, const BufferMetadata& metadata) override; @@ -98,7 +99,7 @@ // The information about the dmabuf used as an output buffer. struct OutputBufferInfo { base::ScopedFD handle; - std::vector<DmabufPlane> planes; + std::vector<::arc::ArcVideoAcceleratorDmabufPlane> planes; OutputBufferInfo(); OutputBufferInfo(OutputBufferInfo&& other); @@ -115,7 +116,8 @@ // Return true if |dmabuf_planes| is valid for a dmabuf |fd|. bool VerifyDmabuf(const base::ScopedFD& fd, - const std::vector<DmabufPlane>& dmabuf_planes) const; + const std::vector<::arc::ArcVideoAcceleratorDmabufPlane>& + dmabuf_planes) const; // Creates an InputRecord for the given |bitstream_buffer_id|. The // |buffer_index| is the index of the associated input buffer. The |timestamp|
diff --git a/chrome/gpu/arc_video_accelerator.h b/chrome/gpu/arc_video_accelerator.h index f19fe3f..46b3420d 100644 --- a/chrome/gpu/arc_video_accelerator.h +++ b/chrome/gpu/arc_video_accelerator.h
@@ -8,6 +8,7 @@ #include <vector> #include "base/files/scoped_file.h" +#include "components/arc/video_accelerator/video_accelerator.h" namespace chromeos { namespace arc { @@ -81,13 +82,6 @@ // format of each VDA on Chromium is supported. }; - struct DmabufPlane { - DmabufPlane(int32_t offset, int32_t stride) - : offset(offset), stride(stride) {} - int32_t offset; // in bytes - int32_t stride; // in bytes - }; - // The callbacks of the ArcVideoAccelerator. The user of this class should // implement this interface. class Client { @@ -137,10 +131,12 @@ // port and index. A buffer must be successfully bound before it can be // passed to the accelerator via UseBuffer(). Already bound buffers may be // reused multiple times without additional bindings. - virtual void BindDmabuf(PortType port, - uint32_t index, - base::ScopedFD dmabuf_fd, - const std::vector<DmabufPlane>& dmabuf_planes) = 0; + virtual void BindDmabuf( + PortType port, + uint32_t index, + base::ScopedFD dmabuf_fd, + const std::vector<::arc::ArcVideoAcceleratorDmabufPlane>& + dmabuf_planes) = 0; // Passes a buffer to the accelerator. For input buffer, the accelerator // will process it. For output buffer, the accelerator will output content
diff --git a/chrome/gpu/gpu_arc_video_service.cc b/chrome/gpu/gpu_arc_video_service.cc index 6c83eec..14c3775f 100644 --- a/chrome/gpu/gpu_arc_video_service.cc +++ b/chrome/gpu/gpu_arc_video_service.cc
@@ -245,9 +245,9 @@ uint32_t index, mojo::ScopedHandle dmabuf_handle, int32_t stride) { - std::vector<::arc::mojom::ArcVideoAcceleratorDmabufPlanePtr> planes(1); - planes[0]->offset = 0; - planes[0]->stride = stride; + std::vector<::arc::ArcVideoAcceleratorDmabufPlane> planes { + {0, stride} + }; BindDmabuf(port, index, std::move(dmabuf_handle), std::move(planes)); } @@ -256,29 +256,15 @@ ::arc::mojom::PortType port, uint32_t index, mojo::ScopedHandle dmabuf_handle, - std::vector<::arc::mojom::ArcVideoAcceleratorDmabufPlanePtr> - dmabuf_planes) { + std::vector<::arc::ArcVideoAcceleratorDmabufPlane> dmabuf_planes) { DVLOG(2) << "BindDmabuf port=" << port << ", index=" << index; base::ScopedFD fd = UnwrapFdFromMojoHandle(std::move(dmabuf_handle)); if (!fd.is_valid()) return; - std::vector<ArcVideoAccelerator::DmabufPlane> converted_planes; - // TODO(yusukes): Use mojo typemaps to simplify the code. - for (const auto& input : dmabuf_planes) { - if (input->offset < 0 || input->stride < 0) { - DVLOG(1) << "Invalid offset/stride: " << input->offset << "/" - << input->stride; - client_->OnError( - ::arc::mojom::VideoAcceleratorService::Result::INVALID_ARGUMENT); - return; - } - converted_planes.emplace_back(input->offset, input->stride); - } - accelerator_->BindDmabuf(static_cast<PortType>(port), index, std::move(fd), - std::move(converted_planes)); + std::move(dmabuf_planes)); } void GpuArcVideoService::UseBuffer(::arc::mojom::PortType port,
diff --git a/chrome/gpu/gpu_arc_video_service.h b/chrome/gpu/gpu_arc_video_service.h index 019ca390..951c04b 100644 --- a/chrome/gpu/gpu_arc_video_service.h +++ b/chrome/gpu/gpu_arc_video_service.h
@@ -12,6 +12,7 @@ #include "base/macros.h" #include "chrome/gpu/arc_video_accelerator.h" #include "components/arc/common/video_accelerator.mojom.h" +#include "components/arc/video_accelerator/video_accelerator.h" #include "gpu/command_buffer/service/gpu_preferences.h" namespace chromeos { @@ -63,7 +64,7 @@ void BindDmabuf(::arc::mojom::PortType port, uint32_t index, mojo::ScopedHandle dmabuf_handle, - std::vector<::arc::mojom::ArcVideoAcceleratorDmabufPlanePtr> + std::vector<::arc::ArcVideoAcceleratorDmabufPlane> dmabuf_planes) override; void UseBuffer(::arc::mojom::PortType port, uint32_t index,
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index 9081811c..e310a67 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -64,6 +64,8 @@ "power/arc_power_bridge.h", "storage_manager/arc_storage_manager.cc", "storage_manager/arc_storage_manager.h", + "video_accelerator/video_accelerator_struct_traits.cc", + "video_accelerator/video_accelerator_struct_traits.h", ] public_deps = [
diff --git a/components/arc/common/typemaps.gni b/components/arc/common/typemaps.gni index 618f002b..ca0c1675 100644 --- a/components/arc/common/typemaps.gni +++ b/components/arc/common/typemaps.gni
@@ -7,4 +7,5 @@ "//components/arc/common/bitmap.typemap", "//components/arc/common/bluetooth.typemap", "//components/arc/common/intent_helper.typemap", + "//components/arc/common/video_accelerator.typemap", ]
diff --git a/components/arc/common/video_accelerator.typemap b/components/arc/common/video_accelerator.typemap new file mode 100644 index 0000000..3461d86 --- /dev/null +++ b/components/arc/common/video_accelerator.typemap
@@ -0,0 +1,12 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +mojom = "//components/arc/common/video_accelerator.mojom" +public_headers = [ "//components/arc/video_accelerator/video_accelerator.h" ] +traits_headers = + [ "//components/arc/video_accelerator/video_accelerator_struct_traits.h" ] +sources = [ + "//components/arc/video_accelerator/video_accelerator_struct_traits.cc", +] +type_mappings = [ "arc.mojom.ArcVideoAcceleratorDmabufPlane=arc::ArcVideoAcceleratorDmabufPlane[move_only]" ]
diff --git a/components/arc/video_accelerator/OWNERS b/components/arc/video_accelerator/OWNERS new file mode 100644 index 0000000..bb65116 --- /dev/null +++ b/components/arc/video_accelerator/OWNERS
@@ -0,0 +1,2 @@ +per-file *_struct_traits*.*=set noparent +per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/components/arc/video_accelerator/video_accelerator.h b/components/arc/video_accelerator/video_accelerator.h new file mode 100644 index 0000000..bdbf6d5 --- /dev/null +++ b/components/arc/video_accelerator/video_accelerator.h
@@ -0,0 +1,17 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_ARC_VIDEO_ACCELERATOR_VIDEO_ACCELERATOR_H_ +#define COMPONENTS_ARC_VIDEO_ACCELERATOR_VIDEO_ACCELERATOR_H_ + +namespace arc { + +struct ArcVideoAcceleratorDmabufPlane { + int32_t offset; // in bytes + int32_t stride; // in bytes +}; + +} // namespace arc + +#endif // COMPONENTS_ARC_VIDEO_ACCELERATOR_VIDEO_ACCELERATOR_H_
diff --git a/components/arc/video_accelerator/video_accelerator_struct_traits.cc b/components/arc/video_accelerator/video_accelerator_struct_traits.cc new file mode 100644 index 0000000..3feb966 --- /dev/null +++ b/components/arc/video_accelerator/video_accelerator_struct_traits.cc
@@ -0,0 +1,23 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/arc/video_accelerator/video_accelerator_struct_traits.h" + +namespace mojo { + +// static +bool StructTraits<arc::mojom::ArcVideoAcceleratorDmabufPlaneDataView, + arc::ArcVideoAcceleratorDmabufPlane>:: + Read(arc::mojom::ArcVideoAcceleratorDmabufPlaneDataView data, + arc::ArcVideoAcceleratorDmabufPlane* out) { + if (data.offset() < 0 || data.stride() < 0) { + return false; + } + + out->offset = data.offset(); + out->stride = data.stride(); + return true; +} + +} // namespace mojo
diff --git a/components/arc/video_accelerator/video_accelerator_struct_traits.h b/components/arc/video_accelerator/video_accelerator_struct_traits.h new file mode 100644 index 0000000..68e3befd --- /dev/null +++ b/components/arc/video_accelerator/video_accelerator_struct_traits.h
@@ -0,0 +1,32 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_ARC_VIDEO_ACCELERATOR_VIDEO_ACCELERATOR_STRUCT_TRAITS_H_ +#define COMPONENTS_ARC_VIDEO_ACCELERATOR_VIDEO_ACCELERATOR_STRUCT_TRAITS_H_ + +#include "components/arc/common/video_accelerator.mojom.h" +#include "components/arc/video_accelerator/video_accelerator.h" + +namespace mojo { + +template <> +struct StructTraits<arc::mojom::ArcVideoAcceleratorDmabufPlaneDataView, + arc::ArcVideoAcceleratorDmabufPlane> { + static uint32_t offset(const arc::ArcVideoAcceleratorDmabufPlane& r) { + DCHECK(r.offset >= 0); + return r.offset; + } + + static uint32_t stride(const arc::ArcVideoAcceleratorDmabufPlane& r) { + DCHECK(r.stride >= 0); + return r.stride; + } + + static bool Read(arc::mojom::ArcVideoAcceleratorDmabufPlaneDataView data, + arc::ArcVideoAcceleratorDmabufPlane* out); +}; + +} // namespace mojo + +#endif // COMPONENTS_ARC_VIDEO_ACCELERATOR_VIDEO_ACCELERATOR_STRUCT_TRAITS_H_
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc b/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc index f55a97c..29227c0 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc +++ b/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc
@@ -174,11 +174,25 @@ }; TEST_F(SubresourceFilterAgentTest, DisabledByDefault_NoFilterIsInjected) { + base::HistogramTester histogram_tester; ASSERT_NO_FATAL_FAILURE( SetTestRulesetToDisallowURLsWithPathSuffix(kTestBothURLsPathSuffix)); ExpectNoSubresourceFilterGetsInjected(); StartLoadWithoutSettingActivationState(); FinishLoad(); + + histogram_tester.ExpectUniqueSample( + kDocumentLoadActivationState, static_cast<int>(ActivationState::DISABLED), + 1); + histogram_tester.ExpectTotalCount(kDocumentLoadRulesetIsAvailable, 0); + + histogram_tester.ExpectTotalCount(kSubresourcesTotal, 0); + histogram_tester.ExpectTotalCount(kSubresourcesEvaluated, 0); + histogram_tester.ExpectTotalCount(kSubresourcesMatchedRules, 0); + histogram_tester.ExpectTotalCount(kSubresourcesDisallowed, 0); + + histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); + histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); } TEST_F(SubresourceFilterAgentTest, Disabled_NoFilterIsInjected) { @@ -191,12 +205,27 @@ TEST_F(SubresourceFilterAgentTest, EnabledButRulesetUnavailable_NoFilterIsInjected) { + base::HistogramTester histogram_tester; ExpectNoSubresourceFilterGetsInjected(); StartLoadAndSetActivationState(ActivationState::ENABLED); FinishLoad(); + + histogram_tester.ExpectUniqueSample( + kDocumentLoadActivationState, static_cast<int>(ActivationState::ENABLED), + 1); + histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 0, 1); + + histogram_tester.ExpectTotalCount(kSubresourcesTotal, 0); + histogram_tester.ExpectTotalCount(kSubresourcesEvaluated, 0); + histogram_tester.ExpectTotalCount(kSubresourcesMatchedRules, 0); + histogram_tester.ExpectTotalCount(kSubresourcesDisallowed, 0); + + histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); + histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); } TEST_F(SubresourceFilterAgentTest, Enabled_FilteringIsInEffectForOneLoad) { + base::HistogramTester histogram_tester; ASSERT_NO_FATAL_FAILURE( SetTestRulesetToDisallowURLsWithPathSuffix(kTestFirstURLPathSuffix)); @@ -212,6 +241,61 @@ ExpectNoSubresourceFilterGetsInjected(); StartLoadWithoutSettingActivationState(); FinishLoad(); + + EXPECT_THAT(histogram_tester.GetAllSamples(kDocumentLoadActivationState), + ::testing::ElementsAre( + base::Bucket(static_cast<int>(ActivationState::DISABLED), 1), + base::Bucket(static_cast<int>(ActivationState::ENABLED), 1))); + histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 1, 1); +} + +TEST_F(SubresourceFilterAgentTest, Enabled_HistogramSamples) { + for (const bool measure_performance : {false, true}) { + base::HistogramTester histogram_tester; + ASSERT_NO_FATAL_FAILURE( + SetTestRulesetToDisallowURLsWithPathSuffix(kTestFirstURLPathSuffix)); + ExpectSubresourceFilterGetsInjected(); + StartLoadAndSetActivationState(ActivationState::ENABLED, + measure_performance); + ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); + + ExpectSignalAboutFirstSubresourceDisallowed(); + ExpectLoadAllowed(kTestFirstURL, false); + ExpectLoadAllowed(kTestFirstURL, false); + ExpectLoadAllowed(kTestSecondURL, true); + FinishLoad(); + + ExpectSubresourceFilterGetsInjected(); + StartLoadAndSetActivationState(ActivationState::ENABLED, + measure_performance); + ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); + + ExpectSignalAboutFirstSubresourceDisallowed(); + ExpectLoadAllowed(kTestFirstURL, false); + ExpectLoadAllowed(kTestSecondURL, true); + FinishLoad(); + + histogram_tester.ExpectUniqueSample( + kDocumentLoadActivationState, + static_cast<int>(ActivationState::ENABLED), 2); + histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 1, 2); + + EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesTotal), + ::testing::ElementsAre(base::Bucket(2, 1), base::Bucket(3, 1))); + EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesEvaluated), + ::testing::ElementsAre(base::Bucket(2, 1), base::Bucket(3, 1))); + EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesMatchedRules), + ::testing::ElementsAre(base::Bucket(1, 1), base::Bucket(2, 1))); + EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesDisallowed), + ::testing::ElementsAre(base::Bucket(1, 1), base::Bucket(2, 1))); + + const base::HistogramBase::Count expected_total_count = + measure_performance && base::ThreadTicks::IsSupported() ? 2 : 0; + histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, + expected_total_count); + histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, + expected_total_count); + } } TEST_F(SubresourceFilterAgentTest, Enabled_NewRulesetIsPickedUpAtNextLoad) { @@ -261,15 +345,34 @@ } TEST_F(SubresourceFilterAgentTest, DryRun_ResourcesAreEvaluatedButNotFiltered) { + base::HistogramTester histogram_tester; ASSERT_NO_FATAL_FAILURE( SetTestRulesetToDisallowURLsWithPathSuffix(kTestFirstURLPathSuffix)); ExpectSubresourceFilterGetsInjected(); StartLoadAndSetActivationState(ActivationState::DRYRUN); ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); + // In dry-run mode, loads to the first URL should be recorded as + // `MatchedRules`, but still be allowed to proceed and not recorded as + // `Disallowed`. + ExpectLoadAllowed(kTestFirstURL, true); ExpectLoadAllowed(kTestFirstURL, true); ExpectLoadAllowed(kTestSecondURL, true); FinishLoad(); + + histogram_tester.ExpectUniqueSample(kDocumentLoadActivationState, + static_cast<int>(ActivationState::DRYRUN), + 1); + histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 1, 1); + + histogram_tester.ExpectUniqueSample(kSubresourcesTotal, 3, 1); + histogram_tester.ExpectUniqueSample(kSubresourcesEvaluated, 3, 1); + histogram_tester.ExpectUniqueSample(kSubresourcesMatchedRules, 2, 1); + histogram_tester.ExpectUniqueSample(kSubresourcesDisallowed, 0, 1); + + // Performance measurement is switched off. + histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); + histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); } TEST_F(SubresourceFilterAgentTest, @@ -311,147 +414,4 @@ blink::WebURLRequest::RequestContextImage)); } -TEST_F(SubresourceFilterAgentTest, Disabled_HistogramSamples) { - base::HistogramTester histogram_tester; - ASSERT_NO_FATAL_FAILURE( - SetTestRulesetToDisallowURLsWithPathSuffix(kTestBothURLsPathSuffix)); - StartLoadWithoutSettingActivationState(); - FinishLoad(); - - histogram_tester.ExpectUniqueSample( - kDocumentLoadActivationState, static_cast<int>(ActivationState::DISABLED), - 1); - histogram_tester.ExpectTotalCount(kDocumentLoadRulesetIsAvailable, 0); - - histogram_tester.ExpectTotalCount(kSubresourcesTotal, 0); - histogram_tester.ExpectTotalCount(kSubresourcesEvaluated, 0); - histogram_tester.ExpectTotalCount(kSubresourcesMatchedRules, 0); - histogram_tester.ExpectTotalCount(kSubresourcesDisallowed, 0); - - histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); - histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); -} - -TEST_F(SubresourceFilterAgentTest, - EnabledButRulesetUnavailable_HistogramSamples) { - base::HistogramTester histogram_tester; - StartLoadAndSetActivationState(ActivationState::ENABLED); - FinishLoad(); - - histogram_tester.ExpectUniqueSample( - kDocumentLoadActivationState, static_cast<int>(ActivationState::ENABLED), - 1); - histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 0, 1); - - histogram_tester.ExpectTotalCount(kSubresourcesTotal, 0); - histogram_tester.ExpectTotalCount(kSubresourcesEvaluated, 0); - histogram_tester.ExpectTotalCount(kSubresourcesMatchedRules, 0); - histogram_tester.ExpectTotalCount(kSubresourcesDisallowed, 0); - - histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); - histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); -} - -TEST_F(SubresourceFilterAgentTest, Enabled_HistogramSamples) { - base::HistogramTester histogram_tester; - ASSERT_NO_FATAL_FAILURE( - SetTestRulesetToDisallowURLsWithPathSuffix(kTestFirstURLPathSuffix)); - ExpectSubresourceFilterGetsInjected(); - StartLoadAndSetActivationState(ActivationState::ENABLED); - ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); - - ExpectSignalAboutFirstSubresourceDisallowed(); - ExpectLoadAllowed(kTestFirstURL, false); - ExpectLoadAllowed(kTestFirstURL, false); - ExpectLoadAllowed(kTestSecondURL, true); - FinishLoad(); - - ExpectSubresourceFilterGetsInjected(); - StartLoadAndSetActivationState(ActivationState::ENABLED); - ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); - - ExpectSignalAboutFirstSubresourceDisallowed(); - ExpectLoadAllowed(kTestFirstURL, false); - ExpectLoadAllowed(kTestSecondURL, true); - FinishLoad(); - - histogram_tester.ExpectUniqueSample( - kDocumentLoadActivationState, static_cast<int>(ActivationState::ENABLED), - 2); - histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 1, 2); - - EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesTotal), - ::testing::ElementsAre(base::Bucket(2, 1), base::Bucket(3, 1))); - EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesEvaluated), - ::testing::ElementsAre(base::Bucket(2, 1), base::Bucket(3, 1))); - EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesMatchedRules), - ::testing::ElementsAre(base::Bucket(1, 1), base::Bucket(2, 1))); - EXPECT_THAT(histogram_tester.GetAllSamples(kSubresourcesDisallowed), - ::testing::ElementsAre(base::Bucket(1, 1), base::Bucket(2, 1))); - - // Performance measurement is switched off. - histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); - histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); -} - -TEST_F(SubresourceFilterAgentTest, Enabled_PerformanceMeasurementSamples) { - base::HistogramTester histogram_tester; - ASSERT_NO_FATAL_FAILURE( - SetTestRulesetToDisallowURLsWithPathSuffix(kTestFirstURLPathSuffix)); - ExpectSubresourceFilterGetsInjected(); - StartLoadAndSetActivationState(ActivationState::ENABLED, true); - ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); - - ExpectSignalAboutFirstSubresourceDisallowed(); - ExpectLoadAllowed(kTestFirstURL, false); - ExpectLoadAllowed(kTestFirstURL, false); - ExpectLoadAllowed(kTestSecondURL, true); - FinishLoad(); - - ExpectSubresourceFilterGetsInjected(); - StartLoadAndSetActivationState(ActivationState::ENABLED, true); - ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); - - ExpectSignalAboutFirstSubresourceDisallowed(); - ExpectLoadAllowed(kTestFirstURL, false); - ExpectLoadAllowed(kTestSecondURL, true); - FinishLoad(); - - const base::HistogramBase::Count total_count = - base::ThreadTicks::IsSupported() ? 2 : 0; - histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, total_count); - histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, total_count); -} - -TEST_F(SubresourceFilterAgentTest, DryRun_HistogramSamples) { - base::HistogramTester histogram_tester; - ASSERT_NO_FATAL_FAILURE( - SetTestRulesetToDisallowURLsWithPathSuffix(kTestFirstURLPathSuffix)); - ExpectSubresourceFilterGetsInjected(); - StartLoadAndSetActivationState(ActivationState::DRYRUN); - ASSERT_TRUE(::testing::Mock::VerifyAndClearExpectations(agent())); - - // In dry-run mode, loads to the first URL should be recorded as - // `MatchedRules`, but still be allowed to proceed and not recorded as - // `Disallowed`. - ExpectLoadAllowed(kTestFirstURL, true); - ExpectLoadAllowed(kTestFirstURL, true); - ExpectLoadAllowed(kTestSecondURL, true); - FinishLoad(); - - histogram_tester.ExpectUniqueSample(kDocumentLoadActivationState, - static_cast<int>(ActivationState::DRYRUN), - 1); - histogram_tester.ExpectUniqueSample(kDocumentLoadRulesetIsAvailable, 1, 1); - - histogram_tester.ExpectUniqueSample(kSubresourcesTotal, 3, 1); - histogram_tester.ExpectUniqueSample(kSubresourcesEvaluated, 3, 1); - histogram_tester.ExpectUniqueSample(kSubresourcesMatchedRules, 2, 1); - histogram_tester.ExpectUniqueSample(kSubresourcesDisallowed, 0, 1); - - // Performance measurement is switched off. - histogram_tester.ExpectTotalCount(kEvaluationTotalWallDuration, 0); - histogram_tester.ExpectTotalCount(kEvaluationTotalCPUDuration, 0); -} - } // namespace subresource_filter
diff --git a/content/browser/compositor/gpu_process_transport_factory.cc b/content/browser/compositor/gpu_process_transport_factory.cc index 1366e88..b2d511e3 100644 --- a/content/browser/compositor/gpu_process_transport_factory.cc +++ b/content/browser/compositor/gpu_process_transport_factory.cc
@@ -445,16 +445,17 @@ } } - std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source; + std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source; if (!compositor->GetRendererSettings().disable_display_vsync) { - begin_frame_source.reset(new cc::DelayBasedBeginFrameSource( + synthetic_begin_frame_source.reset(new cc::DelayBasedBeginFrameSource( base::MakeUnique<cc::DelayBasedTimeSource>( compositor->task_runner().get()))); } else { - begin_frame_source.reset(new cc::BackToBackBeginFrameSource( + synthetic_begin_frame_source.reset(new cc::BackToBackBeginFrameSource( base::MakeUnique<cc::DelayBasedTimeSource>( compositor->task_runner().get()))); } + cc::BeginFrameSource* begin_frame_source = synthetic_begin_frame_source.get(); BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback = base::Bind(&ui::Compositor::SetDisplayVSyncParameters, compositor); @@ -519,10 +520,11 @@ context_provider, vsync_callback, std::move(validator)); } else { #if defined(USE_AURA) + std::unique_ptr<MusBrowserCompositorOutputSurface> mus_output_surface; if (compositor->window()) { // TODO(mfomitchev): Remove this clause once we complete the switch // to Aura-Mus. - display_output_surface = + mus_output_surface = base::MakeUnique<MusBrowserCompositorOutputSurface>( compositor->window(), context_provider, GetGpuMemoryBufferManager(), vsync_callback, @@ -531,12 +533,18 @@ aura::WindowTreeHost* host = aura::WindowTreeHost::GetForAcceleratedWidget( compositor->widget()); - display_output_surface = + mus_output_surface = base::MakeUnique<MusBrowserCompositorOutputSurface>( host->window(), context_provider, GetGpuMemoryBufferManager(), vsync_callback, std::move(validator)); } + // We use the ExternalBeginFrameSource provided by the output surface + // instead of our own synthetic one. + synthetic_begin_frame_source.reset(); + begin_frame_source = mus_output_surface->GetBeginFrameSource(); + DCHECK(begin_frame_source); + display_output_surface = std::move(mus_output_surface); #else NOTREACHED(); #endif @@ -562,12 +570,12 @@ data->display = base::MakeUnique<cc::Display>( HostSharedBitmapManager::current(), GetGpuMemoryBufferManager(), compositor->GetRendererSettings(), compositor->frame_sink_id(), - begin_frame_source.get(), std::move(display_output_surface), + begin_frame_source, std::move(display_output_surface), std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( compositor->task_runner().get())); // Note that we are careful not to destroy a prior |data->begin_frame_source| // until we have reset |data->display|. - data->begin_frame_source = std::move(begin_frame_source); + data->begin_frame_source = std::move(synthetic_begin_frame_source); // The |delegated_output_surface| is given back to the compositor, it // delegates to the Display as its root surface. Importantly, it shares the
diff --git a/content/browser/compositor/mus_browser_compositor_output_surface.cc b/content/browser/compositor/mus_browser_compositor_output_surface.cc index a274eb9b..933ea15 100644 --- a/content/browser/compositor/mus_browser_compositor_output_surface.cc +++ b/content/browser/compositor/mus_browser_compositor_output_surface.cc
@@ -33,7 +33,8 @@ update_vsync_parameters_callback, std::move(overlay_candidate_validator)), ui_window_(window), - window_(nullptr) { + window_(nullptr), + begin_frame_source_(nullptr) { ui_compositor_frame_sink_ = ui_window_->RequestCompositorFrameSink( ui::mojom::CompositorFrameSinkType::DEFAULT, context, gpu_memory_buffer_manager); @@ -51,7 +52,8 @@ update_vsync_parameters_callback, std::move(overlay_candidate_validator)), ui_window_(nullptr), - window_(window) { + window_(window), + begin_frame_source_(nullptr) { aura::WindowPortMus* window_port = aura::WindowPortMus::Get(window_); DCHECK(window_port); compositor_frame_sink_ = window_port->RequestCompositorFrameSink( @@ -62,6 +64,10 @@ MusBrowserCompositorOutputSurface::~MusBrowserCompositorOutputSurface() {} +cc::BeginFrameSource* MusBrowserCompositorOutputSurface::GetBeginFrameSource() { + return begin_frame_source_; +} + void MusBrowserCompositorOutputSurface::SwapBuffers( cc::OutputSurfaceFrame frame) { const gfx::Rect bounds = ui_window_ ? gfx::Rect(ui_window_->bounds().size()) @@ -141,7 +147,9 @@ } void MusBrowserCompositorOutputSurface::SetBeginFrameSource( - cc::BeginFrameSource* source) {} + cc::BeginFrameSource* source) { + begin_frame_source_ = source; +} void MusBrowserCompositorOutputSurface::ReclaimResources( const cc::ReturnedResourceArray& resources) {
diff --git a/content/browser/compositor/mus_browser_compositor_output_surface.h b/content/browser/compositor/mus_browser_compositor_output_surface.h index 5f9048c..053d1b7 100644 --- a/content/browser/compositor/mus_browser_compositor_output_surface.h +++ b/content/browser/compositor/mus_browser_compositor_output_surface.h
@@ -58,6 +58,8 @@ ~MusBrowserCompositorOutputSurface() override; + cc::BeginFrameSource* GetBeginFrameSource(); + protected: // cc::OutputSurface implementation. void SwapBuffers(cc::OutputSurfaceFrame frame) override; @@ -89,6 +91,7 @@ std::unique_ptr<aura::WindowCompositorFrameSink> compositor_frame_sink_; std::vector<uint32_t> free_resource_ids_; std::vector<gpu::Mailbox> mailboxes_; + cc::BeginFrameSource* begin_frame_source_; DISALLOW_COPY_AND_ASSIGN(MusBrowserCompositorOutputSurface); };
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index f0b3cf2..25d7098 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1377,8 +1377,6 @@ // TODO(nasko): If the frame is not live, the RFH should just be deleted by // simulating the receipt of swap out ack. is_waiting_for_swapout_ack_ = true; - if (frame_tree_node_->IsMainFrame()) - render_view_host_->set_is_active(false); } void RenderFrameHostImpl::OnBeforeUnloadACK( @@ -1545,13 +1543,6 @@ ClearAllWebUI(); - // If this is a main frame RFH that's about to be deleted, update its RVH's - // swapped-out state here. https://crbug.com/505887 - if (frame_tree_node_->IsMainFrame()) { - render_view_host_->set_is_active(false); - render_view_host_->set_is_swapped_out(true); - } - bool deleted = frame_tree_node_->render_manager()->DeleteFromPendingList(this); CHECK(deleted);
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index cad6a077..dc60892 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -617,6 +617,8 @@ FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, RenderViewHostIsNotReusedAfterDelayedSwapOutACK); FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, + RenderViewHostStaysActiveWithLateSwapoutACK); + FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, LoadEventForwardingWhilePendingDeletion); // IPC Message handlers.
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index 59cbe436..998ae19 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -699,6 +699,11 @@ rvh->set_main_frame_routing_id(MSG_ROUTING_NONE); rvh->set_is_active(false); rvh->set_is_swapped_out(true); + + if (rvh->GetWidget()->GetView()) { + rvh->GetWidget()->GetView()->Destroy(); + rvh->GetWidget()->SetView(nullptr); + } } render_frame_host.reset(); @@ -712,6 +717,15 @@ bool RenderFrameHostManager::DeleteFromPendingList( RenderFrameHostImpl* render_frame_host) { + // If this is a main frame RFH that's about to be deleted, update its RVH's + // swapped-out state here. https://crbug.com/505887 + if (frame_tree_node_->IsMainFrame()) { + RenderViewHostImpl* rvh = render_frame_host->render_view_host(); + + if (!rvh->is_active()) + rvh->set_is_swapped_out(true); + } + for (RFHPendingDeleteList::iterator iter = pending_delete_hosts_.begin(); iter != pending_delete_hosts_.end(); iter++) { @@ -1759,11 +1773,6 @@ if (frame_tree_node_->IsMainFrame()) { success = InitRenderView(render_view_host, proxy); - - // If we are reusing the RenderViewHost and it doesn't already have a - // RenderWidgetHostView, we need to create one if this is the main frame. - if (!render_view_host->GetWidget()->GetView()) - delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); } else { DCHECK(render_view_host->IsRenderViewLive()); } @@ -2164,6 +2173,44 @@ // The process will no longer try to exit, so we can decrement the count. render_frame_host_->GetProcess()->RemovePendingView(); + // The RenderViewHost keeps track of the main RenderFrameHost routing id. + // If this is committing a main frame navigation, update it and set the + // routing id in the RenderViewHost associated with the old RenderFrameHost + // to MSG_ROUTING_NONE. + if (is_main_frame) { + RenderViewHostImpl* rvh = render_frame_host_->render_view_host(); + rvh->set_main_frame_routing_id(render_frame_host_->routing_id()); + + // If we are reusing the RenderViewHost, we need to create the + // RenderWidgetHostView if this is the main frame. + if (rvh->IsRenderViewLive() && !rvh->is_active()) + delegate_->CreateRenderWidgetHostViewForRenderManager(rvh); + + // If the RenderViewHost is transitioning from swapped out to active state, + // it was reused, so dispatch a RenderViewReady event. For example, this + // is necessary to hide the sad tab if one is currently displayed. See + // https://crbug.com/591984. + // + // TODO(alexmos): Remove this and move RenderViewReady consumers to use + // the main frame's RenderFrameCreated instead. + if (!rvh->is_active()) + rvh->PostRenderViewReady(); + + rvh->set_is_active(true); + rvh->set_is_swapped_out(false); + + // Tell the old RenderViewHost it is no longer active. + RenderViewHostImpl* old_rvh = old_render_frame_host->render_view_host(); + old_rvh->set_main_frame_routing_id(MSG_ROUTING_NONE); + old_rvh->set_is_active(false); + + // Destroy the old RenderWidgetHostView. + if (old_rvh->GetWidget()->GetView()) { + old_rvh->GetWidget()->GetView()->Destroy(); + old_rvh->GetWidget()->SetView(nullptr); + } + } + // Show the new view (or a sad tab) if necessary. bool new_rfh_has_view = !!render_frame_host_->GetView(); if (!delegate_->IsHidden() && new_rfh_has_view) { @@ -2181,14 +2228,6 @@ render_frame_host_->render_view_host()); } - // For top-level frames, also hide the old RenderViewHost's view. - // TODO(creis): As long as show/hide are on RVH, we don't want to hide on - // subframe navigations or we will interfere with the top-level frame. - if (is_main_frame && - old_render_frame_host->render_view_host()->GetWidget()->GetView()) { - old_render_frame_host->render_view_host()->GetWidget()->GetView()->Hide(); - } - // Make sure the size is up to date. (Fix for bug 1079768.) delegate_->UpdateRenderViewSizeForRenderManager(); @@ -2210,30 +2249,6 @@ delegate_->NotifySwappedFromRenderManager( old_render_frame_host.get(), render_frame_host_.get(), is_main_frame); - // The RenderViewHost keeps track of the main RenderFrameHost routing id. - // If this is committing a main frame navigation, update it and set the - // routing id in the RenderViewHost associated with the old RenderFrameHost - // to MSG_ROUTING_NONE. - if (is_main_frame) { - RenderViewHostImpl* rvh = render_frame_host_->render_view_host(); - rvh->set_main_frame_routing_id(render_frame_host_->routing_id()); - - // If the RenderViewHost is transitioning from swapped out to active state, - // it was reused, so dispatch a RenderViewReady event. For example, this - // is necessary to hide the sad tab if one is currently displayed. See - // https://crbug.com/591984. - // - // TODO(alexmos): Remove this and move RenderViewReady consumers to use - // the main frame's RenderFrameCreated instead. - if (!rvh->is_active()) - rvh->PostRenderViewReady(); - - rvh->set_is_active(true); - rvh->set_is_swapped_out(false); - old_render_frame_host->render_view_host()->set_main_frame_routing_id( - MSG_ROUTING_NONE); - } - // Swap out the old frame now that the new one is visible. // This will swap it out and schedule it for deletion when the swap out ack // arrives (or immediately if the process isn't live).
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc index 72d9e95..08a1cd9 100644 --- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc +++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -149,6 +149,8 @@ } bool current_phase_ended = false; + bool scroll_phase_ended = false; + bool momentum_phase_ended = false; bool has_phase_info = false; if (event_sent_for_gesture_ack_->event.phase != @@ -156,14 +158,15 @@ event_sent_for_gesture_ack_->event.momentumPhase != blink::WebMouseWheelEvent::PhaseNone) { has_phase_info = true; - current_phase_ended = event_sent_for_gesture_ack_->event.phase == - blink::WebMouseWheelEvent::PhaseEnded || - event_sent_for_gesture_ack_->event.phase == - blink::WebMouseWheelEvent::PhaseCancelled || - event_sent_for_gesture_ack_->event.momentumPhase == - blink::WebMouseWheelEvent::PhaseEnded || - event_sent_for_gesture_ack_->event.momentumPhase == - blink::WebMouseWheelEvent::PhaseCancelled; + scroll_phase_ended = event_sent_for_gesture_ack_->event.phase == + blink::WebMouseWheelEvent::PhaseEnded || + event_sent_for_gesture_ack_->event.phase == + blink::WebMouseWheelEvent::PhaseCancelled; + momentum_phase_ended = event_sent_for_gesture_ack_->event.momentumPhase == + blink::WebMouseWheelEvent::PhaseEnded || + event_sent_for_gesture_ack_->event.momentumPhase == + blink::WebMouseWheelEvent::PhaseCancelled; + current_phase_ended = scroll_phase_ended || momentum_phase_ended; } bool needs_update = scroll_update.data.scrollUpdate.deltaX != 0 || @@ -177,40 +180,78 @@ bool empty_sequence = !needs_update && needs_scroll_begin_ && current_phase_ended; - if (needs_update || !empty_sequence) { - if (needs_scroll_begin_) { - // If no GSB has been sent, it will be a non-synthetic GSB. - SendScrollBegin(scroll_update, false); - } else if (has_phase_info) { - // If a GSB has been sent, generate a synthetic GSB if we have phase - // information. This should be removed once crbug.com/526463 is fully - // implemented. - SendScrollBegin(scroll_update, true); + if (enable_scroll_latching_) { + if (event_sent_for_gesture_ack_->event.momentumPhase == + blink::WebMouseWheelEvent::PhaseBegan) { + // Don't send the pending scrollEnd if a fling starts. + if (scroll_end_timer_.IsRunning()) + scroll_end_timer_.Stop(); } - if (needs_update) { - ui::LatencyInfo latency = ui::LatencyInfo(ui::SourceEventType::WHEEL); - latency.AddLatencyNumber( - ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL, 0, - 0); - client_->ForwardGestureEventWithLatencyInfo(scroll_update, latency); + if (needs_update || !empty_sequence) { + if (needs_scroll_begin_) { + SendScrollBegin(scroll_update, false); + } + + if (needs_update) { + ui::LatencyInfo latency = ui::LatencyInfo(ui::SourceEventType::WHEEL); + latency.AddLatencyNumber( + ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL, + 0, 0); + client_->ForwardGestureEventWithLatencyInfo(scroll_update, latency); + } + + if (momentum_phase_ended) { + // Send GSE with if scroll latching is enabled and no fling is going + // to happen next. + SendScrollEnd(scroll_update, false); + } else if (scroll_phase_ended || !has_phase_info) { + // If scroll latching is enabled and a fling might happen next, or + // no phase info exists, start the scroll_end_timer_. + scroll_end_timer_.Start( + FROM_HERE, + base::TimeDelta::FromMilliseconds(scroll_transaction_ms_), + base::Bind(&MouseWheelEventQueue::SendScrollEnd, + base::Unretained(this), scroll_update, false)); + } } - if (current_phase_ended) { - // Non-synthetic GSEs are sent when the current phase is canceled or - // ended. - SendScrollEnd(scroll_update, false); - } else if (has_phase_info) { - // Generate a synthetic GSE for every update to force hit testing so - // that the non-latching behavior is preserved. Remove once - // crbug.com/526463 is fully implemented. - SendScrollEnd(scroll_update, true); - } else { - scroll_end_timer_.Start( - FROM_HERE, - base::TimeDelta::FromMilliseconds(scroll_transaction_ms_), - base::Bind(&MouseWheelEventQueue::SendScrollEnd, - base::Unretained(this), scroll_update, false)); + } else { // !enable_scroll_latching_ + if (needs_update || !empty_sequence) { + if (needs_scroll_begin_) { + // If no GSB has been sent, it will be a non-synthetic GSB. + SendScrollBegin(scroll_update, false); + } else if (has_phase_info) { + // If a GSB has been sent, generate a synthetic GSB if we have phase + // information. This should be removed once crbug.com/526463 is + // fully implemented. + SendScrollBegin(scroll_update, true); + } + + if (needs_update) { + ui::LatencyInfo latency = ui::LatencyInfo(ui::SourceEventType::WHEEL); + latency.AddLatencyNumber( + ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL, + 0, 0); + client_->ForwardGestureEventWithLatencyInfo(scroll_update, latency); + } + + if (current_phase_ended) { + // Non-synthetic GSEs are sent when the current phase is canceled or + // ended. + SendScrollEnd(scroll_update, false); + } else if (has_phase_info) { + // Generate a synthetic GSE for every update to force hit testing so + // that the non-latching behavior is preserved. Remove once + // crbug.com/526463 is fully implemented. + SendScrollEnd(scroll_update, true); + } else if (!has_phase_info) { + scroll_end_timer_.Start( + FROM_HERE, + base::TimeDelta::FromMilliseconds(scroll_transaction_ms_), + base::Bind(&MouseWheelEventQueue::SendScrollEnd, + base::Unretained(this), scroll_update, false)); + } } } }
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc index 7bc5d63..27f17bd 100644 --- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc +++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
@@ -318,11 +318,18 @@ WebMouseWheelEvent::PhaseNone); EXPECT_EQ(1U, GetAndResetSentEventCount()); SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_EQ(3U, all_sent_events().size()); - EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); - EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); - EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); - EXPECT_EQ(3U, GetAndResetSentEventCount()); + if (scroll_latching_enabled_) { + EXPECT_EQ(2U, all_sent_events().size()); + EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); + EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); + EXPECT_EQ(2U, GetAndResetSentEventCount()); + } else { + EXPECT_EQ(3U, all_sent_events().size()); + EXPECT_GESTURE_SCROLL_BEGIN_WITH_PHASE(sent_gesture_event(0)); + EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); + EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); + EXPECT_EQ(3U, GetAndResetSentEventCount()); + } SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, kWheelScrollGlobalY, 5, 5, 0, high_precision, @@ -330,11 +337,17 @@ WebMouseWheelEvent::PhaseNone); EXPECT_EQ(1U, GetAndResetSentEventCount()); SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_EQ(3U, all_sent_events().size()); - EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); - EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); - EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); - EXPECT_EQ(3U, GetAndResetSentEventCount()); + if (scroll_latching_enabled_) { + EXPECT_EQ(1U, all_sent_events().size()); + EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(0)); + EXPECT_EQ(1U, GetAndResetSentEventCount()); + } else { + EXPECT_EQ(3U, all_sent_events().size()); + EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); + EXPECT_GESTURE_SCROLL_UPDATE_WITH_PHASE(sent_gesture_event(1)); + EXPECT_SYNTHETIC_GESTURE_SCROLL_END(sent_gesture_event(2)); + EXPECT_EQ(3U, GetAndResetSentEventCount()); + } SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, kWheelScrollGlobalY, 0, 0, 0, high_precision, @@ -342,10 +355,17 @@ WebMouseWheelEvent::PhaseNone); EXPECT_EQ(1U, GetAndResetSentEventCount()); SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_EQ(2U, all_sent_events().size()); - EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); - EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1)); - EXPECT_EQ(2U, GetAndResetSentEventCount()); + if (scroll_latching_enabled_) { + // ScrollEnd is not sent right away, a timer starts instead, + // to see if a wheel event with momentumPhase arrives or not. + EXPECT_EQ(0U, all_sent_events().size()); + EXPECT_EQ(0U, GetAndResetSentEventCount()); + } else { + EXPECT_EQ(2U, all_sent_events().size()); + EXPECT_SYNTHETIC_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); + EXPECT_GESTURE_SCROLL_END_WITH_PHASE(sent_gesture_event(1)); + EXPECT_EQ(2U, GetAndResetSentEventCount()); + } // Send a double phase end; OSX does it consistently. SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, @@ -363,11 +383,18 @@ WebMouseWheelEvent::PhaseBegan); EXPECT_EQ(1U, GetAndResetSentEventCount()); SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_EQ(3U, all_sent_events().size()); - EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); - EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); - EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); - EXPECT_EQ(3U, GetAndResetSentEventCount()); + if (scroll_latching_enabled_) { + // A fling has started, no ScrollEnd/ScrollBegin is sent. + EXPECT_EQ(1U, all_sent_events().size()); + EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(0)); + EXPECT_EQ(1U, GetAndResetSentEventCount()); + } else { + EXPECT_EQ(3U, all_sent_events().size()); + EXPECT_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); + EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); + EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); + EXPECT_EQ(3U, GetAndResetSentEventCount()); + } SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, kWheelScrollGlobalY, 5, 5, 0, high_precision, @@ -375,11 +402,17 @@ WebMouseWheelEvent::PhaseChanged); EXPECT_EQ(1U, GetAndResetSentEventCount()); SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_EQ(3U, all_sent_events().size()); - EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); - EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); - EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); - EXPECT_EQ(3U, GetAndResetSentEventCount()); + if (scroll_latching_enabled_) { + EXPECT_EQ(1U, all_sent_events().size()); + EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(0)); + EXPECT_EQ(1U, GetAndResetSentEventCount()); + } else { + EXPECT_EQ(3U, all_sent_events().size()); + EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); + EXPECT_INERTIAL_GESTURE_SCROLL_UPDATE(sent_gesture_event(1)); + EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(2)); + EXPECT_EQ(3U, GetAndResetSentEventCount()); + } SendMouseWheelWithPhase(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX, kWheelScrollGlobalY, 0, 0, 0, high_precision, @@ -387,10 +420,18 @@ WebMouseWheelEvent::PhaseEnded); EXPECT_EQ(1U, GetAndResetSentEventCount()); SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); - EXPECT_EQ(2U, all_sent_events().size()); - EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); - EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); - EXPECT_EQ(2U, GetAndResetSentEventCount()); + if (scroll_latching_enabled_) { + // MomentumPhase is ended, the scroll is done, and GSE is sent + // immediately. + EXPECT_EQ(1U, all_sent_events().size()); + EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(0)); + EXPECT_EQ(1U, GetAndResetSentEventCount()); + } else { + EXPECT_EQ(2U, all_sent_events().size()); + EXPECT_SYNTHETIC_INERTIAL_GESTURE_SCROLL_BEGIN(sent_gesture_event(0)); + EXPECT_INERTIAL_GESTURE_SCROLL_END(sent_gesture_event(1)); + EXPECT_EQ(2U, GetAndResetSentEventCount()); + } } std::unique_ptr<MouseWheelEventQueue> queue_; @@ -440,7 +481,7 @@ } TEST_P(MouseWheelEventQueueTest, GestureSendingPrecisePixels) { - GestureSendingTest(false); + GestureSendingTest(true); } TEST_P(MouseWheelEventQueueTest, GestureSendingWithPhaseInformation) {
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index 967758ea..c3646ba 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -84,6 +84,7 @@ #include "net/url_request/url_request_context_getter.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/clipboard/clipboard.h" +#include "ui/base/device_form_factor.h" #include "ui/base/touch/touch_device.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/animation/animation.h" @@ -468,7 +469,8 @@ prefs.device_supports_mouse = false; prefs.video_fullscreen_orientation_lock_enabled = - base::FeatureList::IsEnabled(media::kVideoFullscreenOrientationLock); + base::FeatureList::IsEnabled(media::kVideoFullscreenOrientationLock) && + ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_PHONE; #endif prefs.pointer_events_max_touch_points = ui::MaxTouchPoints();
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index c3014f3..dc72ecc 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -8908,4 +8908,79 @@ gfx::Point(event_monitor.event().x, event_monitor.event().y)); } +// This tests that we don't hide the RenderViewHost when reusing the +// RenderViewHost for a subframe. See https://crbug.com/638375. +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ReusedRenderViewNotHidden) { + GURL a_url(embedded_test_server()->GetURL("a.com", "/title1.html")); + GURL b_url_a_subframe(embedded_test_server()->GetURL( + "b.com", "/cross_site_iframe_factory.html?b(a)")); + + EXPECT_TRUE(NavigateToURL(shell(), a_url)); + + // Open a popup in a.com. + Shell* popup = OpenPopup(shell(), a_url, "popup"); + + // Navigate this popup to b.com with an a.com subframe. + EXPECT_TRUE(NavigateToURL(popup, b_url_a_subframe)); + + FrameTreeNode* root = static_cast<WebContentsImpl*>(popup->web_contents()) + ->GetFrameTree() + ->root(); + FrameTreeNode* child_node = root->child_at(0); + + EXPECT_FALSE(child_node->current_frame_host() + ->render_view_host() + ->GetWidget() + ->is_hidden()); +} + +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, + RenderViewHostStaysActiveWithLateSwapoutACK) { + EXPECT_TRUE(NavigateToURL( + shell(), embedded_test_server()->GetURL("a.com", "/title1.html"))); + + // Open a popup and navigate it to b.com. + Shell* popup = OpenPopup( + shell(), embedded_test_server()->GetURL("a.com", "/title2.html"), "foo"); + + RenderFrameHostImpl* rfh = + static_cast<RenderFrameHostImpl*>(popup->web_contents()->GetMainFrame()); + RenderViewHostImpl* rvh = rfh->render_view_host(); + + // Disable the swapout ACK and the swapout timer. + scoped_refptr<SwapoutACKMessageFilter> filter = new SwapoutACKMessageFilter(); + rfh->GetProcess()->AddFilter(filter.get()); + rfh->DisableSwapOutTimerForTesting(); + + // Navigate popup to b.com. Because there's an opener, the RVH for a.com + // stays around in swapped-out state. + EXPECT_TRUE(NavigateToURL( + popup, embedded_test_server()->GetURL("b.com", "/title3.html"))); + EXPECT_FALSE(rvh->is_active()); + + // Kill the b.com process. + RenderProcessHost* b_process = + popup->web_contents()->GetMainFrame()->GetProcess(); + RenderProcessHostWatcher crash_observer( + b_process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); + b_process->Shutdown(0, false); + crash_observer.Wait(); + + // Go back in the popup from b.com to a.com/title2.html. Because the current + // b.com RFH is dead, the new RFH is committed right away (without waiting + // for renderer to commit), so that users don't need to look at the sad tab. + TestNavigationObserver back_observer(popup->web_contents()); + popup->web_contents()->GetController().GoBack(); + + // Pretend that the original RFH in a.com now finishes running its unload + // handler and sends the swapout ACK. + rfh->OnSwappedOut(); + + // Wait for the new a.com navigation to finish. + back_observer.Wait(); + + // The RVH for a.com should've been reused, and it should be active. + EXPECT_TRUE(rvh->is_active()); +} + } // namespace content
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 4a1d2fb..bd1a646 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -4921,14 +4921,17 @@ TRACE_EVENT0("browser,navigation", "WebContentsImpl::CreateRenderViewForRenderManager"); - if (proxy_routing_id == MSG_ROUTING_NONE) - CreateRenderWidgetHostViewForRenderManager(render_view_host); + RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>(render_view_host); - if (!static_cast<RenderViewHostImpl*>(render_view_host) - ->CreateRenderView(opener_frame_routing_id, - proxy_routing_id, - replicated_frame_state, - created_with_opener_)) { + // We only create a RWHV for active RenderViewHosts. When an inactive RVH is + // reused, the RWHV is created in RenderFrameHostManager::CommitPending. + if (rvhi->is_active()) { + DCHECK_EQ(MSG_ROUTING_NONE, proxy_routing_id); + CreateRenderWidgetHostViewForRenderManager(render_view_host); + } + + if (!rvhi->CreateRenderView(opener_frame_routing_id, proxy_routing_id, + replicated_frame_state, created_with_opener_)) { return false; }
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn index b657047..955d471 100644 --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn
@@ -414,6 +414,7 @@ "javatests/src/org/chromium/content/browser/ScreenOrientationListenerTest.java", "javatests/src/org/chromium/content/browser/TestsJavaScriptEvalTest.java", "javatests/src/org/chromium/content/browser/TracingControllerAndroidTest.java", + "javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java", "javatests/src/org/chromium/content/browser/VSyncMonitorTest.java", "javatests/src/org/chromium/content/browser/VibrationManagerImplTest.java", "javatests/src/org/chromium/content/browser/ViewportTest.java", @@ -434,7 +435,7 @@ data = [ "//content/test/data/android/", - "//content/test/data/media/session/", + "//content/test/data/media/", ] data_deps = [ "//net:test_support",
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java b/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java new file mode 100644 index 0000000..1f9ad5b7 --- /dev/null +++ b/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java
@@ -0,0 +1,152 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.content.browser; + +import android.graphics.Rect; +import android.test.suitebuilder.annotation.MediumTest; + +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Feature; +import org.chromium.content.browser.test.util.Criteria; +import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.content.browser.test.util.DOMUtils; +import org.chromium.content.browser.test.util.JavaScriptUtils; +import org.chromium.content.browser.test.util.UiUtils; +import org.chromium.content.common.ContentSwitches; +import org.chromium.content_shell_apk.ContentShellTestBase; +import org.chromium.ui.base.DeviceFormFactor; + +import java.util.concurrent.Callable; +import java.util.concurrent.TimeoutException; + +/** + * Integration tests for the feature that auto lock the orientation when a video goes fullscreen. + */ +@CommandLineFlags.Add({ "enable-features=VideoFullscreenOrientationLock", + ContentSwitches.DISABLE_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK }) +public class VideoFullscreenOrientationLockTest extends ContentShellTestBase { + private static final String TEST_URL = "content/test/data/media/video-player.html"; + private static final String VIDEO_ID = "video"; + + private void waitForContentsFullscreenState(boolean fullscreenValue) + throws InterruptedException { + CriteriaHelper.pollInstrumentationThread( + Criteria.equals(fullscreenValue, new Callable<Boolean>() { + @Override + public Boolean call() throws InterruptedException, TimeoutException { + return DOMUtils.isFullscreen(getWebContents()); + } + }) + ); + } + + private boolean isScreenOrientationLandscape() throws InterruptedException, TimeoutException { + StringBuilder sb = new StringBuilder(); + sb.append("(function() {"); + sb.append(" return screen.orientation.type.startsWith('landscape');"); + sb.append("})();"); + + return JavaScriptUtils.executeJavaScriptAndWaitForResult(getWebContents(), sb.toString()) + .equals("true"); + } + + private void waitForLandscapeOrientation() throws InterruptedException { + CriteriaHelper.pollInstrumentationThread(new Criteria() { + @Override + public boolean isSatisfied() { + try { + return isScreenOrientationLandscape(); + } catch (InterruptedException e) { + return false; + } catch (TimeoutException e) { + return false; + } + } + }); + } + + // TODO(mlamouri): move this constants and the controlBar(), fullscreenButton() methods to a + // dedicated helper file for media tests. + private static final int CONTROLS_HEIGHT = 35; + private static final int BUTTON_WIDTH = 35; + private static final int CONTROL_BAR_MARGIN = 5; + private static final int BUTTON_RIGHT_MARGIN = 9; + private static final int FULLSCREEN_BUTTON_LEFT_MARGIN = -5; + + private Rect controlBarBounds(Rect videoRect) { + int left = videoRect.left + CONTROL_BAR_MARGIN; + int right = videoRect.right - CONTROL_BAR_MARGIN; + int bottom = videoRect.bottom - CONTROL_BAR_MARGIN; + int top = videoRect.bottom - CONTROLS_HEIGHT; + return new Rect(left, top, right, bottom); + } + + private Rect fullscreenButtonBounds(Rect videoRect) { + Rect bar = controlBarBounds(videoRect); + int right = bar.right - BUTTON_RIGHT_MARGIN; + int left = right - BUTTON_WIDTH; + return new Rect(left, bar.top, right, bar.bottom); + } + + private boolean clickFullscreenButton() throws InterruptedException, TimeoutException { + return DOMUtils.clickRect(getContentViewCore(), + fullscreenButtonBounds(DOMUtils.getNodeBounds(getWebContents(), VIDEO_ID))); + } + + @Override + public void setUp() throws Exception { + super.setUp(); + + startActivityWithTestUrl(TEST_URL); + } + + @MediumTest + @Feature({"VideoFullscreenOrientationLock"}) + public void testEnterExitFullscreenWithControlsButton() throws Exception { + if (DeviceFormFactor.isTablet(getInstrumentation().getContext())) return; + + // Start playback to guarantee it's properly loaded. + assertTrue(DOMUtils.isMediaPaused(getWebContents(), VIDEO_ID)); + DOMUtils.playMedia(getWebContents(), VIDEO_ID); + DOMUtils.waitForMediaPlay(getWebContents(), VIDEO_ID); + + // Simulate click on fullscreen button. + assertTrue(clickFullscreenButton()); + waitForContentsFullscreenState(true); + + // Should be landscape now, `waitForLandscapeOrientation` will throw otherwise. + waitForLandscapeOrientation(); + + // Because of the fullscreen animation, the click on the exit fullscreen button will fail + // roughly 10% of the time. Settling down the UI reduces the flake to 0%. + UiUtils.settleDownUI(getInstrumentation()); + + // Leave fullscreen by clicking back on the button. + assertTrue(clickFullscreenButton()); + waitForContentsFullscreenState(false); + } + + @MediumTest + @Feature({"VideoFullscreenOrientationLock"}) + public void testEnterExitFullscreenWithAPI() throws Exception { + if (DeviceFormFactor.isTablet(getInstrumentation().getContext())) return; + + // Start playback to guarantee it's properly loaded. + assertTrue(DOMUtils.isMediaPaused(getWebContents(), VIDEO_ID)); + DOMUtils.playMedia(getWebContents(), VIDEO_ID); + DOMUtils.waitForMediaPlay(getWebContents(), VIDEO_ID); + + // Trigger requestFullscreen() via a click on a button. + assertTrue(DOMUtils.clickNode(this, getContentViewCore(), "fullscreen")); + waitForContentsFullscreenState(true); + + // Should be landscape now, `waitForLandscapeOrientation` will throw otherwise. + waitForLandscapeOrientation(); + + // Leave fullscreen from API. + DOMUtils.exitFullscreen(getWebContents()); + waitForContentsFullscreenState(false); + } +}
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java index 014f9ee..6bd6e0d5 100644 --- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java +++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java
@@ -255,6 +255,18 @@ } /** + * Click a given rect in the page. Does not move the rect into view. + * @param viewCore The ContentViewCore in which the node lives. + * @param rect The rect to click. + */ + public static boolean clickRect(final ContentViewCore viewCore, Rect rect) + throws InterruptedException, TimeoutException { + int[] clickTarget = getClickTargetForBounds(viewCore, rect); + return TouchCommon.singleClickView( + viewCore.getContainerView(), clickTarget[0], clickTarget[1]); + } + + /** * Long-press a DOM node by its id, scrolling it into view first. * @param activityTestCase The ActivityInstrumentationTestCase2 to instrument. * @param viewCore The ContentViewCore in which the node lives.
diff --git a/content/public/test/test_renderer_host.cc b/content/public/test/test_renderer_host.cc index 38f524e..2eabd212 100644 --- a/content/public/test/test_renderer_host.cc +++ b/content/public/test/test_renderer_host.cc
@@ -129,9 +129,39 @@ RenderViewHostTestEnabler::RenderViewHostTestEnabler() : rph_factory_(new MockRenderProcessHostFactory()), rvh_factory_(new TestRenderViewHostFactory(rph_factory_.get())), - rfh_factory_(new TestRenderFrameHostFactory()) {} + rfh_factory_(new TestRenderFrameHostFactory()) { +#if !defined(OS_ANDROID) + ImageTransportFactory::InitializeForUnitTests( + base::WrapUnique(new NoTransportImageTransportFactory)); +#else + gpu_channel_factory_ = base::MakeUnique<MockGpuChannelEstablishFactory>(); + ContextProviderFactoryImpl::Initialize(gpu_channel_factory_.get()); + ui::ContextProviderFactory::SetInstance( + ContextProviderFactoryImpl::GetInstance()); + if (!screen_) + screen_.reset(ui::CreateDummyScreenAndroid()); + display::Screen::SetScreenInstance(screen_.get()); +#endif +#if defined(OS_MACOSX) + if (base::ThreadTaskRunnerHandle::IsSet()) + ui::WindowResizeHelperMac::Get()->Init(base::ThreadTaskRunnerHandle::Get()); +#endif // OS_MACOSX +} RenderViewHostTestEnabler::~RenderViewHostTestEnabler() { +#if defined(OS_MACOSX) + ui::WindowResizeHelperMac::Get()->ShutdownForTests(); +#endif // OS_MACOSX +#if !defined(OS_ANDROID) + // RenderWidgetHostView holds on to a reference to SurfaceManager, so it + // must be shut down before the ImageTransportFactory. + ImageTransportFactory::Terminate(); +#else + display::Screen::SetScreenInstance(nullptr); + ui::ContextProviderFactory::SetInstance(nullptr); + ContextProviderFactoryImpl::Terminate(); + gpu_channel_factory_.reset(); +#endif } @@ -234,21 +264,13 @@ ui::MaterialDesignController::Initialize(); thread_bundle_.reset(new TestBrowserThreadBundle(thread_bundle_options_)); + rvh_test_enabler_.reset(new RenderViewHostTestEnabler); + if (factory_) + rvh_test_enabler_->rvh_factory_->set_render_process_host_factory(factory_); + #if defined(OS_WIN) ole_initializer_.reset(new ui::ScopedOleInitializer()); #endif -#if !defined(OS_ANDROID) - ImageTransportFactory::InitializeForUnitTests( - base::WrapUnique(new NoTransportImageTransportFactory)); -#else - gpu_channel_factory_ = base::MakeUnique<MockGpuChannelEstablishFactory>(); - ContextProviderFactoryImpl::Initialize(gpu_channel_factory_.get()); - ui::ContextProviderFactory::SetInstance( - ContextProviderFactoryImpl::GetInstance()); - if (!screen_) - screen_.reset(ui::CreateDummyScreenAndroid()); - display::Screen::SetScreenInstance(screen_.get()); -#endif #if defined(USE_AURA) ui::ContextFactory* context_factory = ImageTransportFactory::GetInstance()->GetContextFactory(); @@ -270,10 +292,6 @@ if (IsBrowserSideNavigationEnabled()) BrowserSideNavigationSetUp(); - -#if defined(OS_MACOSX) - ui::WindowResizeHelperMac::Get()->Init(base::ThreadTaskRunnerHandle::Get()); -#endif // OS_MACOSX } void RenderViewHostTestHarness::TearDown() { @@ -289,17 +307,15 @@ // before we destroy the browser context. base::RunLoop().RunUntilIdle(); -#if defined(OS_MACOSX) - ui::WindowResizeHelperMac::Get()->ShutdownForTests(); -#endif // OS_MACOSX - #if defined(OS_WIN) ole_initializer_.reset(); #endif // Delete any RenderProcessHosts before the BrowserContext goes away. - if (rvh_test_enabler_.rph_factory_) - rvh_test_enabler_.rph_factory_.reset(); + if (rvh_test_enabler_->rph_factory_) + rvh_test_enabler_->rph_factory_.reset(); + + rvh_test_enabler_.reset(); // Release the browser context by posting itself on the end of the task // queue. This is preferable to immediate deletion because it will behave @@ -309,17 +325,6 @@ FROM_HERE, browser_context_.release()); thread_bundle_.reset(); - -#if !defined(OS_ANDROID) - // RenderWidgetHostView holds on to a reference to SurfaceManager, so it - // must be shut down before the ImageTransportFactory. - ImageTransportFactory::Terminate(); -#else - display::Screen::SetScreenInstance(nullptr); - ui::ContextProviderFactory::SetInstance(nullptr); - ContextProviderFactoryImpl::Terminate(); - gpu_channel_factory_.reset(); -#endif } BrowserContext* RenderViewHostTestHarness::CreateBrowserContext() { @@ -328,7 +333,10 @@ void RenderViewHostTestHarness::SetRenderProcessHostFactory( RenderProcessHostFactory* factory) { - rvh_test_enabler_.rvh_factory_->set_render_process_host_factory(factory); + if (rvh_test_enabler_) + rvh_test_enabler_->rvh_factory_->set_render_process_host_factory(factory); + else + factory_ = factory; } } // namespace content
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h index b9d04a2..2aaa3ff3 100644 --- a/content/public/test/test_renderer_host.h +++ b/content/public/test/test_renderer_host.h
@@ -179,6 +179,10 @@ DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestEnabler); friend class RenderViewHostTestHarness; +#if defined(OS_ANDROID) + std::unique_ptr<MockGpuChannelEstablishFactory> gpu_channel_factory_; + std::unique_ptr<display::Screen> screen_; +#endif std::unique_ptr<MockRenderProcessHostFactory> rph_factory_; std::unique_ptr<TestRenderViewHostFactory> rvh_factory_; std::unique_ptr<TestRenderFrameHostFactory> rfh_factory_; @@ -280,11 +284,8 @@ #if defined(USE_AURA) std::unique_ptr<aura::test::AuraTestHelper> aura_test_helper_; #endif -#if defined(OS_ANDROID) - std::unique_ptr<MockGpuChannelEstablishFactory> gpu_channel_factory_; - std::unique_ptr<display::Screen> screen_; -#endif - RenderViewHostTestEnabler rvh_test_enabler_; + std::unique_ptr<RenderViewHostTestEnabler> rvh_test_enabler_; + RenderProcessHostFactory* factory_ = nullptr; DISALLOW_COPY_AND_ASSIGN(RenderViewHostTestHarness); };
diff --git a/content/test/data/media/video-player.html b/content/test/data/media/video-player.html new file mode 100644 index 0000000..ac91e6e6 --- /dev/null +++ b/content/test/data/media/video-player.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> +<head> + <title>Video Player Test</title> + <meta name=viewport content='width=device-width initial-scale=1.0'> +</head> +<body> + <video controls id=video src=bear.webm></video> + <button id='fullscreen'>fullscreen</button> +</body> +<script> + document.querySelector('#fullscreen').addEventListener('click', _ => { + document.querySelector('video').webkitRequestFullscreen(); + }, { once: true }); +</script> +</html>
diff --git a/ios/chrome/browser/ui/BUILD.gn b/ios/chrome/browser/ui/BUILD.gn index 9638082..d68a845 100644 --- a/ios/chrome/browser/ui/BUILD.gn +++ b/ios/chrome/browser/ui/BUILD.gn
@@ -4,18 +4,6 @@ import("//build/config/ios/rules.gni") -source_set("ui_arc") { - sources = [ - "network_activity_indicator_manager.h", - "network_activity_indicator_manager.mm", - ] - deps = [ - "//base", - "//ios/chrome/browser", - ] - configs += [ "//build/config/compiler:enable_arc" ] -} - source_set("ui") { configs += [ "//build/config/compiler:enable_arc" ] sources = [ @@ -35,6 +23,8 @@ "image_util.mm", "native_content_controller.h", "native_content_controller.mm", + "network_activity_indicator_manager.h", + "network_activity_indicator_manager.mm", "orientation_limiting_navigation_controller.h", "orientation_limiting_navigation_controller.mm", "prerender_final_status.h", @@ -65,13 +55,7 @@ "//ui/base", "//ui/gfx", ] - public_deps = [ - ":ui_arc", - ] - allow_circular_includes_from = [ - ":ui_arc", - "//ios/chrome/browser/ui/commands", - ] + allow_circular_includes_from = [ "//ios/chrome/browser/ui/commands" ] libs = [ "Accelerate.framework", "CoreGraphics.framework",
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn index 13d6dc8..b1478185 100644 --- a/ios/chrome/browser/ui/webui/BUILD.gn +++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -49,7 +49,7 @@ "//ios/web", "//net", "//services/service_manager/public/cpp", - "//third_party/brotli", + "//third_party/brotli:dec", "//ui/base", "//url", ]
diff --git a/ios/chrome/browser/ui/webui/about_ui.cc b/ios/chrome/browser/ui/webui/about_ui.cc index 42013920..176f0b1 100644 --- a/ios/chrome/browser/ui/webui/about_ui.cc +++ b/ios/chrome/browser/ui/webui/about_ui.cc
@@ -20,7 +20,7 @@ #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/web/public/url_data_source_ios.h" #include "net/base/escape.h" -#include "third_party/brotli/dec/decode.h" +#include "third_party/brotli/include/brotli/decode.h" #include "ui/base/device_form_factor.h" #include "ui/base/resource/resource_bundle.h" #include "url/gurl.h" @@ -131,18 +131,26 @@ base::StringPiece raw_response = ResourceBundle::GetSharedInstance().GetRawDataResource(idr); if (idr == IDR_ABOUT_UI_CREDITS_HTML) { - size_t decoded_size; - const uint8_t* encoded_response_buffer = + const uint8_t* next_encoded_byte = reinterpret_cast<const uint8_t*>(raw_response.data()); - CHECK(BrotliDecompressedSize(raw_response.size(), encoded_response_buffer, - &decoded_size)); - // Resizing the response and using it as the buffer Brotli decompresses - // into. - response.resize(decoded_size); - CHECK(BrotliDecompressBuffer(raw_response.size(), encoded_response_buffer, - &decoded_size, - reinterpret_cast<uint8_t*>(&response[0])) == - BROTLI_RESULT_SUCCESS); + size_t input_size_remaining = raw_response.size(); + BrotliDecoderState* decoder = + BrotliDecoderCreateInstance(nullptr /* no custom allocator */, + nullptr /* no custom deallocator */, + nullptr /* no custom memory handle */); + CHECK(!!decoder); + while (!BrotliDecoderIsFinished(decoder)) { + size_t output_size_remaining = 0; + CHECK(BrotliDecoderDecompressStream( + decoder, &input_size_remaining, &next_encoded_byte, + &output_size_remaining, nullptr, + nullptr) != BROTLI_DECODER_RESULT_ERROR); + const uint8_t* output_buffer = + BrotliDecoderTakeOutput(decoder, &output_size_remaining); + response.insert(response.end(), output_buffer, + output_buffer + output_size_remaining); + } + BrotliDecoderDestroyInstance(decoder); } else { response = raw_response.as_string(); }
diff --git a/net/BUILD.gn b/net/BUILD.gn index 49e2d42..02b77e2 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -399,7 +399,7 @@ # Brotli support. if (!disable_brotli_filter) { sources += [ "filter/brotli_source_stream.cc" ] - deps += [ "//third_party/brotli" ] + deps += [ "//third_party/brotli:dec" ] } else { sources += [ "filter/brotli_source_stream_disabled.cc" ] }
diff --git a/net/filter/brotli_source_stream.cc b/net/filter/brotli_source_stream.cc index 453ccac..2ad18c39f 100644 --- a/net/filter/brotli_source_stream.cc +++ b/net/filter/brotli_source_stream.cc
@@ -11,7 +11,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "net/base/io_buffer.h" -#include "third_party/brotli/dec/decode.h" +#include "third_party/brotli/include/brotli/decode.h" namespace net { @@ -32,13 +32,15 @@ consumed_bytes_(0), produced_bytes_(0), gzip_header_detected_(true) { - brotli_state_ = BrotliCreateState(AllocateMemory, FreeMemory, this); + brotli_state_ = + BrotliDecoderCreateInstance(AllocateMemory, FreeMemory, this); CHECK(brotli_state_); } ~BrotliSourceStream() override { - BrotliErrorCode error_code = BrotliGetErrorCode(brotli_state_); - BrotliDestroyState(brotli_state_); + BrotliDecoderErrorCode error_code = + BrotliDecoderGetErrorCode(brotli_state_); + BrotliDecoderDestroyInstance(brotli_state_); brotli_state_ = nullptr; DCHECK_EQ(0u, used_memory_); @@ -105,7 +107,6 @@ size_t available_in = input_buffer_size; uint8_t* next_out = bit_cast<uint8_t*>(output_buffer->data()); size_t available_out = output_buffer_size; - size_t total_out = 0; // Check if start of the input stream looks like gzip stream. for (size_t i = consumed_bytes_; i < sizeof(kGzipHeader); ++i) { if (!gzip_header_detected_) @@ -115,9 +116,9 @@ gzip_header_detected_ = false; } - BrotliResult result = - BrotliDecompressStream(&available_in, &next_in, &available_out, - &next_out, &total_out, brotli_state_); + BrotliDecoderResult result = + BrotliDecoderDecompressStream(brotli_state_, &available_in, &next_in, + &available_out, &next_out, nullptr); size_t bytes_used = input_buffer_size - available_in; size_t bytes_written = output_buffer_size - available_out; @@ -129,15 +130,15 @@ *consumed_bytes = bytes_used; switch (result) { - case BROTLI_RESULT_NEEDS_MORE_OUTPUT: + case BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: return bytes_written; - case BROTLI_RESULT_SUCCESS: + case BROTLI_DECODER_RESULT_SUCCESS: decoding_status_ = DecodingStatus::DECODING_DONE; // Consume remaining bytes to avoid DCHECK in FilterSourceStream. // See crbug.com/659311. *consumed_bytes = input_buffer_size; return bytes_written; - case BROTLI_RESULT_NEEDS_MORE_INPUT: + case BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: // Decompress needs more input has consumed all existing input. DCHECK_EQ(*consumed_bytes, input_buffer_size); decoding_status_ = DecodingStatus::DECODING_IN_PROGRESS; @@ -178,7 +179,7 @@ free(&array[-1]); } - BrotliState* brotli_state_; + BrotliDecoderState* brotli_state_; DecodingStatus decoding_status_;
diff --git a/net/tools/cachetool/cachetool.cc b/net/tools/cachetool/cachetool.cc index c5ac94f..4c3b7c1 100644 --- a/net/tools/cachetool/cachetool.cc +++ b/net/tools/cachetool/cachetool.cc
@@ -4,15 +4,20 @@ #include <iostream> #include <memory> +#include <unordered_map> #include "base/at_exit.h" #include "base/command_line.h" #include "base/files/file_path.h" +#include "base/format_macros.h" #include "base/logging.h" #include "base/macros.h" +#include "base/md5.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_piece.h" +#include "base/strings/stringprintf.h" #include "net/base/io_buffer.h" #include "net/base/test_completion_callback.h" #include "net/disk_cache/disk_cache.h" @@ -25,11 +30,18 @@ namespace { +struct EntryData { + std::string url; + std::string mime_type; + int size; +}; + constexpr int kResponseInfoIndex = 0; +constexpr int kResponseContentIndex = 1; const char* const kCommandNames[] = { "stop", "get_size", "list_keys", "get_stream_for_key", - "delete_stream", "delete_key", "update_raw_headers", + "delete_stream", "delete_key", "update_raw_headers", "list_dups", }; // Prints the command line help. @@ -50,6 +62,8 @@ std::cout << " get_stream <key> <index>: Print a particular stream for a" << " given key." << std::endl; std::cout << " list_keys: List all keys in the cache." << std::endl; + std::cout << " list_dups: List all resources with duplicate bodies in the " + << "cache." << std::endl; std::cout << " update_raw_headers <key>: Update stdin as the key's raw " << "response headers." << std::endl; std::cout << " stop: Verify that the cache can be opened and return, " @@ -64,9 +78,9 @@ // Generic command input/output. class CommandMarshal { public: - CommandMarshal(Backend* cache_backend) - : command_failed_(false), cache_backend_(cache_backend){}; - virtual ~CommandMarshal(){}; + explicit CommandMarshal(Backend* cache_backend) + : command_failed_(false), cache_backend_(cache_backend) {} + virtual ~CommandMarshal() {} // Reads the next command's name to execute. virtual std::string ReadCommandName() = 0; @@ -105,7 +119,7 @@ virtual void ReturnFailure(const std::string& error_msg) = 0; // Communicates back command success. - virtual void ReturnSuccess() { DCHECK(!command_failed_); }; + virtual void ReturnSuccess() { DCHECK(!command_failed_); } // Returns whether the command has failed. inline bool has_failed() { return command_failed_; } @@ -199,7 +213,7 @@ // cachetool's main loop. class StreamCommandMarshal final : public CommandMarshal { public: - StreamCommandMarshal(Backend* cache_backend) + explicit StreamCommandMarshal(Backend* cache_backend) : CommandMarshal(cache_backend) {} // Implements CommandMarshal. @@ -302,6 +316,153 @@ return true; } +bool GetResponseInfoForEntry(disk_cache::Entry* entry, + net::HttpResponseInfo* response_info) { + int size = entry->GetDataSize(kResponseInfoIndex); + if (size == 0) + return false; + scoped_refptr<net::IOBuffer> buffer = new net::IOBufferWithSize(size); + net::TestCompletionCallback cb; + + int bytes_read = 0; + while (true) { + int rv = entry->ReadData(kResponseInfoIndex, bytes_read, buffer.get(), size, + cb.callback()); + rv = cb.GetResult(rv); + if (rv < 0) { + entry->Close(); + return false; + } + + if (rv == 0) { + bool truncated_response_info = false; + net::HttpCache::ParseResponseInfo(buffer->data(), size, response_info, + &truncated_response_info); + return !truncated_response_info; + } + + bytes_read += rv; + } + + NOTREACHED(); + return false; +} + +std::string GetMD5ForResponseBody(disk_cache::Entry* entry) { + if (entry->GetDataSize(kResponseContentIndex) == 0) + return ""; + + const int kInitBufferSize = 80 * 1024; + scoped_refptr<net::IOBuffer> buffer = + new net::IOBufferWithSize(kInitBufferSize); + net::TestCompletionCallback cb; + + base::MD5Context ctx; + base::MD5Init(&ctx); + + int bytes_read = 0; + while (true) { + int rv = entry->ReadData(kResponseContentIndex, bytes_read, buffer.get(), + kInitBufferSize, cb.callback()); + rv = cb.GetResult(rv); + if (rv < 0) { + entry->Close(); + return ""; + } + + if (rv == 0) { + base::MD5Digest digest; + base::MD5Final(&digest, &ctx); + return base::MD5DigestToBase16(digest); + } + + bytes_read += rv; + MD5Update(&ctx, base::StringPiece(buffer->data(), rv)); + } + + NOTREACHED(); + return ""; +} + +void ListDups(CommandMarshal* command_marshal) { + std::unique_ptr<Backend::Iterator> entry_iterator = + command_marshal->cache_backend()->CreateIterator(); + Entry* entry = nullptr; + net::TestCompletionCallback cb; + int rv = entry_iterator->OpenNextEntry(&entry, cb.callback()); + command_marshal->ReturnSuccess(); + + std::unordered_map<std::string, std::vector<EntryData>> md5_entries; + + int total_entries = 0; + + while (cb.GetResult(rv) == net::OK) { + total_entries += 1; + net::HttpResponseInfo response_info; + if (!GetResponseInfoForEntry(entry, &response_info)) { + entry->Close(); + entry = nullptr; + rv = entry_iterator->OpenNextEntry(&entry, cb.callback()); + continue; + } + + std::string hash = GetMD5ForResponseBody(entry); + if (hash.empty()) { + // Sparse entries and empty bodies are skipped. + entry->Close(); + entry = nullptr; + rv = entry_iterator->OpenNextEntry(&entry, cb.callback()); + continue; + } + + EntryData entry_data; + + entry_data.url = entry->GetKey(); + entry_data.size = entry->GetDataSize(kResponseContentIndex); + if (response_info.headers) + response_info.headers->GetMimeType(&entry_data.mime_type); + + auto iter = md5_entries.find(hash); + if (iter == md5_entries.end()) + md5_entries.insert( + std::make_pair(hash, std::vector<EntryData>{entry_data})); + else + iter->second.push_back(entry_data); + + entry->Close(); + entry = nullptr; + rv = entry_iterator->OpenNextEntry(&entry, cb.callback()); + } + + // Print the duplicates and collect stats. + int total_duped_entries = 0; + int64_t total_duped_bytes = 0u; + for (const auto& hash_and_entries : md5_entries) { + if (hash_and_entries.second.size() == 1) + continue; + + int dups = hash_and_entries.second.size() - 1; + total_duped_entries += dups; + total_duped_bytes += hash_and_entries.second[0].size * dups; + + for (const auto& entry : hash_and_entries.second) { + std::string out = base::StringPrintf( + "%d, %s, %s", entry.size, entry.url.c_str(), entry.mime_type.c_str()); + command_marshal->ReturnString(out); + } + } + + // Print the stats. + rv = command_marshal->cache_backend()->CalculateSizeOfAllEntries( + cb.callback()); + rv = cb.GetResult(rv); + LOG(ERROR) << "Wasted bytes = " << total_duped_bytes; + LOG(ERROR) << "Wasted entries = " << total_duped_entries; + LOG(ERROR) << "Total entries = " << total_entries; + LOG(ERROR) << "Cache size = " << rv; + LOG(ERROR) << "Percentage of cache wasted = " << total_duped_bytes * 100 / rv; +} + // Gets a key's stream to a buffer. scoped_refptr<net::GrowableIOBuffer> GetStreamForKeyBuffer( CommandMarshal* command_marshal, @@ -460,6 +621,8 @@ ListKeys(command_marshal); } else if (subcommand == "update_raw_headers") { UpdateRawResponseHeaders(command_marshal); + } else if (subcommand == "list_dups") { + ListDups(command_marshal); } else { // The wrong subcommand is originated from the command line. command_marshal->ReturnFailure("Unknown command.");
diff --git a/testing/libfuzzer/fuzzers/BUILD.gn b/testing/libfuzzer/fuzzers/BUILD.gn index 1ceb1850..9ab09b7 100644 --- a/testing/libfuzzer/fuzzers/BUILD.gn +++ b/testing/libfuzzer/fuzzers/BUILD.gn
@@ -24,7 +24,7 @@ "brotli_fuzzer.cc", ] deps = [ - "//third_party/brotli:brotli", + "//third_party/brotli:dec", ] libfuzzer_options = [ "max_len=1280" ] }
diff --git a/testing/libfuzzer/fuzzers/brotli_fuzzer.cc b/testing/libfuzzer/fuzzers/brotli_fuzzer.cc index 5a5045a..4689416a 100644 --- a/testing/libfuzzer/fuzzers/brotli_fuzzer.cc +++ b/testing/libfuzzer/fuzzers/brotli_fuzzer.cc
@@ -5,7 +5,7 @@ #include <stddef.h> #include <stdint.h> -#include "third_party/brotli/dec/decode.h" +#include "third_party/brotli/include/brotli/decode.h" // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { @@ -16,7 +16,7 @@ const int kBufferSize = 1024; uint8_t* buffer = new uint8_t[kBufferSize]; - BrotliState* state = BrotliCreateState(0, 0, 0); + BrotliDecoderState* state = BrotliDecoderCreateInstance(0, 0, 0); if (addend == 0) addend = size; @@ -27,19 +27,19 @@ next_i = size; size_t avail_in = next_i - i; i = next_i; - BrotliResult result = BROTLI_RESULT_NEEDS_MORE_OUTPUT; - while (result == BROTLI_RESULT_NEEDS_MORE_OUTPUT) { + BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; + while (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { size_t avail_out = kBufferSize; uint8_t* next_out = buffer; size_t total_out; - result = BrotliDecompressStream( - &avail_in, &next_in, &avail_out, &next_out, &total_out, state); + result = BrotliDecoderDecompressStream( + state, &avail_in, &next_in, &avail_out, &next_out, &total_out); } - if (result != BROTLI_RESULT_NEEDS_MORE_INPUT) + if (result != BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) break; } - BrotliDestroyState(state); + BrotliDecoderDestroyInstance(state); delete[] buffer; return 0; }
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 9524f04..3cb924b 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2305,3 +2305,6 @@ # Added 2016-12-12 crbug.com/673539 [ Linux ] css3/filters/effect-contrast-hw.html [ Pass Failure ] + +# Added 2016-12-14 +crbug.com/674048 [ Linux ] virtual/mojo-loading/http/tests/navigation/image-load-in-unload-handler.html [ Pass Timeout ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites index cb50a79..d9e558e 100644 --- a/third_party/WebKit/LayoutTests/VirtualTestSuites +++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -301,6 +301,11 @@ "args": ["--enable-features=WebAssembly"] }, { + "prefix": "enable_asmjs", + "base": "http/tests/asmjs", + "args": ["--enable-features=AsmJsToWebAssembly"] + }, + { "prefix": "disable-mojo-service-worker", "base": "http/tests/serviceworker", "args": ["--disable-mojo-service-worker"]
diff --git a/third_party/WebKit/LayoutTests/fast/inline-block/baseline-vertical.html b/third_party/WebKit/LayoutTests/fast/inline-block/baseline-vertical.html new file mode 100644 index 0000000..a6720da6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/inline-block/baseline-vertical.html
@@ -0,0 +1,82 @@ +<!DOCTYPE html> +<style> +body { margin: 0px; } +.float { + float: left; + margin-left: 5px; +} +.container { + background: grey; + text-orientation: sideways; +} +.container :nth-child(1) { font-size:12px; } +.container :nth-child(2) { font-size:20px; } +.container :nth-child(3) { font-size:30px; } +.container :nth-child(4) { font-size:40px; } +.item { + display: inline-block; + border-width: 2px 5px 3px 4px; + border-style: solid; + padding: 6px 3px 7px 8px; + margin: 10px 6px 4px 12px; +} +.width175 { width: 175px; } +.width125 { width: 125px; } +.extraLeftPadding { padding-left: 30px; } +.extraRightPadding { padding-right: 30px; } +.verticalLR { writing-mode: vertical-lr; } +.verticalRL { writing-mode: vertical-rl; } +.directionRTL { direction: rtl; } +</style> + +<div class="float"> + <p>VerticalLR and LTR</p> + <div class="container width125 verticalLR"> + <div class="item">A</div><div class="item">A</div><div class="item">A</div><div class="item">A</div> + </div> +</div> +<div class="float"> + <p>VerticalLR and RTL<br></p> + <div class="container width125 verticalLR directionRTL"> + <div class="item">A</div><div class="item">A</div><div class="item">A</div><div class="item">A</div> + </div> +</div> +<div class="float"> + <p>VerticalLR and LTR</p> + <div class="container width175 verticalLR"> + <div class="item extraLeftPadding">A</div><div class="item">A</div><div class="item extraRightPadding">A</div><div class="item">A</div> + </div> +</div> +<div class="float"> + <p>VerticalLR and RTL</p> + <div class="container width175 verticalLR directionRTL"> + <div class="item extraLeftPadding">A</div><div class="item">A</div><div class="item extraRightPadding">A</div><div class="item">A</div> + </div> +</div> + +<br clear="all"> + +<div class="float"> + <p>VerticalRL and LTR</p> + <div class="container width125 verticalRL"> + <div class="item">A</div><div class="item">A</div><div class="item">A</div><div class="item">A</div> + </div> +</div> +<div class="float"> + <p>VerticalRL and RTL</p> + <div class="container width125 verticalRL directionRTL"> + <div class="item">A</div><div class="item">A</div><div class="item">A</div><div class="item">A</div> + </div> +</div> +<div class="float"> + <p>VerticalRL and LTR</p> + <div class="container width175 verticalRL"> + <div class="item extraLeftPadding">A</div><div class="item">A</div><div class="item extraRightPadding">A</div><div class="item">A</div> + </div> +</div> +<div class="float"> + <p>VerticalRL and RTL</p> + <div class="container width175 verticalRL directionRTL"> + <div class="item extraLeftPadding">A</div><div class="item">A</div><div class="item extraRightPadding">A</div><div class="item">A</div> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/http/tests/budget/interfaces.html b/third_party/WebKit/LayoutTests/http/tests/budget/interfaces.html index e1563ad8..549e6b1 100644 --- a/third_party/WebKit/LayoutTests/http/tests/budget/interfaces.html +++ b/third_party/WebKit/LayoutTests/http/tests/budget/interfaces.html
@@ -9,11 +9,14 @@ <script> test(function() { assert_own_property(Navigator.prototype, 'budget'); + assert_true('BudgetService' in self); assert_own_property(BudgetService.prototype, 'getCost'); assert_own_property(BudgetService.prototype, 'getBudget'); assert_own_property(BudgetService.prototype, 'reserve'); + assert_true('BudgetState' in self); + assert_own_property(BudgetState.prototype, 'budgetAt'); + assert_own_property(BudgetState.prototype, 'time'); assert_equals(navigator.budget, navigator.budget); - assert_true('BudgetService' in self); }, 'NavigatorBudget should be exposed and have the expected interface in a Document.'); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/budget/resources/instrumentation-service-worker.js b/third_party/WebKit/LayoutTests/http/tests/budget/resources/instrumentation-service-worker.js index c4491ec..e2686ad 100644 --- a/third_party/WebKit/LayoutTests/http/tests/budget/resources/instrumentation-service-worker.js +++ b/third_party/WebKit/LayoutTests/http/tests/budget/resources/instrumentation-service-worker.js
@@ -54,7 +54,10 @@ WorkerNavigator.prototype.hasOwnProperty('budget') && BudgetService.prototype.hasOwnProperty('getCost') && BudgetService.prototype.hasOwnProperty('getBudget') && - BudgetService.prototype.hasOwnProperty('reserve') + BudgetService.prototype.hasOwnProperty('reserve') && + 'BudgetState' in self && + BudgetState.prototype.hasOwnProperty('budgetAt') && + BudgetState.prototype.hasOwnProperty('time'); } catch(err) { message = err.message; }
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 157f631..e1fc94ff 100644 --- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -20,6 +20,10 @@ method getBudget method getCost method reserve +interface BudgetState + getter budgetAt + getter time + method constructor interface ByteLengthQueuingStrategy method constructor method size
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-leakage-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-leakage-transforms-expected.txt index f9bce241..8a78c03 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-leakage-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/backgrounds/background-leakage-transforms-expected.txt
@@ -44,8 +44,8 @@ text run at (2,122) width 4: " " LayoutBlockFlow {DIV} at (16,136) size 110x100 [bgcolor=#000000] [border: (20px double #FFFFFF)] LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (128,268) size 19x4 - text run at (128,268) width 4: " " + LayoutText {#text} at (12,268) size 19x4 + text run at (12,268) width 4: " " LayoutBlockFlow {DIV} at (10,282) size 139x248 [bgcolor=#808080] LayoutBlockFlow {DIV} at (16,12) size 110x100 [bgcolor=#FFFFFF] [border: (20px solid #0000FF7F)] LayoutText {#text} at (2,122) size 19x4
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/baseline-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/baseline-vertical-expected.png new file mode 100644 index 0000000..2504a90 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/baseline-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/baseline-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/baseline-vertical-expected.txt new file mode 100644 index 0000000..a62f8fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline-block/baseline-vertical-expected.txt
@@ -0,0 +1,155 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x506 + LayoutBlockFlow {HTML} at (0,0) size 800x506 + LayoutBlockFlow {BODY} at (0,0) size 800x253 + LayoutBlockFlow (floating) {DIV} at (5,0) size 125x253 + LayoutBlockFlow {P} at (0,16) size 125x20 + LayoutText {#text} at (0,0) size 121x19 + text run at (0,0) width 121: "VerticalLR and LTR" + LayoutBlockFlow {DIV} at (0,52) size 125x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (20,10) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 15x9 + text run at (12,8) width 9: "A" + LayoutBlockFlow {DIV} at (18,51) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x14 + text run at (12,8) width 14: "A" + LayoutBlockFlow {DIV} at (16,97) size 55x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 34x21 + text run at (12,8) width 21: "A" + LayoutBlockFlow {DIV} at (12,150) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 46x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (135,0) size 125x253 + LayoutBlockFlow {P} at (0,16) size 125x20 + LayoutText {#text} at (0,0) size 122x19 + text run at (0,0) width 122: "VerticalLR and RTL" + LayoutBR {BR} at (121,0) size 1x19 + LayoutBlockFlow {DIV} at (0,52) size 125x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (20,170) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 15x9 + text run at (12,8) width 9: "A" + LayoutBlockFlow {DIV} at (18,124) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x14 + text run at (12,8) width 14: "A" + LayoutBlockFlow {DIV} at (16,71) size 55x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 34x21 + text run at (12,8) width 21: "A" + LayoutBlockFlow {DIV} at (12,10) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 46x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (265,0) size 175x253 + LayoutBlockFlow {P} at (0,16) size 175x20 + LayoutText {#text} at (0,0) size 121x19 + text run at (0,0) width 121: "VerticalLR and LTR" + LayoutBlockFlow {DIV} at (0,52) size 175x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (12,10) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (34,8) size 15x9 + text run at (34,8) width 9: "A" + LayoutBlockFlow {DIV} at (32,51) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x14 + text run at (12,8) width 14: "A" + LayoutBlockFlow {DIV} at (30,97) size 82x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 34x21 + text run at (12,8) width 21: "A" + LayoutBlockFlow {DIV} at (26,150) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 46x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (445,0) size 175x253 + LayoutBlockFlow {P} at (0,16) size 175x20 + LayoutText {#text} at (0,0) size 122x19 + text run at (0,0) width 122: "VerticalLR and RTL" + LayoutBlockFlow {DIV} at (0,52) size 175x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (12,170) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (34,8) size 15x9 + text run at (34,8) width 9: "A" + LayoutBlockFlow {DIV} at (32,124) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x14 + text run at (12,8) width 14: "A" + LayoutBlockFlow {DIV} at (30,71) size 82x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 34x21 + text run at (12,8) width 21: "A" + LayoutBlockFlow {DIV} at (26,10) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 46x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBR {BR} at (620,0) size 0x19 + LayoutBlockFlow (floating) {DIV} at (5,253) size 125x253 + LayoutBlockFlow {P} at (0,16) size 125x20 + LayoutText {#text} at (0,0) size 121x19 + text run at (0,0) width 121: "VerticalRL and LTR" + LayoutBlockFlow {DIV} at (0,52) size 125x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (31,10) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (26,51) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x14 + text run at (8,8) width 14: "A" + LayoutBlockFlow {DIV} at (16,97) size 55x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 34x21 + text run at (8,8) width 21: "A" + LayoutBlockFlow {DIV} at (6,150) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 46x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (135,253) size 125x253 + LayoutBlockFlow {P} at (0,16) size 125x20 + LayoutText {#text} at (0,0) size 122x19 + text run at (0,0) width 122: "VerticalRL and RTL" + LayoutBlockFlow {DIV} at (0,52) size 125x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (31,170) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (26,124) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x14 + text run at (8,8) width 14: "A" + LayoutBlockFlow {DIV} at (16,71) size 55x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 34x21 + text run at (8,8) width 21: "A" + LayoutBlockFlow {DIV} at (6,10) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 46x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (265,253) size 175x253 + LayoutBlockFlow {P} at (0,16) size 175x20 + LayoutText {#text} at (0,0) size 121x19 + text run at (0,0) width 121: "VerticalRL and LTR" + LayoutBlockFlow {DIV} at (0,52) size 175x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (48,10) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (43,51) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x14 + text run at (8,8) width 14: "A" + LayoutBlockFlow {DIV} at (6,97) size 82x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (35,8) size 34x21 + text run at (35,8) width 21: "A" + LayoutBlockFlow {DIV} at (23,150) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 46x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (445,253) size 175x253 + LayoutBlockFlow {P} at (0,16) size 175x20 + LayoutText {#text} at (0,0) size 122x19 + text run at (0,0) width 122: "VerticalRL and RTL" + LayoutBlockFlow {DIV} at (0,52) size 175x201 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (48,170) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (43,124) size 43x32 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x14 + text run at (8,8) width 14: "A" + LayoutBlockFlow {DIV} at (6,71) size 82x39 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (35,8) size 34x21 + text run at (35,8) width 21: "A" + LayoutBlockFlow {DIV} at (23,10) size 68x47 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 46x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-styles-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-styles-vertical-lr-expected.txt index d8c48e05..b886a56 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-styles-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-styles-vertical-lr-expected.txt
@@ -12,8 +12,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,83) size 19x4 - text run at (71,83) width 4: " " + LayoutText {#text} at (166,83) size 19x4 + text run at (166,83) width 4: " " LayoutBlockFlow {DIV} at (0,87) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -22,8 +22,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,170) size 19x4 - text run at (71,170) width 4: " " + LayoutText {#text} at (166,170) size 19x4 + text run at (166,170) width 4: " " LayoutBlockFlow {DIV} at (0,174) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -32,8 +32,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,257) size 19x4 - text run at (71,257) width 4: " " + LayoutText {#text} at (166,257) size 19x4 + text run at (166,257) width 4: " " LayoutBlockFlow {DIV} at (0,261) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -42,8 +42,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,344) size 19x4 - text run at (71,344) width 4: " " + LayoutText {#text} at (166,344) size 19x4 + text run at (166,344) width 4: " " LayoutBlockFlow {DIV} at (0,348) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -52,8 +52,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,431) size 19x4 - text run at (71,431) width 4: " " + LayoutText {#text} at (166,431) size 19x4 + text run at (166,431) width 4: " " LayoutBlockFlow {DIV} at (0,435) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px double #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -72,8 +72,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,83) size 19x4 - text run at (71,83) width 4: " " + LayoutText {#text} at (166,83) size 19x4 + text run at (166,83) width 4: " " LayoutBlockFlow {DIV} at (0,87) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -82,8 +82,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,170) size 19x4 - text run at (71,170) width 4: " " + LayoutText {#text} at (166,170) size 19x4 + text run at (166,170) width 4: " " LayoutBlockFlow {DIV} at (0,174) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -92,8 +92,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,257) size 19x4 - text run at (71,257) width 4: " " + LayoutText {#text} at (166,257) size 19x4 + text run at (166,257) width 4: " " LayoutBlockFlow {DIV} at (0,261) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -102,8 +102,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,344) size 19x4 - text run at (71,344) width 4: " " + LayoutText {#text} at (166,344) size 19x4 + text run at (166,344) width 4: " " LayoutBlockFlow {DIV} at (0,348) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)] LayoutText {#text} at (27,35) size 73x48 @@ -112,8 +112,8 @@ LayoutText {#text} at (155,0) size 73x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,431) size 19x4 - text run at (71,431) width 4: " " + LayoutText {#text} at (166,431) size 19x4 + text run at (166,431) width 4: " " LayoutBlockFlow {DIV} at (0,435) size 256x83 LayoutInline {SPAN} at (0,0) size 241x83 [bgcolor=#DDDDDD] [border: (20px double #808080)] LayoutText {#text} at (27,35) size 73x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/background-leakage-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/background-leakage-transforms-expected.txt index 5eb6c8d..28f4756 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/background-leakage-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/backgrounds/background-leakage-transforms-expected.txt
@@ -44,8 +44,8 @@ text run at (2,122) width 4: " " LayoutBlockFlow {DIV} at (16,136) size 110x100 [bgcolor=#000000] [border: (20px double #FFFFFF)] LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (128,268) size 18x4 - text run at (128,268) width 4: " " + LayoutText {#text} at (12,268) size 18x4 + text run at (12,268) width 4: " " LayoutBlockFlow {DIV} at (10,282) size 138x248 [bgcolor=#808080] LayoutBlockFlow {DIV} at (16,12) size 110x100 [bgcolor=#FFFFFF] [border: (20px solid #0000FF7F)] LayoutText {#text} at (2,122) size 18x4
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/baseline-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/baseline-vertical-expected.png new file mode 100644 index 0000000..0abb2be --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/baseline-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/baseline-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/baseline-vertical-expected.txt new file mode 100644 index 0000000..d5994e1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/inline-block/baseline-vertical-expected.txt
@@ -0,0 +1,155 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x503 + LayoutBlockFlow {HTML} at (0,0) size 800x503.38 + LayoutBlockFlow {BODY} at (0,0) size 800x251.69 + LayoutBlockFlow (floating) {DIV} at (5,0) size 130.05x251.69 + LayoutBlockFlow {P} at (0,16) size 130.05x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalLR and LTR" + LayoutBlockFlow {DIV} at (0,50) size 125x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (19,10) size 34x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 14x9 + text run at (12,8) width 9: "A" + LayoutBlockFlow {DIV} at (17,50.67) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 23x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (14,97.13) size 56x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 36x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (12,150.80) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 46x29 + text run at (12,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (140.05,0) size 130.56x251.69 + LayoutBlockFlow {P} at (0,16) size 130.56x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalLR and RTL" + LayoutBR {BR} at (130,0) size 1x18 + LayoutBlockFlow {DIV} at (0,50) size 125x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (19,171.02) size 34x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 14x9 + text run at (12,8) width 9: "A" + LayoutBlockFlow {DIV} at (17,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 23x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (14,70.89) size 56x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 36x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (12,10) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 46x29 + text run at (12,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (275.61,0) size 175x251.69 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalLR and LTR" + LayoutBlockFlow {DIV} at (0,50) size 175x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (12,10) size 56x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (34,8) size 14x9 + text run at (34,8) width 9: "A" + LayoutBlockFlow {DIV} at (32,50.67) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 23x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (29,97.13) size 83x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 36x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (27,150.80) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 46x29 + text run at (12,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (455.61,0) size 175x251.69 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalLR and RTL" + LayoutBlockFlow {DIV} at (0,50) size 175x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (12,171.02) size 56x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (34,8) size 14x9 + text run at (34,8) width 9: "A" + LayoutBlockFlow {DIV} at (32,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 23x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (29,70.89) size 83x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 36x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (27,10) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 46x29 + text run at (12,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBR {BR} at (630,0) size 1x18 + LayoutBlockFlow (floating) {DIV} at (5,251.69) size 130.05x251.69 + LayoutBlockFlow {P} at (0,16) size 130.05x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalRL and LTR" + LayoutBlockFlow {DIV} at (0,50) size 125x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (31,10) size 34x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 14x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (24,50.67) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 23x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (14,97.13) size 56x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 36x22 + text run at (8,8) width 22: "A" + LayoutBlockFlow {DIV} at (6,150.80) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 46x29 + text run at (8,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (140.05,251.69) size 130.56x251.69 + LayoutBlockFlow {P} at (0,16) size 130.56x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalRL and RTL" + LayoutBlockFlow {DIV} at (0,50) size 125x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (31,171.02) size 34x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 14x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (24,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 23x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (14,70.89) size 56x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 36x22 + text run at (8,8) width 22: "A" + LayoutBlockFlow {DIV} at (6,10) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 46x29 + text run at (8,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (275.61,251.69) size 175x251.69 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalRL and LTR" + LayoutBlockFlow {DIV} at (0,50) size 175x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (50,10) size 56x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 14x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (43,50.67) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 23x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (6,97.13) size 83x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (35,8) size 36x22 + text run at (35,8) width 22: "A" + LayoutBlockFlow {DIV} at (25,150.80) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 46x29 + text run at (8,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (455.61,251.69) size 175x251.69 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x18 + text run at (0,0) width 131: "VerticalRL and RTL" + LayoutBlockFlow {DIV} at (0,50) size 175x201.69 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (50,171.02) size 56x26.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 14x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (43,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 23x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (6,70.89) size 83x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (35,8) size 36x22 + text run at (35,8) width 22: "A" + LayoutBlockFlow {DIV} at (25,10) size 66x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 46x29 + text run at (8,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-expected.txt index 24c025c..9359e256 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-expected.txt
@@ -12,8 +12,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,83) size 18x4 - text run at (71,83) width 4: " " + LayoutText {#text} at (167,83) size 18x4 + text run at (167,83) width 4: " " LayoutBlockFlow {DIV} at (0,87) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -22,8 +22,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,170) size 18x4 - text run at (71,170) width 4: " " + LayoutText {#text} at (167,170) size 18x4 + text run at (167,170) width 4: " " LayoutBlockFlow {DIV} at (0,174) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -32,8 +32,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,257) size 18x4 - text run at (71,257) width 4: " " + LayoutText {#text} at (167,257) size 18x4 + text run at (167,257) width 4: " " LayoutBlockFlow {DIV} at (0,261) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -42,8 +42,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,344) size 18x4 - text run at (71,344) width 4: " " + LayoutText {#text} at (167,344) size 18x4 + text run at (167,344) width 4: " " LayoutBlockFlow {DIV} at (0,348) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -52,8 +52,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,431) size 18x4 - text run at (71,431) width 4: " " + LayoutText {#text} at (167,431) size 18x4 + text run at (167,431) width 4: " " LayoutBlockFlow {DIV} at (0,435) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px double #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -72,8 +72,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,83) size 18x4 - text run at (71,83) width 4: " " + LayoutText {#text} at (167,83) size 18x4 + text run at (167,83) width 4: " " LayoutBlockFlow {DIV} at (0,87) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -82,8 +82,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,170) size 18x4 - text run at (71,170) width 4: " " + LayoutText {#text} at (167,170) size 18x4 + text run at (167,170) width 4: " " LayoutBlockFlow {DIV} at (0,174) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -92,8 +92,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,257) size 18x4 - text run at (71,257) width 4: " " + LayoutText {#text} at (167,257) size 18x4 + text run at (167,257) width 4: " " LayoutBlockFlow {DIV} at (0,261) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -102,8 +102,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,344) size 18x4 - text run at (71,344) width 4: " " + LayoutText {#text} at (167,344) size 18x4 + text run at (167,344) width 4: " " LayoutBlockFlow {DIV} at (0,348) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)] LayoutText {#text} at (27,35) size 74x48 @@ -112,8 +112,8 @@ LayoutText {#text} at (155,0) size 74x48 text run at (155,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (71,431) size 18x4 - text run at (71,431) width 4: " " + LayoutText {#text} at (167,431) size 18x4 + text run at (167,431) width 4: " " LayoutBlockFlow {DIV} at (0,435) size 256x83 LayoutInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px double #808080)] LayoutText {#text} at (27,35) size 74x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/background-leakage-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/background-leakage-transforms-expected.txt index 33fd121e..1db8f0b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/background-leakage-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/backgrounds/background-leakage-transforms-expected.txt
@@ -44,8 +44,8 @@ text run at (2,122) width 4: " " LayoutBlockFlow {DIV} at (15,136) size 110x100 [bgcolor=#000000] [border: (20px double #FFFFFF)] LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (129,268) size 17x4 - text run at (129,268) width 4: " " + LayoutText {#text} at (12,268) size 17x4 + text run at (12,268) width 4: " " LayoutBlockFlow {DIV} at (10,282) size 138x248 [bgcolor=#808080] LayoutBlockFlow {DIV} at (15,12) size 110x100 [bgcolor=#FFFFFF] [border: (20px solid #0000FF7F)] LayoutText {#text} at (2,122) size 17x4
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/baseline-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/baseline-vertical-expected.png new file mode 100644 index 0000000..7e7b83e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/baseline-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/baseline-vertical-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/baseline-vertical-expected.txt new file mode 100644 index 0000000..580a7bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/fast/inline-block/baseline-vertical-expected.txt
@@ -0,0 +1,155 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x504 + LayoutBlockFlow {HTML} at (0,0) size 800x504.03 + LayoutBlockFlow {BODY} at (0,0) size 800x252.02 + LayoutBlockFlow (floating) {DIV} at (5,0) size 130.05x252.02 + LayoutBlockFlow {P} at (0,16) size 130.05x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalLR and LTR" + LayoutBlockFlow {DIV} at (0,50) size 125x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (19,10) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 15x9 + text run at (12,8) width 9: "A" + LayoutBlockFlow {DIV} at (18,51) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (16,97.45) size 54x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 33x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (12,151.13) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 45x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (140.05,0) size 130.56x252.02 + LayoutBlockFlow {P} at (0,16) size 130.56x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalLR and RTL" + LayoutBR {BR} at (130,0) size 1x17 + LayoutBlockFlow {DIV} at (0,50) size 125x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (19,171.02) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 15x9 + text run at (12,8) width 9: "A" + LayoutBlockFlow {DIV} at (18,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (16,70.89) size 54x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 33x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (12,10) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 45x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (275.61,0) size 175x252.02 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalLR and LTR" + LayoutBlockFlow {DIV} at (0,50) size 175x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (12,10) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (34,8) size 15x9 + text run at (34,8) width 9: "A" + LayoutBlockFlow {DIV} at (33,51) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (31,97.45) size 81x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 33x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (27,151.13) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 45x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (455.61,0) size 175x252.02 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalLR and RTL" + LayoutBlockFlow {DIV} at (0,50) size 175x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (12,171.02) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (34,8) size 15x9 + text run at (34,8) width 9: "A" + LayoutBlockFlow {DIV} at (33,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 22x15 + text run at (12,8) width 15: "A" + LayoutBlockFlow {DIV} at (31,70.89) size 81x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (12,8) size 33x22 + text run at (12,8) width 22: "A" + LayoutBlockFlow {DIV} at (27,10) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (13,8) size 45x29 + text run at (13,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutBR {BR} at (630,0) size 1x17 + LayoutBlockFlow (floating) {DIV} at (5,252.02) size 130.05x252.02 + LayoutBlockFlow {P} at (0,16) size 130.05x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalRL and LTR" + LayoutBlockFlow {DIV} at (0,50) size 125x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (31,10) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (25,51) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (16,97.45) size 54x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 33x22 + text run at (8,8) width 22: "A" + LayoutBlockFlow {DIV} at (6,151.13) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 45x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (140.05,252.02) size 130.56x252.02 + LayoutBlockFlow {P} at (0,16) size 130.56x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalRL and RTL" + LayoutBlockFlow {DIV} at (0,50) size 125x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (31,171.02) size 36x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (25,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (16,70.89) size 54x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 33x22 + text run at (8,8) width 22: "A" + LayoutBlockFlow {DIV} at (6,10) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 45x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (275.61,252.02) size 175x252.02 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalRL and LTR" + LayoutBlockFlow {DIV} at (0,50) size 175x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (48,10) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (42,51) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (6,97.45) size 81x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (35,8) size 33x22 + text run at (35,8) width 22: "A" + LayoutBlockFlow {DIV} at (23,151.13) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 45x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (floating) {DIV} at (455.61,252.02) size 175x252.02 + LayoutBlockFlow {P} at (0,16) size 175x18 + LayoutText {#text} at (0,0) size 131x17 + text run at (0,0) width 131: "VerticalRL and RTL" + LayoutBlockFlow {DIV} at (0,50) size 175x202.02 [bgcolor=#808080] + LayoutBlockFlow {DIV} at (48,171.02) size 58x27 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 15x9 + text run at (8,8) width 9: "A" + LayoutBlockFlow {DIV} at (42,124.56) size 43x32.45 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (8,8) size 22x15 + text run at (8,8) width 15: "A" + LayoutBlockFlow {DIV} at (6,70.89) size 81x39.67 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (35,8) size 33x22 + text run at (35,8) width 22: "A" + LayoutBlockFlow {DIV} at (23,10) size 67x46.89 [border: (2px solid #000000) (5px solid #000000) (3px solid #000000) (4px solid #000000)] + LayoutText {#text} at (9,8) size 45x29 + text run at (9,8) width 29: "A" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/border-styles-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/border-styles-vertical-lr-expected.txt index e75de04..fdcd1a1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/border-styles-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/border-styles-vertical-lr-expected.txt
@@ -12,8 +12,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,83) size 17x4 - text run at (72,83) width 4: " " + LayoutText {#text} at (167,83) size 17x4 + text run at (167,83) width 4: " " LayoutBlockFlow {DIV} at (0,87) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -22,8 +22,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,170) size 17x4 - text run at (72,170) width 4: " " + LayoutText {#text} at (167,170) size 17x4 + text run at (167,170) width 4: " " LayoutBlockFlow {DIV} at (0,174) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -32,8 +32,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,257) size 17x4 - text run at (72,257) width 4: " " + LayoutText {#text} at (167,257) size 17x4 + text run at (167,257) width 4: " " LayoutBlockFlow {DIV} at (0,261) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -42,8 +42,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,344) size 17x4 - text run at (72,344) width 4: " " + LayoutText {#text} at (167,344) size 17x4 + text run at (167,344) width 4: " " LayoutBlockFlow {DIV} at (0,348) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -52,8 +52,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,431) size 17x4 - text run at (72,431) width 4: " " + LayoutText {#text} at (167,431) size 17x4 + text run at (167,431) width 4: " " LayoutBlockFlow {DIV} at (0,435) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px double #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -72,8 +72,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,83) size 17x4 - text run at (72,83) width 4: " " + LayoutText {#text} at (167,83) size 17x4 + text run at (167,83) width 4: " " LayoutBlockFlow {DIV} at (0,87) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -82,8 +82,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,170) size 17x4 - text run at (72,170) width 4: " " + LayoutText {#text} at (167,170) size 17x4 + text run at (167,170) width 4: " " LayoutBlockFlow {DIV} at (0,174) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -92,8 +92,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,257) size 17x4 - text run at (72,257) width 4: " " + LayoutText {#text} at (167,257) size 17x4 + text run at (167,257) width 4: " " LayoutBlockFlow {DIV} at (0,261) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -102,8 +102,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,344) size 17x4 - text run at (72,344) width 4: " " + LayoutText {#text} at (167,344) size 17x4 + text run at (167,344) width 4: " " LayoutBlockFlow {DIV} at (0,348) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)] LayoutText {#text} at (28,35) size 71x48 @@ -112,8 +112,8 @@ LayoutText {#text} at (156,0) size 71x48 text run at (156,0) width 48: " " LayoutText {#text} at (0,0) size 0x0 - LayoutText {#text} at (72,431) size 17x4 - text run at (72,431) width 4: " " + LayoutText {#text} at (167,431) size 17x4 + text run at (167,431) width 4: " " LayoutBlockFlow {DIV} at (0,435) size 256x83 LayoutInline {SPAN} at (0,0) size 239x83 [bgcolor=#DDDDDD] [border: (20px double #808080)] LayoutText {#text} at (28,35) size 71x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.png index ae1940ef..e276e67 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt index 05db3e1..25d3bb79 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt
@@ -3,8 +3,8 @@ layer at (0,0) size 115x600 LayoutBlockFlow {HTML} at (0,0) size 115x600 [border: (10px solid #800000)] LayoutBlockFlow {BODY} at (18,18) size 79x564 - LayoutText {#text} at (13,0) size 45x220 - text run at (13,0) width 220: "\x{653B}\x{6BBB} \x{6A5F}\x{52D5}\x{968A} " + LayoutText {#text} at (12,0) size 45x220 + text run at (12,0) width 220: "\x{653B}\x{6BBB} \x{6A5F}\x{52D5}\x{968A} " LayoutRuby (inline) {RUBY} at (0,0) size 45x200 LayoutRubyRun (anonymous) at (0,220) size 70x80 LayoutRubyText {RT} at (50,0) size 36x80
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.png b/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.png index 139d547..1d70659 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt index 5f7e8b34..fdf4f835 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win7/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt
@@ -3,8 +3,8 @@ layer at (0,0) size 110x600 LayoutBlockFlow {HTML} at (0,0) size 110x600 [border: (10px solid #800000)] LayoutBlockFlow {BODY} at (18,18) size 74x564 - LayoutText {#text} at (8,0) size 45x220 - text run at (8,0) width 220: "\x{653B}\x{6BBB} \x{6A5F}\x{52D5}\x{968A} " + LayoutText {#text} at (7,0) size 45x220 + text run at (7,0) width 220: "\x{653B}\x{6BBB} \x{6A5F}\x{52D5}\x{968A} " LayoutRuby (inline) {RUBY} at (0,0) size 45x200 LayoutRubyRun (anonymous) at (0,220) size 60x80 LayoutRubyText {RT} at (48,0) size 30x80
diff --git a/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/README.txt b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/README.txt new file mode 100644 index 0000000..ea39d27d --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/README.txt
@@ -0,0 +1 @@ +Tests that depend on --enable-features=AsmJsToWebAssembly
diff --git a/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/asm-warnings-expected.txt b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/asm-warnings-expected.txt new file mode 100644 index 0000000..c9915986 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/asm-warnings-expected.txt
@@ -0,0 +1,3 @@ +CONSOLE WARNING: line 13: Invalid asm.js: Invalid type annotation - forbidden literal. +CONSOLE WARNING: line 5: Invalid asm.js: Invalid initializer for foreign import - unrecognized annotation. +
diff --git a/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/asm-warnings.html b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/asm-warnings.html new file mode 100644 index 0000000..9eb2eae --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/asm-warnings.html
@@ -0,0 +1,27 @@ +<html> +<body> +<script> +if (window.testRunner) { + testRunner.dumpAsText(); + testRunner.dumpChildFramesAsText(); + testRunner.setDumpConsoleMessages(true); + testRunner.waitUntilDone(); +} + +function ModuleBadAsm() { + "use asm"; + var x = "hi"; + function foo() {} + return {bar: foo}; +} +ModuleBadAsm(); + +var w = new Worker('worker.js'); +w.onmessage = function(e) { + testRunner.notifyDone(); +}; +w.postMessage({name: 'yo'}); + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/worker.js b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/worker.js new file mode 100644 index 0000000..69bb4d2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/enable_asmjs/http/tests/asmjs/worker.js
@@ -0,0 +1,11 @@ +self.onmessage = function(e) { + function ModuleBadAsm() { + "use asm"; + var x = 1; + var y = x + 1; + function foo() {} + return {bar: foo}; + } + ModuleBadAsm(); + self.postMessage({name: 'dude'}); +};
diff --git a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 6f4b14d..2c6f8bd 100644 --- a/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/service-worker-navigation-preload/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -20,6 +20,10 @@ method getBudget method getCost method reserve +interface BudgetState + getter budgetAt + getter time + method constructor interface ByteLengthQueuingStrategy method constructor method size
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt index 4d5b2bd..ab93b7b5 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -31,6 +31,11 @@ [Worker] method getBudget [Worker] method getCost [Worker] method reserve +[Worker] interface BudgetState +[Worker] attribute @@toStringTag +[Worker] getter budgetAt +[Worker] getter time +[Worker] method constructor [Worker] interface ByteLengthQueuingStrategy [Worker] method constructor [Worker] method size
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt index b96751b..eb0a5e3 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -31,6 +31,11 @@ [Worker] method getBudget [Worker] method getCost [Worker] method reserve +[Worker] interface BudgetState +[Worker] attribute @@toStringTag +[Worker] getter budgetAt +[Worker] getter time +[Worker] method constructor [Worker] interface ByteLengthQueuingStrategy [Worker] method constructor [Worker] method size
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp index 183a6f5..aace7e2 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.cpp
@@ -61,7 +61,17 @@ visitor->trace(m_code); } -ScheduledAction::~ScheduledAction() {} +ScheduledAction::~ScheduledAction() { + // Verify that owning DOMTimer has eagerly disposed. + DCHECK(m_info.IsEmpty()); +} + +void ScheduledAction::dispose() { + m_code.dispose(); + m_info.Clear(); + m_function.clear(); + m_scriptState.clear(); +} void ScheduledAction::execute(ExecutionContext* context) { if (context->isDocument()) {
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h index 28a80e4..b65d36ee 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScheduledAction.h
@@ -56,6 +56,8 @@ static ScheduledAction* create(ScriptState*, const String& handler); ~ScheduledAction(); + void dispose(); + DECLARE_TRACE(); void execute(ExecutionContext*);
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp index 9c7f78f..ef9de04 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.cpp
@@ -36,6 +36,13 @@ ScriptSourceCode::~ScriptSourceCode() {} +void ScriptSourceCode::dispose() { + m_source = String(); + m_resource = nullptr; + m_streamer = nullptr; + m_url = KURL(); +} + DEFINE_TRACE(ScriptSourceCode) { visitor->trace(m_resource); visitor->trace(m_streamer);
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h index 3af0431..15651270 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptSourceCode.h
@@ -56,6 +56,7 @@ ScriptSourceCode(ScriptStreamer*, ScriptResource*); ~ScriptSourceCode(); + void dispose(); DECLARE_TRACE(); bool isEmpty() const { return m_source.isEmpty(); } @@ -65,13 +66,13 @@ bool isNull() const { return m_source.isNull(); } const String& source() const { return m_source; } - ScriptResource* resource() const { return m_resource.get(); } + ScriptResource* resource() const { return m_resource; } const KURL& url() const; int startLine() const { return m_startPosition.m_line.oneBasedInt(); } const TextPosition& startPosition() const { return m_startPosition; } String sourceMapUrl() const; - ScriptStreamer* streamer() const { return m_streamer.get(); } + ScriptStreamer* streamer() const { return m_streamer; } private: void treatNullSourceAsEmpty();
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp index 20f8c10..c0ed0c3 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp
@@ -48,6 +48,7 @@ #include "core/frame/LocalDOMWindow.h" #include "core/frame/LocalFrame.h" #include "core/frame/csp/ContentSecurityPolicy.h" +#include "core/inspector/ConsoleMessage.h" #include "core/inspector/MainThreadDebugger.h" #include "core/workers/WorkerGlobalScope.h" #include "platform/EventDispatchForbiddenScope.h" @@ -118,6 +119,32 @@ return emptyString(); } +namespace { +MessageLevel MessageLevelFromNonFatalErrorLevel(int errorLevel) { + MessageLevel level = ErrorMessageLevel; + switch (errorLevel) { + case v8::Isolate::kMessageLog: + level = LogMessageLevel; + break; + case v8::Isolate::kMessageWarning: + level = WarningMessageLevel; + break; + case v8::Isolate::kMessageDebug: + level = DebugMessageLevel; + break; + case v8::Isolate::kMessageInfo: + level = InfoMessageLevel; + break; + case v8::Isolate::kMessageError: + level = InfoMessageLevel; + break; + default: + NOTREACHED(); + } + return level; +} +} // namespace + void V8Initializer::messageHandlerInMainThread(v8::Local<v8::Message> message, v8::Local<v8::Value> data) { ASSERT(isMainThread()); @@ -135,6 +162,14 @@ std::unique_ptr<SourceLocation> location = SourceLocation::fromMessage(isolate, message, context); + if (message->ErrorLevel() != v8::Isolate::kMessageError) { + context->addConsoleMessage(ConsoleMessage::create( + JSMessageSource, + MessageLevelFromNonFatalErrorLevel(message->ErrorLevel()), + toCoreStringWithNullCheck(message->Get()), std::move(location))); + return; + } + AccessControlStatus accessControlStatus = NotSharableCrossOrigin; if (message->IsOpaque()) accessControlStatus = OpaqueResource; @@ -374,7 +409,11 @@ isolate->SetOOMErrorHandler(reportOOMErrorInMainThread); isolate->SetFatalErrorHandler(reportFatalErrorInMainThread); - isolate->AddMessageListener(messageHandlerInMainThread); + isolate->AddMessageListenerWithErrorLevel( + messageHandlerInMainThread, + v8::Isolate::kMessageError | v8::Isolate::kMessageWarning | + v8::Isolate::kMessageInfo | v8::Isolate::kMessageDebug | + v8::Isolate::kMessageLog); isolate->SetFailedAccessCheckCallbackFunction( failedAccessCheckCallbackInMainThread); isolate->SetAllowCodeGenerationFromStringsCallback( @@ -444,6 +483,15 @@ ExecutionContext* context = scriptState->getExecutionContext(); std::unique_ptr<SourceLocation> location = SourceLocation::fromMessage(isolate, message, context); + + if (message->ErrorLevel() != v8::Isolate::kMessageError) { + context->addConsoleMessage(ConsoleMessage::create( + JSMessageSource, + MessageLevelFromNonFatalErrorLevel(message->ErrorLevel()), + toCoreStringWithNullCheck(message->Get()), std::move(location))); + return; + } + ErrorEvent* event = ErrorEvent::create(toCoreStringWithNullCheck(message->Get()), std::move(location), &scriptState->world()); @@ -476,7 +524,11 @@ void V8Initializer::initializeWorker(v8::Isolate* isolate) { initializeV8Common(isolate); - isolate->AddMessageListener(messageHandlerInWorker); + isolate->AddMessageListenerWithErrorLevel( + messageHandlerInWorker, + v8::Isolate::kMessageError | v8::Isolate::kMessageWarning | + v8::Isolate::kMessageInfo | v8::Isolate::kMessageDebug | + v8::Isolate::kMessageLog); isolate->SetFatalErrorHandler(reportFatalErrorInWorker); uint32_t here;
diff --git a/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py b/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py index 5868b00..41a927f 100644 --- a/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py +++ b/third_party/WebKit/Source/bindings/scripts/code_generator_web_module.py
@@ -31,15 +31,10 @@ WEB_MODULE_IDL_ATTRIBUTE = 'WebModuleAPI' -def includes_for_type(idl_type): - # TODO(dglazkov): Make this actually work. - name = idl_type.preprocessed_type.base_type - return set([name]) - - def interface_context(idl_interface): builder = InterfaceContextBuilder(MODULE_PYNAME) builder.set_class_name(idl_interface.name) + builder.set_inheritance(idl_interface.parent) for idl_attribute in idl_interface.attributes: builder.add_attribute(idl_attribute) @@ -57,24 +52,40 @@ def set_class_name(self, class_name): self.result['class_name'] = class_name + def set_inheritance(self, base_interface): + if base_interface is None: + return + self.result['inherits_expression'] = ' : public %s' % base_interface + self._ensure_set('cpp_includes').update( + self._includes_for_type(base_interface)) + def _ensure_set(self, name): return self.result.setdefault(name, set()) def _ensure_list(self, name): return self.result.setdefault(name, []) + def _includes_for_type(self, idl_type): + # TODO(dglazkov): Make this actually work. + name = idl_type + return set([name]) + + def _get_return_type(self, idl_definition): + return idl_definition.idl_type.preprocessed_type.base_type + def add_attribute(self, idl_attribute): self._ensure_list('attributes').append( self.create_attribute(idl_attribute)) self._ensure_set('cpp_includes').update( - includes_for_type(idl_attribute.idl_type)) + self._includes_for_type(self._get_return_type(idl_attribute))) def add_operation(self, idl_operation): - if idl_operation.name: - self._ensure_list('methods').append( - self.create_method(idl_operation)) - self._ensure_set('cpp_includes').update( - includes_for_type(idl_operation.idl_type)) + if not idl_operation.name: + return + self._ensure_list('methods').append( + self.create_method(idl_operation)) + self._ensure_set('cpp_includes').update( + self._includes_for_type(self._get_return_type(idl_operation))) def create_method(self, idl_operation): name = idl_operation.name
diff --git a/third_party/WebKit/Source/bindings/scripts/code_generator_web_module_test.py b/third_party/WebKit/Source/bindings/scripts/code_generator_web_module_test.py index 28c81af..6a0e23c 100644 --- a/third_party/WebKit/Source/bindings/scripts/code_generator_web_module_test.py +++ b/third_party/WebKit/Source/bindings/scripts/code_generator_web_module_test.py
@@ -11,6 +11,8 @@ from code_generator_web_module import InterfaceContextBuilder +# TODO(dglazkov): Convert to use actual objects, not stubs. +# See http://crbug.com/673214 for more details. class IdlTestingHelper(object): """A collection of stub makers and helper utils to make testing code generation easy.""" @@ -52,6 +54,20 @@ 'class_name': 'foo', }, builder.build()) + def test_set_inheritance(self): + builder = InterfaceContextBuilder('test') + builder.set_inheritance('foo') + self.assertEqual({ + 'code_generator': 'test', + 'inherits_expression': ' : public foo', + 'cpp_includes': set(['foo']), + }, builder.build()) + + builder = InterfaceContextBuilder('test') + builder.set_inheritance(None) + self.assertEqual({'code_generator': 'test'}, builder.build()) + + def test_add_attribute(self): helper = IdlTestingHelper() builder = InterfaceContextBuilder('test')
diff --git a/third_party/WebKit/Source/bindings/templates/web_module_interface.h.tmpl b/third_party/WebKit/Source/bindings/templates/web_module_interface.h.tmpl index 199c7b3..4ffb197 100644 --- a/third_party/WebKit/Source/bindings/templates/web_module_interface.h.tmpl +++ b/third_party/WebKit/Source/bindings/templates/web_module_interface.h.tmpl
@@ -13,7 +13,7 @@ namespace blink { namespace api { -class {{class_name}} { +class {{class_name}}{{inherits_expression}} { };
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn index 9157c76..e32d036 100644 --- a/third_party/WebKit/Source/core/BUILD.gn +++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -1176,6 +1176,7 @@ "html/parser/HTMLTreeBuilderSimulatorTest.cpp", "html/parser/HTMLViewSourceParserTest.cpp", "html/parser/TextResourceDecoderTest.cpp", + "html/shadow/MediaControlsOrientationLockDelegateTest.cpp", "html/shadow/MediaControlsTest.cpp", "html/track/TextTrackListTest.cpp", "html/track/vtt/BufferedLineReaderTest.cpp",
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index ed0d0860..4ed7156d 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -1519,7 +1519,7 @@ // The visibility of the document is inherited from the visibility of the // page. If there is no page associated with the document, we will assume // that the page is hidden, as specified by the spec: - // http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#dom-document-hidden + // https://w3c.github.io/page-visibility/#hidden-attribute if (!m_frame || !m_frame->page()) return PageVisibilityStateHidden; // While visibilitychange is being dispatched during unloading it is
diff --git a/third_party/WebKit/Source/core/dom/Document.idl b/third_party/WebKit/Source/core/dom/Document.idl index 003931b8..9c10395 100644 --- a/third_party/WebKit/Source/core/dom/Document.idl +++ b/third_party/WebKit/Source/core/dom/Document.idl
@@ -149,7 +149,7 @@ readonly attribute Element? scrollingElement; // Pointer Lock - // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-document-interface + // https://w3c.github.io/pointerlock/#extensions-to-the-document-interface attribute EventHandler onpointerlockchange; attribute EventHandler onpointerlockerror; [MeasureAs=DocumentExitPointerLock] void exitPointerLock();
diff --git a/third_party/WebKit/Source/core/dom/Element.idl b/third_party/WebKit/Source/core/dom/Element.idl index a17419e1..544f15a 100644 --- a/third_party/WebKit/Source/core/dom/Element.idl +++ b/third_party/WebKit/Source/core/dom/Element.idl
@@ -83,13 +83,13 @@ [ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement? assignedSlot; // DOM Parsing and Serialization - // https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#extensions-to-the-element-interface + // https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface [TreatNullAs=NullString, CEReactions, CustomElementCallbacks, RaisesException=Setter] attribute DOMString innerHTML; [TreatNullAs=NullString, CEReactions, CustomElementCallbacks, RaisesException=Setter] attribute DOMString outerHTML; [CEReactions, CustomElementCallbacks, RaisesException] void insertAdjacentHTML(DOMString position, DOMString text); // Pointer Lock - // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-element-interface + // https://w3c.github.io/pointerlock/#extensions-to-the-element-interface [MeasureAs=ElementRequestPointerLock] void requestPointerLock(); // CSSOM View Module
diff --git a/third_party/WebKit/Source/core/dom/Range.idl b/third_party/WebKit/Source/core/dom/Range.idl index b206cc73..d5a8567 100644 --- a/third_party/WebKit/Source/core/dom/Range.idl +++ b/third_party/WebKit/Source/core/dom/Range.idl
@@ -72,7 +72,7 @@ ClientRect getBoundingClientRect(); // DOM Parsing and Serialization - // https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#extensions-to-the-range-interface + // https://w3c.github.io/DOM-Parsing/#extensions-to-the-range-interface [NewObject, RaisesException, CEReactions, CustomElementCallbacks] DocumentFragment createContextualFragment(DOMString fragment); // Non-standard API
diff --git a/third_party/WebKit/Source/core/dom/TagCollection.cpp b/third_party/WebKit/Source/core/dom/TagCollection.cpp index 83ff54cfd..6700f625 100644 --- a/third_party/WebKit/Source/core/dom/TagCollection.cpp +++ b/third_party/WebKit/Source/core/dom/TagCollection.cpp
@@ -42,7 +42,7 @@ bool TagCollection::elementMatches(const Element& testNode) const { // Implements - // http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-getelementsbytagnamens + // https://dom.spec.whatwg.org/#concept-getelementsbytagnamens if (m_localName != starAtom && m_localName != testNode.localName()) return false;
diff --git a/third_party/WebKit/Source/core/editing/BUILD.gn b/third_party/WebKit/Source/core/editing/BUILD.gn index 8ff451f3..85a48ab 100644 --- a/third_party/WebKit/Source/core/editing/BUILD.gn +++ b/third_party/WebKit/Source/core/editing/BUILD.gn
@@ -179,6 +179,8 @@ "serializers/StyledMarkupSerializer.h", "serializers/TextOffset.cpp", "serializers/TextOffset.h", + "spellcheck/IdleSpellCheckCallback.cpp", + "spellcheck/IdleSpellCheckCallback.h", "spellcheck/SpellCheckRequester.cpp", "spellcheck/SpellCheckRequester.h", "spellcheck/SpellChecker.cpp",
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp b/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp new file mode 100644 index 0000000..bdab6eb0 --- /dev/null +++ b/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp
@@ -0,0 +1,159 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/editing/spellcheck/IdleSpellCheckCallback.h" + +#include "core/dom/IdleRequestOptions.h" +#include "core/editing/EditingUtilities.h" +#include "core/editing/FrameSelection.h" +#include "core/editing/VisibleSelection.h" +#include "core/editing/VisibleUnits.h" +#include "core/editing/commands/CompositeEditCommand.h" +#include "core/editing/commands/UndoStep.h" +#include "core/editing/iterators/BackwardsCharacterIterator.h" +#include "core/editing/iterators/CharacterIterator.h" +#include "core/editing/spellcheck/SpellCheckRequester.h" +#include "core/editing/spellcheck/SpellChecker.h" +#include "core/frame/FrameView.h" +#include "core/frame/LocalFrame.h" +#include "core/html/TextControlElement.h" +#include "core/layout/LayoutObject.h" +#include "platform/RuntimeEnabledFeatures.h" +#include "platform/tracing/TraceEvent.h" +#include "wtf/CurrentTime.h" + +namespace blink { + +namespace { + +const int kColdModeTimerIntervalMS = 1000; +const int kConsecutiveColdModeTimerIntervalMS = 200; +const int kRequestTimeoutMS = 200; + +} // namespace + +IdleSpellCheckCallback::~IdleSpellCheckCallback() {} + +DEFINE_TRACE(IdleSpellCheckCallback) { + visitor->trace(m_frame); + IdleRequestCallback::trace(visitor); +} + +IdleSpellCheckCallback* IdleSpellCheckCallback::create(LocalFrame& frame) { + return new IdleSpellCheckCallback(frame); +} + +IdleSpellCheckCallback::IdleSpellCheckCallback(LocalFrame& frame) + : m_state(State::kInactive), + m_frame(frame), + m_coldModeTimer(this, &IdleSpellCheckCallback::coldModeTimerFired) {} + +bool IdleSpellCheckCallback::isSpellCheckingEnabled() const { + // TODO(xiaochengh): decouple with SpellChecker. + return frame().spellChecker().isSpellCheckingEnabled(); +} + +void IdleSpellCheckCallback::requestInvocation() { + IdleRequestOptions options; + options.setTimeout(kRequestTimeoutMS); + frame().document()->requestIdleCallback(this, options); +} + +void IdleSpellCheckCallback::deactivate() { + m_state = State::kInactive; + if (m_coldModeTimer.isActive()) + m_coldModeTimer.stop(); +} + +void IdleSpellCheckCallback::setNeedsHotModeInvocation() { + if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) + return; + + if (!isSpellCheckingEnabled()) { + deactivate(); + return; + } + + if (m_state == State::kColdModeTimerStarted) { + DCHECK(m_coldModeTimer.isActive()); + m_coldModeTimer.stop(); + } + + if (m_state != State::kColdModeRequested) + requestInvocation(); + m_state = State::kHotModeRequested; +} + +void IdleSpellCheckCallback::setNeedsColdModeInvocation() { + if (!RuntimeEnabledFeatures::idleTimeSpellCheckingEnabled()) + return; + + if (!isSpellCheckingEnabled()) { + deactivate(); + return; + } + + if (m_state != State::kInactive && m_state != State::kInHotModeInvocation && + m_state != State::kInColdModeInvocation) + return; + + DCHECK(!m_coldModeTimer.isActive()); + int intervalMS = m_state == State::kInColdModeInvocation + ? kConsecutiveColdModeTimerIntervalMS + : kColdModeTimerIntervalMS; + m_coldModeTimer.startOneShot(intervalMS / 1000.0, BLINK_FROM_HERE); + m_state = State::kColdModeTimerStarted; +} + +void IdleSpellCheckCallback::coldModeTimerFired(TimerBase*) { + DCHECK_EQ(State::kColdModeTimerStarted, m_state); + + if (!isSpellCheckingEnabled()) { + deactivate(); + return; + } + + requestInvocation(); + m_state = State::kColdModeRequested; +} + +void IdleSpellCheckCallback::hotModeInvocation(IdleDeadline* deadline) { + // TODO(xiaochengh): Implementation. +} + +void IdleSpellCheckCallback::coldModeInvocation(IdleDeadline* deadline) { + // TODO(xiaochengh): Implementation. +} + +bool IdleSpellCheckCallback::coldModeFinishesFullDocument() const { + // TODO(xiaochengh): Implementation. + return true; +} + +void IdleSpellCheckCallback::handleEvent(IdleDeadline* deadline) { + DCHECK(frame().document()); + DCHECK(frame().document()->isActive()); + + if (!isSpellCheckingEnabled()) { + deactivate(); + return; + } + + if (m_state == State::kHotModeRequested) { + m_state = State::kInHotModeInvocation; + hotModeInvocation(deadline); + setNeedsColdModeInvocation(); + } else if (m_state == State::kColdModeRequested) { + m_state = State::kInColdModeInvocation; + coldModeInvocation(deadline); + if (coldModeFinishesFullDocument()) + m_state = State::kInactive; + else + setNeedsColdModeInvocation(); + } else { + NOTREACHED(); + } +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.h b/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.h new file mode 100644 index 0000000..105afad4 --- /dev/null +++ b/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.h
@@ -0,0 +1,76 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IdleSpellCheckCallback_h +#define IdleSpellCheckCallback_h + +#include "core/dom/IdleRequestCallback.h" +#include "core/frame/LocalFrame.h" +#include "platform/Timer.h" + +namespace blink { + +// Main class for the implementation of idle time spell checker. +class IdleSpellCheckCallback final : public IdleRequestCallback { + public: + // TODO(xiaochengh): Make each LocalFrame own an IdleSpellCheckCallback. + static IdleSpellCheckCallback* create(LocalFrame&); + ~IdleSpellCheckCallback() override; + + // Transit to HotModeRequested, if possible. Called by operations that need + // spell checker to follow up. + // TODO(xiaochengh): Add proper call sites. + void setNeedsHotModeInvocation(); + + // Transit to ColdModeTimerStarted, if possible. Sets up a timer, and requests + // cold mode invocation if no critical operation occurs before timer firing. + // TODO(xiaochengh): Add proper call sites. + void setNeedsColdModeInvocation(); + + // Cleans everything up and makes the callback inactive. Should be called when + // document is detached or spellchecking is globally disabled. + // TODO(xiaochengh): Add proper call sites. + void deactivate(); + + DECLARE_VIRTUAL_TRACE(); + + private: + explicit IdleSpellCheckCallback(LocalFrame&); + void handleEvent(IdleDeadline*) override; + + LocalFrame& frame() const { return *m_frame; } + + enum class State { + kInactive, + kHotModeRequested, + kInHotModeInvocation, + kColdModeTimerStarted, + kColdModeRequested, + kInColdModeInvocation + }; + + // Returns whether spell checking is globally enabled. + bool isSpellCheckingEnabled() const; + + // Calls requestIdleCallback with this IdleSpellCheckCallback. + void requestInvocation(); + + // Functions for hot mode. + void hotModeInvocation(IdleDeadline*); + + // Functions for cold mode. + void coldModeTimerFired(TimerBase*); + void coldModeInvocation(IdleDeadline*); + bool coldModeFinishesFullDocument() const; + + State m_state; + const Member<LocalFrame> m_frame; + + // TODO(xiaochengh): assign the timer to some proper task runner. + Timer<IdleSpellCheckCallback> m_coldModeTimer; +}; + +} // namespace blink + +#endif // IdleSpellCheckCallback_h
diff --git a/third_party/WebKit/Source/core/events/ClipboardEvent.idl b/third_party/WebKit/Source/core/events/ClipboardEvent.idl index 61a744c..108a451 100644 --- a/third_party/WebKit/Source/core/events/ClipboardEvent.idl +++ b/third_party/WebKit/Source/core/events/ClipboardEvent.idl
@@ -7,5 +7,5 @@ // TODO(foolip): There should be a constructor which takes a ClipboardEventInit // dictionary. crbug.com/496394 interface ClipboardEvent : Event { - readonly attribute DataTransfer clipboardData; + readonly attribute DataTransfer? clipboardData; };
diff --git a/third_party/WebKit/Source/core/events/DragEvent.idl b/third_party/WebKit/Source/core/events/DragEvent.idl index 53205ec..1ffc5be5 100644 --- a/third_party/WebKit/Source/core/events/DragEvent.idl +++ b/third_party/WebKit/Source/core/events/DragEvent.idl
@@ -7,5 +7,5 @@ [ Constructor(DOMString type, optional DragEventInit eventInitDict), ] interface DragEvent : MouseEvent { - [ImplementedAs=getDataTransfer] readonly attribute DataTransfer dataTransfer; + [ImplementedAs=getDataTransfer] readonly attribute DataTransfer? dataTransfer; };
diff --git a/third_party/WebKit/Source/core/events/MouseEvent.idl b/third_party/WebKit/Source/core/events/MouseEvent.idl index 70ef102..8cbea08 100644 --- a/third_party/WebKit/Source/core/events/MouseEvent.idl +++ b/third_party/WebKit/Source/core/events/MouseEvent.idl
@@ -62,7 +62,7 @@ [MeasureAs=MouseEventOffsetY] readonly attribute double offsetY; // Pointer Lock - // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-mouseevent-interface + // https://w3c.github.io/pointerlock/#extensions-to-the-mouseevent-interface [MeasureAs=MouseEventMovementX] readonly attribute long movementX; [MeasureAs=MouseEventMovementY] readonly attribute long movementY;
diff --git a/third_party/WebKit/Source/core/events/MouseEventInit.idl b/third_party/WebKit/Source/core/events/MouseEventInit.idl index 512d249..001c4ad5 100644 --- a/third_party/WebKit/Source/core/events/MouseEventInit.idl +++ b/third_party/WebKit/Source/core/events/MouseEventInit.idl
@@ -14,7 +14,7 @@ EventTarget? relatedTarget = null; // Pointer Lock - // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-mouseeventinit-dictionary + // https://w3c.github.io/pointerlock/#extensions-to-the-mouseeventinit-dictionary long movementX = 0; long movementY = 0;
diff --git a/third_party/WebKit/Source/core/frame/DOMTimer.cpp b/third_party/WebKit/Source/core/frame/DOMTimer.cpp index 0a4bc85..492982f4 100644 --- a/third_party/WebKit/Source/core/frame/DOMTimer.cpp +++ b/third_party/WebKit/Source/core/frame/DOMTimer.cpp
@@ -110,7 +110,10 @@ startRepeating(intervalMilliseconds, BLINK_FROM_HERE); } -DOMTimer::~DOMTimer() {} +DOMTimer::~DOMTimer() { + if (m_action) + m_action->dispose(); +} void DOMTimer::stop() { InspectorInstrumentation::asyncTaskCanceled(getExecutionContext(), this); @@ -118,6 +121,8 @@ // Need to release JS objects potentially protected by ScheduledAction // because they can form circular references back to the ExecutionContext // which will cause a memory leak. + if (m_action) + m_action->dispose(); m_action = nullptr; SuspendableTimer::stop(); } @@ -175,6 +180,8 @@ executionContext->timers()->setTimerNestingLevel(0); // Eagerly unregister as ExecutionContext observer. clearContext(); + // Eagerly clear out |action|'s resources. + action->dispose(); } WebTaskRunner* DOMTimer::timerTaskRunner() const {
diff --git a/third_party/WebKit/Source/core/frame/Settings.in b/third_party/WebKit/Source/core/frame/Settings.in index 8251456d..312470f 100644 --- a/third_party/WebKit/Source/core/frame/Settings.in +++ b/third_party/WebKit/Source/core/frame/Settings.in
@@ -284,13 +284,12 @@ # websites that do not set an explicit viewport description. deviceScaleAdjustment type=double, initial=1.0, invalidate=TextAutosizing -# This value indicates the maximum number of bytes a document is allowed -# to transmit in Beacons (via navigator.sendBeacon()) -- Beacons are -# intended to be smaller payloads transmitted as a page is unloading, not -# a general (one-way) network transmission API. -# The spec ( https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/Beacon/Overview.html ) -# does not proscribe an upper limit, but allows for it -- the underlying -# API will return 'false' in that case. +# This value indicates the maximum number of bytes a document is allowed to +# transmit in Beacons (via navigator.sendBeacon()) -- Beacons are intended to be +# smaller payloads transmitted as a page is unloading, not a general (one-way) +# network transmission API. The spec <https://w3c.github.io/beacon/> does not +# proscribe an upper limit, but allows for it -- the underlying API will return +# 'false' in that case. maxBeaconTransmission type=int, initial=65536 # This value is set to false if the platform does not support fullscreen.
diff --git a/third_party/WebKit/Source/core/frame/Window.idl b/third_party/WebKit/Source/core/frame/Window.idl index bb18c335..265cc88 100644 --- a/third_party/WebKit/Source/core/frame/Window.idl +++ b/third_party/WebKit/Source/core/frame/Window.idl
@@ -56,10 +56,10 @@ // other browsing contexts [Replaceable, CallWith=ScriptState, CrossOrigin] readonly attribute Window frames; [Replaceable, CrossOrigin] readonly attribute unsigned long length; - [Unforgeable, CrossOrigin] readonly attribute Window top; + [Unforgeable, CrossOrigin] readonly attribute Window? top; // FIXME: opener should be of type any. [CrossOrigin, Custom=Setter] attribute Window opener; - [Replaceable, CrossOrigin] readonly attribute Window parent; + [Replaceable, CrossOrigin] readonly attribute Window? parent; [CheckSecurity=ReturnValue, Custom=Getter] readonly attribute Element? frameElement; // FIXME: open() should have 4 optional arguments with defaults. [Custom] Window? open(DOMString url, DOMString target, optional DOMString features);
diff --git a/third_party/WebKit/Source/core/html/BUILD.gn b/third_party/WebKit/Source/core/html/BUILD.gn index 0935cdea..aba5cd5 100644 --- a/third_party/WebKit/Source/core/html/BUILD.gn +++ b/third_party/WebKit/Source/core/html/BUILD.gn
@@ -449,6 +449,8 @@ "shadow/MediaControls.h", "shadow/MediaControlsMediaEventListener.cpp", "shadow/MediaControlsMediaEventListener.h", + "shadow/MediaControlsOrientationLockDelegate.cpp", + "shadow/MediaControlsOrientationLockDelegate.h", "shadow/MediaControlsWindowEventListener.cpp", "shadow/MediaControlsWindowEventListener.h", "shadow/PickerIndicatorElement.cpp",
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.h b/third_party/WebKit/Source/core/html/HTMLMediaElement.h index 8cdaf2a9..bbece82bf 100644 --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.h +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.h
@@ -732,6 +732,7 @@ friend class MediaControlsTest; friend class HTMLMediaElementTest; friend class HTMLVideoElementTest; + friend class MediaControlsOrientationLockDelegateTest; Member<AutoplayUmaHelper> m_autoplayUmaHelper;
diff --git a/third_party/WebKit/Source/core/html/HTMLTagCollection.h b/third_party/WebKit/Source/core/html/HTMLTagCollection.h index 1b9a245..24f10c6 100644 --- a/third_party/WebKit/Source/core/html/HTMLTagCollection.h +++ b/third_party/WebKit/Source/core/html/HTMLTagCollection.h
@@ -58,7 +58,7 @@ inline bool HTMLTagCollection::elementMatches( const Element& testElement) const { // Implements - // http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-getelementsbytagname + // https://dom.spec.whatwg.org/#concept-getelementsbytagname if (m_localName != starAtom) { const AtomicString& localName = testElement.isHTMLElement() ? m_loweredLocalName : m_localName;
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp index 9f9e9f1..999194f 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp +++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp
@@ -89,6 +89,15 @@ return nullptr; } +ColorBehavior CanvasRenderingContext::colorBehaviorForMediaDrawnToCanvas() + const { + sk_sp<SkColorSpace> colorSpace = skColorSpace(); + if (colorSpace) { + return ColorBehavior::transformTo(std::move(colorSpace)); + } + return ColorBehavior::transformToGlobalTarget(); +} + SkColorType CanvasRenderingContext::colorType() const { switch (m_colorSpace) { case kLinearRGBCanvasColorSpace:
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h index 8467f96..e6a3d891 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h +++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h
@@ -31,6 +31,7 @@ #include "core/html/canvas/CanvasContextCreationAttributes.h" #include "core/layout/HitTestCanvasResult.h" #include "core/offscreencanvas/OffscreenCanvas.h" +#include "platform/graphics/ColorBehavior.h" #include "third_party/skia/include/core/SkColorSpace.h" #include "third_party/skia/include/core/SkImageInfo.h" #include "wtf/HashSet.h" @@ -87,6 +88,7 @@ WTF::String colorSpaceAsString() const; sk_sp<SkColorSpace> skColorSpace() const; SkColorType colorType() const; + ColorBehavior colorBehaviorForMediaDrawnToCanvas() const; virtual PassRefPtr<Image> getImage(AccelerationHint, SnapshotReason) const = 0;
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp index daade53bb..ded935a 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp +++ b/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
@@ -32,7 +32,9 @@ #include "core/events/MouseEvent.h" #include "core/frame/Settings.h" #include "core/html/HTMLMediaElement.h" +#include "core/html/HTMLVideoElement.h" #include "core/html/shadow/MediaControlsMediaEventListener.h" +#include "core/html/shadow/MediaControlsOrientationLockDelegate.h" #include "core/html/shadow/MediaControlsWindowEventListener.h" #include "core/html/track/TextTrackContainer.h" #include "core/html/track/TextTrackList.h" @@ -127,6 +129,7 @@ m_windowEventListener(MediaControlsWindowEventListener::create( this, WTF::bind(&MediaControls::hideAllMenus, wrapWeakPersistent(this)))), + m_orientationLockDelegate(nullptr), m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired), m_hideTimerBehaviorFlags(IgnoreNone), @@ -141,6 +144,15 @@ MediaControls* controls = new MediaControls(mediaElement); controls->setShadowPseudoId(AtomicString("-webkit-media-controls")); controls->initializeControls(); + + // Initialize the orientation lock when going fullscreen feature. + if (RuntimeEnabledFeatures::videoFullscreenOrientationLockEnabled() && + mediaElement.isHTMLVideoElement()) { + controls->m_orientationLockDelegate = + new MediaControlsOrientationLockDelegate( + toHTMLVideoElement(mediaElement)); + } + return controls; } @@ -929,6 +941,7 @@ visitor->trace(m_overlayCastButton); visitor->trace(m_mediaEventListener); visitor->trace(m_windowEventListener); + visitor->trace(m_orientationLockDelegate); HTMLDivElement::trace(visitor); }
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.h b/third_party/WebKit/Source/core/html/shadow/MediaControls.h index e2850a1..636e41a7 100644 --- a/third_party/WebKit/Source/core/html/shadow/MediaControls.h +++ b/third_party/WebKit/Source/core/html/shadow/MediaControls.h
@@ -34,6 +34,7 @@ class Event; class MediaControlsMediaEventListener; +class MediaControlsOrientationLockDelegate; class MediaControlsWindowEventListener; class CORE_EXPORT MediaControls final : public HTMLDivElement { @@ -106,6 +107,7 @@ private: friend class MediaControlsMediaEventListener; + friend class MediaControlsOrientationLockDelegateTest; friend class MediaControlsTest; void invalidate(Element*); @@ -185,6 +187,7 @@ Member<MediaControlsMediaEventListener> m_mediaEventListener; Member<MediaControlsWindowEventListener> m_windowEventListener; + Member<MediaControlsOrientationLockDelegate> m_orientationLockDelegate; Timer<MediaControls> m_hideMediaControlsTimer; unsigned m_hideTimerBehaviorFlags;
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp new file mode 100644 index 0000000..868d9c8 --- /dev/null +++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.cpp
@@ -0,0 +1,151 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "MediaControlsOrientationLockDelegate.h" + +#include "core/events/Event.h" +#include "core/frame/ScreenOrientationController.h" +#include "core/html/HTMLVideoElement.h" +#include "core/page/ChromeClient.h" +#include "public/platform/WebScreenInfo.h" +#include "public/platform/modules/screen_orientation/WebLockOrientationCallback.h" + +namespace blink { + +namespace { + +// WebLockOrientationCallback implementation that will not react to a success +// nor a failure. +class DummyScreenOrientationCallback : public WebLockOrientationCallback { + public: + void onSuccess() override {} + void onError(WebLockOrientationError) override {} +}; + +} // anonymous namespace + +MediaControlsOrientationLockDelegate::MediaControlsOrientationLockDelegate( + HTMLVideoElement& video) + : EventListener(CPPEventListenerType), m_videoElement(video) { + document().addEventListener(EventTypeNames::fullscreenchange, this, true); + videoElement().addEventListener(EventTypeNames::webkitfullscreenchange, this, + true); + videoElement().addEventListener(EventTypeNames::loadedmetadata, this, true); +} + +bool MediaControlsOrientationLockDelegate::operator==( + const EventListener& other) const { + return this == &other; +} + +void MediaControlsOrientationLockDelegate::maybeLockOrientation() { + DCHECK(m_state != State::MaybeLockedFullscreen); + + if (videoElement().getReadyState() == HTMLMediaElement::kHaveNothing) { + m_state = State::PendingMetadata; + return; + } + + m_state = State::MaybeLockedFullscreen; + + if (!document().frame()) + return; + + auto controller = ScreenOrientationController::from(*document().frame()); + if (controller->maybeHasActiveLock()) + return; + + controller->lock(computeOrientationLock(), + WTF::wrapUnique(new DummyScreenOrientationCallback)); + m_shouldUnlockOrientation = true; +} + +void MediaControlsOrientationLockDelegate::maybeUnlockOrientation() { + DCHECK(m_state != State::PendingFullscreen); + + m_state = State::PendingFullscreen; + + if (!m_shouldUnlockOrientation) + return; + + ScreenOrientationController::from(*document().frame())->unlock(); + m_shouldUnlockOrientation = false; +} + +HTMLVideoElement& MediaControlsOrientationLockDelegate::videoElement() const { + return *m_videoElement; +} + +Document& MediaControlsOrientationLockDelegate::document() const { + return videoElement().document(); +} + +void MediaControlsOrientationLockDelegate::handleEvent( + ExecutionContext* executionContext, + Event* event) { + if (event->type() == EventTypeNames::fullscreenchange || + event->type() == EventTypeNames::webkitfullscreenchange) { + if (videoElement().isFullscreen()) { + if (m_state == State::PendingFullscreen) + maybeLockOrientation(); + } else { + if (m_state != State::PendingFullscreen) + maybeUnlockOrientation(); + } + + return; + } + + if (event->type() == EventTypeNames::loadedmetadata) { + if (m_state == State::PendingMetadata) + maybeLockOrientation(); + + return; + } + + NOTREACHED(); +} + +WebScreenOrientationLockType +MediaControlsOrientationLockDelegate::computeOrientationLock() const { + DCHECK(videoElement().getReadyState() != HTMLMediaElement::kHaveNothing); + + const unsigned width = videoElement().videoWidth(); + const unsigned height = videoElement().videoHeight(); + + if (width > height) + return WebScreenOrientationLockLandscape; + + if (height > width) + return WebScreenOrientationLockPortrait; + + // For square videos, try to lock to the current screen orientation for + // consistency. Use WebScreenOrientationLockLandscape as a fallback value. + // TODO(mlamouri): we could improve this by having direct access to + // `window.screen.orientation.type`. + Frame* frame = document().frame(); + if (!frame) + return WebScreenOrientationLockLandscape; + + switch (frame->chromeClient().screenInfo().orientationType) { + case WebScreenOrientationPortraitPrimary: + case WebScreenOrientationPortraitSecondary: + return WebScreenOrientationLockPortrait; + case WebScreenOrientationLandscapePrimary: + case WebScreenOrientationLandscapeSecondary: + return WebScreenOrientationLockLandscape; + case WebScreenOrientationUndefined: + return WebScreenOrientationLockLandscape; + } + + NOTREACHED(); + return WebScreenOrientationLockLandscape; +} + +DEFINE_TRACE(MediaControlsOrientationLockDelegate) { + EventListener::trace(visitor); + visitor->trace(m_videoElement); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.h b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.h new file mode 100644 index 0000000..df02374b --- /dev/null +++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegate.h
@@ -0,0 +1,93 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MediaControlsOrientationLockDelegate_h +#define MediaControlsOrientationLockDelegate_h + +#include "core/CoreExport.h" +#include "core/events/EventListener.h" +#include "public/platform/modules/screen_orientation/WebScreenOrientationLockType.h" + +namespace blink { + +class Document; +class HTMLVideoElement; + +// MediaControlsOrientationLockDelegate is implementing the orientation lock +// feature when a <video> is fullscreen. It is meant to be created by +// `MediaControls` when the feature apply. Once created, it will use events to +// change state. +// +// The different states of the class are: +// - PendingFullscreen: the object is created and is waiting for the associated +// <video> to go fullscreen in order to apply an orientation lock; +// - PendingMetadata: the <video> is fullscreen but the metadata have not been +// downloaded yet. It can happen because of network latency or because the +// <video> went fullscreen before playback and download started; +// - MaybeLockedFullscreen: the <video> is fullscreen and a screen orientation +// lock was applied. +// +// The possible state transitions are: +// - PendingFullscreen => PendingMetadata: on fullscreenchange event (entering +// fullscreen) when metadata are not available; +// - PendingFullscreen => MaybeLockedFullscreen: on fullscreenchange event +// (entering fullscreen) when metadata are available; +// - PendingMetadata => MaybeLockedFullscreen: on loadedmetadata; +// - PendingMetadata => PendingFullscreen: on fullscreenchange event (leaving +// fullscreen); +// - MaybeLockedFullscreen => PendingFullscreen: on fullscreenchange event +// (leaving fullscreen). +class CORE_EXPORT MediaControlsOrientationLockDelegate final + : public EventListener { + public: + explicit MediaControlsOrientationLockDelegate(HTMLVideoElement&); + + // EventListener implementation. + bool operator==(const EventListener&) const override; + + DECLARE_VIRTUAL_TRACE(); + + private: + friend class MediaControlsOrientationLockDelegateTest; + + enum class State { + PendingFullscreen, + PendingMetadata, + MaybeLockedFullscreen, + }; + + // EventListener implementation. + void handleEvent(ExecutionContext*, Event*) override; + + HTMLVideoElement& videoElement() const; + Document& document() const; + + // Returns the orientation in which the video should be locked based on its + // size. + WebScreenOrientationLockType computeOrientationLock() const; + + // Locks the screen orientation if the video has metadata information + // available. Delays locking orientation until metadata are available + // otherwise. + void maybeLockOrientation(); + + // Unlocks the screen orientation if the screen orientation was previously + // locked. + void maybeUnlockOrientation(); + + // Current state of the object. See comment at the top of the file for a + // detailed description. + State m_state = State::PendingFullscreen; + + // Whether the controls should unlock the screen orientation when possible. + // In other words, whether the orientation was locked. + bool m_shouldUnlockOrientation = false; + + // `m_videoElement` owns MediaControls that owns |this|. + Member<HTMLVideoElement> m_videoElement; +}; + +} // namespace blink + +#endif // MediaControlsOrientationLockDelegate_h
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp new file mode 100644 index 0000000..11b878b --- /dev/null +++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsOrientationLockDelegateTest.cpp
@@ -0,0 +1,421 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/html/shadow/MediaControlsOrientationLockDelegate.h" + +#include "core/dom/Document.h" +#include "core/dom/DocumentUserGestureToken.h" +#include "core/dom/Fullscreen.h" +#include "core/frame/ScreenOrientationController.h" +#include "core/html/HTMLAudioElement.h" +#include "core/html/HTMLVideoElement.h" +#include "core/html/shadow/MediaControls.h" +#include "core/loader/EmptyClients.h" +#include "core/testing/DummyPageHolder.h" +#include "platform/UserGestureIndicator.h" +#include "platform/testing/UnitTestHelpers.h" +#include "public/platform/WebMediaPlayer.h" +#include "public/platform/WebSize.h" +#include "public/platform/modules/screen_orientation/WebLockOrientationCallback.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::_; +using ::testing::Return; + +namespace blink { + +namespace { + +// WebLockOrientationCallback implementation that will not react to a success +// nor a failure. +class DummyScreenOrientationCallback : public WebLockOrientationCallback { + public: + void onSuccess() override {} + void onError(WebLockOrientationError) override {} +}; + +class MockVideoWebMediaPlayer : public WebMediaPlayer { + public: + void load(LoadType, const WebMediaPlayerSource&, CORSMode) override{}; + void play() override{}; + void pause() override{}; + bool supportsSave() const override { return false; }; + void seek(double seconds) override{}; + void setRate(double) override{}; + void setVolume(double) override{}; + WebTimeRanges buffered() const override { return WebTimeRanges(); }; + WebTimeRanges seekable() const override { return WebTimeRanges(); }; + void setSinkId(const WebString& sinkId, + const WebSecurityOrigin&, + WebSetSinkIdCallbacks*) override{}; + bool hasVideo() const override { return true; }; + bool hasAudio() const override { return false; }; + bool paused() const override { return false; }; + bool seeking() const override { return false; }; + double duration() const override { return 0.0; }; + double currentTime() const override { return 0.0; }; + NetworkState getNetworkState() const override { return NetworkStateEmpty; }; + ReadyState getReadyState() const override { return ReadyStateHaveNothing; }; + WebString getErrorMessage() override { return WebString(); }; + bool didLoadingProgress() override { return false; }; + bool hasSingleSecurityOrigin() const override { return true; }; + bool didPassCORSAccessCheck() const override { return true; }; + double mediaTimeForTimeValue(double timeValue) const override { + return timeValue; + }; + unsigned decodedFrameCount() const override { return 0; }; + unsigned droppedFrameCount() const override { return 0; }; + size_t audioDecodedByteCount() const override { return 0; }; + size_t videoDecodedByteCount() const override { return 0; }; + void paint(WebCanvas*, const WebRect&, SkPaint&) override{}; + + MOCK_CONST_METHOD0(naturalSize, WebSize()); +}; + +class MockChromeClient : public EmptyChromeClient { + public: + MOCK_CONST_METHOD0(screenInfo, WebScreenInfo()); +}; + +class StubFrameLoaderClient : public EmptyFrameLoaderClient { + public: + static StubFrameLoaderClient* create() { return new StubFrameLoaderClient; } + + std::unique_ptr<WebMediaPlayer> createWebMediaPlayer( + HTMLMediaElement&, + const WebMediaPlayerSource&, + WebMediaPlayerClient*) override { + return WTF::wrapUnique(new MockVideoWebMediaPlayer()); + } +}; + +class MockScreenOrientationController final + : public GarbageCollectedFinalized<MockScreenOrientationController>, + public ScreenOrientationController { + USING_GARBAGE_COLLECTED_MIXIN(MockScreenOrientationController); + WTF_MAKE_NONCOPYABLE(MockScreenOrientationController); + + public: + static MockScreenOrientationController* provideTo(LocalFrame& frame) { + MockScreenOrientationController* controller = + new MockScreenOrientationController(); + ScreenOrientationController::provideTo(frame, controller); + return controller; + } + + MOCK_METHOD1(lock, void(WebScreenOrientationLockType)); + MOCK_METHOD0(mockUnlock, void()); + + DEFINE_INLINE_VIRTUAL_TRACE() { Supplement<LocalFrame>::trace(visitor); } + + private: + MockScreenOrientationController() = default; + + void lock(WebScreenOrientationLockType type, + std::unique_ptr<WebLockOrientationCallback>) override { + m_locked = true; + lock(type); + } + + void unlock() override { + m_locked = false; + mockUnlock(); + } + + bool maybeHasActiveLock() const override { return m_locked; } + + bool m_locked = false; +}; + +} // anonymous namespace + +class MediaControlsOrientationLockDelegateTest : public ::testing::Test { + protected: + void SetUp() override { + m_previousVideoFullscreenOrientationLockValue = + RuntimeEnabledFeatures::videoFullscreenOrientationLockEnabled(); + RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(true); + + m_chromeClient = new MockChromeClient(); + + Page::PageClients clients; + fillWithEmptyClients(clients); + clients.chromeClient = m_chromeClient.get(); + + m_pageHolder = DummyPageHolder::create(IntSize(800, 600), &clients, + StubFrameLoaderClient::create()); + + document().write("<body><video></body>"); + m_video = toHTMLVideoElement(*document().querySelector("video")); + + m_screenOrientationController = + MockScreenOrientationController::provideTo(m_pageHolder->frame()); + } + + void TearDown() override { + ::testing::Mock::VerifyAndClear(&screenOrientationController()); + + RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled( + m_previousVideoFullscreenOrientationLockValue); + } + + static bool hasDelegate(const MediaControls& mediaControls) { + return !!mediaControls.m_orientationLockDelegate; + } + + void simulateEnterFullscreen() { + UserGestureIndicator gesture(DocumentUserGestureToken::create(&document())); + + Fullscreen::requestFullscreen(video()); + Fullscreen::from(document()).didEnterFullscreen(); + testing::runPendingTasks(); + } + + void simulateExitFullscreen() { + Fullscreen::exitFullscreen(document()); + Fullscreen::from(document()).didExitFullscreen(); + testing::runPendingTasks(); + } + + void simulateOrientationLock() { + ScreenOrientationController* controller = + ScreenOrientationController::from(*document().frame()); + controller->lock(WebScreenOrientationLockLandscape, + WTF::wrapUnique(new DummyScreenOrientationCallback)); + EXPECT_TRUE(controller->maybeHasActiveLock()); + } + + void simulateVideoReadyState(HTMLMediaElement::ReadyState state) { + video().setReadyState(state); + } + + void simulateVideoNetworkState(HTMLMediaElement::NetworkState state) { + video().setNetworkState(state); + } + + void checkStatePendingFullscreen() const { + EXPECT_EQ(MediaControlsOrientationLockDelegate::State::PendingFullscreen, + m_video->mediaControls()->m_orientationLockDelegate->m_state); + } + + void checkStatePendingMetadata() const { + EXPECT_EQ(MediaControlsOrientationLockDelegate::State::PendingMetadata, + m_video->mediaControls()->m_orientationLockDelegate->m_state); + } + + void checkStateMaybeLockedFullscreen() const { + EXPECT_EQ( + MediaControlsOrientationLockDelegate::State::MaybeLockedFullscreen, + m_video->mediaControls()->m_orientationLockDelegate->m_state); + } + + bool delegateWillUnlockFullscreen() const { + return m_video->mediaControls() + ->m_orientationLockDelegate->m_shouldUnlockOrientation; + } + + WebScreenOrientationLockType computeOrientationLock() const { + return m_video->mediaControls() + ->m_orientationLockDelegate->computeOrientationLock(); + } + + MockChromeClient& chromeClient() const { return *m_chromeClient; } + + HTMLVideoElement& video() const { return *m_video; } + Document& document() const { return m_pageHolder->document(); } + MockScreenOrientationController& screenOrientationController() const { + return *m_screenOrientationController; + } + MockVideoWebMediaPlayer& mockWebMediaPlayer() const { + return *static_cast<MockVideoWebMediaPlayer*>(video().webMediaPlayer()); + } + + private: + bool m_previousVideoFullscreenOrientationLockValue; + std::unique_ptr<DummyPageHolder> m_pageHolder; + Persistent<HTMLVideoElement> m_video; + Persistent<MockScreenOrientationController> m_screenOrientationController; + Persistent<MockChromeClient> m_chromeClient; +}; + +TEST_F(MediaControlsOrientationLockDelegateTest, DelegateRequiresFlag) { + // Flag on by default. + EXPECT_TRUE(hasDelegate(*video().mediaControls())); + + // Same with flag off. + RuntimeEnabledFeatures::setVideoFullscreenOrientationLockEnabled(false); + HTMLVideoElement* video = HTMLVideoElement::create(document()); + document().body()->appendChild(video); + EXPECT_FALSE(hasDelegate(*video->mediaControls())); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, DelegateRequiresVideo) { + HTMLAudioElement* audio = HTMLAudioElement::create(document()); + document().body()->appendChild(audio); + EXPECT_FALSE(hasDelegate(*audio->mediaControls())); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, InitialState) { + checkStatePendingFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, EnterFullscreenNoMetadata) { + EXPECT_CALL(screenOrientationController(), lock(_)).Times(0); + + simulateEnterFullscreen(); + + checkStatePendingMetadata(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, LeaveFullscreenNoMetadata) { + EXPECT_CALL(screenOrientationController(), lock(_)).Times(0); + EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(0); + + simulateEnterFullscreen(); + // State set to PendingMetadata. + simulateExitFullscreen(); + + checkStatePendingFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, EnterFullscreenWithMetadata) { + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + + EXPECT_CALL(screenOrientationController(), lock(_)).Times(1); + EXPECT_FALSE(delegateWillUnlockFullscreen()); + + simulateEnterFullscreen(); + + EXPECT_TRUE(delegateWillUnlockFullscreen()); + checkStateMaybeLockedFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, LeaveFullscreenWithMetadata) { + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + + EXPECT_CALL(screenOrientationController(), lock(_)).Times(1); + EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(1); + + simulateEnterFullscreen(); + // State set to MaybeLockedFullscreen. + simulateExitFullscreen(); + + EXPECT_FALSE(delegateWillUnlockFullscreen()); + checkStatePendingFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, EnterFullscreenAfterPageLock) { + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + simulateOrientationLock(); + + EXPECT_FALSE(delegateWillUnlockFullscreen()); + EXPECT_CALL(screenOrientationController(), lock(_)).Times(0); + + simulateEnterFullscreen(); + + EXPECT_FALSE(delegateWillUnlockFullscreen()); + checkStateMaybeLockedFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, LeaveFullscreenAfterPageLock) { + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + simulateOrientationLock(); + + EXPECT_CALL(screenOrientationController(), lock(_)).Times(0); + EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(0); + + simulateEnterFullscreen(); + // State set to MaybeLockedFullscreen. + simulateExitFullscreen(); + + EXPECT_FALSE(delegateWillUnlockFullscreen()); + checkStatePendingFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, + ReceivedMetadataAfterExitingFullscreen) { + EXPECT_CALL(screenOrientationController(), lock(_)).Times(1); + + simulateEnterFullscreen(); + // State set to PendingMetadata. + + simulateVideoNetworkState(HTMLMediaElement::kNetworkIdle); + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + testing::runPendingTasks(); + + checkStateMaybeLockedFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, ReceivedMetadataLater) { + EXPECT_CALL(screenOrientationController(), lock(_)).Times(0); + EXPECT_CALL(screenOrientationController(), mockUnlock()).Times(0); + + simulateEnterFullscreen(); + // State set to PendingMetadata. + simulateExitFullscreen(); + + simulateVideoNetworkState(HTMLMediaElement::kNetworkIdle); + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + testing::runPendingTasks(); + + checkStatePendingFullscreen(); +} + +TEST_F(MediaControlsOrientationLockDelegateTest, ComputeOrientationLock) { + // Set up the WebMediaPlayer instance. + video().setSrc("http://example.com"); + testing::runPendingTasks(); + + simulateVideoNetworkState(HTMLMediaElement::kNetworkIdle); + simulateVideoReadyState(HTMLMediaElement::kHaveMetadata); + + EXPECT_CALL(mockWebMediaPlayer(), naturalSize()) + .Times(14) // Each `computeOrientationLock` calls the method twice. + .WillOnce(Return(WebSize(100, 50))) + .WillOnce(Return(WebSize(100, 50))) + .WillOnce(Return(WebSize(50, 100))) + .WillOnce(Return(WebSize(50, 100))) + .WillRepeatedly(Return(WebSize(100, 100))); + + // 100x50 + EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock()); + + // 50x100 + EXPECT_EQ(WebScreenOrientationLockPortrait, computeOrientationLock()); + + // 100x100 has more subtilities, it depends on the current screen orientation. + WebScreenInfo screenInfo; + screenInfo.orientationType = WebScreenOrientationUndefined; + EXPECT_CALL(chromeClient(), screenInfo()) + .Times(1) + .WillOnce(Return(screenInfo)); + EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock()); + + screenInfo.orientationType = WebScreenOrientationPortraitPrimary; + EXPECT_CALL(chromeClient(), screenInfo()) + .Times(1) + .WillOnce(Return(screenInfo)); + EXPECT_EQ(WebScreenOrientationLockPortrait, computeOrientationLock()); + + screenInfo.orientationType = WebScreenOrientationPortraitPrimary; + EXPECT_CALL(chromeClient(), screenInfo()) + .Times(1) + .WillOnce(Return(screenInfo)); + EXPECT_EQ(WebScreenOrientationLockPortrait, computeOrientationLock()); + + screenInfo.orientationType = WebScreenOrientationLandscapePrimary; + EXPECT_CALL(chromeClient(), screenInfo()) + .Times(1) + .WillOnce(Return(screenInfo)); + EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock()); + + screenInfo.orientationType = WebScreenOrientationLandscapeSecondary; + EXPECT_CALL(chromeClient(), screenInfo()) + .Times(1) + .WillOnce(Return(screenInfo)); + EXPECT_EQ(WebScreenOrientationLockLandscape, computeOrientationLock()); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp index d51075e..2956c416 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
@@ -1639,6 +1639,8 @@ int LayoutBlock::beforeMarginInLineDirection( LineDirectionMode direction) const { + // InlineFlowBox::placeBoxesInBlockDirection will flip lines in + // case of verticalLR mode, so we can assume verticalRL for now. return (direction == HorizontalLine ? marginTop() : marginRight()).toInt(); }
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp index b9dfa38..9cbadc4 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -2566,6 +2566,13 @@ DCHECK(fontData); if (!fontData) return -1; + // InlineFlowBox::placeBoxesInBlockDirection will flip lines in + // case of verticalLR mode, so we can assume verticalRL for now. + if (style()->isFlippedLinesWritingMode()) { + return (logicalHeight() - lastLineBox()->logicalBottom() + + fontData->getFontMetrics().ascent(lastRootBox()->baselineType())) + .toInt(); + } return (lastLineBox()->logicalTop() + fontData->getFontMetrics().ascent(lastRootBox()->baselineType())) .toInt();
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp index e0d778f3..39e0c09 100644 --- a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp
@@ -335,19 +335,21 @@ return menuListInternalPadding(style, 1); } -// static -int LayoutThemeDefault::scrollbarThicknessInDIP() { +int LayoutThemeDefault::scrollbarThicknessInDIP() const { + if (m_scrollbarThicknessInDIP > 0) + return m_scrollbarThicknessInDIP; int width = Platform::current() ->themeEngine() ->getSize(WebThemeEngine::PartScrollbarUpArrow) .width; - return width > 0 ? width : 15; + const_cast<LayoutThemeDefault*>(this)->m_scrollbarThicknessInDIP = + width > 0 ? width : 15; + return m_scrollbarThicknessInDIP; } -// static float LayoutThemeDefault::clampedMenuListArrowPaddingSize( const HostWindow* host, - const ComputedStyle& style) { + const ComputedStyle& style) const { int originalSize = scrollbarThicknessInDIP(); int scaledSize = host ? host->windowToViewportScalar(originalSize) : originalSize;
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.h b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.h index d88def7..874733a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.h +++ b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.h
@@ -115,9 +115,9 @@ const ComputedStyle&) const override; int popupInternalPaddingTop(const ComputedStyle&) const override; int popupInternalPaddingBottom(const ComputedStyle&) const override; - static int scrollbarThicknessInDIP(); - static float clampedMenuListArrowPaddingSize(const HostWindow*, - const ComputedStyle&); + int scrollbarThicknessInDIP() const; + float clampedMenuListArrowPaddingSize(const HostWindow*, + const ComputedStyle&) const; // Provide a way to pass the default font size from the Settings object // to the layout theme. FIXME: http://b/1129186 A cleaner way would be @@ -155,6 +155,7 @@ static unsigned m_inactiveSelectionForegroundColor; ThemePainterDefault m_painter; + int m_scrollbarThicknessInDIP = 0; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp index 6f3356b..358d67f 100644 --- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp +++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
@@ -773,6 +773,8 @@ // m_layoutObject.isHorizontalWritingMode(). crbug.com/552954 // ASSERT(curr->isHorizontal() == // curr->getLineLayoutItem().style()->isHorizontalWritingMode()); + // We may flip lines in case of verticalLR mode, so we can + // assume verticalRL for now. LayoutUnit overSideMargin = curr->isHorizontal() ? box.marginTop() : box.marginRight(); LayoutUnit underSideMargin =
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.cpp b/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.cpp index 3885e4e1..42d60373 100644 --- a/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.cpp +++ b/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.cpp
@@ -23,8 +23,6 @@ namespace blink { -SVGTextMetrics::SVGTextMetrics() : m_width(0), m_height(0), m_length(0) {} - SVGTextMetrics::SVGTextMetrics(unsigned length, float width, float height) : m_width(width), m_height(height), m_length(length) {}
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.h b/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.h index 55720fa..4eedee4 100644 --- a/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.h +++ b/third_party/WebKit/Source/core/layout/svg/SVGTextMetrics.h
@@ -32,7 +32,6 @@ public: enum MetricsType { SkippedSpaceMetrics }; - SVGTextMetrics(); SVGTextMetrics(MetricsType); SVGTextMetrics(unsigned length, float width, float height);
diff --git a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp index ccb4b04..1a164c4 100644 --- a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp +++ b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
@@ -67,9 +67,8 @@ Vector<float> grayscaleMatrix(double amount) { double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0); - // See - // https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#grayscaleEquivalent - // for information on parameters. + // See https://drafts.fxtf.org/filters/#grayscaleEquivalent for information on + // parameters. Vector<float> matrix; matrix.reserveInitialCapacity(20); @@ -95,9 +94,8 @@ Vector<float> sepiaMatrix(double amount) { double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0); - // See - // https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEquivalent - // for information on parameters. + // See https://drafts.fxtf.org/filters/#sepiaEquivalent for information on + // parameters. Vector<float> matrix; matrix.reserveInitialCapacity(20);
diff --git a/third_party/WebKit/Source/modules/beacon/NavigatorBeacon.idl b/third_party/WebKit/Source/modules/beacon/NavigatorBeacon.idl index 34f73236..ca3cb07 100644 --- a/third_party/WebKit/Source/modules/beacon/NavigatorBeacon.idl +++ b/third_party/WebKit/Source/modules/beacon/NavigatorBeacon.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/Beacon/Overview.html#Navigator +// https://w3c.github.io/beacon/#sec-sendBeacon-method partial interface Navigator { [CallWith=ExecutionContext, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, optional (ArrayBufferView or Blob or DOMString or FormData)? data = null);
diff --git a/third_party/WebKit/Source/modules/budget/BudgetState.idl b/third_party/WebKit/Source/modules/budget/BudgetState.idl index 5fdb628..d7732f80 100644 --- a/third_party/WebKit/Source/modules/budget/BudgetState.idl +++ b/third_party/WebKit/Source/modules/budget/BudgetState.idl
@@ -5,7 +5,8 @@ // https://wicg.github.io/budget-api/#budget-state-interface [ - RuntimeEnabled=Budget + RuntimeEnabled=Budget, + Exposed=(Window,Worker) ] interface BudgetState { readonly attribute double budgetAt; readonly attribute DOMTimeStamp time;
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp index cab9c69..a551d48 100644 --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.cpp
@@ -1078,11 +1078,8 @@ if (!imageSource->isVideoElement()) { imagePaint.setAntiAlias(shouldDrawImageAntialiased(dstRect)); - // TODO(ccameron): Canvas should draw in sRGB by default. - // https://crbug.com/672299 image->draw(c, imagePaint, dstRect, srcRect, DoNotRespectImageOrientation, - Image::DoNotClampImageToSourceRect, - ColorBehavior::transformToGlobalTarget()); + Image::DoNotClampImageToSourceRect, drawImageColorBehavior()); } else { c->save(); c->clipRect(dstRect);
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h index db7605d..529f705 100644 --- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h +++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
@@ -13,6 +13,7 @@ #include "modules/canvas2d/CanvasPathMethods.h" #include "modules/canvas2d/CanvasRenderingContext2DState.h" #include "modules/canvas2d/CanvasStyle.h" +#include "platform/graphics/ColorBehavior.h" #include "platform/graphics/ExpensiveCanvasHeuristicParameters.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/effects/SkComposeImageFilter.h" @@ -239,6 +240,8 @@ virtual bool isContextLost() const = 0; + virtual ColorBehavior drawImageColorBehavior() const = 0; + void restoreMatrixClipStack(SkCanvas*) const; DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp index f4a1fe51c..43d151f 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
@@ -269,6 +269,10 @@ } } +ColorBehavior CanvasRenderingContext2D::drawImageColorBehavior() const { + return CanvasRenderingContext::colorBehaviorForMediaDrawnToCanvas(); +} + void CanvasRenderingContext2D::reset() { // This is a multiple inherritance bootstrap BaseRenderingContext2D::reset();
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h index 1fbcc67..2740912 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.h
@@ -197,6 +197,8 @@ bool isPaintable() const final { return hasImageBuffer(); } + ColorBehavior drawImageColorBehavior() const final; + private: friend class CanvasRenderingContext2DAutoRestoreSkCanvas;
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp index 2cb2b9c..18f1af0 100644 --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -107,7 +107,7 @@ return canvasElement().buffer()->getGPUMemoryUsage(); } - void createContext(OpacityMode); + void createContext(OpacityMode, String colorSpace = String()); void TearDown(); void unrefCanvas(); PassRefPtr<Canvas2DLayerBridge> makeBridge( @@ -158,10 +158,13 @@ m_opaqueBitmap(IntSize(10, 10), OpaqueBitmap), m_alphaBitmap(IntSize(10, 10), TransparentBitmap) {} -void CanvasRenderingContext2DTest::createContext(OpacityMode opacityMode) { +void CanvasRenderingContext2DTest::createContext(OpacityMode opacityMode, + String colorSpace) { String canvasType("2d"); CanvasContextCreationAttributes attributes; attributes.setAlpha(opacityMode == NonOpaque); + if (!colorSpace.isEmpty()) + attributes.setColorSpace(colorSpace); m_canvasElement->getCanvasRenderingContext(canvasType, attributes); } @@ -1171,4 +1174,101 @@ EXPECT_EQ(0u, getGlobalAcceleratedImageBufferCount()); } +TEST_F(CanvasRenderingContext2DTest, + LegacyColorSpaceUsesGlobalTargetColorBehavior) { + // Set the global target color space to something distinctly recognizable (not + // srgb) + sk_sp<SkColorSpace> savedGlobalTargetColorSpace = + ColorBehavior::globalTargetColorSpace(); + ColorBehavior::setGlobalTargetColorSpaceForTesting( + SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named)); + bool savedColorCorrectRenderingEnabled = + RuntimeEnabledFeatures::colorCorrectRenderingEnabled(); + + RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(false); + createContext(NonOpaque, "legacy-srgb"); + ColorBehavior behavior = context2d()->drawImageColorBehavior(); + EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); + EXPECT_TRUE( + SkColorSpace::Equals(ColorBehavior::globalTargetColorSpace().get(), + behavior.targetColorSpace().get())); + + // Restore global state to avoid interfering with other tests + ColorBehavior::setGlobalTargetColorSpaceForTesting( + savedGlobalTargetColorSpace); + RuntimeEnabledFeatures::setColorCorrectRenderingEnabled( + savedColorCorrectRenderingEnabled); +} + +TEST_F(CanvasRenderingContext2DTest, + LegacyColorSpaceUsesSRGBWhenColorCorrectRenderingEnabled) { + // Set the global target color space to something distinctly recognizable (not + // srgb) + sk_sp<SkColorSpace> savedGlobalTargetColorSpace = + ColorBehavior::globalTargetColorSpace(); + ColorBehavior::setGlobalTargetColorSpaceForTesting( + SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named)); + bool savedColorCorrectRenderingEnabled = + RuntimeEnabledFeatures::colorCorrectRenderingEnabled(); + + RuntimeEnabledFeatures::setColorCorrectRenderingEnabled(true); + createContext(NonOpaque, "legacy-srgb"); + ColorBehavior behavior = context2d()->drawImageColorBehavior(); + sk_sp<SkColorSpace> srgbColorSpace = + SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); + EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); + EXPECT_TRUE(SkColorSpace::Equals(srgbColorSpace.get(), + behavior.targetColorSpace().get())); + + // Restore global state to avoid interfering with other tests + ColorBehavior::setGlobalTargetColorSpaceForTesting( + savedGlobalTargetColorSpace); + RuntimeEnabledFeatures::setColorCorrectRenderingEnabled( + savedColorCorrectRenderingEnabled); +} + +TEST_F(CanvasRenderingContext2DTest, + SRGBColorSpaceUsesTransformToSRGBColorBehavior) { + // Set the global target color space to something distinctly recognizable (not + // srgb) + sk_sp<SkColorSpace> savedGlobalTargetColorSpace = + ColorBehavior::globalTargetColorSpace(); + ColorBehavior::setGlobalTargetColorSpaceForTesting( + SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named)); + + createContext(NonOpaque, "srgb"); + ColorBehavior behavior = context2d()->drawImageColorBehavior(); + sk_sp<SkColorSpace> srgbColorSpace = + SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); + EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); + EXPECT_TRUE(SkColorSpace::Equals(srgbColorSpace.get(), + behavior.targetColorSpace().get())); + + // Restore global state to avoid interfering with other tests + ColorBehavior::setGlobalTargetColorSpaceForTesting( + savedGlobalTargetColorSpace); +} + +TEST_F(CanvasRenderingContext2DTest, + LinearRGBColorSpaceUsesTransformToLinearSRGBColorBehavior) { + // Set the global target color space to something distinctly recognizable (not + // srgb) + sk_sp<SkColorSpace> savedGlobalTargetColorSpace = + ColorBehavior::globalTargetColorSpace(); + ColorBehavior::setGlobalTargetColorSpaceForTesting( + SkColorSpace::MakeNamed(SkColorSpace::kAdobeRGB_Named)); + + createContext(NonOpaque, "linear-rgb"); + ColorBehavior behavior = context2d()->drawImageColorBehavior(); + sk_sp<SkColorSpace> linearSrgbColorSpace = + SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named); + EXPECT_TRUE(behavior.isTransformToTargetColorSpace()); + EXPECT_TRUE(SkColorSpace::Equals(linearSrgbColorSpace.get(), + behavior.targetColorSpace().get())); + + // Restore global state to avoid interfering with other tests + ColorBehavior::setGlobalTargetColorSpaceForTesting( + savedGlobalTargetColorSpace); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp index 5b8f3bf..ae17990 100644 --- a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp +++ b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp
@@ -47,6 +47,10 @@ return ::blink::parseColorOrCurrentColor(color, colorString, nullptr); } +ColorBehavior PaintRenderingContext2D::drawImageColorBehavior() const { + return ColorBehavior::transformToGlobalTarget(); +} + SkCanvas* PaintRenderingContext2D::drawingCanvas() const { return m_imageBuffer->canvas(); }
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h index a821724..976f34d5 100644 --- a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h +++ b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h
@@ -58,6 +58,8 @@ void didDraw(const SkIRect& dirtyRect) final; + ColorBehavior drawImageColorBehavior() const final; + // TODO(ikilpatrick): We'll need to either only accept resolved filters // from a typed-om <filter> object, or use the appropriate style resolution // host to determine 'em' units etc in filters. At the moment just pretend
diff --git a/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.idl b/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.idl index 19ec070..09cd3ea 100644 --- a/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.idl +++ b/third_party/WebKit/Source/modules/filesystem/DataTransferItemFileSystem.idl
@@ -28,6 +28,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +// https://wicg.github.io/entries-api/#html-data + partial interface DataTransferItem { - [CallWith=ExecutionContext, Measure] Entry webkitGetAsEntry(); + [CallWith=ExecutionContext, Measure] Entry? webkitGetAsEntry(); };
diff --git a/third_party/WebKit/Source/modules/mediasource/URLMediaSource.idl b/third_party/WebKit/Source/modules/mediasource/URLMediaSource.idl index 05bf6543..33f026a 100644 --- a/third_party/WebKit/Source/modules/mediasource/URLMediaSource.idl +++ b/third_party/WebKit/Source/modules/mediasource/URLMediaSource.idl
@@ -28,7 +28,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-URL +// https://w3c.github.io/media-source/#url partial interface URL { [Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ExecutionContext] static DOMString createObjectURL(MediaSource source);
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp index 9f7b2cb..9f9794e 100644 --- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp +++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.cpp
@@ -105,6 +105,11 @@ BaseRenderingContext2D::reset(); } +ColorBehavior OffscreenCanvasRenderingContext2D::drawImageColorBehavior() + const { + return CanvasRenderingContext::colorBehaviorForMediaDrawnToCanvas(); +} + ImageBuffer* OffscreenCanvasRenderingContext2D::imageBuffer() const { if (!m_imageBuffer) { IntSize surfaceSize(width(), height());
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h index 52e4003..3baaa55 100644 --- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h +++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h
@@ -85,6 +85,8 @@ ImageBitmap* transferToImageBitmap(ScriptState*) final; + ColorBehavior drawImageColorBehavior() const final; + protected: OffscreenCanvasRenderingContext2D( ScriptState*,
diff --git a/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp b/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp index 10969e1..ade0233 100644 --- a/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp +++ b/third_party/WebKit/Source/platform/graphics/ColorBehavior.cpp
@@ -38,6 +38,17 @@ BitmapImageMetrics::countOutputGamma(gTargetColorSpace); } +void ColorBehavior::setGlobalTargetColorSpaceForTesting( + const sk_sp<SkColorSpace>& colorSpace) { + // Take a lock around initializing and accessing the global device color + // profile. + SpinLock::Guard guard(gTargetColorSpaceLock); + + SkSafeUnref(gTargetColorSpace); + gTargetColorSpace = colorSpace.get(); + SkSafeRef(gTargetColorSpace); +} + // static sk_sp<SkColorSpace> ColorBehavior::globalTargetColorSpace() { // Take a lock around initializing and accessing the global device color
diff --git a/third_party/WebKit/Source/platform/graphics/ColorBehavior.h b/third_party/WebKit/Source/platform/graphics/ColorBehavior.h index ea3c1a2..b4086ad 100644 --- a/third_party/WebKit/Source/platform/graphics/ColorBehavior.h +++ b/third_party/WebKit/Source/platform/graphics/ColorBehavior.h
@@ -49,6 +49,7 @@ // profiles should be converted. Note that only the first call to this // function in this process has any effect. static void setGlobalTargetColorProfile(const WebVector<char>&); + static void setGlobalTargetColorSpaceForTesting(const sk_sp<SkColorSpace>&); static sk_sp<SkColorSpace> globalTargetColorSpace(); // Return the behavior of transforming to the color space specified above, or
diff --git a/third_party/brotli/BUILD.gn b/third_party/brotli/BUILD.gn index f012b543..2acb54b 100644 --- a/third_party/brotli/BUILD.gn +++ b/third_party/brotli/BUILD.gn
@@ -6,15 +6,26 @@ import("//build/config/win/visual_studio_version.gni") } -static_library("brotli") { +config("includes") { + include_dirs = [ "include" ] +} + +static_library("common") { + sources = [ + "common/constants.h", + "common/dictionary.c", + "common/dictionary.h", + "common/version.h", + ] + public_configs = [ ":includes" ] +} + +static_library("dec") { sources = [ "dec/bit_reader.c", "dec/bit_reader.h", "dec/context.h", "dec/decode.c", - "dec/decode.h", - "dec/dictionary.c", - "dec/dictionary.h", "dec/huffman.c", "dec/huffman.h", "dec/port.h", @@ -22,7 +33,11 @@ "dec/state.c", "dec/state.h", "dec/transform.h", - "dec/types.h", + ] + public_configs = [ ":includes" ] + + deps = [ + ":common", ] configs -= [ "//build/config/compiler:chromium_code" ] @@ -31,62 +46,71 @@ # Since we are never debug brotli, freeze the optimizations to -O2. configs -= [ "//build/config/compiler:default_optimization" ] configs += [ "//build/config/compiler:optimize_max" ] - - include_dirs = [ "dec" ] } if (current_toolchain == host_toolchain) { executable("bro") { sources = [ - "enc/backward_references.cc", + "common/constants.h", + "enc/backward_references.c", "enc/backward_references.h", + "enc/backward_references_inc.h", + "enc/bit_cost.c", "enc/bit_cost.h", - "enc/block_splitter.cc", + "enc/bit_cost_inc.h", + "enc/block_encoder_inc.h", + "enc/block_splitter.c", "enc/block_splitter.h", - "enc/brotli_bit_stream.cc", + "enc/block_splitter_inc.h", + "enc/brotli_bit_stream.c", "enc/brotli_bit_stream.h", + "enc/cluster.c", "enc/cluster.h", + "enc/cluster_inc.h", "enc/command.h", - "enc/compress_fragment.cc", + "enc/compress_fragment.c", "enc/compress_fragment.h", - "enc/compress_fragment_two_pass.cc", + "enc/compress_fragment_two_pass.c", "enc/compress_fragment_two_pass.h", - "enc/compressor.h", "enc/context.h", "enc/dictionary_hash.h", - "enc/encode.cc", - "enc/encode.h", - "enc/encode_parallel.cc", - "enc/encode_parallel.h", - "enc/entropy_encode.cc", + "enc/encode.c", + "enc/entropy_encode.c", "enc/entropy_encode.h", "enc/entropy_encode_static.h", "enc/fast_log.h", "enc/find_match_length.h", - "enc/hash.h ", - "enc/histogram.cc", + "enc/hash.h", + "enc/hash_forgetful_chain_inc.h", + "enc/hash_longest_match_inc.h", + "enc/hash_longest_match_quickly_inc.h", + "enc/histogram.c", "enc/histogram.h", - "enc/literal_cost.cc", + "enc/histogram_inc.h", + "enc/literal_cost.c", "enc/literal_cost.h", - "enc/metablock.cc", + "enc/memory.c", + "enc/memory.h", + "enc/metablock.c", "enc/metablock.h", - "enc/port.h ", + "enc/metablock_inc.h", + "enc/port.h", "enc/prefix.h", + "enc/quality.h", "enc/ringbuffer.h", - "enc/static_dict.cc", + "enc/static_dict.c", "enc/static_dict.h", "enc/static_dict_lut.h", - "enc/streams.cc", - "enc/streams.h", - "enc/transform.h", - "enc/types.h", - "enc/utf8_util.cc", + "enc/utf8_util.c", "enc/utf8_util.h", "enc/write_bits.h", - "tools/bro.cc", + "tools/bro.c", ] + public_configs = [ ":includes" ] + deps = [ - ":brotli", + ":common", + ":dec", "//build/config/sanitizers:deps", "//build/win:default_exe_manifest", ]
diff --git a/third_party/brotli/DEPS b/third_party/brotli/DEPS new file mode 100644 index 0000000..3b3d70df --- /dev/null +++ b/third_party/brotli/DEPS
@@ -0,0 +1,5 @@ +# Brotli does not depend on anything, but has relative includes. +skip_child_includes = [ + 'dec', + 'enc', +] \ No newline at end of file
diff --git a/third_party/brotli/LICENSE b/third_party/brotli/LICENSE index 6298a5d..33b7cdd 100644 --- a/third_party/brotli/LICENSE +++ b/third_party/brotli/LICENSE
@@ -1,4 +1,4 @@ -Copyright (c) 2009, 2010, 2013-2015 by the Brotli Authors. +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal
diff --git a/third_party/brotli/README.chromium b/third_party/brotli/README.chromium index ceddd44..0c51a386 100644 --- a/third_party/brotli/README.chromium +++ b/third_party/brotli/README.chromium
@@ -1,6 +1,6 @@ Name: Brotli URL: https://github.com/google/brotli -Version: 4836af6eaddb20d95187e571a950b68183534372 +Version: 222564a95d9ab58865a096b8d9f7324ea5f2e03e License: MIT License File: LICENSE Security Critical: yes @@ -12,17 +12,10 @@ Local Modifications: - This only includes the enc/, dec/ and tools/ directories, the README.md and - the LICENSE files, removing unneeded direcories such as docs, tests, and + the LICENSE files, removing unneeded directories such as docs, tests, and tools. -- Lines 659 of enc/hash.h and 66 of enc/cluster.h were modified to eliminate - build errors that appeared on Windows. -- Lines 290 - 304 from tools/bro.cc were adjusted to remove a try/catch block, - which are disabled by default in Chromium. +- Line 19 of enc/cluster_inc.h was modified to eliminate build error on Windows. - BUILD.gn: Added. - brotli.gyp: Added. - brotli.gni: Added. - bro.gypi: Added. -- enc/static_dict_lut.h: split up into two files (enc/static_dict_lut.h, - enc/static_dict_lut2.h) to allow upload to codereview. -- Line 1158 of enc/encode.cc has been modified to fix an unitialized variable - warning. Cherry-pick of c6d38e94cbf9ec094b1e84f6a3a675c9dc42fbed.
diff --git a/third_party/brotli/README.md b/third_party/brotli/README.md index 520a0657..53a02eb 100644 --- a/third_party/brotli/README.md +++ b/third_party/brotli/README.md
@@ -1,5 +1,4 @@ -brotli -====== +### Introduction Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding @@ -7,11 +6,64 @@ currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression. -The specification of the Brotli Compressed Data Format is defined in the -following internet draft: -http://www.ietf.org/id/draft-alakuijala-brotli +The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://www.ietf.org/rfc/rfc7932.txt). Brotli is open-sourced under the MIT License, see the LICENSE file. Brotli mailing list: https://groups.google.com/forum/#!forum/brotli + +[](https://travis-ci.org/google/brotli) + +### Build instructions + +#### Make + +To build and run tests, simply do: + + $ ./configure && make + +If you want to install brotli, use one of the more advanced build systems below. + +#### Bazel + +See [Bazel](http://www.bazel.build/) + +#### CMake + +The basic commands to build, test and install brotli are: + + $ mkdir out && cd out && cmake .. && make + $ make test + $ make install + +You can use other [CMake](https://cmake.org/) configuration. For example, to +build static libraries and use a custom installation directory: + + $ mkdir out-static && \ + cd out-static && \ + cmake .. -DBUILD_SHARED_LIBS=0 -DCMAKE_INSTALL_PREFIX='/my/install/dir/' + $ make install + +#### Premake5 + +See [Premake5](https://premake.github.io/) + +#### Python + +The basic commands to build, test, and install the Python module are: + + $ python setup.py build test + $ python setup.py install + +See the [Python readme](python/README.md) for more details. + +### Benchmarks +* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/) +* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html) +* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark) + +### Related projects +Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification. + +JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli`
diff --git a/third_party/brotli/brotli.gni b/third_party/brotli/brotli.gni index f4ed9d2..eef0bb5 100644 --- a/third_party/brotli/brotli.gni +++ b/third_party/brotli/brotli.gni
@@ -26,6 +26,7 @@ ] args = [ "--force", + "--no-copy-stat", "--input", rebase_path(invoker.input_file, root_build_dir), "--output",
diff --git a/third_party/brotli/common/constants.h b/third_party/brotli/common/constants.h new file mode 100644 index 0000000..49dd055b --- /dev/null +++ b/third_party/brotli/common/constants.h
@@ -0,0 +1,54 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#ifndef BROTLI_COMMON_CONSTANTS_H_ +#define BROTLI_COMMON_CONSTANTS_H_ + +/* Specification: 7.3. Encoding of the context map */ +#define BROTLI_CONTEXT_MAP_MAX_RLE 16 + +/* Specification: 2. Compressed representation overview */ +#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256 + +/* Specification: 3.3. Alphabet sizes: insert-and-copy length */ +#define BROTLI_NUM_LITERAL_SYMBOLS 256 +#define BROTLI_NUM_COMMAND_SYMBOLS 704 +#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26 +#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \ + BROTLI_CONTEXT_MAP_MAX_RLE) +#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2) + +/* Specification: 3.5. Complex prefix codes */ +#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16 +#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17 +#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1) +/* "code length of 8 is repeated" */ +#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8 + +/* Specification: 4. Encoding of distances */ +#define BROTLI_NUM_DISTANCE_SHORT_CODES 16 +#define BROTLI_MAX_NPOSTFIX 3 +#define BROTLI_MAX_NDIRECT 120 +#define BROTLI_MAX_DISTANCE_BITS 24U +/* BROTLI_NUM_DISTANCE_SYMBOLS == 520 */ +#define BROTLI_NUM_DISTANCE_SYMBOLS (BROTLI_NUM_DISTANCE_SHORT_CODES + \ + BROTLI_MAX_NDIRECT + \ + (BROTLI_MAX_DISTANCE_BITS << \ + (BROTLI_MAX_NPOSTFIX + 1))) + +/* 7.1. Context modes and context ID lookup for literals */ +/* "context IDs for literals are in the range of 0..63" */ +#define BROTLI_LITERAL_CONTEXT_BITS 6 + +/* 7.2. Context ID for distances */ +#define BROTLI_DISTANCE_CONTEXT_BITS 2 + +/* 9.1. Format of the Stream Header */ +/* Number of slack bytes for window size. Don't confuse + with BROTLI_NUM_DISTANCE_SHORT_CODES. */ +#define BROTLI_WINDOW_GAP 16 + +#endif /* BROTLI_COMMON_CONSTANTS_H_ */
diff --git a/third_party/brotli/dec/dictionary.c b/third_party/brotli/common/dictionary.c similarity index 99% rename from third_party/brotli/dec/dictionary.c rename to third_party/brotli/common/dictionary.c index f8f5857..7e6bac1 100644 --- a/third_party/brotli/dec/dictionary.c +++ b/third_party/brotli/common/dictionary.c
@@ -10,9 +10,17 @@ extern "C" { #endif -/* In case of multiple definition linker error with dictionary.cc from the - encoder: include only one of enc/dictionary.cc or dec/dictionary.c in a - target using both enc and dec. */ +const uint32_t kBrotliDictionaryOffsetsByLength[] = { + 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, + 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, + 122016 +}; + +const uint8_t kBrotliDictionarySizeBitsByLength[] = { + 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, + 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5, +}; + const uint8_t kBrotliDictionary[122784] = { 0x74, 0x69, 0x6d, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x66, 0x65, 0x6c, 0x65, 0x66, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x61,
diff --git a/third_party/brotli/common/dictionary.h b/third_party/brotli/common/dictionary.h new file mode 100644 index 0000000..4a70707 --- /dev/null +++ b/third_party/brotli/common/dictionary.h
@@ -0,0 +1,30 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Collection of static dictionary words. */ + +#ifndef BROTLI_COMMON_DICTIONARY_H_ +#define BROTLI_COMMON_DICTIONARY_H_ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +BROTLI_COMMON_API extern const uint8_t kBrotliDictionary[122784]; +BROTLI_COMMON_API extern const uint32_t kBrotliDictionaryOffsetsByLength[25]; +BROTLI_COMMON_API extern const uint8_t kBrotliDictionarySizeBitsByLength[25]; + +#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4 +#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24 + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_COMMON_DICTIONARY_H_ */
diff --git a/third_party/brotli/common/version.h b/third_party/brotli/common/version.h new file mode 100644 index 0000000..2cf61333 --- /dev/null +++ b/third_party/brotli/common/version.h
@@ -0,0 +1,19 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Version definition. */ + +#ifndef BROTLI_COMMON_VERSION_H_ +#define BROTLI_COMMON_VERSION_H_ + +/* This macro should only be used when library is compiled together with client. + If library is dynamically linked, use BrotliDecoderVersion and + BrotliEncoderVersion methods. */ + +/* Semantic version, claculated as (MAJOR << 24) | (MINOR << 12) | PATCH */ +#define BROTLI_VERSION 0x1000000 + +#endif /* BROTLI_COMMON_VERSION_H_ */
diff --git a/third_party/brotli/dec/bit_reader.c b/third_party/brotli/dec/bit_reader.c index cde90af..9925ba4 100644 --- a/third_party/brotli/dec/bit_reader.c +++ b/third_party/brotli/dec/bit_reader.c
@@ -8,8 +8,8 @@ #include "./bit_reader.h" +#include <brotli/types.h> #include "./port.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -20,27 +20,27 @@ br->bit_pos_ = sizeof(br->val_) << 3; } -int BrotliWarmupBitReader(BrotliBitReader* const br) { +BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) { size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1; /* Fixing alignment after unaligned BrotliFillWindow would result accumulator overflow. If unalignment is caused by BrotliSafeReadBits, then there is - enough space in accumulator to fix aligment. */ + enough space in accumulator to fix alignment. */ if (!BROTLI_ALIGNED_READ) { aligned_read_mask = 0; } if (BrotliGetAvailableBits(br) == 0) { if (!BrotliPullByte(br)) { - return 0; + return BROTLI_FALSE; } } while ((((size_t)br->next_in) & aligned_read_mask) != 0) { if (!BrotliPullByte(br)) { /* If we consumed all the input, we don't care about the alignment. */ - return 1; + return BROTLI_TRUE; } } - return 1; + return BROTLI_TRUE; } #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/third_party/brotli/dec/bit_reader.h b/third_party/brotli/dec/bit_reader.h index 7096afa..30e6761 100644 --- a/third_party/brotli/dec/bit_reader.h +++ b/third_party/brotli/dec/bit_reader.h
@@ -11,20 +11,14 @@ #include <string.h> /* memcpy */ +#include <brotli/types.h> #include "./port.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif -#if (BROTLI_64_BITS) -#define BROTLI_SHORT_FILL_BIT_WINDOW_READ 4 -typedef uint64_t reg_t; -#else -#define BROTLI_SHORT_FILL_BIT_WINDOW_READ 2 -typedef uint32_t reg_t; -#endif +#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(reg_t) >> 1) static const uint32_t kBitMask[33] = { 0x0000, 0x00000001, 0x00000003, 0x00000007, 0x0000000F, @@ -61,14 +55,14 @@ size_t avail_in; } BrotliBitReaderState; -/* Initializes the bitreader fields. */ +/* Initializes the BrotliBitReader fields. */ BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br); /* Ensures that accumulator is not empty. May consume one byte of input. Returns 0 if data is required but there is no input available. For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned reading. */ -BROTLI_INTERNAL int BrotliWarmupBitReader(BrotliBitReader* const br); +BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br); static BROTLI_INLINE void BrotliBitReaderSaveState( BrotliBitReader* const from, BrotliBitReaderState* to) { @@ -97,11 +91,11 @@ return br->avail_in + (BrotliGetAvailableBits(br) >> 3); } -/* Checks if there is at least num bytes left in the input ringbuffer (excluding - the bits remaining in br->val_). */ -static BROTLI_INLINE int BrotliCheckInputAmount( +/* Checks if there is at least |num| bytes left in the input ring-buffer + (excluding the bits remaining in br->val_). */ +static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount( BrotliBitReader* const br, size_t num) { - return br->avail_in >= num; + return TO_BROTLI_BOOL(br->avail_in >= num); } static BROTLI_INLINE uint16_t BrotliLoad16LE(const uint8_t* in) { @@ -163,7 +157,7 @@ /* Guarantees that there are at least n_bits + 1 bits in accumulator. Precondition: accumulator contains at least 1 bit. n_bits should be in the range [1..24] for regular build. For portable - non-64-bit little endian build only 16 bits are safe to request. */ + non-64-bit little-endian build only 16 bits are safe to request. */ static BROTLI_INLINE void BrotliFillBitWindow( BrotliBitReader* const br, uint32_t n_bits) { #if (BROTLI_64_BITS) @@ -213,16 +207,16 @@ #endif } -/* Mosltly like BrotliFillBitWindow, but guarantees only 16 bits and reads no +/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */ static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) { BrotliFillBitWindow(br, 17); } /* Pulls one byte of input to accumulator. */ -static BROTLI_INLINE int BrotliPullByte(BrotliBitReader* const br) { +static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) { if (br->avail_in == 0) { - return 0; + return BROTLI_FALSE; } br->val_ >>= 8; #if (BROTLI_64_BITS) @@ -233,11 +227,11 @@ br->bit_pos_ -= 8; --br->avail_in; ++br->next_in; - return 1; + return BROTLI_TRUE; } /* Returns currently available bits. - The number of valid bits could be calclulated by BrotliGetAvailableBits. */ + The number of valid bits could be calculated by BrotliGetAvailableBits. */ static BROTLI_INLINE reg_t BrotliGetBitsUnmasked(BrotliBitReader* const br) { return br->val_ >> br->bit_pos_; } @@ -250,7 +244,7 @@ return (uint32_t)BrotliGetBitsUnmasked(br); } -/* Returns the specified number of bits from br without advancing bit pos. */ +/* Returns the specified number of bits from |br| without advancing bit pos. */ static BROTLI_INLINE uint32_t BrotliGetBits( BrotliBitReader* const br, uint32_t n_bits) { BrotliFillBitWindow(br, n_bits); @@ -259,15 +253,15 @@ /* Tries to peek the specified amount of bits. Returns 0, if there is not enough input. */ -static BROTLI_INLINE int BrotliSafeGetBits( +static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { while (BrotliGetAvailableBits(br) < n_bits) { if (!BrotliPullByte(br)) { - return 0; + return BROTLI_FALSE; } } *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits); - return 1; + return BROTLI_TRUE; } /* Advances the bit pos by n_bits. */ @@ -289,7 +283,7 @@ br->bit_pos_ += unused_bits; } -/* Reads the specified number of bits from br and advances the bit pos. +/* Reads the specified number of bits from |br| and advances the bit pos. Precondition: accumulator MUST contain at least n_bits. */ static BROTLI_INLINE void BrotliTakeBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { @@ -299,7 +293,7 @@ BrotliDropBits(br, n_bits); } -/* Reads the specified number of bits from br and advances the bit pos. +/* Reads the specified number of bits from |br| and advances the bit pos. Assumes that there is enough input to perform BrotliFillBitWindow. */ static BROTLI_INLINE uint32_t BrotliReadBits( BrotliBitReader* const br, uint32_t n_bits) { @@ -321,43 +315,26 @@ /* Tries to read the specified amount of bits. Returns 0, if there is not enough input. n_bits MUST be positive. */ -static BROTLI_INLINE int BrotliSafeReadBits( +static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { while (BrotliGetAvailableBits(br) < n_bits) { if (!BrotliPullByte(br)) { - return 0; + return BROTLI_FALSE; } } BrotliTakeBits(br, n_bits, val); - return 1; + return BROTLI_TRUE; } /* Advances the bit reader position to the next byte boundary and verifies that any skipped bits are set to zero. */ -static BROTLI_INLINE int BrotliJumpToByteBoundary(BrotliBitReader* br) { +static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) { uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7; uint32_t pad_bits = 0; if (pad_bits_count != 0) { BrotliTakeBits(br, pad_bits_count, &pad_bits); } - return pad_bits == 0; -} - -/* Peeks a byte at specified offset. - Precondition: bit reader is parked to a byte boundary. - Returns -1 if operation is not feasible. */ -static BROTLI_INLINE int BrotliPeekByte(BrotliBitReader* br, size_t offset) { - uint32_t available_bits = BrotliGetAvailableBits(br); - size_t bytes_left = available_bits >> 3; - BROTLI_DCHECK((available_bits & 7) == 0); - if (offset < bytes_left) { - return (BrotliGetBitsUnmasked(br) >> (unsigned)(offset << 3)) & 0xFF; - } - offset -= bytes_left; - if (offset < br->avail_in) { - return br->next_in[offset]; - } - return -1; + return TO_BROTLI_BOOL(pad_bits == 0); } /* Copies remaining input bytes stored in the bit reader to the output. Value
diff --git a/third_party/brotli/dec/context.h b/third_party/brotli/dec/context.h index 37ebe6a..9402cbe 100644 --- a/third_party/brotli/dec/context.h +++ b/third_party/brotli/dec/context.h
@@ -99,7 +99,7 @@ #ifndef BROTLI_DEC_CONTEXT_H_ #define BROTLI_DEC_CONTEXT_H_ -#include "./types.h" +#include <brotli/types.h> enum ContextType { CONTEXT_LSB6 = 0,
diff --git a/third_party/brotli/dec/decode.c b/third_party/brotli/dec/decode.c index acf0385..ab38ee18 100644 --- a/third_party/brotli/dec/decode.c +++ b/third_party/brotli/dec/decode.c
@@ -4,7 +4,7 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -#include "./decode.h" +#include <brotli/decode.h> #ifdef __ARM_NEON__ #include <arm_neon.h> @@ -13,9 +13,11 @@ #include <stdlib.h> /* free, malloc */ #include <string.h> /* memcpy, memset */ +#include "../common/constants.h" +#include "../common/dictionary.h" +#include "../common/version.h" #include "./bit_reader.h" #include "./context.h" -#include "./dictionary.h" #include "./huffman.h" #include "./port.h" #include "./prefix.h" @@ -34,19 +36,10 @@ BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name, \ (unsigned long)(idx), (unsigned long)array_name[idx])) -static const uint32_t kDefaultCodeLength = 8; -static const uint32_t kCodeLengthRepeatCode = 16; -static const uint32_t kNumLiteralCodes = 256; -static const uint32_t kNumInsertAndCopyCodes = 704; -static const uint32_t kNumBlockLengthCodes = 26; -static const int kLiteralContextBits = 6; -static const int kDistanceContextBits = 2; - #define HUFFMAN_TABLE_BITS 8U #define HUFFMAN_TABLE_MASK 0xff -#define CODE_LENGTH_CODES 18 -static const uint8_t kCodeLengthCodeOrder[CODE_LENGTH_CODES] = { +static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = { 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, }; @@ -59,46 +52,49 @@ 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5, }; -#define NUM_DISTANCE_SHORT_CODES 16 - -BrotliState* BrotliCreateState( +BrotliDecoderState* BrotliDecoderCreateInstance( brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) { - BrotliState* state = 0; + BrotliDecoderState* state = 0; if (!alloc_func && !free_func) { - state = (BrotliState*)malloc(sizeof(BrotliState)); + state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState)); } else if (alloc_func && free_func) { - state = (BrotliState*)alloc_func(opaque, sizeof(BrotliState)); + state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState)); } if (state == 0) { BROTLI_DUMP(); return 0; } - BrotliStateInitWithCustomAllocators(state, alloc_func, free_func, opaque); - state->error_code = BROTLI_NO_ERROR; + BrotliDecoderStateInitWithCustomAllocators( + state, alloc_func, free_func, opaque); + state->error_code = BROTLI_DECODER_NO_ERROR; return state; } -/* Deinitializes and frees BrotliState instance. */ -void BrotliDestroyState(BrotliState* state) { +/* Deinitializes and frees BrotliDecoderState instance. */ +void BrotliDecoderDestroyInstance(BrotliDecoderState* state) { if (!state) { return; } else { brotli_free_func free_func = state->free_func; void* opaque = state->memory_manager_opaque; - BrotliStateCleanup(state); + BrotliDecoderStateCleanup(state); free_func(opaque, state); } } -/* Saves error code and converts it to BrotliResult */ -static BROTLI_NOINLINE BrotliResult SaveErrorCode( - BrotliState* s, BrotliErrorCode e) { +/* Saves error code and converts it to BrotliDecoderResult */ +static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode( + BrotliDecoderState* s, BrotliDecoderErrorCode e) { s->error_code = (int)e; switch (e) { - case BROTLI_SUCCESS: return BROTLI_RESULT_SUCCESS; - case BROTLI_NEEDS_MORE_INPUT: return BROTLI_RESULT_NEEDS_MORE_INPUT; - case BROTLI_NEEDS_MORE_OUTPUT: return BROTLI_RESULT_NEEDS_MORE_OUTPUT; - default: return BROTLI_RESULT_ERROR; + case BROTLI_DECODER_SUCCESS: + return BROTLI_DECODER_RESULT_SUCCESS; + case BROTLI_DECODER_NEEDS_MORE_INPUT: + return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; + case BROTLI_DECODER_NEEDS_MORE_OUTPUT: + return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; + default: + return BROTLI_DECODER_RESULT_ERROR; } } @@ -132,60 +128,61 @@ } /* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ -static BROTLI_NOINLINE BrotliErrorCode DecodeVarLenUint8(BrotliState* s, - BrotliBitReader* br, uint32_t* value) { +static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8( + BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) { uint32_t bits; switch (s->substate_decode_uint8) { case BROTLI_STATE_DECODE_UINT8_NONE: - if (PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) { - return BROTLI_NEEDS_MORE_INPUT; + if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) { + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits == 0) { *value = 0; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } /* No break, transit to the next state. */ case BROTLI_STATE_DECODE_UINT8_SHORT: - if (PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) { + if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) { s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits == 0) { *value = 1; s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } /* Use output value as a temporary storage. It MUST be persisted. */ *value = bits; /* No break, transit to the next state. */ case BROTLI_STATE_DECODE_UINT8_LONG: - if (PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) { + if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) { s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } *value = (1U << *value) + bits; s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; default: - return BROTLI_FAILURE(BROTLI_ERROR_UNREACHABLE_1); + return + BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); } } /* Decodes a metablock length and flags by reading 2 - 31 bits. */ -static BrotliErrorCode BROTLI_NOINLINE DecodeMetaBlockLength( - BrotliState* s, BrotliBitReader* br) { +static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength( + BrotliDecoderState* s, BrotliBitReader* br) { uint32_t bits; int i; for (;;) { switch (s->substate_metablock_header) { case BROTLI_STATE_METABLOCK_HEADER_NONE: if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } - s->is_last_metablock = (uint8_t)bits; + s->is_last_metablock = bits ? 1 : 0; s->meta_block_remaining_len = 0; s->is_uncompressed = 0; s->is_metadata = 0; @@ -198,18 +195,18 @@ case BROTLI_STATE_METABLOCK_HEADER_EMPTY: if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits) { s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES; /* No break, transit to the next state. */ case BROTLI_STATE_METABLOCK_HEADER_NIBBLES: if (!BrotliSafeReadBits(br, 2, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } s->size_nibbles = (uint8_t)(bits + 4); s->loop_counter = 0; @@ -223,13 +220,13 @@ case BROTLI_STATE_METABLOCK_HEADER_SIZE: i = s->loop_counter; - for (; i < s->size_nibbles; ++i) { + for (; i < (int)s->size_nibbles; ++i) { if (!BrotliSafeReadBits(br, 4, &bits)) { s->loop_counter = i; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_EXUBERANT_NIBBLE); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE); } s->meta_block_remaining_len |= (int)(bits << (i * 4)); } @@ -240,31 +237,31 @@ case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED: if (!s->is_last_metablock) { if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } - s->is_uncompressed = (uint8_t)bits; + s->is_uncompressed = bits ? 1 : 0; } ++s->meta_block_remaining_len; s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; case BROTLI_STATE_METABLOCK_HEADER_RESERVED: if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits != 0) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_RESERVED); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED); } s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES; /* No break, transit to the next state. */ case BROTLI_STATE_METABLOCK_HEADER_BYTES: if (!BrotliSafeReadBits(br, 2, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits == 0) { s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } s->size_nibbles = (uint8_t)bits; s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA; @@ -272,22 +269,24 @@ case BROTLI_STATE_METABLOCK_HEADER_METADATA: i = s->loop_counter; - for (; i < s->size_nibbles; ++i) { + for (; i < (int)s->size_nibbles; ++i) { if (!BrotliSafeReadBits(br, 8, &bits)) { s->loop_counter = i; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_EXUBERANT_META_NIBBLE); + return BROTLI_FAILURE( + BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE); } s->meta_block_remaining_len |= (int)(bits << (i * 8)); } ++s->meta_block_remaining_len; s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; default: - return BROTLI_FAILURE(BROTLI_ERROR_UNREACHABLE_2); + return + BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); } } } @@ -319,17 +318,16 @@ /* Same as DecodeSymbol, but it is known that there is less than 15 bits of input are currently available. */ -static BROTLI_NOINLINE int SafeDecodeSymbol(const HuffmanCode* table, - BrotliBitReader* br, - uint32_t* result) { +static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol( + const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) { uint32_t val; uint32_t available_bits = BrotliGetAvailableBits(br); if (available_bits == 0) { if (table->bits == 0) { *result = table->value; - return 1; + return BROTLI_TRUE; } - return 0; /* No valid bits at all. */ + return BROTLI_FALSE; /* No valid bits at all. */ } val = (uint32_t)BrotliGetBitsUnmasked(br); table += val & HUFFMAN_TABLE_MASK; @@ -337,13 +335,13 @@ if (table->bits <= available_bits) { BrotliDropBits(br, table->bits); *result = table->value; - return 1; + return BROTLI_TRUE; } else { - return 0; /* Not enough bits for the first level. */ + return BROTLI_FALSE; /* Not enough bits for the first level. */ } } if (available_bits <= HUFFMAN_TABLE_BITS) { - return 0; /* Not enough bits to move to the second level. */ + return BROTLI_FALSE; /* Not enough bits to move to the second level. */ } /* Speculatively drop HUFFMAN_TABLE_BITS. */ @@ -351,21 +349,20 @@ available_bits -= HUFFMAN_TABLE_BITS; table += table->value + val; if (available_bits < table->bits) { - return 0; /* Not enough bits for the second level. */ + return BROTLI_FALSE; /* Not enough bits for the second level. */ } BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits); *result = table->value; - return 1; + return BROTLI_TRUE; } -static BROTLI_INLINE int SafeReadSymbol(const HuffmanCode* table, - BrotliBitReader* br, - uint32_t* result) { +static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol( + const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) { uint32_t val; - if (PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) { + if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) { *result = DecodeSymbol(val, table, br); - return 1; + return BROTLI_TRUE; } return SafeDecodeSymbol(table, br, result); } @@ -391,7 +388,7 @@ uint32_t* bits, uint32_t* value) { uint32_t result = *value; - if (PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) { + if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) { uint32_t val = BrotliGet16BitsUnmasked(br); const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value; uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS)); @@ -419,8 +416,8 @@ Totally 1..4 symbols are read, 1..10 bits each. The list of symbols MUST NOT contain duplicates. */ -static BrotliErrorCode ReadSimpleHuffmanSymbols(uint32_t alphabet_size, - BrotliState* s) { +static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols( + uint32_t alphabet_size, BrotliDecoderState* s) { /* max_bits == 1..10; symbol == 0..3; 1..40 bits will be read. */ BrotliBitReader* br = &s->br; uint32_t max_bits = Log2Floor(alphabet_size - 1); @@ -428,13 +425,14 @@ uint32_t num_symbols = s->symbol; while (i <= num_symbols) { uint32_t v; - if (PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) { + if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) { s->sub_loop_counter = i; s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (v >= alphabet_size) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET); + return + BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET); } s->symbols_lists_array[i] = (uint16_t)v; BROTLI_LOG_UINT(s->symbols_lists_array[i]); @@ -445,19 +443,19 @@ uint32_t k = i + 1; for (; k <= num_symbols; ++k) { if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME); } } } - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } /* Process single decoded symbol code length: A) reset the repeat variable B) remember code length (if it is not 0) - C) extend corredponding index-chain - D) reduce the huffman space + C) extend corresponding index-chain + D) reduce the Huffman space E) update the histogram */ static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len, @@ -478,12 +476,14 @@ /* Process repeated symbol code length. A) Check if it is the extension of previous repeat sequence; if the decoded - value is not kCodeLengthRepeatCode, then it is a new symbol-skip + value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new + symbol-skip B) Update repeat variable - C) Check if operation is feasible (fits alphapet) + C) Check if operation is feasible (fits alphabet) D) For each symbol do the same operations as in ProcessSingleCodeLength - PRECONDITION: code_len == kCodeLengthRepeatCode or kCodeLengthRepeatCode + 1 + PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or + code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */ static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len, uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol, @@ -491,9 +491,11 @@ uint32_t* repeat_code_len, uint16_t* symbol_lists, uint16_t* code_length_histo, int* next_symbol) { uint32_t old_repeat; - uint32_t new_len = 0; - if (code_len == kCodeLengthRepeatCode) { + uint32_t extra_bits = 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */ + uint32_t new_len = 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */ + if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { new_len = *prev_code_len; + extra_bits = 2; } if (*repeat_code_len != new_len) { *repeat = 0; @@ -502,7 +504,7 @@ old_repeat = *repeat; if (*repeat > 0) { *repeat -= 2; - *repeat <<= code_len - 14U; + *repeat <<= extra_bits; } *repeat += repeat_delta + 3U; repeat_delta = *repeat - old_repeat; @@ -531,8 +533,8 @@ } /* Reads and decodes symbol codelengths. */ -static BrotliErrorCode ReadSymbolCodeLengths( - uint32_t alphabet_size, BrotliState* s) { +static BrotliDecoderErrorCode ReadSymbolCodeLengths( + uint32_t alphabet_size, BrotliDecoderState* s) { BrotliBitReader* br = &s->br; uint32_t symbol = s->symbol; uint32_t repeat = s->repeat; @@ -543,7 +545,7 @@ uint16_t* code_length_histo = s->code_length_histo; int* next_symbol = s->next_symbol; if (!BrotliWarmupBitReader(br)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } while (symbol < alphabet_size && space > 0) { const HuffmanCode* p = s->table; @@ -554,31 +556,33 @@ s->prev_code_len = prev_code_len; s->repeat_code_len = repeat_code_len; s->space = space; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } BrotliFillBitWindow16(br); p += BrotliGetBitsUnmasked(br) & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH); BrotliDropBits(br, p->bits); /* Use 1..5 bits */ code_len = p->value; /* code_len == 0..17 */ - if (code_len < kCodeLengthRepeatCode) { + if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { ProcessSingleCodeLength(code_len, &symbol, &repeat, &space, &prev_code_len, symbol_lists, code_length_histo, next_symbol); } else { /* code_len == 16..17, extra_bits == 2..3 */ + uint32_t extra_bits = + (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3; uint32_t repeat_delta = - (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(code_len - 14U); - BrotliDropBits(br, code_len - 14U); + (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits); + BrotliDropBits(br, extra_bits); ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size, &symbol, &repeat, &space, &prev_code_len, &repeat_code_len, symbol_lists, code_length_histo, next_symbol); } } s->space = space; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } -static BrotliErrorCode SafeReadSymbolCodeLengths( - uint32_t alphabet_size, BrotliState* s) { +static BrotliDecoderErrorCode SafeReadSymbolCodeLengths( + uint32_t alphabet_size, BrotliDecoderState* s) { BrotliBitReader* br = &s->br; while (s->symbol < alphabet_size && s->space > 0) { const HuffmanCode* p = s->table; @@ -591,7 +595,7 @@ p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH); if (p->bits > available_bits) goto pullMoreInput; code_len = p->value; /* code_len == 0..17 */ - if (code_len < kCodeLengthRepeatCode) { + if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { BrotliDropBits(br, p->bits); ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space, &s->prev_code_len, s->symbol_lists, s->code_length_histo, @@ -610,24 +614,24 @@ pullMoreInput: if (!BrotliPullByte(br)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } } - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } /* Reads and decodes 15..18 codes using static prefix code. Each code is 2..4 bits long. In total 30..72 bits are used. */ -static BrotliErrorCode ReadCodeLengthCodeLengths(BrotliState* s) { +static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) { BrotliBitReader* br = &s->br; uint32_t num_codes = s->repeat; unsigned space = s->space; uint32_t i = s->sub_loop_counter; - for (; i < CODE_LENGTH_CODES; ++i) { + for (; i < BROTLI_CODE_LENGTH_CODES; ++i) { const uint8_t code_len_idx = kCodeLengthCodeOrder[i]; uint32_t ix; uint32_t v; - if (PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) { + if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) { uint32_t available_bits = BrotliGetAvailableBits(br); if (available_bits != 0) { ix = BrotliGetBitsUnmasked(br) & 0xF; @@ -639,7 +643,7 @@ s->repeat = num_codes; s->space = space; s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } } v = kCodeLengthPrefixValue[ix]; @@ -657,9 +661,9 @@ } } if (!(num_codes == 1 || space == 0)) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_CL_SPACE); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE); } - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } /* Decodes the Huffman tables. @@ -674,10 +678,10 @@ B.2) Decoded table is used to decode code lengths of symbols in resulting Huffman table. In worst case 3520 bits are read. */ -static BrotliErrorCode ReadHuffmanCode(uint32_t alphabet_size, - HuffmanCode* table, - uint32_t* opt_table_size, - BrotliState* s) { +static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size, + HuffmanCode* table, + uint32_t* opt_table_size, + BrotliDecoderState* s) { BrotliBitReader* br = &s->br; /* Unnecessary masking, but might be good for safety. */ alphabet_size &= 0x3ff; @@ -685,7 +689,7 @@ switch (s->substate_huffman) { case BROTLI_STATE_HUFFMAN_NONE: if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } BROTLI_LOG_UINT(s->sub_loop_counter); /* The value is used as follows: @@ -707,13 +711,14 @@ /* Read symbols, codes & code lengths directly. */ if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */ s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } s->sub_loop_counter = 0; /* No break, transit to the next state. */ case BROTLI_STATE_HUFFMAN_SIMPLE_READ: { - BrotliErrorCode result = ReadSimpleHuffmanSymbols(alphabet_size, s); - if (result != BROTLI_SUCCESS) { + BrotliDecoderErrorCode result = + ReadSimpleHuffmanSymbols(alphabet_size, s); + if (result != BROTLI_DECODER_SUCCESS) { return result; } /* No break, transit to the next state. */ @@ -724,7 +729,7 @@ uint32_t bits; if (!BrotliSafeReadBits(br, 1, &bits)) { s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } s->symbol += bits; } @@ -735,14 +740,14 @@ *opt_table_size = table_size; } s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } Complex: /* Decode Huffman-coded code lengths. */ case BROTLI_STATE_HUFFMAN_COMPLEX: { uint32_t i; - BrotliErrorCode result = ReadCodeLengthCodeLengths(s); - if (result != BROTLI_SUCCESS) { + BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s); + if (result != BROTLI_DECODER_SUCCESS) { return result; } BrotliBuildCodeLengthsHuffmanTable(s->table, @@ -755,7 +760,7 @@ } s->symbol = 0; - s->prev_code_len = kDefaultCodeLength; + s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH; s->repeat = 0; s->repeat_code_len = 0; s->space = 32768; @@ -764,17 +769,17 @@ } case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: { uint32_t table_size; - BrotliErrorCode result = ReadSymbolCodeLengths(alphabet_size, s); - if (result == BROTLI_NEEDS_MORE_INPUT) { + BrotliDecoderErrorCode result = ReadSymbolCodeLengths(alphabet_size, s); + if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) { result = SafeReadSymbolCodeLengths(alphabet_size, s); } - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { return result; } if (s->space != 0) { BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", s->space)); - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_HUFFMAN_SPACE); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE); } table_size = BrotliBuildHuffmanTable( table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo); @@ -782,11 +787,12 @@ *opt_table_size = table_size; } s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } default: - return BROTLI_FAILURE(BROTLI_ERROR_UNREACHABLE_3); + return + BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); } } @@ -802,14 +808,13 @@ /* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then reading can't be continued with ReadBlockLength. */ -static BROTLI_INLINE int SafeReadBlockLength(BrotliState* s, - uint32_t* result, - const HuffmanCode* table, - BrotliBitReader* br) { +static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength( + BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table, + BrotliBitReader* br) { uint32_t index; if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) { if (!SafeReadSymbol(table, br, &index)) { - return 0; + return BROTLI_FALSE; } } else { index = s->block_length_index; @@ -820,11 +825,11 @@ if (!BrotliSafeReadBits(br, nbits, &bits)) { s->block_length_index = index; s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX; - return 0; + return BROTLI_FALSE; } *result = kBlockLengthPrefixCode[index].offset + bits; s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE; - return 1; + return BROTLI_TRUE; } } @@ -843,45 +848,46 @@ Most of input values are 0 and 1. To reduce number of branches, we replace inner for loop with do-while. */ -static BROTLI_NOINLINE void InverseMoveToFrontTransform(uint8_t* v, - uint32_t v_len, BrotliState* state) { +static BROTLI_NOINLINE void InverseMoveToFrontTransform( + uint8_t* v, uint32_t v_len, BrotliDecoderState* state) { /* Reinitialize elements that could have been changed. */ - uint32_t i = 4; + uint32_t i = 1; uint32_t upper_bound = state->mtf_upper_bound; - uint8_t* mtf = &state->mtf[4]; /* Make mtf[-1] addressable. */ + uint32_t* mtf = &state->mtf[1]; /* Make mtf[-1] addressable. */ + uint8_t* mtf_u8 = (uint8_t*)mtf; /* Load endian-aware constant. */ const uint8_t b0123[4] = {0, 1, 2, 3}; uint32_t pattern; memcpy(&pattern, &b0123, 4); /* Initialize list using 4 consequent values pattern. */ - *(uint32_t*)mtf = pattern; + mtf[0] = pattern; do { pattern += 0x04040404; /* Advance all 4 values by 4. */ - *(uint32_t*)(mtf + i) = pattern; - i += 4; + mtf[i] = pattern; + i++; } while (i <= upper_bound); /* Transform the input. */ upper_bound = 0; for (i = 0; i < v_len; ++i) { int index = v[i]; - uint8_t value = mtf[index]; + uint8_t value = mtf_u8[index]; upper_bound |= v[i]; v[i] = value; - mtf[-1] = value; + mtf_u8[-1] = value; do { index--; - mtf[index + 1] = mtf[index]; + mtf_u8[index + 1] = mtf_u8[index]; } while (index >= 0); } /* Remember amount of elements to be reinitialized. */ - state->mtf_upper_bound = upper_bound; + state->mtf_upper_bound = upper_bound >> 2; } /* Decodes a series of Huffman table using ReadHuffmanCode function. */ -static BrotliErrorCode HuffmanTreeGroupDecode(HuffmanTreeGroup* group, - BrotliState* s) { +static BrotliDecoderErrorCode HuffmanTreeGroupDecode( + HuffmanTreeGroup* group, BrotliDecoderState* s) { if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) { s->next = group->codes; s->htree_index = 0; @@ -889,15 +895,15 @@ } while (s->htree_index < group->num_htrees) { uint32_t table_size; - BrotliErrorCode result = + BrotliDecoderErrorCode result = ReadHuffmanCode(group->alphabet_size, s->next, &table_size, s); - if (result != BROTLI_SUCCESS) return result; + if (result != BROTLI_DECODER_SUCCESS) return result; group->htrees[s->htree_index] = s->next; s->next += table_size; ++s->htree_index; } s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } /* Decodes a context map. @@ -909,17 +915,17 @@ 3) Read context map items; "0" values could be run-length encoded. 4) Optionally, apply InverseMoveToFront transform to the resulting map. */ -static BrotliErrorCode DecodeContextMap(uint32_t context_map_size, - uint32_t* num_htrees, - uint8_t** context_map_arg, - BrotliState* s) { +static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size, + uint32_t* num_htrees, + uint8_t** context_map_arg, + BrotliDecoderState* s) { BrotliBitReader* br = &s->br; - BrotliErrorCode result = BROTLI_SUCCESS; + BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS; switch ((int)s->substate_context_map) { case BROTLI_STATE_CONTEXT_MAP_NONE: result = DecodeVarLenUint8(s, br, num_htrees); - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { return result; } (*num_htrees)++; @@ -928,11 +934,11 @@ BROTLI_LOG_UINT(*num_htrees); *context_map_arg = (uint8_t*)BROTLI_ALLOC(s, (size_t)context_map_size); if (*context_map_arg == 0) { - return BROTLI_FAILURE(BROTLI_ERROR_ALLOC_CONTEXT_MAP); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP); } if (*num_htrees <= 1) { memset(*context_map_arg, 0, (size_t)context_map_size); - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX; /* No break, continue to next state. */ @@ -941,9 +947,9 @@ /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe to peek 4 bits ahead. */ if (!BrotliSafeGetBits(br, 5, &bits)) { - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } - if ((bits & 1) != 0) { /* Use RLE for zeroes. */ + if ((bits & 1) != 0) { /* Use RLE for zeros. */ s->max_run_length_prefix = (bits >> 1) + 1; BrotliDropBits(br, 5); } else { @@ -957,7 +963,7 @@ case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: result = ReadHuffmanCode(*num_htrees + s->max_run_length_prefix, s->context_map_table, NULL, s); - if (result != BROTLI_SUCCESS) return result; + if (result != BROTLI_DECODER_SUCCESS) return result; s->code = 0xFFFF; s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE; /* No break, continue to next state. */ @@ -973,7 +979,7 @@ if (!SafeReadSymbol(s->context_map_table, br, &code)) { s->code = 0xFFFF; s->context_index = context_index; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } BROTLI_LOG_UINT(code); @@ -992,12 +998,13 @@ if (!BrotliSafeReadBits(br, code, &reps)) { s->code = code; s->context_index = context_index; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } reps += 1U << code; BROTLI_LOG_UINT(reps); if (context_index + reps > context_map_size) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_CONTEXT_MAP_REPEAT); + return + BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT); } do { context_map[context_index++] = 0; @@ -1010,23 +1017,24 @@ uint32_t bits; if (!BrotliSafeReadBits(br, 1, &bits)) { s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits != 0) { InverseMoveToFrontTransform(*context_map_arg, context_map_size, s); } s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE; - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } default: - return BROTLI_FAILURE(BROTLI_ERROR_UNREACHABLE_4); + return + BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); } } -/* Decodes a command or literal and updates block type ringbuffer. +/* Decodes a command or literal and updates block type ring-buffer. Reads 3..54 bits. */ -static BROTLI_INLINE int DecodeBlockTypeAndLength(int safe, - BrotliState* s, int tree_type) { +static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength( + int safe, BrotliDecoderState* s, int tree_type) { uint32_t max_block_type = s->num_block_types[tree_type]; const HuffmanCode* type_tree = &s->block_type_trees[ tree_type * BROTLI_HUFFMAN_MAX_SIZE_258]; @@ -1043,11 +1051,11 @@ } else { BrotliBitReaderState memento; BrotliBitReaderSaveState(br, &memento); - if (!SafeReadSymbol(type_tree, br, &block_type)) return 0; + if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE; if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) { s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE; BrotliBitReaderRestoreState(br, &memento); - return 0; + return BROTLI_FALSE; } } @@ -1063,148 +1071,218 @@ } ringbuffer[0] = ringbuffer[1]; ringbuffer[1] = block_type; - return 1; + return BROTLI_TRUE; +} + +static BROTLI_INLINE void DetectTrivialLiteralBlockTypes( + BrotliDecoderState* s) { + size_t i; + for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0; + for (i = 0; i < s->num_block_types[0]; i++) { + size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS; + size_t error = 0; + size_t sample = s->context_map[offset]; + size_t j; + for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) { + BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;) + } + if (error == 0) { + s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31); + } + } +} + +static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) { + uint8_t context_mode; + size_t trivial; + uint32_t block_type = s->block_type_rb[1]; + uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS; + s->context_map_slice = s->context_map + context_offset; + trivial = s->trivial_literal_contexts[block_type >> 5]; + s->trivial_literal_context = (trivial >> (block_type & 31)) & 1; + s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]]; + context_mode = s->context_modes[block_type]; + s->context_lookup1 = &kContextLookup[kContextLookupOffsets[context_mode]]; + s->context_lookup2 = &kContextLookup[kContextLookupOffsets[context_mode + 1]]; } /* Decodes the block type and updates the state for literal context. Reads 3..54 bits. */ -static BROTLI_INLINE int DecodeLiteralBlockSwitchInternal(int safe, - BrotliState* s) { - uint8_t context_mode; - uint32_t context_offset; +static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal( + int safe, BrotliDecoderState* s) { if (!DecodeBlockTypeAndLength(safe, s, 0)) { - return 0; + return BROTLI_FALSE; } - context_offset = s->block_type_rb[1] << kLiteralContextBits; - s->context_map_slice = s->context_map + context_offset; - s->literal_htree_index = s->context_map_slice[0]; - s->literal_htree = s->literal_hgroup.htrees[s->literal_htree_index]; - context_mode = s->context_modes[s->block_type_rb[1]]; - s->context_lookup1 = &kContextLookup[kContextLookupOffsets[context_mode]]; - s->context_lookup2 = &kContextLookup[kContextLookupOffsets[context_mode + 1]]; - return 1; + PrepareLiteralDecoding(s); + return BROTLI_TRUE; } -static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliState* s) { +static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) { DecodeLiteralBlockSwitchInternal(0, s); } -static int BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(BrotliState* s) { +static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch( + BrotliDecoderState* s) { return DecodeLiteralBlockSwitchInternal(1, s); } /* Block switch for insert/copy length. Reads 3..54 bits. */ -static BROTLI_INLINE int DecodeCommandBlockSwitchInternal(int safe, - BrotliState* s) { +static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal( + int safe, BrotliDecoderState* s) { if (!DecodeBlockTypeAndLength(safe, s, 1)) { - return 0; + return BROTLI_FALSE; } s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]]; - return 1; + return BROTLI_TRUE; } -static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliState* s) { +static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) { DecodeCommandBlockSwitchInternal(0, s); } -static int BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(BrotliState* s) { +static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch( + BrotliDecoderState* s) { return DecodeCommandBlockSwitchInternal(1, s); } /* Block switch for distance codes. Reads 3..54 bits. */ -static BROTLI_INLINE int DecodeDistanceBlockSwitchInternal(int safe, - BrotliState* s) { +static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal( + int safe, BrotliDecoderState* s) { if (!DecodeBlockTypeAndLength(safe, s, 2)) { - return 0; + return BROTLI_FALSE; } - s->dist_context_map_slice = - s->dist_context_map + (s->block_type_rb[5] << kDistanceContextBits); + s->dist_context_map_slice = s->dist_context_map + + (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS); s->dist_htree_index = s->dist_context_map_slice[s->distance_context]; - return 1; + return BROTLI_TRUE; } -static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliState* s) { +static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) { DecodeDistanceBlockSwitchInternal(0, s); } -static int BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(BrotliState* s) { +static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch( + BrotliDecoderState* s) { return DecodeDistanceBlockSwitchInternal(1, s); } -static BrotliErrorCode BROTLI_NOINLINE WriteRingBuffer(size_t* available_out, - uint8_t** next_out, size_t* total_out, BrotliState* s) { - size_t pos = (s->pos > s->ringbuffer_size) ? (size_t)s->ringbuffer_size - : (size_t)(s->pos); +static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) { + size_t pos = wrap && s->pos > s->ringbuffer_size ? + (size_t)s->ringbuffer_size : (size_t)(s->pos); + size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos; + return partial_pos_rb - s->partial_pos_out; +} + +/* Dumps output. + Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push + and either ring-buffer is as big as window size, or |force| is true. + */ +static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer( + BrotliDecoderState* s, size_t* available_out, uint8_t** next_out, + size_t* total_out, BROTLI_BOOL force) { uint8_t* start = s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask); - size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos; - size_t to_write = (partial_pos_rb - s->partial_pos_out); + size_t to_write = UnwrittenBytes(s, BROTLI_TRUE); size_t num_written = *available_out; if (num_written > to_write) { num_written = to_write; } if (s->meta_block_remaining_len < 0) { - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_BLOCK_LENGTH_1); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1); } - memcpy(*next_out, start, num_written); - *next_out += num_written; + if (next_out && !*next_out) { + *next_out = start; + } else { + if (next_out) { + memcpy(*next_out, start, num_written); + *next_out += num_written; + } + } *available_out -= num_written; BROTLI_LOG_UINT(to_write); BROTLI_LOG_UINT(num_written); s->partial_pos_out += num_written; - *total_out = s->partial_pos_out; + if (total_out) *total_out = s->partial_pos_out - (size_t)s->custom_dict_size; if (num_written < to_write) { - return BROTLI_NEEDS_MORE_OUTPUT; + if (s->ringbuffer_size == (1 << s->window_bits) || force) { + return BROTLI_DECODER_NEEDS_MORE_OUTPUT; + } else { + return BROTLI_DECODER_SUCCESS; + } } - - if (s->pos >= s->ringbuffer_size) { + /* Wrap ring buffer only if it has reached its maximal size. */ + if (s->ringbuffer_size == (1 << s->window_bits) && + s->pos >= s->ringbuffer_size) { s->pos -= s->ringbuffer_size; s->rb_roundtrips++; + s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0; } - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } -/* Allocates ringbuffer. +static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) { + if (s->should_wrap_ringbuffer) { + memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos); + s->should_wrap_ringbuffer = 0; + } +} - s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before - this function is called. +/* Allocates ring-buffer. - Last two bytes of ringbuffer are initialized to 0, so context calculation + s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before + this function is called. + + Last two bytes of ring-buffer are initialized to 0, so context calculation could be done uniformly for the first two and all other positions. - Custom dictionary, if any, is copied to the end of ringbuffer. + Custom dictionary, if any, is copied to the end of ring-buffer. */ -static int BROTLI_NOINLINE BrotliAllocateRingBuffer(BrotliState* s) { +static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer( + BrotliDecoderState* s) { /* We need the slack region for the following reasons: - doing up to two 16-byte copies for fast backward copying - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */ static const int kRingBufferWriteAheadSlack = 42; - s->ringbuffer = (uint8_t*)BROTLI_ALLOC(s, (size_t)(s->ringbuffer_size + + uint8_t* old_ringbuffer = s->ringbuffer; + if (s->ringbuffer_size == s->new_ringbuffer_size) { + return BROTLI_TRUE; + } + + s->ringbuffer = (uint8_t*)BROTLI_ALLOC(s, (size_t)(s->new_ringbuffer_size + kRingBufferWriteAheadSlack)); if (s->ringbuffer == 0) { - return 0; + /* Restore previous value. */ + s->ringbuffer = old_ringbuffer; + return BROTLI_FALSE; + } + s->ringbuffer[s->new_ringbuffer_size - 2] = 0; + s->ringbuffer[s->new_ringbuffer_size - 1] = 0; + + if (!old_ringbuffer) { + if (s->custom_dict) { + memcpy(s->ringbuffer, s->custom_dict, (size_t)s->custom_dict_size); + s->partial_pos_out = (size_t)s->custom_dict_size; + s->pos = s->custom_dict_size; + } + } else { + memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos); + BROTLI_FREE(s, old_ringbuffer); } + s->ringbuffer_size = s->new_ringbuffer_size; + s->ringbuffer_mask = s->new_ringbuffer_size - 1; s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size; - s->ringbuffer[s->ringbuffer_size - 2] = 0; - s->ringbuffer[s->ringbuffer_size - 1] = 0; - - if (s->custom_dict) { - memcpy(&s->ringbuffer[(-s->custom_dict_size) & s->ringbuffer_mask], - s->custom_dict, (size_t)s->custom_dict_size); - } - - return 1; + return BROTLI_TRUE; } -static BrotliErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput( +static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput( size_t* available_out, uint8_t** next_out, size_t* total_out, - BrotliState* s) { + BrotliDecoderState* s) { /* TODO: avoid allocation for single uncompressed block. */ - if (!s->ringbuffer && !BrotliAllocateRingBuffer(s)) { - return BROTLI_FAILURE(BROTLI_ERROR_ALLOC_RING_BUFFER_1); + if (!BrotliEnsureRingBuffer(s)) { + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1); } /* State machine */ @@ -1218,26 +1296,29 @@ if (s->pos + nbytes > s->ringbuffer_size) { nbytes = s->ringbuffer_size - s->pos; } - /* Copy remaining bytes from s->br.buf_ to ringbuffer. */ + /* Copy remaining bytes from s->br.buf_ to ring-buffer. */ BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes); s->pos += nbytes; s->meta_block_remaining_len -= nbytes; - if (s->pos < s->ringbuffer_size) { + if (s->pos < 1 << s->window_bits) { if (s->meta_block_remaining_len == 0) { - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE; /* No break, continue to next state */ } case BROTLI_STATE_UNCOMPRESSED_WRITE: { - BrotliErrorCode result = - WriteRingBuffer(available_out, next_out, total_out, s); - if (result != BROTLI_SUCCESS) { + BrotliDecoderErrorCode result; + result = WriteRingBuffer( + s, available_out, next_out, total_out, BROTLI_FALSE); + if (result != BROTLI_DECODER_SUCCESS) { return result; } - s->max_distance = s->max_backward_distance; + if (s->ringbuffer_size == 1 << s->window_bits) { + s->max_distance = s->max_backward_distance; + } s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE; break; } @@ -1246,69 +1327,50 @@ BROTLI_DCHECK(0); /* Unreachable */ } -int BrotliDecompressedSize(size_t encoded_size, - const uint8_t* encoded_buffer, - size_t* decoded_size) { - BrotliState s; - int next_block_header; - BrotliStateInit(&s); - s.br.next_in = encoded_buffer; - s.br.avail_in = encoded_size; - if (!BrotliWarmupBitReader(&s.br)) { - return 0; - } - DecodeWindowBits(&s.br); - if (DecodeMetaBlockLength(&s, &s.br) != BROTLI_SUCCESS) { - return 0; - } - *decoded_size = (size_t)s.meta_block_remaining_len; - if (s.is_last_metablock) { - return 1; - } - if (!s.is_uncompressed || !BrotliJumpToByteBoundary(&s.br)) { - return 0; - } - next_block_header = BrotliPeekByte(&s.br, (size_t)s.meta_block_remaining_len); - return (next_block_header != -1) && ((next_block_header & 3) == 3); -} - /* Calculates the smallest feasible ring buffer. - If we know the data size is small, do not allocate more ringbuffer + If we know the data size is small, do not allocate more ring buffer size than needed to reduce memory usage. When this method is called, metablock size and flags MUST be decoded. */ -static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(BrotliState* s, - BrotliBitReader* br) { - int is_last = s->is_last_metablock; +static void BROTLI_NOINLINE BrotliCalculateRingBufferSize( + BrotliDecoderState* s) { int window_size = 1 << s->window_bits; - s->ringbuffer_size = window_size; - - if (s->is_uncompressed) { - int next_block_header = - BrotliPeekByte(br, (size_t)s->meta_block_remaining_len); - if (next_block_header != -1) { /* Peek succeeded */ - if ((next_block_header & 3) == 3) { /* ISLAST and ISEMPTY */ - is_last = 1; - } - } - } - + int new_ringbuffer_size = window_size; /* We need at least 2 bytes of ring buffer size to get the last two bytes for context from there */ - if (is_last) { - int min_size_x2 = (s->meta_block_remaining_len + s->custom_dict_size) * 2; - while (s->ringbuffer_size >= min_size_x2 && s->ringbuffer_size > 32) { - s->ringbuffer_size >>= 1; - } + int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024; + int output_size; + + /* If maximum is already reached, no further extension is retired. */ + if (s->ringbuffer_size == window_size) { + return; } - s->ringbuffer_mask = s->ringbuffer_size - 1; + /* Metadata blocks does not touch ring buffer. */ + if (s->is_metadata) { + return; + } + + if (!s->ringbuffer) { + /* Custom dictionary counts as a "virtual" output. */ + output_size = s->custom_dict_size; + } else { + output_size = s->pos; + } + output_size += s->meta_block_remaining_len; + min_size = min_size < output_size ? output_size : min_size; + + while ((new_ringbuffer_size >> 1) >= min_size) { + new_ringbuffer_size >>= 1; + } + + s->new_ringbuffer_size = new_ringbuffer_size; } /* Reads 1..256 2-bit context modes. */ -static BrotliErrorCode ReadContextModes(BrotliState* s) { +static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) { BrotliBitReader* br = &s->br; int i = s->loop_counter; @@ -1316,16 +1378,16 @@ uint32_t bits; if (!BrotliSafeReadBits(br, 2, &bits)) { s->loop_counter = i; - return BROTLI_NEEDS_MORE_INPUT; + return BROTLI_DECODER_NEEDS_MORE_INPUT; } s->context_modes[i] = (uint8_t)(bits << 1); BROTLI_LOG_ARRAY_INDEX(s->context_modes, i); i++; } - return BROTLI_SUCCESS; + return BROTLI_DECODER_SUCCESS; } -static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliState* s) { +static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) { if (s->distance_code == 0) { --s->dist_rb_idx; s->distance_code = s->dist_rb[s->dist_rb_idx & 3]; @@ -1354,19 +1416,19 @@ } } -static BROTLI_INLINE int SafeReadBits( +static BROTLI_INLINE BROTLI_BOOL SafeReadBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { if (n_bits != 0) { return BrotliSafeReadBits(br, n_bits, val); } else { *val = 0; - return 1; + return BROTLI_TRUE; } } /* Precondition: s->distance_code < 0 */ -static BROTLI_INLINE int ReadDistanceInternal(int safe, - BrotliState* s, BrotliBitReader* br) { +static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal( + int safe, BrotliDecoderState* s, BrotliBitReader* br) { int distval; BrotliBitReaderState memento; HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index]; @@ -1376,7 +1438,7 @@ uint32_t code; BrotliBitReaderSaveState(br, &memento); if (!SafeReadSymbol(distance_tree, br, &code)) { - return 0; + return BROTLI_FALSE; } s->distance_code = (int)code; } @@ -1385,7 +1447,7 @@ if ((s->distance_code & ~0xf) == 0) { TakeDistanceFromRingBuffer(s); --s->block_length[2]; - return 1; + return BROTLI_TRUE; } distval = s->distance_code - (int)s->num_direct_distance_codes; if (distval >= 0) { @@ -1407,7 +1469,7 @@ if (!SafeReadBits(br, nbits, &bits)) { s->distance_code = -1; /* Restore precondition. */ BrotliBitReaderRestoreState(br, &memento); - return 0; + return BROTLI_FALSE; } } else { bits = BrotliReadBits(br, nbits); @@ -1417,21 +1479,23 @@ ((offset + (int)bits) << s->distance_postfix_bits) + postfix; } } - s->distance_code = s->distance_code - NUM_DISTANCE_SHORT_CODES + 1; + s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1; --s->block_length[2]; - return 1; + return BROTLI_TRUE; } -static BROTLI_INLINE void ReadDistance(BrotliState* s, BrotliBitReader* br) { +static BROTLI_INLINE void ReadDistance( + BrotliDecoderState* s, BrotliBitReader* br) { ReadDistanceInternal(0, s, br); } -static BROTLI_INLINE int SafeReadDistance(BrotliState* s, BrotliBitReader* br) { +static BROTLI_INLINE BROTLI_BOOL SafeReadDistance( + BrotliDecoderState* s, BrotliBitReader* br) { return ReadDistanceInternal(1, s, br); } -static BROTLI_INLINE int ReadCommandInternal(int safe, - BrotliState* s, BrotliBitReader* br, int* insert_length) { +static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal( + int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) { uint32_t cmd_code; uint32_t insert_len_extra = 0; uint32_t copy_length; @@ -1442,7 +1506,7 @@ } else { BrotliBitReaderSaveState(br, &memento); if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) { - return 0; + return BROTLI_FALSE; } } v = kCmdLut[cmd_code]; @@ -1451,7 +1515,7 @@ s->dist_htree_index = s->dist_context_map_slice[s->distance_context]; *insert_length = v.insert_len_offset; if (!safe) { - if (PREDICT_FALSE(v.insert_len_extra_bits != 0)) { + if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) { insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits); } copy_length = BrotliReadBits(br, v.copy_len_extra_bits); @@ -1459,54 +1523,54 @@ if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) || !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) { BrotliBitReaderRestoreState(br, &memento); - return 0; + return BROTLI_FALSE; } } s->copy_length = (int)copy_length + v.copy_len_offset; --s->block_length[1]; *insert_length += (int)insert_len_extra; - return 1; + return BROTLI_TRUE; } -static BROTLI_INLINE void ReadCommand(BrotliState* s, BrotliBitReader* br, - int* insert_length) { +static BROTLI_INLINE void ReadCommand( + BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) { ReadCommandInternal(0, s, br, insert_length); } -static BROTLI_INLINE int SafeReadCommand(BrotliState* s, BrotliBitReader* br, - int* insert_length) { +static BROTLI_INLINE BROTLI_BOOL SafeReadCommand( + BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) { return ReadCommandInternal(1, s, br, insert_length); } -static BROTLI_INLINE int CheckInputAmount(int safe, - BrotliBitReader* const br, size_t num) { +static BROTLI_INLINE BROTLI_BOOL CheckInputAmount( + int safe, BrotliBitReader* const br, size_t num) { if (safe) { - return 1; + return BROTLI_TRUE; } return BrotliCheckInputAmount(br, num); } -#define BROTLI_SAFE(METHOD) \ - { \ - if (safe) { \ - if (!Safe##METHOD) { \ - result = BROTLI_NEEDS_MORE_INPUT; \ - goto saveStateAndReturn; \ - } \ - } else { \ - METHOD; \ - } \ +#define BROTLI_SAFE(METHOD) \ + { \ + if (safe) { \ + if (!Safe##METHOD) { \ + result = BROTLI_DECODER_NEEDS_MORE_INPUT; \ + goto saveStateAndReturn; \ + } \ + } else { \ + METHOD; \ + } \ } -static BROTLI_INLINE BrotliErrorCode ProcessCommandsInternal(int safe, - BrotliState* s) { +static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal( + int safe, BrotliDecoderState* s) { int pos = s->pos; int i = s->loop_counter; - BrotliErrorCode result = BROTLI_SUCCESS; + BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS; BrotliBitReader* br = &s->br; if (!CheckInputAmount(safe, br, 28)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; goto saveStateAndReturn; } if (!safe) { @@ -1523,7 +1587,7 @@ } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) { goto CommandPostWrapCopy; } else { - return BROTLI_FAILURE(BROTLI_ERROR_UNREACHABLE_5); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); } CommandBegin: @@ -1532,10 +1596,10 @@ } if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */ s->state = BROTLI_STATE_COMMAND_BEGIN; - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; goto saveStateAndReturn; } - if (PREDICT_FALSE(s->block_length[1] == 0)) { + if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) { BROTLI_SAFE(DecodeCommandBlockSwitch(s)); goto CommandBegin; } @@ -1560,12 +1624,13 @@ do { if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */ s->state = BROTLI_STATE_COMMAND_INNER; - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; goto saveStateAndReturn; } - if (PREDICT_FALSE(s->block_length[0] == 0)) { + if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) { BROTLI_SAFE(DecodeLiteralBlockSwitch(s)); PreloadSymbol(safe, s->literal_htree, br, &bits, &value); + if (!s->trivial_literal_context) goto CommandInner; } if (!safe) { s->ringbuffer[pos] = @@ -1573,16 +1638,15 @@ } else { uint32_t literal; if (!SafeReadSymbol(s->literal_htree, br, &literal)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; goto saveStateAndReturn; } s->ringbuffer[pos] = (uint8_t)literal; } --s->block_length[0]; - BROTLI_LOG_UINT(s->literal_htree_index); BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos); ++pos; - if (PREDICT_FALSE(pos == s->ringbuffer_size)) { + if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) { s->state = BROTLI_STATE_COMMAND_INNER_WRITE; --i; goto saveStateAndReturn; @@ -1596,11 +1660,12 @@ uint8_t context; if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */ s->state = BROTLI_STATE_COMMAND_INNER; - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; goto saveStateAndReturn; } - if (PREDICT_FALSE(s->block_length[0] == 0)) { + if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) { BROTLI_SAFE(DecodeLiteralBlockSwitch(s)); + if (s->trivial_literal_context) goto CommandInner; } context = s->context_lookup1[p1] | s->context_lookup2[p2]; BROTLI_LOG_UINT(context); @@ -1611,7 +1676,7 @@ } else { uint32_t literal; if (!SafeReadSymbol(hc, br, &literal)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; goto saveStateAndReturn; } p1 = (uint8_t)literal; @@ -1621,7 +1686,7 @@ BROTLI_LOG_UINT(s->context_map_slice[context]); BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask); ++pos; - if (PREDICT_FALSE(pos == s->ringbuffer_size)) { + if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) { s->state = BROTLI_STATE_COMMAND_INNER_WRITE; --i; goto saveStateAndReturn; @@ -1629,7 +1694,7 @@ } while (--i != 0); } BROTLI_LOG_UINT(s->meta_block_remaining_len); - if (s->meta_block_remaining_len <= 0) { + if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) { s->state = BROTLI_STATE_METABLOCK_DONE; goto saveStateAndReturn; } @@ -1644,7 +1709,7 @@ goto postReadDistance; /* We already have the implicit distance */ } /* Read distance code in the command, unless it was implicitly zero. */ - if (PREDICT_FALSE(s->block_length[2] == 0)) { + if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) { BROTLI_SAFE(DecodeDistanceBlockSwitch(s)); } BROTLI_SAFE(ReadDistance(s, br)); @@ -1652,18 +1717,15 @@ BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n", pos, s->distance_code)); if (s->max_distance != s->max_backward_distance) { - if (pos < s->max_backward_distance_minus_custom_dict_size) { - s->max_distance = pos + s->custom_dict_size; - } else { - s->max_distance = s->max_backward_distance; - } + s->max_distance = + (pos < s->max_backward_distance) ? pos : s->max_backward_distance; } i = s->copy_length; /* Apply copy of LZ77 back-reference, or static dictionary reference if the distance is larger than the max LZ77 distance */ if (s->distance_code > s->max_distance) { - if (i >= kBrotliMinDictionaryWordLength && - i <= kBrotliMaxDictionaryWordLength) { + if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH && + i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) { int offset = (int)kBrotliDictionaryOffsetsByLength[i]; int word_id = s->distance_code - s->max_distance - 1; uint32_t shift = kBrotliDictionarySizeBitsByLength[i]; @@ -1691,13 +1753,13 @@ BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d " "len: %d bytes left: %d\n", pos, s->distance_code, i, s->meta_block_remaining_len)); - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_TRANSFORM); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM); } } else { BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d " "len: %d bytes left: %d\n", pos, s->distance_code, i, s->meta_block_remaining_len)); - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_DICTIONARY); + return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY); } } else { int src_start = (pos - s->distance_code) & s->ringbuffer_mask; @@ -1709,15 +1771,9 @@ s->dist_rb[s->dist_rb_idx & 3] = s->distance_code; ++s->dist_rb_idx; s->meta_block_remaining_len -= i; - if (PREDICT_FALSE(s->meta_block_remaining_len < 0)) { - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d " - "len: %d bytes left: %d\n", - pos, s->distance_code, i, s->meta_block_remaining_len)); - return BROTLI_FAILURE(BROTLI_ERROR_FORMAT_BLOCK_LENGTH_2); - } - /* There are 32+ bytes of slack in the ringbuffer allocation. + /* There are 32+ bytes of slack in the ring-buffer allocation. Also, we have 16 short codes, that make these 16 bytes irrelevant - in the ringbuffer. Let's copy over them as a first guess. + in the ring-buffer. Let's copy over them as a first guess. */ memmove16(copy_dst, copy_src); if (src_end > pos && dst_end > src_start) { @@ -1754,7 +1810,7 @@ s->ringbuffer[pos] = s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask]; ++pos; - if (PREDICT_FALSE(--wrap_guard == 0)) { + if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) { s->state = BROTLI_STATE_COMMAND_POST_WRITE_2; goto saveStateAndReturn; } @@ -1776,32 +1832,33 @@ #undef BROTLI_SAFE -static BROTLI_NOINLINE BrotliErrorCode ProcessCommands(BrotliState* s) { +static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands( + BrotliDecoderState* s) { return ProcessCommandsInternal(0, s); } -static BROTLI_NOINLINE BrotliErrorCode SafeProcessCommands(BrotliState* s) { +static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands( + BrotliDecoderState* s) { return ProcessCommandsInternal(1, s); } -BrotliResult BrotliDecompressBuffer(size_t encoded_size, - const uint8_t* encoded_buffer, - size_t* decoded_size, - uint8_t* decoded_buffer) { - BrotliState s; - BrotliResult result; +BrotliDecoderResult BrotliDecoderDecompress( + size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size, + uint8_t* decoded_buffer) { + BrotliDecoderState s; + BrotliDecoderResult result; size_t total_out = 0; size_t available_in = encoded_size; const uint8_t* next_in = encoded_buffer; size_t available_out = *decoded_size; uint8_t* next_out = decoded_buffer; - BrotliStateInit(&s); - result = BrotliDecompressStream(&available_in, &next_in, &available_out, - &next_out, &total_out, &s); + BrotliDecoderStateInit(&s); + result = BrotliDecoderDecompressStream( + &s, &available_in, &next_in, &available_out, &next_out, &total_out); *decoded_size = total_out; - BrotliStateCleanup(&s); - if (result != BROTLI_RESULT_SUCCESS) { - result = BROTLI_RESULT_ERROR; + BrotliDecoderStateCleanup(&s); + if (result != BROTLI_DECODER_RESULT_SUCCESS) { + result = BROTLI_DECODER_RESULT_ERROR; } return result; } @@ -1809,7 +1866,7 @@ /* Invariant: input stream is never overconsumed: * invalid input implies that the whole stream is invalid -> any amount of input could be read and discarded - * when result is "needs more input", then at leat one more byte is REQUIRED + * when result is "needs more input", then at least one more byte is REQUIRED to complete decoding; all input data MUST be consumed by decoder, so client could swap the input buffer * when result is "needs more output" decoder MUST ensure that it doesn't @@ -1818,11 +1875,16 @@ * when result is "success" decoder MUST return all unused data back to input buffer; this is possible because the invariant is hold on enter */ -BrotliResult BrotliDecompressStream(size_t* available_in, - const uint8_t** next_in, size_t* available_out, uint8_t** next_out, - size_t* total_out, BrotliState* s) { - BrotliErrorCode result = BROTLI_SUCCESS; +BrotliDecoderResult BrotliDecoderDecompressStream( + BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in, + size_t* available_out, uint8_t** next_out, size_t* total_out) { + BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS; BrotliBitReader* br = &s->br; + if (*available_out && (!next_out || !*next_out)) { + return SaveErrorCode( + s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS)); + } + if (!*available_out) next_out = 0; if (s->buffer_length == 0) { /* Just connect bit reader to input stream. */ br->avail_in = *available_in; br->next_in = *next_in; @@ -1830,30 +1892,30 @@ /* At least one byte of input is required. More than one byte of input may be required to complete the transaction -> reading more data must be done in a loop -> do it in a main loop. */ - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; br->next_in = &s->buffer.u8[0]; } /* State machine */ for (;;) { - if (result != BROTLI_SUCCESS) { /* Error | needs more input/output */ - if (result == BROTLI_NEEDS_MORE_INPUT) { - if (s->ringbuffer != 0) { /* Proactively push output. */ - WriteRingBuffer(available_out, next_out, total_out, s); + if (result != BROTLI_DECODER_SUCCESS) { /* Error, needs more input/output */ + if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) { + if (s->ringbuffer != 0) { /* Pro-actively push output. */ + WriteRingBuffer(s, available_out, next_out, total_out, BROTLI_TRUE); } if (s->buffer_length != 0) { /* Used with internal buffer. */ if (br->avail_in == 0) { /* Successfully finished read transaction. */ - /* Accamulator contains less than 8 bits, because internal buffer + /* Accumulator contains less than 8 bits, because internal buffer is expanded byte-by-byte until it is enough to complete read. */ s->buffer_length = 0; /* Switch to input stream and restart. */ - result = BROTLI_SUCCESS; + result = BROTLI_DECODER_SUCCESS; br->avail_in = *available_in; br->next_in = *next_in; continue; } else if (*available_in != 0) { /* Not enough data in buffer, but can take one more byte from input stream. */ - result = BROTLI_SUCCESS; + result = BROTLI_DECODER_SUCCESS; s->buffer.u8[s->buffer_length] = **next_in; s->buffer_length++; br->avail_in = s->buffer_length; @@ -1887,8 +1949,8 @@ s->buffer_length = 0; } else { /* Using input stream in last iteration. When decoder switches to input - stream it has less than 8 bits in accamulator, so it is safe to - return unused accamulator bits there. */ + stream it has less than 8 bits in accumulator, so it is safe to + return unused accumulator bits there. */ BrotliBitReaderUnload(br); *available_in = br->avail_in; *next_in = br->next_in; @@ -1899,7 +1961,7 @@ case BROTLI_STATE_UNINITED: /* Prepare to the first read. */ if (!BrotliWarmupBitReader(br)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; break; } /* Decode window size. */ @@ -1907,25 +1969,23 @@ BROTLI_LOG_UINT(s->window_bits); if (s->window_bits == 9) { /* Value 9 is reserved for future use. */ - result = BROTLI_FAILURE(BROTLI_ERROR_FORMAT_WINDOW_BITS); + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS); break; } /* Maximum distance, see section 9.1. of the spec. */ - s->max_backward_distance = (1 << s->window_bits) - 16; + s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP; /* Limit custom dictionary size. */ if (s->custom_dict_size >= s->max_backward_distance) { s->custom_dict += s->custom_dict_size - s->max_backward_distance; s->custom_dict_size = s->max_backward_distance; } - s->max_backward_distance_minus_custom_dict_size = - s->max_backward_distance - s->custom_dict_size; /* Allocate memory for both block_type_trees and block_len_trees. */ s->block_type_trees = (HuffmanCode*)BROTLI_ALLOC(s, sizeof(HuffmanCode) * 3 * (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26)); if (s->block_type_trees == 0) { - result = BROTLI_FAILURE(BROTLI_ERROR_ALLOC_BLOCK_TYPE_TREES); + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES); break; } s->block_len_trees = @@ -1934,13 +1994,13 @@ s->state = BROTLI_STATE_METABLOCK_BEGIN; /* No break, continue to next state */ case BROTLI_STATE_METABLOCK_BEGIN: - BrotliStateMetablockBegin(s); + BrotliDecoderStateMetablockBegin(s); BROTLI_LOG_UINT(s->pos); s->state = BROTLI_STATE_METABLOCK_HEADER; /* No break, continue to next state */ case BROTLI_STATE_METABLOCK_HEADER: result = DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. */ - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { break; } BROTLI_LOG_UINT(s->is_last_metablock); @@ -1949,7 +2009,7 @@ BROTLI_LOG_UINT(s->is_uncompressed); if (s->is_metadata || s->is_uncompressed) { if (!BrotliJumpToByteBoundary(br)) { - result = BROTLI_FAILURE(BROTLI_ERROR_FORMAT_PADDING_1); + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1); break; } } @@ -1961,9 +2021,7 @@ s->state = BROTLI_STATE_METABLOCK_DONE; break; } - if (!s->ringbuffer) { - BrotliCalculateRingBufferSize(s, br); - } + BrotliCalculateRingBufferSize(s); if (s->is_uncompressed) { s->state = BROTLI_STATE_UNCOMPRESSED; break; @@ -1976,7 +2034,7 @@ result = CopyUncompressedBlockToOutput( available_out, next_out, total_out, s); bytes_copied -= s->meta_block_remaining_len; - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { break; } s->state = BROTLI_STATE_METABLOCK_DONE; @@ -1987,11 +2045,11 @@ uint32_t bits; /* Read one byte and ignore it. */ if (!BrotliSafeReadBits(br, 8, &bits)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; break; } } - if (result == BROTLI_SUCCESS) { + if (result == BROTLI_DECODER_SUCCESS) { s->state = BROTLI_STATE_METABLOCK_DONE; } break; @@ -2002,7 +2060,7 @@ } /* Reads 1..11 bits. */ result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]); - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { break; } s->num_block_types[s->loop_counter]++; @@ -2017,15 +2075,15 @@ int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258; result = ReadHuffmanCode(s->num_block_types[s->loop_counter] + 2, &s->block_type_trees[tree_offset], NULL, s); - if (result != BROTLI_SUCCESS) break; + if (result != BROTLI_DECODER_SUCCESS) break; s->state = BROTLI_STATE_HUFFMAN_CODE_2; /* No break, continue to next state */ } case BROTLI_STATE_HUFFMAN_CODE_2: { int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26; - result = ReadHuffmanCode(kNumBlockLengthCodes, + result = ReadHuffmanCode(BROTLI_NUM_BLOCK_LEN_SYMBOLS, &s->block_len_trees[tree_offset], NULL, s); - if (result != BROTLI_SUCCESS) break; + if (result != BROTLI_DECODER_SUCCESS) break; s->state = BROTLI_STATE_HUFFMAN_CODE_3; /* No break, continue to next state */ } @@ -2033,7 +2091,7 @@ int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26; if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter], &s->block_len_trees[tree_offset], br)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; break; } BROTLI_LOG_UINT(s->block_length[s->loop_counter]); @@ -2044,20 +2102,20 @@ case BROTLI_STATE_METABLOCK_HEADER_2: { uint32_t bits; if (!BrotliSafeReadBits(br, 6, &bits)) { - result = BROTLI_NEEDS_MORE_INPUT; + result = BROTLI_DECODER_NEEDS_MORE_INPUT; break; } s->distance_postfix_bits = bits & BitMask(2); bits >>= 2; - s->num_direct_distance_codes = - NUM_DISTANCE_SHORT_CODES + (bits << s->distance_postfix_bits); + s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES + + (bits << s->distance_postfix_bits); BROTLI_LOG_UINT(s->num_direct_distance_codes); BROTLI_LOG_UINT(s->distance_postfix_bits); s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits); s->context_modes = (uint8_t*)BROTLI_ALLOC(s, (size_t)s->num_block_types[0]); if (s->context_modes == 0) { - result = BROTLI_FAILURE(BROTLI_ERROR_ALLOC_CONTEXT_MODES); + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES); break; } s->loop_counter = 0; @@ -2066,50 +2124,44 @@ } case BROTLI_STATE_CONTEXT_MODES: result = ReadContextModes(s); - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { break; } s->state = BROTLI_STATE_CONTEXT_MAP_1; /* No break, continue to next state */ - case BROTLI_STATE_CONTEXT_MAP_1: { - uint32_t j; - result = DecodeContextMap(s->num_block_types[0] << kLiteralContextBits, - &s->num_literal_htrees, &s->context_map, s); - if (result != BROTLI_SUCCESS) { + case BROTLI_STATE_CONTEXT_MAP_1: + result = DecodeContextMap( + s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS, + &s->num_literal_htrees, &s->context_map, s); + if (result != BROTLI_DECODER_SUCCESS) { break; } - s->trivial_literal_context = 1; - for (j = 0; j < s->num_block_types[0] << kLiteralContextBits; j++) { - if (s->context_map[j] != j >> kLiteralContextBits) { - s->trivial_literal_context = 0; - break; - } - } + DetectTrivialLiteralBlockTypes(s); s->state = BROTLI_STATE_CONTEXT_MAP_2; /* No break, continue to next state */ - } case BROTLI_STATE_CONTEXT_MAP_2: { - uint32_t num_distance_codes = - s->num_direct_distance_codes + (48U << s->distance_postfix_bits); + uint32_t num_distance_codes = s->num_direct_distance_codes + + ((2 * BROTLI_MAX_DISTANCE_BITS) << s->distance_postfix_bits); + BROTLI_BOOL allocation_success = BROTLI_TRUE; result = DecodeContextMap( - s->num_block_types[2] << kDistanceContextBits, + s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS, &s->num_dist_htrees, &s->dist_context_map, s); - if (result != BROTLI_SUCCESS) { + if (result != BROTLI_DECODER_SUCCESS) { break; } - BrotliHuffmanTreeGroupInit(s, &s->literal_hgroup, kNumLiteralCodes, - s->num_literal_htrees); - BrotliHuffmanTreeGroupInit(s, &s->insert_copy_hgroup, - kNumInsertAndCopyCodes, - s->num_block_types[1]); - BrotliHuffmanTreeGroupInit(s, &s->distance_hgroup, num_distance_codes, - s->num_dist_htrees); - if (s->literal_hgroup.codes == 0 || - s->insert_copy_hgroup.codes == 0 || - s->distance_hgroup.codes == 0) { + allocation_success &= BrotliDecoderHuffmanTreeGroupInit( + s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS, + s->num_literal_htrees); + allocation_success &= BrotliDecoderHuffmanTreeGroupInit( + s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS, + s->num_block_types[1]); + allocation_success &= BrotliDecoderHuffmanTreeGroupInit( + s, &s->distance_hgroup, num_distance_codes, + s->num_dist_htrees); + if (!allocation_success) { return SaveErrorCode(s, - BROTLI_FAILURE(BROTLI_ERROR_ALLOC_TREE_GROUPS)); + BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS)); } } s->loop_counter = 0; @@ -2129,25 +2181,19 @@ hgroup = &s->distance_hgroup; break; default: - return SaveErrorCode(s, - BROTLI_FAILURE(BROTLI_ERROR_UNREACHABLE_6)); + return SaveErrorCode(s, BROTLI_FAILURE( + BROTLI_DECODER_ERROR_UNREACHABLE)); } result = HuffmanTreeGroupDecode(hgroup, s); } - if (result != BROTLI_SUCCESS) break; + if (result != BROTLI_DECODER_SUCCESS) break; s->loop_counter++; if (s->loop_counter >= 3) { - uint8_t context_mode = s->context_modes[s->block_type_rb[1]]; - s->context_map_slice = s->context_map; + PrepareLiteralDecoding(s); s->dist_context_map_slice = s->dist_context_map; - s->context_lookup1 = - &kContextLookup[kContextLookupOffsets[context_mode]]; - s->context_lookup2 = - &kContextLookup[kContextLookupOffsets[context_mode + 1]]; s->htree_command = s->insert_copy_hgroup.htrees[0]; - s->literal_htree = s->literal_hgroup.htrees[s->literal_htree_index]; - if (!s->ringbuffer && !BrotliAllocateRingBuffer(s)) { - result = BROTLI_FAILURE(BROTLI_ERROR_ALLOC_RING_BUFFER_2); + if (!BrotliEnsureRingBuffer(s)) { + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2); break; } s->state = BROTLI_STATE_COMMAND_BEGIN; @@ -2158,20 +2204,23 @@ case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS: case BROTLI_STATE_COMMAND_POST_WRAP_COPY: result = ProcessCommands(s); - if (result == BROTLI_NEEDS_MORE_INPUT) { + if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) { result = SafeProcessCommands(s); } break; case BROTLI_STATE_COMMAND_INNER_WRITE: case BROTLI_STATE_COMMAND_POST_WRITE_1: case BROTLI_STATE_COMMAND_POST_WRITE_2: - result = WriteRingBuffer(available_out, next_out, total_out, s); - if (result != BROTLI_SUCCESS) { + result = WriteRingBuffer( + s, available_out, next_out, total_out, BROTLI_FALSE); + if (result != BROTLI_DECODER_SUCCESS) { break; } - s->max_distance = s->max_backward_distance; + WrapRingBuffer(s); + if (s->ringbuffer_size == 1 << s->window_bits) { + s->max_distance = s->max_backward_distance; + } if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) { - memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos); if (s->meta_block_remaining_len == 0) { /* Next metablock, if any */ s->state = BROTLI_STATE_METABLOCK_DONE; @@ -2194,13 +2243,17 @@ } break; case BROTLI_STATE_METABLOCK_DONE: - BrotliStateCleanupAfterMetablock(s); + if (s->meta_block_remaining_len < 0) { + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2); + break; + } + BrotliDecoderStateCleanupAfterMetablock(s); if (!s->is_last_metablock) { s->state = BROTLI_STATE_METABLOCK_BEGIN; break; } if (!BrotliJumpToByteBoundary(br)) { - result = BROTLI_FAILURE(BROTLI_ERROR_FORMAT_PADDING_2); + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2); break; } if (s->buffer_length == 0) { @@ -2212,8 +2265,9 @@ /* No break, continue to next state */ case BROTLI_STATE_DONE: if (s->ringbuffer != 0) { - result = WriteRingBuffer(available_out, next_out, total_out, s); - if (result != BROTLI_SUCCESS) { + result = WriteRingBuffer( + s, available_out, next_out, total_out, BROTLI_TRUE); + if (result != BROTLI_DECODER_SUCCESS) { break; } } @@ -2223,8 +2277,8 @@ return SaveErrorCode(s, result); } -void BrotliSetCustomDictionary( - size_t size, const uint8_t* dict, BrotliState* s) { +void BrotliDecoderSetCustomDictionary( + BrotliDecoderState* s, size_t size, const uint8_t* dict) { if (size > (1u << 24)) { return; } @@ -2232,8 +2286,61 @@ s->custom_dict_size = (int)size; } -BrotliErrorCode BrotliGetErrorCode(const BrotliState* s) { - return (BrotliErrorCode)s->error_code; +BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) { + return TO_BROTLI_BOOL( + s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0); +} + +const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) { + uint8_t* result = 0; + size_t available_out = *size ? *size : 1u << 24; + size_t requested_out = available_out; + BrotliDecoderErrorCode status; + if (s->ringbuffer == 0) { + *size = 0; + return 0; + } + WrapRingBuffer(s); + status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE); + if (status == BROTLI_DECODER_SUCCESS || + status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) { + *size = requested_out - available_out; + } else { + /* This might happen if previous decoder error code was ignored. */ + *size = 0; + result = 0; + } + return result; +} + +BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) { + return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED || + BrotliGetAvailableBits(&s->br) != 0); +} + +BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) { + return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) && + !BrotliDecoderHasMoreOutput(s); +} + +BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) { + return (BrotliDecoderErrorCode)s->error_code; +} + +const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) { + switch (c) { +#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \ + case BROTLI_DECODER ## PREFIX ## NAME: return #NAME; +#define BROTLI_NOTHING_ + BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_) +#undef BROTLI_ERROR_CODE_CASE_ +#undef BROTLI_NOTHING_ + default: return "INVALID"; + } +} + +uint32_t BrotliDecoderVersion() { + return BROTLI_VERSION; } #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/third_party/brotli/dec/decode.h b/third_party/brotli/dec/decode.h deleted file mode 100644 index 829ce6df..0000000 --- a/third_party/brotli/dec/decode.h +++ /dev/null
@@ -1,156 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* API for Brotli decompression */ - -#ifndef BROTLI_DEC_DECODE_H_ -#define BROTLI_DEC_DECODE_H_ - -#include "./types.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct BrotliStateStruct BrotliState; - -typedef enum { - /* Decoding error, e.g. corrupt input or memory allocation problem */ - BROTLI_RESULT_ERROR = 0, - /* Decoding successfully completed */ - BROTLI_RESULT_SUCCESS = 1, - /* Partially done; should be called again with more input */ - BROTLI_RESULT_NEEDS_MORE_INPUT = 2, - /* Partially done; should be called again with more output */ - BROTLI_RESULT_NEEDS_MORE_OUTPUT = 3 -} BrotliResult; - -typedef enum { - BROTLI_NO_ERROR = 0, - /* Same as BrotliResult values */ - BROTLI_SUCCESS = 1, - BROTLI_NEEDS_MORE_INPUT = 2, - BROTLI_NEEDS_MORE_OUTPUT = 3, - - /* Errors caused by invalid input */ - BROTLI_ERROR_FORMAT_EXUBERANT_NIBBLE = -1, - BROTLI_ERROR_FORMAT_RESERVED = -2, - BROTLI_ERROR_FORMAT_EXUBERANT_META_NIBBLE = -3, - BROTLI_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET = -4, - BROTLI_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME = -5, - BROTLI_ERROR_FORMAT_CL_SPACE = -6, - BROTLI_ERROR_FORMAT_HUFFMAN_SPACE = -7, - BROTLI_ERROR_FORMAT_CONTEXT_MAP_REPEAT = -8, - BROTLI_ERROR_FORMAT_BLOCK_LENGTH_1 = -9, - BROTLI_ERROR_FORMAT_BLOCK_LENGTH_2 = -10, - BROTLI_ERROR_FORMAT_TRANSFORM = -11, - BROTLI_ERROR_FORMAT_DICTIONARY = -12, - BROTLI_ERROR_FORMAT_WINDOW_BITS = -13, - BROTLI_ERROR_FORMAT_PADDING_1 = -14, - BROTLI_ERROR_FORMAT_PADDING_2 = -15, - - /* -16..-20 codes are reserved */ - - /* Memory allocation problems */ - BROTLI_ERROR_ALLOC_CONTEXT_MODES = -21, - BROTLI_ERROR_ALLOC_TREE_GROUPS = -22, /* Literal, insert, distance */ - /* -23..-24 codes are reserved for distinct tree groups */ - BROTLI_ERROR_ALLOC_CONTEXT_MAP = -25, - BROTLI_ERROR_ALLOC_RING_BUFFER_1 = -26, - BROTLI_ERROR_ALLOC_RING_BUFFER_2 = -27, - /* -28..-29 codes are reserved for dynamic ringbuffer allocation */ - BROTLI_ERROR_ALLOC_BLOCK_TYPE_TREES = -30, - - /* "Impossible" states */ - BROTLI_ERROR_UNREACHABLE_1 = -31, - BROTLI_ERROR_UNREACHABLE_2 = -32, - BROTLI_ERROR_UNREACHABLE_3 = -33, - BROTLI_ERROR_UNREACHABLE_4 = -34, - BROTLI_ERROR_UNREACHABLE_5 = -35, - BROTLI_ERROR_UNREACHABLE_6 = -36 -} BrotliErrorCode; - -#define BROTLI_LAST_ERROR_CODE BROTLI_ERROR_UNREACHABLE_6 - -/* Creates the instance of BrotliState and initializes it. |alloc_func| and - |free_func| MUST be both zero or both non-zero. In the case they are both - zero, default memory allocators are used. |opaque| is passed to |alloc_func| - and |free_func| when they are called. */ -BrotliState* BrotliCreateState( - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); - -/* Deinitializes and frees BrotliState instance. */ -void BrotliDestroyState(BrotliState* state); - -/* Sets |*decoded_size| to the decompressed size of the given encoded stream. - This function only works if the encoded buffer has a single meta block, - or if it has two meta-blocks, where the first is uncompressed and the - second is empty. - Returns 1 on success, 0 on failure. */ -int BrotliDecompressedSize(size_t encoded_size, - const uint8_t* encoded_buffer, - size_t* decoded_size); - -/* Decompresses the data in |encoded_buffer| into |decoded_buffer|, and sets - |*decoded_size| to the decompressed length. */ -BrotliResult BrotliDecompressBuffer(size_t encoded_size, - const uint8_t* encoded_buffer, - size_t* decoded_size, - uint8_t* decoded_buffer); - -/* Decompresses the data. Supports partial input and output. - - Must be called with an allocated input buffer in |*next_in| and an allocated - output buffer in |*next_out|. The values |*available_in| and |*available_out| - must specify the allocated size in |*next_in| and |*next_out| respectively. - - After each call, |*available_in| will be decremented by the amount of input - bytes consumed, and the |*next_in| pointer will be incremented by that - amount. Similarly, |*available_out| will be decremented by the amount of - output bytes written, and the |*next_out| pointer will be incremented by that - amount. |total_out| will be set to the number of bytes decompressed since - last state initialization. - - Input is never overconsumed, so |next_in| and |available_in| could be passed - to the next consumer after decoding is complete. */ -BrotliResult BrotliDecompressStream(size_t* available_in, - const uint8_t** next_in, - size_t* available_out, - uint8_t** next_out, - size_t* total_out, - BrotliState* s); - -/* Fills the new state with a dictionary for LZ77, warming up the ringbuffer, - e.g. for custom static dictionaries for data formats. - Not to be confused with the built-in transformable dictionary of Brotli. - |size| should be less or equal to 2^24 (16MiB), otherwise the dictionary will - be ignored. The dictionary must exist in memory until decoding is done and - is owned by the caller. To use: - 1) Allocate and initialize state with BrotliCreateState - 2) Use BrotliSetCustomDictionary - 3) Use BrotliDecompressStream - 4) Clean up and free state with BrotliDestroyState -*/ -void BrotliSetCustomDictionary( - size_t size, const uint8_t* dict, BrotliState* s); - -/* Returns 1, if s is in a state where we have not read any input bytes yet, - and 0 otherwise */ -int BrotliStateIsStreamStart(const BrotliState* s); - -/* Returns 1, if s is in a state where we reached the end of the input and - produced all of the output, and 0 otherwise. */ -int BrotliStateIsStreamEnd(const BrotliState* s); - -/* Returns detailed error code after BrotliDecompressStream returns - BROTLI_RESULT_ERROR. */ -BrotliErrorCode BrotliGetErrorCode(const BrotliState* s); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/third_party/brotli/dec/dictionary.h b/third_party/brotli/dec/dictionary.h deleted file mode 100644 index ae250c2..0000000 --- a/third_party/brotli/dec/dictionary.h +++ /dev/null
@@ -1,38 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* Collection of static dictionary words. */ - -#ifndef BROTLI_DEC_DICTIONARY_H_ -#define BROTLI_DEC_DICTIONARY_H_ - -#include "./types.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -extern const uint8_t kBrotliDictionary[122784]; - -static const uint32_t kBrotliDictionaryOffsetsByLength[] = { - 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, - 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, - 122016 -}; - -static const uint8_t kBrotliDictionarySizeBitsByLength[] = { - 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, - 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5, -}; - -static const int kBrotliMinDictionaryWordLength = 4; -static const int kBrotliMaxDictionaryWordLength = 24; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_DEC_DICTIONARY_H_ */
diff --git a/third_party/brotli/dec/huffman.c b/third_party/brotli/dec/huffman.c index 3775ffe..37da2a5 100644 --- a/third_party/brotli/dec/huffman.c +++ b/third_party/brotli/dec/huffman.c
@@ -10,8 +10,9 @@ #include <string.h> /* memcpy, memset */ +#include "../common/constants.h" +#include <brotli/types.h> #include "./port.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -20,7 +21,8 @@ #define BROTLI_REVERSE_BITS_MAX 8 #ifdef BROTLI_RBIT -#define BROTLI_REVERSE_BITS_BASE (32 - BROTLI_REVERSE_BITS_MAX) +#define BROTLI_REVERSE_BITS_BASE \ + ((sizeof(reg_t) << 3) - BROTLI_REVERSE_BITS_MAX) #else #define BROTLI_REVERSE_BITS_BASE 0 static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = { @@ -60,12 +62,12 @@ #endif /* BROTLI_RBIT */ #define BROTLI_REVERSE_BITS_LOWEST \ - (1U << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE)) + ((reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE)) /* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX), where reverse(value, len) is the bit-wise reversal of the len least significant bits of value. */ -static BROTLI_INLINE uint32_t BrotliReverseBits(uint32_t num) { +static BROTLI_INLINE reg_t BrotliReverseBits(reg_t num) { #ifdef BROTLI_RBIT return BROTLI_RBIT(num); #else @@ -102,13 +104,13 @@ void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table, const uint8_t* const code_lengths, uint16_t* count) { - HuffmanCode code; /* current table entry */ - int symbol; /* symbol index in original or sorted table */ - uint32_t key; /* prefix code */ - uint32_t key_step; /* prefix code addend */ - int step; /* step size to replicate values in current table */ - int table_size; /* size of current table */ - int sorted[18]; /* symbols sorted by code length */ + HuffmanCode code; /* current table entry */ + int symbol; /* symbol index in original or sorted table */ + reg_t key; /* prefix code */ + reg_t key_step; /* prefix code addend */ + int step; /* step size to replicate values in current table */ + int table_size; /* size of current table */ + int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */ /* offsets in sorted table for each length */ int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1]; int bits; @@ -125,10 +127,10 @@ bits++; }); /* Symbols with code length 0 are placed after all other symbols. */ - offset[0] = 17; + offset[0] = BROTLI_CODE_LENGTH_CODES - 1; /* sort symbols by length, by symbol order within each length */ - symbol = 18; + symbol = BROTLI_CODE_LENGTH_CODES; do { BROTLI_REPEAT(6, { symbol--; @@ -142,7 +144,7 @@ if (offset[0] == 0) { code.bits = 0; code.value = (uint16_t)sorted[0]; - for (key = 0; key < (uint32_t)table_size; ++key) { + for (key = 0; key < (reg_t)table_size; ++key) { table[key] = code; } return; @@ -170,18 +172,18 @@ int root_bits, const uint16_t* const symbol_lists, uint16_t* count) { - HuffmanCode code; /* current table entry */ - HuffmanCode* table; /* next available space in table */ - int len; /* current code length */ - int symbol; /* symbol index in original or sorted table */ - uint32_t key; /* prefix code */ - uint32_t key_step; /* prefix code addend */ - uint32_t sub_key; /* 2nd level table prefix code */ - uint32_t sub_key_step; /* 2nd level table prefix code addend */ - int step; /* step size to replicate values in current table */ - int table_bits; /* key length of current table */ - int table_size; /* size of current table */ - int total_size; /* sum of root table size and 2nd level table sizes */ + HuffmanCode code; /* current table entry */ + HuffmanCode* table; /* next available space in table */ + int len; /* current code length */ + int symbol; /* symbol index in original or sorted table */ + reg_t key; /* prefix code */ + reg_t key_step; /* prefix code addend */ + reg_t sub_key; /* 2nd level table prefix code */ + reg_t sub_key_step; /* 2nd level table prefix code addend */ + int step; /* step size to replicate values in current table */ + int table_bits; /* key length of current table */ + int table_size; /* size of current table */ + int total_size; /* sum of root table size and 2nd level table sizes */ int max_length = -1; int bits; int bits_count;
diff --git a/third_party/brotli/dec/huffman.h b/third_party/brotli/dec/huffman.h index fc88081..d3b4d53e 100644 --- a/third_party/brotli/dec/huffman.h +++ b/third_party/brotli/dec/huffman.h
@@ -9,7 +9,7 @@ #ifndef BROTLI_DEC_HUFFMAN_H_ #define BROTLI_DEC_HUFFMAN_H_ -#include "./types.h" +#include <brotli/types.h> #include "./port.h" #if defined(__cplusplus) || defined(c_plusplus) @@ -18,16 +18,16 @@ #define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15 -/* For current format this constant equals to kNumInsertAndCopyCodes */ -#define BROTLI_HUFFMAN_MAX_CODE_LENGTHS_SIZE 704 - /* Maximum possible Huffman table size for an alphabet size of (index * 32), * max code length 15 and root table bits 8. */ static const uint16_t kMaxHuffmanTableSize[] = { 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080}; +/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */ #define BROTLI_HUFFMAN_MAX_SIZE_26 396 +/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */ #define BROTLI_HUFFMAN_MAX_SIZE_258 632 +/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */ #define BROTLI_HUFFMAN_MAX_SIZE_272 646 #define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5
diff --git a/third_party/brotli/dec/port.h b/third_party/brotli/dec/port.h index 30b5cac7..6b3d735 100644 --- a/third_party/brotli/dec/port.h +++ b/third_party/brotli/dec/port.h
@@ -16,6 +16,7 @@ features and attributes * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unaligned read and overlapping memcpy; this reduces decompression speed by 5% + * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs * BROTLI_DEBUG dumps file name and line number when decoder detects stream or memory error * BROTLI_ENABLE_LOG enables asserts and dumps various state information @@ -29,27 +30,16 @@ #include <stdio.h> #endif -/* Compatibility with non-clang compilers. */ -#ifndef __has_builtin -#define __has_builtin(x) 0 -#endif - -#ifndef __has_attribute -#define __has_attribute(x) 0 -#endif - -#ifndef __has_feature -#define __has_feature(x) 0 -#endif +#include <brotli/port.h> #if defined(__arm__) || defined(__thumb__) || \ - defined(_M_ARM) || defined(_M_ARMT) + defined(_M_ARM) || defined(_M_ARMT) || defined(__ARM64_ARCH_8__) #define BROTLI_TARGET_ARM -#if (defined(__ARM_ARCH) && (__ARM_ARCH >= 7)) || \ - (defined(M_ARM) && (M_ARM >= 7)) +#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \ + (defined(M_ARM) && (M_ARM == 7)) #define BROTLI_TARGET_ARMV7 #endif /* ARMv7 */ -#if defined(__aarch64__) +#if defined(__aarch64__) || defined(__ARM64_ARCH_8__) #define BROTLI_TARGET_ARMV8 #endif /* ARMv8 */ #endif /* ARM */ @@ -66,61 +56,16 @@ #define BROTLI_TARGET_POWERPC64 #endif -#if defined(__GNUC__) && defined(__GNUC_MINOR__) -#define BROTLI_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) -#else -#define BROTLI_GCC_VERSION 0 -#endif - -#if defined(__ICC) -#define BROTLI_ICC_VERSION __ICC -#else -#define BROTLI_ICC_VERSION 0 -#endif - -#if defined(BROTLI_BUILD_MODERN_COMPILER) -#define BROTLI_MODERN_COMPILER 1 -#elif (BROTLI_GCC_VERSION > 300) || (BROTLI_ICC_VERSION >= 1600) -#define BROTLI_MODERN_COMPILER 1 -#else -#define BROTLI_MODERN_COMPILER 0 -#endif - #ifdef BROTLI_BUILD_PORTABLE #define BROTLI_ALIGNED_READ (!!1) #elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \ defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8) -/* Allow unaligned read only for whitelisted CPUs. */ +/* Allow unaligned read only for white-listed CPUs. */ #define BROTLI_ALIGNED_READ (!!0) #else #define BROTLI_ALIGNED_READ (!!1) #endif -/* Define "PREDICT_TRUE" and "PREDICT_FALSE" macros for capable compilers. - -To apply compiler hint, enclose the branching condition into macros, like this: - - if (PREDICT_TRUE(zero == 0)) { - // main execution path - } else { - // compiler should place this code outside of main execution path - } - -OR: - - if (PREDICT_FALSE(something_rare_or_unexpected_happens)) { - // compiler should place this code outside of main execution path - } - -*/ -#if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_expect) -#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) -#define PREDICT_FALSE(x) (__builtin_expect(x, 0)) -#else -#define PREDICT_FALSE(x) (x) -#define PREDICT_TRUE(x) (x) -#endif - /* IS_CONSTANT macros returns true for compile-time constant expressions. */ #if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_constant_p) #define IS_CONSTANT(x) (!!__builtin_constant_p(x)) @@ -128,33 +73,6 @@ #define IS_CONSTANT(x) (!!0) #endif -#if BROTLI_MODERN_COMPILER || __has_attribute(always_inline) -#define ATTRIBUTE_ALWAYS_INLINE __attribute__ ((always_inline)) -#else -#define ATTRIBUTE_ALWAYS_INLINE -#endif - -#if BROTLI_MODERN_COMPILER || __has_attribute(visibility) -#define ATTRIBUTE_VISIBILITY_HIDDEN __attribute__ ((visibility ("hidden"))) -#else -#define ATTRIBUTE_VISIBILITY_HIDDEN -#endif - -#ifndef BROTLI_INTERNAL -#define BROTLI_INTERNAL ATTRIBUTE_VISIBILITY_HIDDEN -#endif - -#ifndef _MSC_VER -#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ - __STDC_VERSION__ >= 199901L -#define BROTLI_INLINE inline ATTRIBUTE_ALWAYS_INLINE -#else -#define BROTLI_INLINE -#endif -#else /* _MSC_VER */ -#define BROTLI_INLINE __forceinline -#endif /* _MSC_VER */ - #ifdef BROTLI_ENABLE_LOG #define BROTLI_DCHECK(x) assert(x) #define BROTLI_LOG(x) printf x @@ -164,7 +82,7 @@ #endif #if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG) -static inline void BrotliDump(const char* f, int l, const char* fn) { +static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) { fprintf(stderr, "%s:%d (%s)\n", f, l, fn); fflush(stderr); } @@ -184,6 +102,12 @@ #define BROTLI_64_BITS 0 #endif +#if (BROTLI_64_BITS) +#define reg_t uint64_t +#else +#define reg_t uint32_t +#endif + #if defined(BROTLI_BUILD_BIG_ENDIAN) #define BROTLI_LITTLE_ENDIAN 0 #define BROTLI_BIG_ENDIAN 1 @@ -209,22 +133,18 @@ #define BROTLI_LITTLE_ENDIAN 0 #endif -#if BROTLI_MODERN_COMPILER || __has_attribute(noinline) -#define BROTLI_NOINLINE __attribute__((noinline)) -#else -#define BROTLI_NOINLINE -#endif - #define BROTLI_REPEAT(N, X) { \ if ((N & 1) != 0) {X;} \ if ((N & 2) != 0) {X; X;} \ if ((N & 4) != 0) {X; X; X; X;} \ } -#if BROTLI_MODERN_COMPILER || defined(__llvm__) -#if defined(BROTLI_TARGET_ARMV7) -static BROTLI_INLINE unsigned BrotliRBit(unsigned input) { - unsigned output; +#if (BROTLI_MODERN_COMPILER || defined(__llvm__)) && \ + !defined(BROTLI_BUILD_NO_RBIT) +#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8) +/* TODO: detect ARMv6T2 and enable this code for it. */ +static BROTLI_INLINE reg_t BrotliRBit(reg_t input) { + reg_t output; __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input)); return output; } @@ -245,6 +165,4 @@ X = NULL; \ } -#define BROTLI_UNUSED(X) (void)(X) - #endif /* BROTLI_DEC_PORT_H_ */
diff --git a/third_party/brotli/dec/prefix.h b/third_party/brotli/dec/prefix.h index eaae37f0..aa776c72 100644 --- a/third_party/brotli/dec/prefix.h +++ b/third_party/brotli/dec/prefix.h
@@ -11,7 +11,8 @@ #ifndef BROTLI_DEC_PREFIX_H_ #define BROTLI_DEC_PREFIX_H_ -#include "./types.h" +#include "../common/constants.h" +#include <brotli/types.h> /* Represents the range of values belonging to a prefix code: */ /* [offset, offset + 2^nbits) */ @@ -20,7 +21,8 @@ uint8_t nbits; }; -static const struct PrefixCodeRange kBlockLengthPrefixCode[] = { +static const struct PrefixCodeRange + kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = { { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2}, { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3}, { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4}, @@ -39,7 +41,7 @@ uint16_t copy_len_offset; } CmdLutElement; -static const CmdLutElement kCmdLut[704] = { +static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = { { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 }, { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 }, { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },
diff --git a/third_party/brotli/dec/state.c b/third_party/brotli/dec/state.c index 183cc9d..0fd0a865 100644 --- a/third_party/brotli/dec/state.c +++ b/third_party/brotli/dec/state.c
@@ -8,17 +8,13 @@ #include <stdlib.h> /* free, malloc */ +#include <brotli/types.h> #include "./huffman.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif -/* Declared in decode.h */ -int BrotliStateIsStreamStart(const BrotliState* s); -int BrotliStateIsStreamEnd(const BrotliState* s); - static void* DefaultAllocFunc(void* opaque, size_t size) { BROTLI_UNUSED(opaque); return malloc(size); @@ -29,11 +25,11 @@ free(address); } -void BrotliStateInit(BrotliState* s) { - BrotliStateInitWithCustomAllocators(s, 0, 0, 0); +void BrotliDecoderStateInit(BrotliDecoderState* s) { + BrotliDecoderStateInitWithCustomAllocators(s, 0, 0, 0); } -void BrotliStateInitWithCustomAllocators(BrotliState* s, +void BrotliDecoderStateInitWithCustomAllocators(BrotliDecoderState* s, brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) { if (!alloc_func) { s->alloc_func = DefaultAllocFunc; @@ -64,6 +60,9 @@ s->block_type_trees = NULL; s->block_len_trees = NULL; s->ringbuffer = NULL; + s->ringbuffer_size = 0; + s->new_ringbuffer_size = 0; + s->ringbuffer_mask = 0; s->context_map = NULL; s->context_modes = NULL; @@ -84,6 +83,7 @@ s->custom_dict_size = 0; s->is_last_metablock = 0; + s->should_wrap_ringbuffer = 0; s->window_bits = 0; s->max_distance = 0; s->dist_rb[0] = 16; @@ -97,10 +97,10 @@ /* Make small negative indexes addressable. */ s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1]; - s->mtf_upper_bound = 255; + s->mtf_upper_bound = 63; } -void BrotliStateMetablockBegin(BrotliState* s) { +void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) { s->meta_block_remaining_len = 0; s->block_length[0] = 1U << 28; s->block_length[1] = 1U << 28; @@ -118,7 +118,6 @@ s->context_modes = NULL; s->dist_context_map = NULL; s->context_map_slice = NULL; - s->literal_htree_index = 0; s->literal_htree = NULL; s->dist_context_map_slice = NULL; s->dist_htree_index = 0; @@ -132,47 +131,41 @@ s->distance_hgroup.htrees = NULL; } -void BrotliStateCleanupAfterMetablock(BrotliState* s) { +void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) { BROTLI_FREE(s, s->context_modes); BROTLI_FREE(s, s->context_map); BROTLI_FREE(s, s->dist_context_map); - BrotliHuffmanTreeGroupRelease(s, &s->literal_hgroup); - BrotliHuffmanTreeGroupRelease(s, &s->insert_copy_hgroup); - BrotliHuffmanTreeGroupRelease(s, &s->distance_hgroup); + BrotliDecoderHuffmanTreeGroupRelease(s, &s->literal_hgroup); + BrotliDecoderHuffmanTreeGroupRelease(s, &s->insert_copy_hgroup); + BrotliDecoderHuffmanTreeGroupRelease(s, &s->distance_hgroup); } -void BrotliStateCleanup(BrotliState* s) { - BrotliStateCleanupAfterMetablock(s); +void BrotliDecoderStateCleanup(BrotliDecoderState* s) { + BrotliDecoderStateCleanupAfterMetablock(s); BROTLI_FREE(s, s->ringbuffer); BROTLI_FREE(s, s->block_type_trees); } -int BrotliStateIsStreamStart(const BrotliState* s) { - return (s->state == BROTLI_STATE_UNINITED && - BrotliGetAvailableBits(&s->br) == 0); -} - -int BrotliStateIsStreamEnd(const BrotliState* s) { - return s->state == BROTLI_STATE_DONE; -} - -void BrotliHuffmanTreeGroupInit(BrotliState* s, HuffmanTreeGroup* group, - uint32_t alphabet_size, uint32_t ntrees) { +BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s, + HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t ntrees) { /* Pack two allocations into one */ const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5]; const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size; const size_t htree_size = sizeof(HuffmanCode*) * ntrees; - char* p = (char*)BROTLI_ALLOC(s, code_size + htree_size); + /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */ + HuffmanCode** p = (HuffmanCode**)BROTLI_ALLOC(s, code_size + htree_size); group->alphabet_size = (uint16_t)alphabet_size; group->num_htrees = (uint16_t)ntrees; - group->codes = (HuffmanCode*)p; - group->htrees = (HuffmanCode**)(p + code_size); + group->htrees = (HuffmanCode**)p; + group->codes = (HuffmanCode*)(&p[ntrees]); + return !!p; } -void BrotliHuffmanTreeGroupRelease(BrotliState* s, HuffmanTreeGroup* group) { - BROTLI_FREE(s, group->codes); +void BrotliDecoderHuffmanTreeGroupRelease( + BrotliDecoderState* s, HuffmanTreeGroup* group) { + BROTLI_FREE(s, group->htrees); group->htrees = NULL; }
diff --git a/third_party/brotli/dec/state.h b/third_party/brotli/dec/state.h index f8e1259..de1056d 100644 --- a/third_party/brotli/dec/state.h +++ b/third_party/brotli/dec/state.h
@@ -9,9 +9,10 @@ #ifndef BROTLI_DEC_STATE_H_ #define BROTLI_DEC_STATE_H_ +#include "../common/constants.h" +#include <brotli/types.h> #include "./bit_reader.h" #include "./huffman.h" -#include "./types.h" #include "./port.h" #if defined(__cplusplus) || defined(c_plusplus) @@ -93,7 +94,7 @@ BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX } BrotliRunningReadBlockLengthState; -struct BrotliStateStruct { +struct BrotliDecoderStateStruct { BrotliRunningState state; /* This counter is reused for several disjoint loops. */ @@ -114,7 +115,6 @@ int pos; int max_backward_distance; - int max_backward_distance_minus_custom_dict_size; int max_distance; int ringbuffer_size; int ringbuffer_mask; @@ -152,7 +152,6 @@ uint32_t num_dist_htrees; uint8_t* dist_context_map; HuffmanCode* literal_htree; - uint8_t literal_htree_index; uint8_t dist_htree_index; uint32_t repeat_code_len; uint32_t prev_code_len; @@ -161,8 +160,8 @@ int distance_code; /* For partial write operations */ - size_t rb_roundtrips; /* How many times we went around the ringbuffer */ - size_t partial_pos_out; /* How much output to the user in total (<= rb) */ + size_t rb_roundtrips; /* How many times we went around the ring-buffer */ + size_t partial_pos_out; /* How much output to the user in total */ /* For ReadHuffmanCode */ uint32_t symbol; @@ -174,10 +173,10 @@ uint16_t* symbol_lists; /* Storage from symbol_lists. */ uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 + - BROTLI_HUFFMAN_MAX_CODE_LENGTHS_SIZE]; + BROTLI_NUM_COMMAND_SYMBOLS]; /* Tails of symbol chains. */ int next_symbol[32]; - uint8_t code_length_code_lengths[18]; + uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES]; /* Population counts for the code lengths */ uint16_t code_length_histo[16]; @@ -193,7 +192,7 @@ /* For InverseMoveToFrontTransform */ uint32_t mtf_upper_bound; - uint8_t mtf[256 + 4]; + uint32_t mtf[64 + 1]; /* For custom dictionaries */ const uint8_t* custom_dict; @@ -209,30 +208,38 @@ BrotliRunningDecodeUint8State substate_decode_uint8; BrotliRunningReadBlockLengthState substate_read_block_length; - uint8_t is_last_metablock; - uint8_t is_uncompressed; - uint8_t is_metadata; - uint8_t size_nibbles; + unsigned int is_last_metablock : 1; + unsigned int is_uncompressed : 1; + unsigned int is_metadata : 1; + unsigned int should_wrap_ringbuffer : 1; + unsigned int size_nibbles : 8; uint32_t window_bits; + int new_ringbuffer_size; + uint32_t num_literal_htrees; uint8_t* context_map; uint8_t* context_modes; + + uint32_t trivial_literal_contexts[8]; /* 256 bits */ }; -typedef struct BrotliStateStruct BrotliStateInternal; -#define BrotliState BrotliStateInternal +typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal; +#define BrotliDecoderState BrotliDecoderStateInternal -BROTLI_INTERNAL void BrotliStateInit(BrotliState* s); -BROTLI_INTERNAL void BrotliStateInitWithCustomAllocators(BrotliState* s, - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); -BROTLI_INTERNAL void BrotliStateCleanup(BrotliState* s); -BROTLI_INTERNAL void BrotliStateMetablockBegin(BrotliState* s); -BROTLI_INTERNAL void BrotliStateCleanupAfterMetablock(BrotliState* s); -BROTLI_INTERNAL void BrotliHuffmanTreeGroupInit(BrotliState* s, - HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t ntrees); -BROTLI_INTERNAL void BrotliHuffmanTreeGroupRelease(BrotliState* s, - HuffmanTreeGroup* group); +BROTLI_INTERNAL void BrotliDecoderStateInit(BrotliDecoderState* s); +BROTLI_INTERNAL void BrotliDecoderStateInitWithCustomAllocators( + BrotliDecoderState* s, brotli_alloc_func alloc_func, + brotli_free_func free_func, void* opaque); +BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s); +BROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s); +BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock( + BrotliDecoderState* s); +BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit( + BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size, + uint32_t ntrees); +BROTLI_INTERNAL void BrotliDecoderHuffmanTreeGroupRelease( + BrotliDecoderState* s, HuffmanTreeGroup* group); #if defined(__cplusplus) || defined(c_plusplus) } /* extern "C" */
diff --git a/third_party/brotli/dec/transform.h b/third_party/brotli/dec/transform.h index 8c08f3f..fde3cdf 100644 --- a/third_party/brotli/dec/transform.h +++ b/third_party/brotli/dec/transform.h
@@ -9,8 +9,8 @@ #ifndef BROTLI_DEC_TRANSFORM_H_ #define BROTLI_DEC_TRANSFORM_H_ +#include <brotli/types.h> #include "./port.h" -#include "./types.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -247,7 +247,7 @@ } return 1; } - /* An overly simplified uppercasing model for utf-8. */ + /* An overly simplified uppercasing model for UTF-8. */ if (p[0] < 0xe0) { p[1] ^= 32; return 2;
diff --git a/third_party/brotli/dec/types.h b/third_party/brotli/dec/types.h deleted file mode 100644 index 0f7a021..0000000 --- a/third_party/brotli/dec/types.h +++ /dev/null
@@ -1,38 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* Common types */ - -#ifndef BROTLI_DEC_TYPES_H_ -#define BROTLI_DEC_TYPES_H_ - -#include <stddef.h> /* for size_t */ - -#if defined(_MSC_VER) && (_MSC_VER < 1600) -typedef __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -typedef __int64 int64_t; -#else -#include <stdint.h> -#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ - -/* Allocating function pointer. Function MUST return 0 in the case of failure. - Otherwise it MUST return a valid pointer to a memory region of at least - size length. Neither items nor size are allowed to be 0. - opaque argument is a pointer provided by client and could be used to bind - function to specific object (memory pool). */ -typedef void* (*brotli_alloc_func)(void* opaque, size_t size); - -/* Deallocating function pointer. Function SHOULD be no-op in the case the - address is 0. */ -typedef void (*brotli_free_func)(void* opaque, void* address); - -#endif /* BROTLI_DEC_TYPES_H_ */
diff --git a/third_party/brotli/enc/backward_references.c b/third_party/brotli/enc/backward_references.c new file mode 100644 index 0000000..f53ba37 --- /dev/null +++ b/third_party/brotli/enc/backward_references.c
@@ -0,0 +1,922 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find backward reference copies. */ + +#include "./backward_references.h" + +#include <math.h> /* INFINITY */ +#include <string.h> /* memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./command.h" +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./literal_cost.h" +#include "./memory.h" +#include "./port.h" +#include "./prefix.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#ifdef INFINITY +static const float kInfinity = INFINITY; +#else +static const float kInfinity = 3.4028e38f; +#endif + +void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) { + ZopfliNode stub; + size_t i; + stub.length = 1; + stub.distance = 0; + stub.insert_length = 0; + stub.u.cost = kInfinity; + for (i = 0; i < length; ++i) array[i] = stub; +} + +static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) { + return self->length & 0xffffff; +} + +static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) { + const uint32_t modifier = self->length >> 24; + return ZopfliNodeCopyLength(self) + 9u - modifier; +} + +static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) { + return self->distance & 0x1ffffff; +} + +static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) { + const uint32_t short_code = self->distance >> 25; + return short_code == 0 ? + ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 : + short_code - 1; +} + +static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) { + return ZopfliNodeCopyLength(self) + self->insert_length; +} + +/* Histogram based cost model for zopflification. */ +typedef struct ZopfliCostModel { + /* The insert and copy length symbols. */ + float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS]; + float cost_dist_[BROTLI_NUM_DISTANCE_SYMBOLS]; + /* Cumulative costs of literals per position in the stream. */ + float* literal_costs_; + float min_cost_cmd_; + size_t num_bytes_; +} ZopfliCostModel; + +static void InitZopfliCostModel( + MemoryManager* m, ZopfliCostModel* self, size_t num_bytes) { + self->num_bytes_ = num_bytes; + self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2); + if (BROTLI_IS_OOM(m)) return; +} + +static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) { + BROTLI_FREE(m, self->literal_costs_); +} + +static void SetCost(const uint32_t* histogram, size_t histogram_size, + float* cost) { + size_t sum = 0; + float log2sum; + size_t i; + for (i = 0; i < histogram_size; i++) { + sum += histogram[i]; + } + log2sum = (float)FastLog2(sum); + for (i = 0; i < histogram_size; i++) { + if (histogram[i] == 0) { + cost[i] = log2sum + 2; + continue; + } + + /* Shannon bits for this symbol. */ + cost[i] = log2sum - (float)FastLog2(histogram[i]); + + /* Cannot be coded with less than 1 bit */ + if (cost[i] < 1) cost[i] = 1; + } +} + +static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const Command* commands, + size_t num_commands, + size_t last_insert_len) { + uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS]; + uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS]; + uint32_t histogram_dist[BROTLI_NUM_DISTANCE_SYMBOLS]; + float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS]; + size_t pos = position - last_insert_len; + float min_cost_cmd = kInfinity; + size_t i; + float* cost_cmd = self->cost_cmd_; + + memset(histogram_literal, 0, sizeof(histogram_literal)); + memset(histogram_cmd, 0, sizeof(histogram_cmd)); + memset(histogram_dist, 0, sizeof(histogram_dist)); + + for (i = 0; i < num_commands; i++) { + size_t inslength = commands[i].insert_len_; + size_t copylength = CommandCopyLen(&commands[i]); + size_t distcode = commands[i].dist_prefix_; + size_t cmdcode = commands[i].cmd_prefix_; + size_t j; + + histogram_cmd[cmdcode]++; + if (cmdcode >= 128) histogram_dist[distcode]++; + + for (j = 0; j < inslength; j++) { + histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++; + } + + pos += inslength + copylength; + } + + SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, cost_literal); + SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, cost_cmd); + SetCost(histogram_dist, BROTLI_NUM_DISTANCE_SYMBOLS, self->cost_dist_); + + for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) { + min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]); + } + self->min_cost_cmd_ = min_cost_cmd; + + { + float* literal_costs = self->literal_costs_; + size_t num_bytes = self->num_bytes_; + literal_costs[0] = 0.0; + for (i = 0; i < num_bytes; ++i) { + literal_costs[i + 1] = literal_costs[i] + + cost_literal[ringbuffer[(position + i) & ringbuffer_mask]]; + } + } +} + +static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + float* literal_costs = self->literal_costs_; + float* cost_dist = self->cost_dist_; + float* cost_cmd = self->cost_cmd_; + size_t num_bytes = self->num_bytes_; + size_t i; + BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask, + ringbuffer, &literal_costs[1]); + literal_costs[0] = 0.0; + for (i = 0; i < num_bytes; ++i) { + literal_costs[i + 1] += literal_costs[i]; + } + for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) { + cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i); + } + for (i = 0; i < BROTLI_NUM_DISTANCE_SYMBOLS; ++i) { + cost_dist[i] = (float)FastLog2(20 + (uint32_t)i); + } + self->min_cost_cmd_ = (float)FastLog2(11); +} + +static BROTLI_INLINE float ZopfliCostModelGetCommandCost( + const ZopfliCostModel* self, uint16_t cmdcode) { + return self->cost_cmd_[cmdcode]; +} + +static BROTLI_INLINE float ZopfliCostModelGetDistanceCost( + const ZopfliCostModel* self, size_t distcode) { + return self->cost_dist_[distcode]; +} + +static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts( + const ZopfliCostModel* self, size_t from, size_t to) { + return self->literal_costs_[to] - self->literal_costs_[from]; +} + +static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd( + const ZopfliCostModel* self) { + return self->min_cost_cmd_; +} + +static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance, + size_t max_distance, + const int* dist_cache) { + if (distance <= max_distance) { + size_t distance_plus_3 = distance + 3; + size_t offset0 = distance_plus_3 - (size_t)dist_cache[0]; + size_t offset1 = distance_plus_3 - (size_t)dist_cache[1]; + if (distance == (size_t)dist_cache[0]) { + return 0; + } else if (distance == (size_t)dist_cache[1]) { + return 1; + } else if (offset0 < 7) { + return (0x9750468 >> (4 * offset0)) & 0xF; + } else if (offset1 < 7) { + return (0xFDB1ACE >> (4 * offset1)) & 0xF; + } else if (distance == (size_t)dist_cache[2]) { + return 2; + } else if (distance == (size_t)dist_cache[3]) { + return 3; + } + } + return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; +} + +/* REQUIRES: len >= 2, start_pos <= pos */ +/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */ +/* Maintains the "ZopfliNode array invariant". */ +static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos, + size_t start_pos, size_t len, size_t len_code, size_t dist, + size_t short_code, float cost) { + ZopfliNode* next = &nodes[pos + len]; + next->length = (uint32_t)(len | ((len + 9u - len_code) << 24)); + next->distance = (uint32_t)(dist | (short_code << 25)); + next->insert_length = (uint32_t)(pos - start_pos); + next->u.cost = cost; +} + +typedef struct PosData { + size_t pos; + int distance_cache[4]; + float costdiff; + float cost; +} PosData; + +/* Maintains the smallest 8 cost difference together with their positions */ +typedef struct StartPosQueue { + PosData q_[8]; + size_t idx_; +} StartPosQueue; + +static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) { + self->idx_ = 0; +} + +static size_t StartPosQueueSize(const StartPosQueue* self) { + return BROTLI_MIN(size_t, self->idx_, 8); +} + +static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) { + size_t offset = ~(self->idx_++) & 7; + size_t len = StartPosQueueSize(self); + size_t i; + PosData* q = self->q_; + q[offset] = *posdata; + /* Restore the sorted order. In the list of |len| items at most |len - 1| + adjacent element comparisons / swaps are required. */ + for (i = 1; i < len; ++i) { + if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) { + BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7); + } + ++offset; + } +} + +static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) { + return &self->q_[(k - self->idx_) & 7]; +} + +/* Returns the minimum possible copy length that can improve the cost of any */ +/* future position. */ +static size_t ComputeMinimumCopyLength(const float start_cost, + const ZopfliNode* nodes, + const size_t num_bytes, + const size_t pos) { + /* Compute the minimum possible cost of reaching any future position. */ + float min_cost = start_cost; + size_t len = 2; + size_t next_len_bucket = 4; + size_t next_len_offset = 10; + while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) { + /* We already reached (pos + len) with no more cost than the minimum + possible cost of reaching anything from this pos, so there is no point in + looking for lengths <= len. */ + ++len; + if (len == next_len_offset) { + /* We reached the next copy length code bucket, so we add one more + extra bit to the minimum cost. */ + min_cost += 1.0f; + next_len_offset += next_len_bucket; + next_len_bucket *= 2; + } + } + return len; +} + +/* REQUIRES: nodes[pos].cost < kInfinity + REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */ +static uint32_t ComputeDistanceShortcut(const size_t block_start, + const size_t pos, + const size_t max_backward, + const ZopfliNode* nodes) { + const size_t clen = ZopfliNodeCopyLength(&nodes[pos]); + const size_t ilen = nodes[pos].insert_length; + const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]); + /* Since |block_start + pos| is the end position of the command, the copy part + starts from |block_start + pos - clen|. Distances that are greater than + this or greater than |max_backward| are static dictionary references, and + do not update the last distances. Also distance code 0 (last distance) + does not update the last distances. */ + if (pos == 0) { + return 0; + } else if (dist + clen <= block_start + pos && + dist <= max_backward && + ZopfliNodeDistanceCode(&nodes[pos]) > 0) { + return (uint32_t)pos; + } else { + return nodes[pos - clen - ilen].u.shortcut; + } +} + +/* Fills in dist_cache[0..3] with the last four distances (as defined by + Section 4. of the Spec) that would be used at (block_start + pos) if we + used the shortest path of commands from block_start, computed from + nodes[0..pos]. The last four distances at block_start are in + starting_dist_cache[0..3]. + REQUIRES: nodes[pos].cost < kInfinity + REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */ +static void ComputeDistanceCache(const size_t pos, + const int* starting_dist_cache, + const ZopfliNode* nodes, + int* dist_cache) { + int idx = 0; + size_t p = nodes[pos].u.shortcut; + while (idx < 4 && p > 0) { + const size_t ilen = nodes[p].insert_length; + const size_t clen = ZopfliNodeCopyLength(&nodes[p]); + const size_t dist = ZopfliNodeCopyDistance(&nodes[p]); + dist_cache[idx++] = (int)dist; + /* Because of prerequisite, p >= clen + ilen >= 2. */ + p = nodes[p - clen - ilen].u.shortcut; + } + for (; idx < 4; ++idx) { + dist_cache[idx] = *starting_dist_cache++; + } +} + +/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it + is eligible. */ +static void EvaluateNode( + const size_t block_start, const size_t pos, const size_t max_backward_limit, + const int* starting_dist_cache, const ZopfliCostModel* model, + StartPosQueue* queue, ZopfliNode* nodes) { + /* Save cost, because ComputeDistanceCache invalidates it. */ + float node_cost = nodes[pos].u.cost; + nodes[pos].u.shortcut = ComputeDistanceShortcut( + block_start, pos, max_backward_limit, nodes); + if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) { + PosData posdata; + posdata.pos = pos; + posdata.cost = node_cost; + posdata.costdiff = node_cost - + ZopfliCostModelGetLiteralCosts(model, 0, pos); + ComputeDistanceCache( + pos, starting_dist_cache, nodes, posdata.distance_cache); + StartPosQueuePush(queue, &posdata); + } +} + +/* Returns longest copy length. */ +static size_t UpdateNodes( + const size_t num_bytes, const size_t block_start, const size_t pos, + const uint8_t* ringbuffer, const size_t ringbuffer_mask, + const BrotliEncoderParams* params, const size_t max_backward_limit, + const int* starting_dist_cache, const size_t num_matches, + const BackwardMatch* matches, const ZopfliCostModel* model, + StartPosQueue* queue, ZopfliNode* nodes) { + const size_t cur_ix = block_start + pos; + const size_t cur_ix_masked = cur_ix & ringbuffer_mask; + const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit); + const size_t max_len = num_bytes - pos; + const size_t max_zopfli_len = MaxZopfliLen(params); + const size_t max_iters = MaxZopfliCandidates(params); + size_t min_len; + size_t result = 0; + size_t k; + + EvaluateNode(block_start, pos, max_backward_limit, starting_dist_cache, model, + queue, nodes); + + { + const PosData* posdata = StartPosQueueAt(queue, 0); + float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) + + ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos)); + min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos); + } + + /* Go over the command starting positions in order of increasing cost + difference. */ + for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) { + const PosData* posdata = StartPosQueueAt(queue, k); + const size_t start = posdata->pos; + const uint16_t inscode = GetInsertLengthCode(pos - start); + const float start_costdiff = posdata->costdiff; + const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) + + ZopfliCostModelGetLiteralCosts(model, 0, pos); + + /* Look for last distance matches using the distance cache from this + starting position. */ + size_t best_len = min_len - 1; + size_t j = 0; + for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) { + const size_t idx = kDistanceCacheIndex[j]; + const size_t backward = + (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]); + size_t prev_ix = cur_ix - backward; + if (prev_ix >= cur_ix) { + continue; + } + if (BROTLI_PREDICT_FALSE(backward > max_distance)) { + continue; + } + prev_ix &= ringbuffer_mask; + + if (cur_ix_masked + best_len > ringbuffer_mask || + prev_ix + best_len > ringbuffer_mask || + ringbuffer[cur_ix_masked + best_len] != + ringbuffer[prev_ix + best_len]) { + continue; + } + { + const size_t len = + FindMatchLengthWithLimit(&ringbuffer[prev_ix], + &ringbuffer[cur_ix_masked], + max_len); + const float dist_cost = base_cost + + ZopfliCostModelGetDistanceCost(model, j); + size_t l; + for (l = best_len + 1; l <= len; ++l) { + const uint16_t copycode = GetCopyLengthCode(l); + const uint16_t cmdcode = + CombineLengthCodes(inscode, copycode, j == 0); + const float cost = (cmdcode < 128 ? base_cost : dist_cost) + + (float)GetCopyExtra(copycode) + + ZopfliCostModelGetCommandCost(model, cmdcode); + if (cost < nodes[pos + l].u.cost) { + UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost); + result = BROTLI_MAX(size_t, result, l); + } + best_len = l; + } + } + } + + /* At higher iterations look only for new last distance matches, since + looking only for new command start positions with the same distances + does not help much. */ + if (k >= 2) continue; + + { + /* Loop through all possible copy lengths at this position. */ + size_t len = min_len; + for (j = 0; j < num_matches; ++j) { + BackwardMatch match = matches[j]; + size_t dist = match.distance; + BROTLI_BOOL is_dictionary_match = TO_BROTLI_BOOL(dist > max_distance); + /* We already tried all possible last distance matches, so we can use + normal distance code here. */ + size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; + uint16_t dist_symbol; + uint32_t distextra; + uint32_t distnumextra; + float dist_cost; + size_t max_match_len; + PrefixEncodeCopyDistance(dist_code, 0, 0, &dist_symbol, &distextra); + distnumextra = distextra >> 24; + dist_cost = base_cost + (float)distnumextra + + ZopfliCostModelGetDistanceCost(model, dist_symbol); + + /* Try all copy lengths up until the maximum copy length corresponding + to this distance. If the distance refers to the static dictionary, or + the maximum length is long enough, try only one maximum length. */ + max_match_len = BackwardMatchLength(&match); + if (len < max_match_len && + (is_dictionary_match || max_match_len > max_zopfli_len)) { + len = max_match_len; + } + for (; len <= max_match_len; ++len) { + const size_t len_code = + is_dictionary_match ? BackwardMatchLengthCode(&match) : len; + const uint16_t copycode = GetCopyLengthCode(len_code); + const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0); + const float cost = dist_cost + (float)GetCopyExtra(copycode) + + ZopfliCostModelGetCommandCost(model, cmdcode); + if (cost < nodes[pos + len].u.cost) { + UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost); + result = BROTLI_MAX(size_t, result, len); + } + } + } + } + } + return result; +} + +static size_t ComputeShortestPathFromNodes(size_t num_bytes, + ZopfliNode* nodes) { + size_t index = num_bytes; + size_t num_commands = 0; + while (nodes[index].insert_length == 0 && nodes[index].length == 1) --index; + nodes[index].u.next = BROTLI_UINT32_MAX; + while (index != 0) { + size_t len = ZopfliNodeCommandLength(&nodes[index]); + index -= len; + nodes[index].u.next = (uint32_t)len; + num_commands++; + } + return num_commands; +} + +void BrotliZopfliCreateCommands(const size_t num_bytes, + const size_t block_start, + const size_t max_backward_limit, + const ZopfliNode* nodes, + int* dist_cache, + size_t* last_insert_len, + Command* commands, + size_t* num_literals) { + size_t pos = 0; + uint32_t offset = nodes[0].u.next; + size_t i; + for (i = 0; offset != BROTLI_UINT32_MAX; i++) { + const ZopfliNode* next = &nodes[pos + offset]; + size_t copy_length = ZopfliNodeCopyLength(next); + size_t insert_length = next->insert_length; + pos += insert_length; + offset = next->u.next; + if (i == 0) { + insert_length += *last_insert_len; + *last_insert_len = 0; + } + { + size_t distance = ZopfliNodeCopyDistance(next); + size_t len_code = ZopfliNodeLengthCode(next); + size_t max_distance = + BROTLI_MIN(size_t, block_start + pos, max_backward_limit); + BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance); + size_t dist_code = ZopfliNodeDistanceCode(next); + + InitCommand( + &commands[i], insert_length, copy_length, len_code, dist_code); + + if (!is_dictionary && dist_code > 0) { + dist_cache[3] = dist_cache[2]; + dist_cache[2] = dist_cache[1]; + dist_cache[1] = dist_cache[0]; + dist_cache[0] = (int)distance; + } + } + + *num_literals += insert_length; + pos += copy_length; + } + *last_insert_len += num_bytes - pos; +} + +static size_t ZopfliIterate(size_t num_bytes, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const BrotliEncoderParams* params, + const size_t max_backward_limit, + const int* dist_cache, + const ZopfliCostModel* model, + const uint32_t* num_matches, + const BackwardMatch* matches, + ZopfliNode* nodes) { + const size_t max_zopfli_len = MaxZopfliLen(params); + StartPosQueue queue; + size_t cur_match_pos = 0; + size_t i; + nodes[0].length = 0; + nodes[0].u.cost = 0; + InitStartPosQueue(&queue); + for (i = 0; i + 3 < num_bytes; i++) { + size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer, + ringbuffer_mask, params, max_backward_limit, dist_cache, + num_matches[i], &matches[cur_match_pos], model, &queue, nodes); + if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0; + cur_match_pos += num_matches[i]; + if (num_matches[i] == 1 && + BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) { + skip = BROTLI_MAX(size_t, + BackwardMatchLength(&matches[cur_match_pos - 1]), skip); + } + if (skip > 1) { + skip--; + while (skip) { + i++; + if (i + 3 >= num_bytes) break; + EvaluateNode( + position, i, max_backward_limit, dist_cache, model, &queue, nodes); + cur_match_pos += num_matches[i]; + skip--; + } + } + } + return ComputeShortestPathFromNodes(num_bytes, nodes); +} + + +size_t BrotliZopfliComputeShortestPath(MemoryManager* m, + size_t num_bytes, + size_t position, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const BrotliEncoderParams* params, + const size_t max_backward_limit, + const int* dist_cache, + H10* hasher, + ZopfliNode* nodes) { + const size_t max_zopfli_len = MaxZopfliLen(params); + ZopfliCostModel model; + StartPosQueue queue; + BackwardMatch matches[MAX_NUM_MATCHES_H10]; + const size_t store_end = num_bytes >= StoreLookaheadH10() ? + position + num_bytes - StoreLookaheadH10() + 1 : position; + size_t i; + nodes[0].length = 0; + nodes[0].u.cost = 0; + InitZopfliCostModel(m, &model, num_bytes); + if (BROTLI_IS_OOM(m)) return 0; + ZopfliCostModelSetFromLiteralCosts( + &model, position, ringbuffer, ringbuffer_mask); + InitStartPosQueue(&queue); + for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) { + const size_t pos = position + i; + const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit); + size_t num_matches = FindAllMatchesH10(hasher, ringbuffer, ringbuffer_mask, + pos, num_bytes - i, max_distance, params, matches); + size_t skip; + if (num_matches > 0 && + BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) { + matches[0] = matches[num_matches - 1]; + num_matches = 1; + } + skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, + params, max_backward_limit, dist_cache, num_matches, matches, &model, + &queue, nodes); + if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0; + if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) { + skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip); + } + if (skip > 1) { + /* Add the tail of the copy to the hasher. */ + StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN( + size_t, pos + skip, store_end)); + skip--; + while (skip) { + i++; + if (i + HashTypeLengthH10() - 1 >= num_bytes) break; + EvaluateNode( + position, i, max_backward_limit, dist_cache, &model, &queue, nodes); + skip--; + } + } + } + CleanupZopfliCostModel(m, &model); + return ComputeShortestPathFromNodes(num_bytes, nodes); +} + +#define EXPAND_CAT(a, b) CAT(a, b) +#define CAT(a, b) a ## b +#define FN(X) EXPAND_CAT(X, HASHER()) + +#define HASHER() H2 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H3 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H4 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H5 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H6 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H7 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H8 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H9 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H40 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H41 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#define HASHER() H42 +/* NOLINTNEXTLINE(build/include) */ +#include "./backward_references_inc.h" +#undef HASHER + +#undef FN +#undef CAT +#undef EXPAND_CAT + +static BROTLI_NOINLINE void CreateZopfliBackwardReferences( + MemoryManager* m, size_t num_bytes, size_t position, BROTLI_BOOL is_last, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, H10* hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals) { + const size_t max_backward_limit = MaxBackwardLimit(params->lgwin); + ZopfliNode* nodes; + InitH10(m, hasher, ringbuffer, params, position, num_bytes, is_last); + if (BROTLI_IS_OOM(m)) return; + StitchToPreviousBlockH10(hasher, num_bytes, position, + ringbuffer, ringbuffer_mask); + nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); + if (BROTLI_IS_OOM(m)) return; + BrotliInitZopfliNodes(nodes, num_bytes + 1); + *num_commands += BrotliZopfliComputeShortestPath(m, num_bytes, position, + ringbuffer, ringbuffer_mask, params, max_backward_limit, + dist_cache, hasher, nodes); + if (BROTLI_IS_OOM(m)) return; + BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, nodes, + dist_cache, last_insert_len, commands, num_literals); + BROTLI_FREE(m, nodes); +} + +static BROTLI_NOINLINE void CreateHqZopfliBackwardReferences( + MemoryManager* m, size_t num_bytes, size_t position, BROTLI_BOOL is_last, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, H10* hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals) { + const size_t max_backward_limit = MaxBackwardLimit(params->lgwin); + uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes); + size_t matches_size = 4 * num_bytes; + const size_t store_end = num_bytes >= StoreLookaheadH10() ? + position + num_bytes - StoreLookaheadH10() + 1 : position; + size_t cur_match_pos = 0; + size_t i; + size_t orig_num_literals; + size_t orig_last_insert_len; + int orig_dist_cache[4]; + size_t orig_num_commands; + ZopfliCostModel model; + ZopfliNode* nodes; + BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size); + if (BROTLI_IS_OOM(m)) return; + InitH10(m, hasher, ringbuffer, params, position, num_bytes, is_last); + if (BROTLI_IS_OOM(m)) return; + StitchToPreviousBlockH10(hasher, num_bytes, position, + ringbuffer, ringbuffer_mask); + for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) { + const size_t pos = position + i; + size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit); + size_t max_length = num_bytes - i; + size_t num_found_matches; + size_t cur_match_end; + size_t j; + /* Ensure that we have enough free slots. */ + BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size, + cur_match_pos + MAX_NUM_MATCHES_H10); + if (BROTLI_IS_OOM(m)) return; + num_found_matches = FindAllMatchesH10(hasher, ringbuffer, ringbuffer_mask, + pos, max_length, max_distance, params, &matches[cur_match_pos]); + cur_match_end = cur_match_pos + num_found_matches; + for (j = cur_match_pos; j + 1 < cur_match_end; ++j) { + assert(BackwardMatchLength(&matches[j]) < + BackwardMatchLength(&matches[j + 1])); + assert(matches[j].distance > max_distance || + matches[j].distance <= matches[j + 1].distance); + } + num_matches[i] = (uint32_t)num_found_matches; + if (num_found_matches > 0) { + const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]); + if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) { + const size_t skip = match_len - 1; + matches[cur_match_pos++] = matches[cur_match_end - 1]; + num_matches[i] = 1; + /* Add the tail of the copy to the hasher. */ + StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, + BROTLI_MIN(size_t, pos + match_len, store_end)); + memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0])); + i += skip; + } else { + cur_match_pos = cur_match_end; + } + } + } + orig_num_literals = *num_literals; + orig_last_insert_len = *last_insert_len; + memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); + orig_num_commands = *num_commands; + nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); + if (BROTLI_IS_OOM(m)) return; + InitZopfliCostModel(m, &model, num_bytes); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < 2; i++) { + BrotliInitZopfliNodes(nodes, num_bytes + 1); + if (i == 0) { + ZopfliCostModelSetFromLiteralCosts( + &model, position, ringbuffer, ringbuffer_mask); + } else { + ZopfliCostModelSetFromCommands(&model, position, ringbuffer, + ringbuffer_mask, commands, *num_commands - orig_num_commands, + orig_last_insert_len); + } + *num_commands = orig_num_commands; + *num_literals = orig_num_literals; + *last_insert_len = orig_last_insert_len; + memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0])); + *num_commands += ZopfliIterate(num_bytes, position, ringbuffer, + ringbuffer_mask, params, max_backward_limit, dist_cache, + &model, num_matches, matches, nodes); + BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, + nodes, dist_cache, last_insert_len, commands, num_literals); + } + CleanupZopfliCostModel(m, &model); + BROTLI_FREE(m, nodes); + BROTLI_FREE(m, matches); + BROTLI_FREE(m, num_matches); +} + +void BrotliCreateBackwardReferences(MemoryManager* m, + size_t num_bytes, + size_t position, + BROTLI_BOOL is_last, + const uint8_t* ringbuffer, + size_t ringbuffer_mask, + const BrotliEncoderParams* params, + Hashers* hashers, + int* dist_cache, + size_t* last_insert_len, + Command* commands, + size_t* num_commands, + size_t* num_literals) { + if (params->quality == ZOPFLIFICATION_QUALITY) { + CreateZopfliBackwardReferences( + m, num_bytes, position, is_last, ringbuffer, ringbuffer_mask, + params, hashers->h10, dist_cache, + last_insert_len, commands, num_commands, num_literals); + return; + } else if (params->quality == HQ_ZOPFLIFICATION_QUALITY) { + CreateHqZopfliBackwardReferences( + m, num_bytes, position, is_last, ringbuffer, ringbuffer_mask, + params, hashers->h10, dist_cache, + last_insert_len, commands, num_commands, num_literals); + return; + } + + switch (ChooseHasher(params)) { +#define CASE_(N) \ + case N: \ + CreateBackwardReferencesH ## N(m, num_bytes, position, is_last, \ + ringbuffer, ringbuffer_mask, params, hashers->h ## N, dist_cache, \ + last_insert_len, commands, num_commands, num_literals); \ + break; + FOR_GENERIC_HASHERS(CASE_) +#undef CASE_ + default: + break; + } + if (BROTLI_IS_OOM(m)) return; +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/backward_references.cc b/third_party/brotli/enc/backward_references.cc deleted file mode 100644 index 539c1e7..0000000 --- a/third_party/brotli/enc/backward_references.cc +++ /dev/null
@@ -1,858 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function to find backward reference copies. - -#include "./backward_references.h" - -#include <algorithm> -#include <limits> -#include <vector> - -#include "./command.h" -#include "./fast_log.h" -#include "./literal_cost.h" - -namespace brotli { - -// The maximum length for which the zopflification uses distinct distances. -static const uint16_t kMaxZopfliLen = 325; - -// Histogram based cost model for zopflification. -class ZopfliCostModel { - public: - ZopfliCostModel(void) : min_cost_cmd_(kInfinity) {} - - void SetFromCommands(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const Command* commands, - size_t num_commands, - size_t last_insert_len) { - std::vector<uint32_t> histogram_literal(256, 0); - std::vector<uint32_t> histogram_cmd(kNumCommandPrefixes, 0); - std::vector<uint32_t> histogram_dist(kNumDistancePrefixes, 0); - - size_t pos = position - last_insert_len; - for (size_t i = 0; i < num_commands; i++) { - size_t inslength = commands[i].insert_len_; - size_t copylength = commands[i].copy_len(); - size_t distcode = commands[i].dist_prefix_; - size_t cmdcode = commands[i].cmd_prefix_; - - histogram_cmd[cmdcode]++; - if (cmdcode >= 128) histogram_dist[distcode]++; - - for (size_t j = 0; j < inslength; j++) { - histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++; - } - - pos += inslength + copylength; - } - - std::vector<float> cost_literal; - Set(histogram_literal, &cost_literal); - Set(histogram_cmd, &cost_cmd_); - Set(histogram_dist, &cost_dist_); - - for (uint32_t i = 0; i < kNumCommandPrefixes; ++i) { - min_cost_cmd_ = std::min(min_cost_cmd_, cost_cmd_[i]); - } - - literal_costs_.resize(num_bytes + 1); - literal_costs_[0] = 0.0; - for (size_t i = 0; i < num_bytes; ++i) { - literal_costs_[i + 1] = literal_costs_[i] + - cost_literal[ringbuffer[(position + i) & ringbuffer_mask]]; - } - } - - void SetFromLiteralCosts(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - literal_costs_.resize(num_bytes + 2); - EstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask, - ringbuffer, &literal_costs_[1]); - literal_costs_[0] = 0.0; - for (size_t i = 0; i < num_bytes; ++i) { - literal_costs_[i + 1] += literal_costs_[i]; - } - cost_cmd_.resize(kNumCommandPrefixes); - cost_dist_.resize(kNumDistancePrefixes); - for (uint32_t i = 0; i < kNumCommandPrefixes; ++i) { - cost_cmd_[i] = static_cast<float>(FastLog2(11 + i)); - } - for (uint32_t i = 0; i < kNumDistancePrefixes; ++i) { - cost_dist_[i] = static_cast<float>(FastLog2(20 + i)); - } - min_cost_cmd_ = static_cast<float>(FastLog2(11)); - } - - float GetCommandCost( - size_t dist_code, size_t length_code, size_t insert_length) const { - uint16_t inscode = GetInsertLengthCode(insert_length); - uint16_t copycode = GetCopyLengthCode(length_code); - uint16_t cmdcode = CombineLengthCodes(inscode, copycode, dist_code == 0); - uint16_t dist_symbol; - uint32_t distextra; - PrefixEncodeCopyDistance(dist_code, 0, 0, &dist_symbol, &distextra); - uint32_t distnumextra = distextra >> 24; - - float result = static_cast<float>( - GetInsertExtra(inscode) + GetCopyExtra(copycode) + distnumextra); - result += cost_cmd_[cmdcode]; - if (cmdcode >= 128) result += cost_dist_[dist_symbol]; - return result; - } - - float GetLiteralCosts(size_t from, size_t to) const { - return literal_costs_[to] - literal_costs_[from]; - } - - float GetMinCostCmd(void) const { - return min_cost_cmd_; - } - - private: - void Set(const std::vector<uint32_t>& histogram, std::vector<float>* cost) { - cost->resize(histogram.size()); - size_t sum = 0; - for (size_t i = 0; i < histogram.size(); i++) { - sum += histogram[i]; - } - float log2sum = static_cast<float>(FastLog2(sum)); - for (size_t i = 0; i < histogram.size(); i++) { - if (histogram[i] == 0) { - (*cost)[i] = log2sum + 2; - continue; - } - - // Shannon bits for this symbol. - (*cost)[i] = log2sum - static_cast<float>(FastLog2(histogram[i])); - - // Cannot be coded with less than 1 bit - if ((*cost)[i] < 1) (*cost)[i] = 1; - } - } - - std::vector<float> cost_cmd_; // The insert and copy length symbols. - std::vector<float> cost_dist_; - // Cumulative costs of literals per position in the stream. - std::vector<float> literal_costs_; - float min_cost_cmd_; -}; - -inline size_t ComputeDistanceCode(size_t distance, - size_t max_distance, - int quality, - const int* dist_cache) { - if (distance <= max_distance) { - if (distance == static_cast<size_t>(dist_cache[0])) { - return 0; - } else if (distance == static_cast<size_t>(dist_cache[1])) { - return 1; - } else if (distance == static_cast<size_t>(dist_cache[2])) { - return 2; - } else if (distance == static_cast<size_t>(dist_cache[3])) { - return 3; - } else if (quality > 3 && distance >= 6) { - for (size_t k = 4; k < kNumDistanceShortCodes; ++k) { - size_t idx = kDistanceCacheIndex[k]; - size_t candidate = - static_cast<size_t>(dist_cache[idx] + kDistanceCacheOffset[k]); - static const size_t kLimits[16] = { 0, 0, 0, 0, - 6, 6, 11, 11, - 11, 11, 11, 11, - 12, 12, 12, 12 }; - if (distance == candidate && distance >= kLimits[k]) { - return k; - } - } - } - } - return distance + 15; -} - -// REQUIRES: len >= 2, start_pos <= pos -// REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity -// Maintains the "ZopfliNode array invariant". -inline void UpdateZopfliNode(ZopfliNode* nodes, size_t pos, size_t start_pos, - size_t len, size_t len_code, size_t dist, - size_t short_code, float cost) { - ZopfliNode& next = nodes[pos + len]; - next.length = static_cast<uint32_t>(len | ((len + 9u - len_code) << 24)); - next.distance = static_cast<uint32_t>(dist | (short_code << 25)); - next.insert_length = static_cast<uint32_t>(pos - start_pos); - next.cost = cost; -} - -// Maintains the smallest 2^k cost difference together with their positions -class StartPosQueue { - public: - struct PosData { - size_t pos; - int distance_cache[4]; - float costdiff; - }; - - explicit StartPosQueue(int bits) - : mask_((1u << bits) - 1), q_(1 << bits), idx_(0) {} - - void Clear(void) { - idx_ = 0; - } - - void Push(const StartPosQueue::PosData& posdata) { - size_t offset = ~idx_ & mask_; - ++idx_; - size_t len = size(); - q_[offset] = posdata; - /* Restore the sorted order. In the list of |len| items at most |len - 1| - adjacent element comparisons / swaps are required. */ - for (size_t i = 1; i < len; ++i) { - if (q_[offset & mask_].costdiff > q_[(offset + 1) & mask_].costdiff) { - std::swap(q_[offset & mask_], q_[(offset + 1) & mask_]); - } - ++offset; - } - } - - size_t size(void) const { return std::min(idx_, mask_ + 1); } - - const StartPosQueue::PosData& GetStartPosData(size_t k) const { - return q_[(k - idx_) & mask_]; - } - - private: - const size_t mask_; - std::vector<PosData> q_; - size_t idx_; -}; - -// Returns the minimum possible copy length that can improve the cost of any -// future position. -static size_t ComputeMinimumCopyLength(const StartPosQueue& queue, - const ZopfliNode* nodes, - const ZopfliCostModel& model, - const size_t num_bytes, - const size_t pos) { - // Compute the minimum possible cost of reaching any future position. - const size_t start0 = queue.GetStartPosData(0).pos; - float min_cost = (nodes[start0].cost + - model.GetLiteralCosts(start0, pos) + - model.GetMinCostCmd()); - size_t len = 2; - size_t next_len_bucket = 4; - size_t next_len_offset = 10; - while (pos + len <= num_bytes && nodes[pos + len].cost <= min_cost) { - // We already reached (pos + len) with no more cost than the minimum - // possible cost of reaching anything from this pos, so there is no point in - // looking for lengths <= len. - ++len; - if (len == next_len_offset) { - // We reached the next copy length code bucket, so we add one more - // extra bit to the minimum cost. - min_cost += static_cast<float>(1.0); - next_len_offset += next_len_bucket; - next_len_bucket *= 2; - } - } - return len; -} - -// Fills in dist_cache[0..3] with the last four distances (as defined by -// Section 4. of the Spec) that would be used at (block_start + pos) if we -// used the shortest path of commands from block_start, computed from -// nodes[0..pos]. The last four distances at block_start are in -// starting_dist_cach[0..3]. -// REQUIRES: nodes[pos].cost < kInfinity -// REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". -static void ComputeDistanceCache(const size_t block_start, - const size_t pos, - const size_t max_backward, - const int* starting_dist_cache, - const ZopfliNode* nodes, - int* dist_cache) { - int idx = 0; - size_t p = pos; - // Because of prerequisite, does at most (pos + 1) / 2 iterations. - while (idx < 4 && p > 0) { - const size_t clen = nodes[p].copy_length(); - const size_t ilen = nodes[p].insert_length; - const size_t dist = nodes[p].copy_distance(); - // Since block_start + p is the end position of the command, the copy part - // starts from block_start + p - clen. Distances that are greater than this - // or greater than max_backward are static dictionary references, and do - // not update the last distances. Also distance code 0 (last distance) - // does not update the last distances. - if (dist + clen <= block_start + p && dist <= max_backward && - nodes[p].distance_code() > 0) { - dist_cache[idx++] = static_cast<int>(dist); - } - // Because of prerequisite, p >= clen + ilen >= 2. - p -= clen + ilen; - } - for (; idx < 4; ++idx) { - dist_cache[idx] = *starting_dist_cache++; - } -} - -static void UpdateNodes(const size_t num_bytes, - const size_t block_start, - const size_t pos, - const uint8_t* ringbuffer, - const size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* starting_dist_cache, - const size_t num_matches, - const BackwardMatch* matches, - const ZopfliCostModel* model, - StartPosQueue* queue, - ZopfliNode* nodes) { - size_t cur_ix = block_start + pos; - size_t cur_ix_masked = cur_ix & ringbuffer_mask; - size_t max_distance = std::min(cur_ix, max_backward_limit); - - if (nodes[pos].cost <= model->GetLiteralCosts(0, pos)) { - StartPosQueue::PosData posdata; - posdata.pos = pos; - posdata.costdiff = nodes[pos].cost - model->GetLiteralCosts(0, pos); - ComputeDistanceCache(block_start, pos, max_backward_limit, - starting_dist_cache, nodes, posdata.distance_cache); - queue->Push(posdata); - } - - const size_t min_len = ComputeMinimumCopyLength( - *queue, nodes, *model, num_bytes, pos); - - // Go over the command starting positions in order of increasing cost - // difference. - for (size_t k = 0; k < 5 && k < queue->size(); ++k) { - const StartPosQueue::PosData& posdata = queue->GetStartPosData(k); - const size_t start = posdata.pos; - const float start_costdiff = posdata.costdiff; - - // Look for last distance matches using the distance cache from this - // starting position. - size_t best_len = min_len - 1; - for (size_t j = 0; j < kNumDistanceShortCodes; ++j) { - const size_t idx = kDistanceCacheIndex[j]; - const size_t backward = static_cast<size_t>(posdata.distance_cache[idx] + - kDistanceCacheOffset[j]); - size_t prev_ix = cur_ix - backward; - if (prev_ix >= cur_ix) { - continue; - } - if (PREDICT_FALSE(backward > max_distance)) { - continue; - } - prev_ix &= ringbuffer_mask; - - if (cur_ix_masked + best_len > ringbuffer_mask || - prev_ix + best_len > ringbuffer_mask || - ringbuffer[cur_ix_masked + best_len] != - ringbuffer[prev_ix + best_len]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&ringbuffer[prev_ix], - &ringbuffer[cur_ix_masked], - num_bytes - pos); - for (size_t l = best_len + 1; l <= len; ++l) { - const size_t inslen = pos - start; - float cmd_cost = model->GetCommandCost(j, l, inslen); - float cost = start_costdiff + cmd_cost + model->GetLiteralCosts(0, pos); - if (cost < nodes[pos + l].cost) { - UpdateZopfliNode(&nodes[0], pos, start, l, l, backward, j + 1, cost); - } - best_len = l; - } - } - - // At higher iterations look only for new last distance matches, since - // looking only for new command start positions with the same distances - // does not help much. - if (k >= 2) continue; - - // Loop through all possible copy lengths at this position. - size_t len = min_len; - for (size_t j = 0; j < num_matches; ++j) { - BackwardMatch match = matches[j]; - size_t dist = match.distance; - bool is_dictionary_match = dist > max_distance; - // We already tried all possible last distance matches, so we can use - // normal distance code here. - size_t dist_code = dist + 15; - // Try all copy lengths up until the maximum copy length corresponding - // to this distance. If the distance refers to the static dictionary, or - // the maximum length is long enough, try only one maximum length. - size_t max_len = match.length(); - if (len < max_len && (is_dictionary_match || max_len > kMaxZopfliLen)) { - len = max_len; - } - for (; len <= max_len; ++len) { - size_t len_code = is_dictionary_match ? match.length_code() : len; - const size_t inslen = pos - start; - float cmd_cost = model->GetCommandCost(dist_code, len_code, inslen); - float cost = start_costdiff + cmd_cost + model->GetLiteralCosts(0, pos); - if (cost < nodes[pos + len].cost) { - UpdateZopfliNode(&nodes[0], pos, start, len, len_code, dist, 0, cost); - } - } - } - } -} - -static void ComputeShortestPathFromNodes(size_t num_bytes, - const ZopfliNode* nodes, - std::vector<uint32_t>* path) { - std::vector<uint32_t> backwards(num_bytes / 2 + 1); - size_t index = num_bytes; - while (nodes[index].cost == kInfinity) --index; - size_t num_commands = 0; - while (index != 0) { - size_t len = nodes[index].command_length(); - backwards[num_commands++] = static_cast<uint32_t>(len); - index -= len; - } - path->resize(num_commands); - for (size_t i = num_commands, j = 0; i > 0; --i, ++j) { - (*path)[j] = backwards[i - 1]; - } -} - -void ZopfliCreateCommands(const size_t num_bytes, - const size_t block_start, - const size_t max_backward_limit, - const std::vector<uint32_t>& path, - const ZopfliNode* nodes, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_literals) { - size_t pos = 0; - for (size_t i = 0; i < path.size(); i++) { - const ZopfliNode& next = nodes[pos + path[i]]; - size_t copy_length = next.copy_length(); - size_t insert_length = next.insert_length; - pos += insert_length; - if (i == 0) { - insert_length += *last_insert_len; - *last_insert_len = 0; - } - size_t distance = next.copy_distance(); - size_t len_code = next.length_code(); - size_t max_distance = std::min(block_start + pos, max_backward_limit); - bool is_dictionary = (distance > max_distance); - size_t dist_code = next.distance_code(); - - Command cmd(insert_length, copy_length, len_code, dist_code); - commands[i] = cmd; - - if (!is_dictionary && dist_code > 0) { - dist_cache[3] = dist_cache[2]; - dist_cache[2] = dist_cache[1]; - dist_cache[1] = dist_cache[0]; - dist_cache[0] = static_cast<int>(distance); - } - - *num_literals += insert_length; - pos += copy_length; - } - *last_insert_len += num_bytes - pos; -} - -static void ZopfliIterate(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* dist_cache, - const ZopfliCostModel& model, - const std::vector<uint32_t>& num_matches, - const std::vector<BackwardMatch>& matches, - ZopfliNode* nodes, - std::vector<uint32_t>* path) { - nodes[0].length = 0; - nodes[0].cost = 0; - StartPosQueue queue(3); - size_t cur_match_pos = 0; - for (size_t i = 0; i + 3 < num_bytes; i++) { - UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, num_matches[i], - &matches[cur_match_pos], &model, &queue, &nodes[0]); - cur_match_pos += num_matches[i]; - // The zopflification can be too slow in case of very long lengths, so in - // such case skip it all, it does not cost a lot of compression ratio. - if (num_matches[i] == 1 && - matches[cur_match_pos - 1].length() > kMaxZopfliLen) { - i += matches[cur_match_pos - 1].length() - 1; - queue.Clear(); - } - } - ComputeShortestPathFromNodes(num_bytes, &nodes[0], path); -} - - -void ZopfliComputeShortestPath(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* dist_cache, - Hashers::H10* hasher, - ZopfliNode* nodes, - std::vector<uint32_t>* path) { - nodes[0].length = 0; - nodes[0].cost = 0; - ZopfliCostModel* model = new ZopfliCostModel; - model->SetFromLiteralCosts(num_bytes, position, - ringbuffer, ringbuffer_mask); - StartPosQueue queue(3); - BackwardMatch matches[Hashers::H10::kMaxNumMatches]; - for (size_t i = 0; i + 3 < num_bytes; i++) { - const size_t max_distance = std::min(position + i, max_backward_limit); - size_t num_matches = hasher->FindAllMatches( - ringbuffer, ringbuffer_mask, position + i, num_bytes - i, max_distance, - matches); - if (num_matches > 0 && - matches[num_matches - 1].length() > kMaxZopfliLen) { - matches[0] = matches[num_matches - 1]; - num_matches = 1; - } - UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, num_matches, matches, - model, &queue, nodes); - if (num_matches == 1 && matches[0].length() > kMaxZopfliLen) { - for (size_t j = 1; j < matches[0].length() && i + 4 < num_bytes; ++j) { - ++i; - if (matches[0].length() - j < 64 && - num_bytes - i >= kMaxTreeCompLength) { - hasher->Store(ringbuffer, ringbuffer_mask, position + i); - } - } - queue.Clear(); - } - } - delete model; - ComputeShortestPathFromNodes(num_bytes, nodes, path); -} - -template<typename Hasher> -void CreateBackwardReferences(size_t num_bytes, - size_t position, - bool is_last, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const int quality, - const int lgwin, - Hasher* hasher, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_commands, - size_t* num_literals) { - // Set maximum distance, see section 9.1. of the spec. - const size_t max_backward_limit = (1 << lgwin) - 16; - - // Choose which init method is faster. - // memset is about 100 times faster than hasher->InitForData(). - const size_t kMaxBytesForPartialHashInit = Hasher::kHashMapSize >> 7; - if (position == 0 && is_last && num_bytes <= kMaxBytesForPartialHashInit) { - hasher->InitForData(ringbuffer, num_bytes); - } else { - hasher->Init(); - } - if (num_bytes >= 3 && position >= 3) { - // Prepare the hashes for three last bytes of the last write. - // These could not be calculated before, since they require knowledge - // of both the previous and the current block. - hasher->Store(&ringbuffer[(position - 3) & ringbuffer_mask], - static_cast<uint32_t>(position - 3)); - hasher->Store(&ringbuffer[(position - 2) & ringbuffer_mask], - static_cast<uint32_t>(position - 2)); - hasher->Store(&ringbuffer[(position - 1) & ringbuffer_mask], - static_cast<uint32_t>(position - 1)); - } - const Command * const orig_commands = commands; - size_t insert_length = *last_insert_len; - size_t i = position & ringbuffer_mask; - const size_t i_diff = position - i; - const size_t i_end = i + num_bytes; - - // For speed up heuristics for random data. - const size_t random_heuristics_window_size = quality < 9 ? 64 : 512; - size_t apply_random_heuristics = i + random_heuristics_window_size; - - // Minimum score to accept a backward reference. - const double kMinScore = 4.0; - - while (i + Hasher::kHashTypeLength - 1 < i_end) { - size_t max_length = i_end - i; - size_t max_distance = std::min(i + i_diff, max_backward_limit); - size_t best_len = 0; - size_t best_len_code = 0; - size_t best_dist = 0; - double best_score = kMinScore; - bool match_found = hasher->FindLongestMatch( - ringbuffer, ringbuffer_mask, - dist_cache, static_cast<uint32_t>(i + i_diff), max_length, max_distance, - &best_len, &best_len_code, &best_dist, &best_score); - if (match_found) { - // Found a match. Let's look for something even better ahead. - int delayed_backward_references_in_row = 0; - for (;;) { - --max_length; - size_t best_len_2 = - quality < 5 ? std::min(best_len - 1, max_length) : 0; - size_t best_len_code_2 = 0; - size_t best_dist_2 = 0; - double best_score_2 = kMinScore; - max_distance = std::min(i + i_diff + 1, max_backward_limit); - match_found = hasher->FindLongestMatch( - ringbuffer, ringbuffer_mask, - dist_cache, static_cast<uint32_t>(i + i_diff + 1), - max_length, max_distance, - &best_len_2, &best_len_code_2, &best_dist_2, &best_score_2); - double cost_diff_lazy = 7.0; - if (match_found && best_score_2 >= best_score + cost_diff_lazy) { - // Ok, let's just write one byte for now and start a match from the - // next byte. - ++i; - ++insert_length; - best_len = best_len_2; - best_len_code = best_len_code_2; - best_dist = best_dist_2; - best_score = best_score_2; - if (++delayed_backward_references_in_row < 4) { - continue; - } - } - break; - } - apply_random_heuristics = - i + 2 * best_len + random_heuristics_window_size; - max_distance = std::min(i + i_diff, max_backward_limit); - // The first 16 codes are special shortcodes, and the minimum offset is 1. - size_t distance_code = - ComputeDistanceCode(best_dist, max_distance, quality, dist_cache); - if (best_dist <= max_distance && distance_code > 0) { - dist_cache[3] = dist_cache[2]; - dist_cache[2] = dist_cache[1]; - dist_cache[1] = dist_cache[0]; - dist_cache[0] = static_cast<int>(best_dist); - } - Command cmd(insert_length, best_len, best_len_code, distance_code); - *commands++ = cmd; - *num_literals += insert_length; - insert_length = 0; - // Put the hash keys into the table, if there are enough - // bytes left. - for (size_t j = 2; j < best_len; ++j) { - hasher->Store(&ringbuffer[i + j], - static_cast<uint32_t>(i + i_diff + j)); - } - i += best_len; - } else { - ++insert_length; - ++i; - // If we have not seen matches for a long time, we can skip some - // match lookups. Unsuccessful match lookups are very very expensive - // and this kind of a heuristic speeds up compression quite - // a lot. - if (i > apply_random_heuristics) { - // Going through uncompressible data, jump. - if (i > apply_random_heuristics + 4 * random_heuristics_window_size) { - // It is quite a long time since we saw a copy, so we assume - // that this data is not compressible, and store hashes less - // often. Hashes of non compressible data are less likely to - // turn out to be useful in the future, too, so we store less of - // them to not to flood out the hash table of good compressible - // data. - size_t i_jump = std::min(i + 16, i_end - 4); - for (; i < i_jump; i += 4) { - hasher->Store(ringbuffer + i, static_cast<uint32_t>(i + i_diff)); - insert_length += 4; - } - } else { - size_t i_jump = std::min(i + 8, i_end - 3); - for (; i < i_jump; i += 2) { - hasher->Store(ringbuffer + i, static_cast<uint32_t>(i + i_diff)); - insert_length += 2; - } - } - } - } - } - insert_length += i_end - i; - *last_insert_len = insert_length; - *num_commands += static_cast<size_t>(commands - orig_commands); -} - -void CreateBackwardReferences(size_t num_bytes, - size_t position, - bool is_last, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const int quality, - const int lgwin, - Hashers* hashers, - int hash_type, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_commands, - size_t* num_literals) { - bool zopflify = quality > 9; - if (zopflify) { - Hashers::H10* hasher = hashers->hash_h10; - hasher->Init(lgwin, position, num_bytes, is_last); - hasher->StitchToPreviousBlock(num_bytes, position, - ringbuffer, ringbuffer_mask); - // Set maximum distance, see section 9.1. of the spec. - const size_t max_backward_limit = (1 << lgwin) - 16; - if (quality == 10) { - std::vector<ZopfliNode> nodes(num_bytes + 1); - std::vector<uint32_t> path; - ZopfliComputeShortestPath(num_bytes, position, - ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, hasher, - &nodes[0], &path); - ZopfliCreateCommands(num_bytes, position, max_backward_limit, path, - &nodes[0], dist_cache, last_insert_len, commands, - num_literals); - *num_commands += path.size(); - return; - } - std::vector<uint32_t> num_matches(num_bytes); - std::vector<BackwardMatch> matches(4 * num_bytes); - size_t cur_match_pos = 0; - for (size_t i = 0; i + 3 < num_bytes; ++i) { - size_t max_distance = std::min(position + i, max_backward_limit); - size_t max_length = num_bytes - i; - // Ensure that we have enough free slots. - if (matches.size() < cur_match_pos + Hashers::H10::kMaxNumMatches) { - matches.resize(cur_match_pos + Hashers::H10::kMaxNumMatches); - } - size_t num_found_matches = hasher->FindAllMatches( - ringbuffer, ringbuffer_mask, position + i, max_length, max_distance, - &matches[cur_match_pos]); - const size_t cur_match_end = cur_match_pos + num_found_matches; - for (size_t j = cur_match_pos; j + 1 < cur_match_end; ++j) { - assert(matches[j].length() < matches[j + 1].length()); - assert(matches[j].distance > max_distance || - matches[j].distance <= matches[j + 1].distance); - } - num_matches[i] = static_cast<uint32_t>(num_found_matches); - if (num_found_matches > 0) { - const size_t match_len = matches[cur_match_end - 1].length(); - if (match_len > kMaxZopfliLen) { - matches[cur_match_pos++] = matches[cur_match_end - 1]; - num_matches[i] = 1; - for (size_t j = 1; j < match_len; ++j) { - ++i; - if (match_len - j < 64 && num_bytes - i >= kMaxTreeCompLength) { - hasher->Store(ringbuffer, ringbuffer_mask, position + i); - } - num_matches[i] = 0; - } - } else { - cur_match_pos = cur_match_end; - } - } - } - size_t orig_num_literals = *num_literals; - size_t orig_last_insert_len = *last_insert_len; - int orig_dist_cache[4] = { - dist_cache[0], dist_cache[1], dist_cache[2], dist_cache[3] - }; - size_t orig_num_commands = *num_commands; - static const size_t kIterations = 2; - for (size_t i = 0; i < kIterations; i++) { - ZopfliCostModel model; - if (i == 0) { - model.SetFromLiteralCosts(num_bytes, position, - ringbuffer, ringbuffer_mask); - } else { - model.SetFromCommands(num_bytes, position, - ringbuffer, ringbuffer_mask, - commands, *num_commands - orig_num_commands, - orig_last_insert_len); - } - *num_commands = orig_num_commands; - *num_literals = orig_num_literals; - *last_insert_len = orig_last_insert_len; - memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0])); - std::vector<ZopfliNode> nodes(num_bytes + 1); - std::vector<uint32_t> path; - ZopfliIterate(num_bytes, position, ringbuffer, ringbuffer_mask, - max_backward_limit, dist_cache, model, num_matches, matches, - &nodes[0], &path); - ZopfliCreateCommands(num_bytes, position, max_backward_limit, path, - &nodes[0], dist_cache, last_insert_len, commands, - num_literals); - *num_commands += path.size(); - } - return; - } - - switch (hash_type) { - case 2: - CreateBackwardReferences<Hashers::H2>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h2, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 3: - CreateBackwardReferences<Hashers::H3>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h3, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 4: - CreateBackwardReferences<Hashers::H4>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h4, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 5: - CreateBackwardReferences<Hashers::H5>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h5, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 6: - CreateBackwardReferences<Hashers::H6>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h6, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 7: - CreateBackwardReferences<Hashers::H7>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h7, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 8: - CreateBackwardReferences<Hashers::H8>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h8, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - case 9: - CreateBackwardReferences<Hashers::H9>( - num_bytes, position, is_last, ringbuffer, ringbuffer_mask, - quality, lgwin, hashers->hash_h9, dist_cache, - last_insert_len, commands, num_commands, num_literals); - break; - default: - break; - } -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/backward_references.h b/third_party/brotli/enc/backward_references.h index f60667f..ae851643 100644 --- a/third_party/brotli/enc/backward_references.h +++ b/third_party/brotli/enc/backward_references.h
@@ -4,113 +4,97 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Function to find backward reference copies. +/* Function to find backward reference copies. */ #ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_ #define BROTLI_ENC_BACKWARD_REFERENCES_H_ -#include <vector> - -#include "./hash.h" +#include "../common/constants.h" +#include <brotli/types.h> #include "./command.h" -#include "./types.h" +#include "./hash.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// "commands" points to the next output command to write to, "*num_commands" is -// initially the total amount of commands output by previous -// CreateBackwardReferences calls, and must be incremented by the amount written -// by this call. -void CreateBackwardReferences(size_t num_bytes, - size_t position, - bool is_last, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const int quality, - const int lgwin, - Hashers* hashers, - int hash_type, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_commands, - size_t* num_literals); +/* "commands" points to the next output command to write to, "*num_commands" is + initially the total amount of commands output by previous + CreateBackwardReferences calls, and must be incremented by the amount written + by this call. */ +BROTLI_INTERNAL void BrotliCreateBackwardReferences( + MemoryManager* m, size_t num_bytes, size_t position, BROTLI_BOOL is_last, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, Hashers* hashers, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals); -static const float kInfinity = std::numeric_limits<float>::infinity(); - -struct ZopfliNode { - ZopfliNode(void) : length(1), - distance(0), - insert_length(0), - cost(kInfinity) {} - - inline uint32_t copy_length() const { - return length & 0xffffff; - } - - inline uint32_t length_code() const { - const uint32_t modifier = length >> 24; - return copy_length() + 9u - modifier; - } - - inline uint32_t copy_distance() const { - return distance & 0x1ffffff; - } - - inline uint32_t distance_code() const { - const uint32_t short_code = distance >> 25; - return short_code == 0 ? copy_distance() + 15 : short_code - 1; - } - - inline uint32_t command_length() const { - return copy_length() + insert_length; - } - - // best length to get up to this byte (not including this byte itself) - // highest 8 bit is used to reconstruct the length code +typedef struct ZopfliNode { + /* best length to get up to this byte (not including this byte itself) + highest 8 bit is used to reconstruct the length code */ uint32_t length; - // distance associated with the length - // highest 7 bit contains distance short code + 1 (or zero if no short code) + /* distance associated with the length + highest 7 bit contains distance short code + 1 (or zero if no short code) + */ uint32_t distance; - // number of literal inserts before this copy + /* number of literal inserts before this copy */ uint32_t insert_length; - // smallest cost to get to this byte from the beginning, as found so far - float cost; -}; -// Computes the shortest path of commands from position to at most -// position + num_bytes. -// -// On return, path->size() is the number of commands found and path[i] is the -// length of the ith command (copy length plus insert length). -// Note that the sum of the lengths of all commands can be less than num_bytes. -// -// On return, the nodes[0..num_bytes] array will have the following -// "ZopfliNode array invariant": -// For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then -// (1) nodes[i].copy_length() >= 2 -// (2) nodes[i].command_length() <= i and -// (3) nodes[i - nodes[i].command_length()].cost < kInfinity -void ZopfliComputeShortestPath(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const size_t max_backward_limit, - const int* dist_cache, - Hashers::H10* hasher, - ZopfliNode* nodes, - std::vector<uint32_t>* path); + /* This union holds information used by dynamic-programming. During forward + pass |cost| it used to store the goal function. When node is processed its + |cost| is invalidated in favor of |shortcut|. On path back-tracing pass + |next| is assigned the offset to next node on the path. */ + union { + /* Smallest cost to get to this byte from the beginning, as found so far. */ + float cost; + /* Offset to the next node on the path. Equals to command_length() of the + next node on the path. For last node equals to BROTLI_UINT32_MAX */ + uint32_t next; + /* Node position that provides next distance for distance cache. */ + uint32_t shortcut; + } u; +} ZopfliNode; -void ZopfliCreateCommands(const size_t num_bytes, - const size_t block_start, - const size_t max_backward_limit, - const std::vector<uint32_t>& path, - const ZopfliNode* nodes, - int* dist_cache, - size_t* last_insert_len, - Command* commands, - size_t* num_literals); +BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length); -} // namespace brotli +/* Computes the shortest path of commands from position to at most + position + num_bytes. -#endif // BROTLI_ENC_BACKWARD_REFERENCES_H_ + On return, path->size() is the number of commands found and path[i] is the + length of the i-th command (copy length plus insert length). + Note that the sum of the lengths of all commands can be less than num_bytes. + + On return, the nodes[0..num_bytes] array will have the following + "ZopfliNode array invariant": + For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then + (1) nodes[i].copy_length() >= 2 + (2) nodes[i].command_length() <= i and + (3) nodes[i - nodes[i].command_length()].cost < kInfinity */ +BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath( + MemoryManager* m, size_t num_bytes, size_t position, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, const size_t max_backward_limit, + const int* dist_cache, H10* hasher, ZopfliNode* nodes); + +BROTLI_INTERNAL void BrotliZopfliCreateCommands(const size_t num_bytes, + const size_t block_start, + const size_t max_backward_limit, + const ZopfliNode* nodes, + int* dist_cache, + size_t* last_insert_len, + Command* commands, + size_t* num_literals); + +/* Maximum distance, see section 9.1. of the spec. */ +static BROTLI_INLINE size_t MaxBackwardLimit(int lgwin) { + return (1u << lgwin) - BROTLI_WINDOW_GAP; +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */
diff --git a/third_party/brotli/enc/backward_references_inc.h b/third_party/brotli/enc/backward_references_inc.h new file mode 100644 index 0000000..e4d4cd07 --- /dev/null +++ b/third_party/brotli/enc/backward_references_inc.h
@@ -0,0 +1,147 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define Hasher HASHER() + +static BROTLI_NOINLINE void FN(CreateBackwardReferences)( + MemoryManager* m, size_t num_bytes, size_t position, BROTLI_BOOL is_last, + const uint8_t* ringbuffer, size_t ringbuffer_mask, + const BrotliEncoderParams* params, Hasher* hasher, int* dist_cache, + size_t* last_insert_len, Command* commands, size_t* num_commands, + size_t* num_literals) { + /* Set maximum distance, see section 9.1. of the spec. */ + const size_t max_backward_limit = MaxBackwardLimit(params->lgwin); + + const Command* const orig_commands = commands; + size_t insert_length = *last_insert_len; + const size_t pos_end = position + num_bytes; + const size_t store_end = num_bytes >= FN(StoreLookahead)() ? + position + num_bytes - FN(StoreLookahead)() + 1 : position; + + /* For speed up heuristics for random data. */ + const size_t random_heuristics_window_size = + LiteralSpreeLengthForSparseSearch(params); + size_t apply_random_heuristics = position + random_heuristics_window_size; + + /* Minimum score to accept a backward reference. */ + const score_t kMinScore = BROTLI_SCORE_BASE + 400; + + FN(Init)(m, hasher, ringbuffer, params, position, num_bytes, is_last); + if (BROTLI_IS_OOM(m)) return; + FN(StitchToPreviousBlock)(hasher, num_bytes, position, + ringbuffer, ringbuffer_mask); + + while (position + FN(HashTypeLength)() < pos_end) { + size_t max_length = pos_end - position; + size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit); + HasherSearchResult sr; + sr.len = 0; + sr.len_x_code = 0; + sr.distance = 0; + sr.score = kMinScore; + if (FN(FindLongestMatch)(hasher, ringbuffer, ringbuffer_mask, dist_cache, + position, max_length, max_distance, &sr)) { + /* Found a match. Let's look for something even better ahead. */ + int delayed_backward_references_in_row = 0; + --max_length; + for (;; --max_length) { + const score_t cost_diff_lazy = 700; + BROTLI_BOOL is_match_found; + HasherSearchResult sr2; + sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ? + BROTLI_MIN(size_t, sr.len - 1, max_length) : 0; + sr2.len_x_code = 0; + sr2.distance = 0; + sr2.score = kMinScore; + max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit); + is_match_found = FN(FindLongestMatch)(hasher, ringbuffer, + ringbuffer_mask, dist_cache, position + 1, max_length, max_distance, + &sr2); + if (is_match_found && sr2.score >= sr.score + cost_diff_lazy) { + /* Ok, let's just write one byte for now and start a match from the + next byte. */ + ++position; + ++insert_length; + sr = sr2; + if (++delayed_backward_references_in_row < 4 && + position + FN(HashTypeLength)() < pos_end) { + continue; + } + } + break; + } + apply_random_heuristics = + position + 2 * sr.len + random_heuristics_window_size; + max_distance = BROTLI_MIN(size_t, position, max_backward_limit); + { + /* The first 16 codes are special short-codes, + and the minimum offset is 1. */ + size_t distance_code = + ComputeDistanceCode(sr.distance, max_distance, dist_cache); + if (sr.distance <= max_distance && distance_code > 0) { + dist_cache[3] = dist_cache[2]; + dist_cache[2] = dist_cache[1]; + dist_cache[1] = dist_cache[0]; + dist_cache[0] = (int)sr.distance; + } + InitCommand(commands++, insert_length, sr.len, sr.len ^ sr.len_x_code, + distance_code); + } + *num_literals += insert_length; + insert_length = 0; + /* Put the hash keys into the table, if there are enough bytes left. + Depending on the hasher implementation, it can push all positions + in the given range or only a subset of them. */ + FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, position + 2, + BROTLI_MIN(size_t, position + sr.len, store_end)); + position += sr.len; + } else { + ++insert_length; + ++position; + /* If we have not seen matches for a long time, we can skip some + match lookups. Unsuccessful match lookups are very very expensive + and this kind of a heuristic speeds up compression quite + a lot. */ + if (position > apply_random_heuristics) { + /* Going through uncompressible data, jump. */ + if (position > + apply_random_heuristics + 4 * random_heuristics_window_size) { + /* It is quite a long time since we saw a copy, so we assume + that this data is not compressible, and store hashes less + often. Hashes of non compressible data are less likely to + turn out to be useful in the future, too, so we store less of + them to not to flood out the hash table of good compressible + data. */ + const size_t kMargin = + BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4); + size_t pos_jump = + BROTLI_MIN(size_t, position + 16, pos_end - kMargin); + for (; position < pos_jump; position += 4) { + FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); + insert_length += 4; + } + } else { + const size_t kMargin = + BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2); + size_t pos_jump = + BROTLI_MIN(size_t, position + 8, pos_end - kMargin); + for (; position < pos_jump; position += 2) { + FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); + insert_length += 2; + } + } + } + } + } + insert_length += pos_end - position; + *last_insert_len = insert_length; + *num_commands += (size_t)(commands - orig_commands); +} + +#undef Hasher
diff --git a/third_party/brotli/enc/bit_cost.c b/third_party/brotli/enc/bit_cost.c new file mode 100644 index 0000000..01e30f6d --- /dev/null +++ b/third_party/brotli/enc/bit_cost.c
@@ -0,0 +1,35 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions to estimate the bit cost of Huffman trees. */ + +#include "./bit_cost.h" + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./fast_log.h" +#include "./histogram.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define FN(X) X ## Literal +#include "./bit_cost_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./bit_cost_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./bit_cost_inc.h" /* NOLINT(build/include) */ +#undef FN + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/bit_cost.h b/third_party/brotli/enc/bit_cost.h index 4652006..e69ee04 100644 --- a/third_party/brotli/enc/bit_cost.h +++ b/third_party/brotli/enc/bit_cost.h
@@ -4,19 +4,22 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Functions to estimate the bit cost of Huffman trees. +/* Functions to estimate the bit cost of Huffman trees. */ #ifndef BROTLI_ENC_BIT_COST_H_ #define BROTLI_ENC_BIT_COST_H_ -#include "./entropy_encode.h" +#include <brotli/types.h> #include "./fast_log.h" -#include "./types.h" +#include "./histogram.h" +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static inline double ShannonEntropy(const uint32_t *population, size_t size, - size_t *total) { +static BROTLI_INLINE double ShannonEntropy(const uint32_t *population, + size_t size, size_t *total) { size_t sum = 0; double retval = 0; const uint32_t *population_end = population + size; @@ -27,135 +30,34 @@ while (population < population_end) { p = *population++; sum += p; - retval -= static_cast<double>(p) * FastLog2(p); + retval -= (double)p * FastLog2(p); odd_number_of_elements_left: p = *population++; sum += p; - retval -= static_cast<double>(p) * FastLog2(p); + retval -= (double)p * FastLog2(p); } - if (sum) retval += static_cast<double>(sum) * FastLog2(sum); + if (sum) retval += (double)sum * FastLog2(sum); *total = sum; return retval; } -static inline double BitsEntropy(const uint32_t *population, size_t size) { +static BROTLI_INLINE double BitsEntropy( + const uint32_t *population, size_t size) { size_t sum; double retval = ShannonEntropy(population, size, &sum); if (retval < sum) { - // At least one bit per literal is needed. - retval = static_cast<double>(sum); + /* At least one bit per literal is needed. */ + retval = (double)sum; } return retval; } -template<int kSize> -double PopulationCost(const Histogram<kSize>& histogram) { - static const double kOneSymbolHistogramCost = 12; - static const double kTwoSymbolHistogramCost = 20; - static const double kThreeSymbolHistogramCost = 28; - static const double kFourSymbolHistogramCost = 37; - if (histogram.total_count_ == 0) { - return kOneSymbolHistogramCost; - } - int count = 0; - int s[5]; - for (int i = 0; i < kSize; ++i) { - if (histogram.data_[i] > 0) { - s[count] = i; - ++count; - if (count > 4) break; - } - } - if (count == 1) { - return kOneSymbolHistogramCost; - } - if (count == 2) { - return (kTwoSymbolHistogramCost + - static_cast<double>(histogram.total_count_)); - } - if (count == 3) { - const uint32_t histo0 = histogram.data_[s[0]]; - const uint32_t histo1 = histogram.data_[s[1]]; - const uint32_t histo2 = histogram.data_[s[2]]; - const uint32_t histomax = std::max(histo0, std::max(histo1, histo2)); - return (kThreeSymbolHistogramCost + - 2 * (histo0 + histo1 + histo2) - histomax); - } - if (count == 4) { - uint32_t histo[4]; - for (int i = 0; i < 4; ++i) { - histo[i] = histogram.data_[s[i]]; - } - // Sort - for (int i = 0; i < 4; ++i) { - for (int j = i + 1; j < 4; ++j) { - if (histo[j] > histo[i]) { - std::swap(histo[j], histo[i]); - } - } - } - const uint32_t h23 = histo[2] + histo[3]; - const uint32_t histomax = std::max(h23, histo[0]); - return (kFourSymbolHistogramCost + - 3 * h23 + 2 * (histo[0] + histo[1]) - histomax); - } +BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*); +BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*); +BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*); - // In this loop we compute the entropy of the histogram and simultaneously - // build a simplified histogram of the code length codes where we use the - // zero repeat code 17, but we don't use the non-zero repeat code 16. - double bits = 0; - size_t max_depth = 1; - uint32_t depth_histo[kCodeLengthCodes] = { 0 }; - const double log2total = FastLog2(histogram.total_count_); - for (size_t i = 0; i < kSize;) { - if (histogram.data_[i] > 0) { - // Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = - // = log2(total_count) - log2(count(symbol)) - double log2p = log2total - FastLog2(histogram.data_[i]); - // Approximate the bit depth by round(-log2(P(symbol))) - size_t depth = static_cast<size_t>(log2p + 0.5); - bits += histogram.data_[i] * log2p; - if (depth > 15) { - depth = 15; - } - if (depth > max_depth) { - max_depth = depth; - } - ++depth_histo[depth]; - ++i; - } else { - // Compute the run length of zeros and add the appropriate number of 0 and - // 17 code length codes to the code length code histogram. - uint32_t reps = 1; - for (size_t k = i + 1; k < kSize && histogram.data_[k] == 0; ++k) { - ++reps; - } - i += reps; - if (i == kSize) { - // Don't add any cost for the last zero run, since these are encoded - // only implicitly. - break; - } - if (reps < 3) { - depth_histo[0] += reps; - } else { - reps -= 2; - while (reps > 0) { - ++depth_histo[17]; - // Add the 3 extra bits for the 17 code length code. - bits += 3; - reps >>= 3; - } - } - } - } - // Add the estimated encoding cost of the code length code histogram. - bits += static_cast<double>(18 + 2 * max_depth); - // Add the entropy of the code length code histogram. - bits += BitsEntropy(depth_histo, kCodeLengthCodes); - return bits; -} +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -} // namespace brotli - -#endif // BROTLI_ENC_BIT_COST_H_ +#endif /* BROTLI_ENC_BIT_COST_H_ */
diff --git a/third_party/brotli/enc/bit_cost_inc.h b/third_party/brotli/enc/bit_cost_inc.h new file mode 100644 index 0000000..453c226 --- /dev/null +++ b/third_party/brotli/enc/bit_cost_inc.h
@@ -0,0 +1,127 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define HistogramType FN(Histogram) + +double FN(BrotliPopulationCost)(const HistogramType* histogram) { + static const double kOneSymbolHistogramCost = 12; + static const double kTwoSymbolHistogramCost = 20; + static const double kThreeSymbolHistogramCost = 28; + static const double kFourSymbolHistogramCost = 37; + const size_t data_size = FN(HistogramDataSize)(); + int count = 0; + size_t s[5]; + double bits = 0.0; + size_t i; + if (histogram->total_count_ == 0) { + return kOneSymbolHistogramCost; + } + for (i = 0; i < data_size; ++i) { + if (histogram->data_[i] > 0) { + s[count] = i; + ++count; + if (count > 4) break; + } + } + if (count == 1) { + return kOneSymbolHistogramCost; + } + if (count == 2) { + return (kTwoSymbolHistogramCost + (double)histogram->total_count_); + } + if (count == 3) { + const uint32_t histo0 = histogram->data_[s[0]]; + const uint32_t histo1 = histogram->data_[s[1]]; + const uint32_t histo2 = histogram->data_[s[2]]; + const uint32_t histomax = + BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2)); + return (kThreeSymbolHistogramCost + + 2 * (histo0 + histo1 + histo2) - histomax); + } + if (count == 4) { + uint32_t histo[4]; + uint32_t h23; + uint32_t histomax; + for (i = 0; i < 4; ++i) { + histo[i] = histogram->data_[s[i]]; + } + /* Sort */ + for (i = 0; i < 4; ++i) { + size_t j; + for (j = i + 1; j < 4; ++j) { + if (histo[j] > histo[i]) { + BROTLI_SWAP(uint32_t, histo, j, i); + } + } + } + h23 = histo[2] + histo[3]; + histomax = BROTLI_MAX(uint32_t, h23, histo[0]); + return (kFourSymbolHistogramCost + + 3 * h23 + 2 * (histo[0] + histo[1]) - histomax); + } + + { + /* In this loop we compute the entropy of the histogram and simultaneously + build a simplified histogram of the code length codes where we use the + zero repeat code 17, but we don't use the non-zero repeat code 16. */ + size_t max_depth = 1; + uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 }; + const double log2total = FastLog2(histogram->total_count_); + for (i = 0; i < data_size;) { + if (histogram->data_[i] > 0) { + /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + = log2(total_count) - log2(count(symbol)) */ + double log2p = log2total - FastLog2(histogram->data_[i]); + /* Approximate the bit depth by round(-log2(P(symbol))) */ + size_t depth = (size_t)(log2p + 0.5); + bits += histogram->data_[i] * log2p; + if (depth > 15) { + depth = 15; + } + if (depth > max_depth) { + max_depth = depth; + } + ++depth_histo[depth]; + ++i; + } else { + /* Compute the run length of zeros and add the appropriate number of 0 + and 17 code length codes to the code length code histogram. */ + uint32_t reps = 1; + size_t k; + for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) { + ++reps; + } + i += reps; + if (i == data_size) { + /* Don't add any cost for the last zero run, since these are encoded + only implicitly. */ + break; + } + if (reps < 3) { + depth_histo[0] += reps; + } else { + reps -= 2; + while (reps > 0) { + ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH]; + /* Add the 3 extra bits for the 17 code length code. */ + bits += 3; + reps >>= 3; + } + } + } + } + /* Add the estimated encoding cost of the code length code histogram. */ + bits += (double)(18 + 2 * max_depth); + /* Add the entropy of the code length code histogram. */ + bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); + } + return bits; +} + +#undef HistogramType
diff --git a/third_party/brotli/enc/block_encoder_inc.h b/third_party/brotli/enc/block_encoder_inc.h new file mode 100644 index 0000000..2a08f90 --- /dev/null +++ b/third_party/brotli/enc/block_encoder_inc.h
@@ -0,0 +1,33 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define HistogramType FN(Histogram) + +/* Creates entropy codes for all block types and stores them to the bit + stream. */ +static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self, + const HistogramType* histograms, const size_t histograms_size, + HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) { + const size_t alphabet_size = self->alphabet_size_; + const size_t table_size = histograms_size * alphabet_size; + self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size); + self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size); + if (BROTLI_IS_OOM(m)) return; + + { + size_t i; + for (i = 0; i < histograms_size; ++i) { + size_t ix = i * alphabet_size; + BuildAndStoreHuffmanTree(&histograms[i].data_[0], alphabet_size, tree, + &self->depths_[ix], &self->bits_[ix], storage_ix, storage); + } + } +} + +#undef HistogramType
diff --git a/third_party/brotli/enc/block_splitter.c b/third_party/brotli/enc/block_splitter.c new file mode 100644 index 0000000..a870885 --- /dev/null +++ b/third_party/brotli/enc/block_splitter.c
@@ -0,0 +1,197 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Block split point selection utilities. */ + +#include "./block_splitter.h" + +#include <assert.h> +#include <string.h> /* memcpy, memset */ + +#include "./bit_cost.h" +#include "./cluster.h" +#include "./command.h" +#include "./fast_log.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const size_t kMaxLiteralHistograms = 100; +static const size_t kMaxCommandHistograms = 50; +static const double kLiteralBlockSwitchCost = 28.1; +static const double kCommandBlockSwitchCost = 13.5; +static const double kDistanceBlockSwitchCost = 14.6; +static const size_t kLiteralStrideLength = 70; +static const size_t kCommandStrideLength = 40; +static const size_t kSymbolsPerLiteralHistogram = 544; +static const size_t kSymbolsPerCommandHistogram = 530; +static const size_t kSymbolsPerDistanceHistogram = 544; +static const size_t kMinLengthForBlockSplitting = 128; +static const size_t kIterMulForRefining = 2; +static const size_t kMinItersForRefining = 100; + +static size_t CountLiterals(const Command* cmds, const size_t num_commands) { + /* Count how many we have. */ + size_t total_length = 0; + size_t i; + for (i = 0; i < num_commands; ++i) { + total_length += cmds[i].insert_len_; + } + return total_length; +} + +static void CopyLiteralsToByteArray(const Command* cmds, + const size_t num_commands, + const uint8_t* data, + const size_t offset, + const size_t mask, + uint8_t* literals) { + size_t pos = 0; + size_t from_pos = offset & mask; + size_t i; + for (i = 0; i < num_commands; ++i) { + size_t insert_len = cmds[i].insert_len_; + if (from_pos + insert_len > mask) { + size_t head_size = mask + 1 - from_pos; + memcpy(literals + pos, data + from_pos, head_size); + from_pos = 0; + pos += head_size; + insert_len -= head_size; + } + if (insert_len > 0) { + memcpy(literals + pos, data + from_pos, insert_len); + pos += insert_len; + } + from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask; + } +} + +static BROTLI_INLINE unsigned int MyRand(unsigned int* seed) { + *seed *= 16807U; + if (*seed == 0) { + *seed = 1; + } + return *seed; +} + +static BROTLI_INLINE double BitCost(size_t count) { + return count == 0 ? -2.0 : FastLog2(count); +} + +#define HISTOGRAMS_PER_BATCH 64 +#define CLUSTERS_PER_BATCH 16 + +#define FN(X) X ## Literal +#define DataType uint8_t +/* NOLINTNEXTLINE(build/include) */ +#include "./block_splitter_inc.h" +#undef DataType +#undef FN + +#define FN(X) X ## Command +#define DataType uint16_t +/* NOLINTNEXTLINE(build/include) */ +#include "./block_splitter_inc.h" +#undef FN + +#define FN(X) X ## Distance +/* NOLINTNEXTLINE(build/include) */ +#include "./block_splitter_inc.h" +#undef DataType +#undef FN + +void BrotliInitBlockSplit(BlockSplit* self) { + self->num_types = 0; + self->num_blocks = 0; + self->types = 0; + self->lengths = 0; + self->types_alloc_size = 0; + self->lengths_alloc_size = 0; +} + +void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) { + BROTLI_FREE(m, self->types); + BROTLI_FREE(m, self->lengths); +} + +void BrotliSplitBlock(MemoryManager* m, + const Command* cmds, + const size_t num_commands, + const uint8_t* data, + const size_t pos, + const size_t mask, + const BrotliEncoderParams* params, + BlockSplit* literal_split, + BlockSplit* insert_and_copy_split, + BlockSplit* dist_split) { + { + size_t literals_count = CountLiterals(cmds, num_commands); + uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count); + if (BROTLI_IS_OOM(m)) return; + /* Create a continuous array of literals. */ + CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals); + /* Create the block split on the array of literals. + Literal histograms have alphabet size 256. */ + SplitByteVectorLiteral( + m, literals, literals_count, + kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, + kLiteralStrideLength, kLiteralBlockSwitchCost, params, + literal_split); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, literals); + } + + { + /* Compute prefix codes for commands. */ + uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands); + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_commands; ++i) { + insert_and_copy_codes[i] = cmds[i].cmd_prefix_; + } + /* Create the block split on the array of command prefixes. */ + SplitByteVectorCommand( + m, insert_and_copy_codes, num_commands, + kSymbolsPerCommandHistogram, kMaxCommandHistograms, + kCommandStrideLength, kCommandBlockSwitchCost, params, + insert_and_copy_split); + if (BROTLI_IS_OOM(m)) return; + /* TODO: reuse for distances? */ + BROTLI_FREE(m, insert_and_copy_codes); + } + + { + /* Create a continuous array of distance prefixes. */ + uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands); + size_t j = 0; + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_commands; ++i) { + const Command* cmd = &cmds[i]; + if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) { + distance_prefixes[j++] = cmd->dist_prefix_; + } + } + /* Create the block split on the array of distance prefixes. */ + SplitByteVectorDistance( + m, distance_prefixes, j, + kSymbolsPerDistanceHistogram, kMaxCommandHistograms, + kCommandStrideLength, kDistanceBlockSwitchCost, params, + dist_split); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, distance_prefixes); + } +} + + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/block_splitter.cc b/third_party/brotli/enc/block_splitter.cc deleted file mode 100644 index db8d9c60..0000000 --- a/third_party/brotli/enc/block_splitter.cc +++ /dev/null
@@ -1,505 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Block split point selection utilities. - -#include "./block_splitter.h" - -#include <assert.h> -#include <math.h> - -#include <algorithm> -#include <cstring> -#include <vector> - -#include "./cluster.h" -#include "./command.h" -#include "./fast_log.h" -#include "./histogram.h" - -namespace brotli { - -static const size_t kMaxLiteralHistograms = 100; -static const size_t kMaxCommandHistograms = 50; -static const double kLiteralBlockSwitchCost = 28.1; -static const double kCommandBlockSwitchCost = 13.5; -static const double kDistanceBlockSwitchCost = 14.6; -static const size_t kLiteralStrideLength = 70; -static const size_t kCommandStrideLength = 40; -static const size_t kSymbolsPerLiteralHistogram = 544; -static const size_t kSymbolsPerCommandHistogram = 530; -static const size_t kSymbolsPerDistanceHistogram = 544; -static const size_t kMinLengthForBlockSplitting = 128; -static const size_t kIterMulForRefining = 2; -static const size_t kMinItersForRefining = 100; - -void CopyLiteralsToByteArray(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - std::vector<uint8_t>* literals) { - // Count how many we have. - size_t total_length = 0; - for (size_t i = 0; i < num_commands; ++i) { - total_length += cmds[i].insert_len_; - } - if (total_length == 0) { - return; - } - - // Allocate. - literals->resize(total_length); - - // Loop again, and copy this time. - size_t pos = 0; - size_t from_pos = offset & mask; - for (size_t i = 0; i < num_commands && pos < total_length; ++i) { - size_t insert_len = cmds[i].insert_len_; - if (from_pos + insert_len > mask) { - size_t head_size = mask + 1 - from_pos; - memcpy(&(*literals)[pos], data + from_pos, head_size); - from_pos = 0; - pos += head_size; - insert_len -= head_size; - } - if (insert_len > 0) { - memcpy(&(*literals)[pos], data + from_pos, insert_len); - pos += insert_len; - } - from_pos = (from_pos + insert_len + cmds[i].copy_len()) & mask; - } -} - -inline static unsigned int MyRand(unsigned int* seed) { - *seed *= 16807U; - if (*seed == 0) { - *seed = 1; - } - return *seed; -} - -template<typename HistogramType, typename DataType> -void InitialEntropyCodes(const DataType* data, size_t length, - size_t stride, - size_t num_histograms, - HistogramType* histograms) { - for (size_t i = 0; i < num_histograms; ++i) { - histograms[i].Clear(); - } - unsigned int seed = 7; - size_t block_length = length / num_histograms; - for (size_t i = 0; i < num_histograms; ++i) { - size_t pos = length * i / num_histograms; - if (i != 0) { - pos += MyRand(&seed) % block_length; - } - if (pos + stride >= length) { - pos = length - stride - 1; - } - histograms[i].Add(data + pos, stride); - } -} - -template<typename HistogramType, typename DataType> -void RandomSample(unsigned int* seed, - const DataType* data, - size_t length, - size_t stride, - HistogramType* sample) { - size_t pos = 0; - if (stride >= length) { - pos = 0; - stride = length; - } else { - pos = MyRand(seed) % (length - stride + 1); - } - sample->Add(data + pos, stride); -} - -template<typename HistogramType, typename DataType> -void RefineEntropyCodes(const DataType* data, size_t length, - size_t stride, - size_t num_histograms, - HistogramType* histograms) { - size_t iters = - kIterMulForRefining * length / stride + kMinItersForRefining; - unsigned int seed = 7; - iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms; - for (size_t iter = 0; iter < iters; ++iter) { - HistogramType sample; - RandomSample(&seed, data, length, stride, &sample); - size_t ix = iter % num_histograms; - histograms[ix].AddHistogram(sample); - } -} - -inline static double BitCost(size_t count) { - return count == 0 ? -2.0 : FastLog2(count); -} - -// Assigns a block id from the range [0, vec.size()) to each data element -// in data[0..length) and fills in block_id[0..length) with the assigned values. -// Returns the number of blocks, i.e. one plus the number of block switches. -template<typename DataType, int kSize> -size_t FindBlocks(const DataType* data, const size_t length, - const double block_switch_bitcost, - const size_t num_histograms, - const Histogram<kSize>* histograms, - double* insert_cost, - double* cost, - uint8_t* switch_signal, - uint8_t *block_id) { - if (num_histograms <= 1) { - for (size_t i = 0; i < length; ++i) { - block_id[i] = 0; - } - return 1; - } - const size_t bitmaplen = (num_histograms + 7) >> 3; - assert(num_histograms <= 256); - memset(insert_cost, 0, sizeof(insert_cost[0]) * kSize * num_histograms); - for (size_t j = 0; j < num_histograms; ++j) { - insert_cost[j] = FastLog2(static_cast<uint32_t>( - histograms[j].total_count_)); - } - for (size_t i = kSize; i != 0;) { - --i; - for (size_t j = 0; j < num_histograms; ++j) { - insert_cost[i * num_histograms + j] = - insert_cost[j] - BitCost(histograms[j].data_[i]); - } - } - memset(cost, 0, sizeof(cost[0]) * num_histograms); - memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen); - // After each iteration of this loop, cost[k] will contain the difference - // between the minimum cost of arriving at the current byte position using - // entropy code k, and the minimum cost of arriving at the current byte - // position. This difference is capped at the block switch cost, and if it - // reaches block switch cost, it means that when we trace back from the last - // position, we need to switch here. - for (size_t byte_ix = 0; byte_ix < length; ++byte_ix) { - size_t ix = byte_ix * bitmaplen; - size_t insert_cost_ix = data[byte_ix] * num_histograms; - double min_cost = 1e99; - for (size_t k = 0; k < num_histograms; ++k) { - // We are coding the symbol in data[byte_ix] with entropy code k. - cost[k] += insert_cost[insert_cost_ix + k]; - if (cost[k] < min_cost) { - min_cost = cost[k]; - block_id[byte_ix] = static_cast<uint8_t>(k); - } - } - double block_switch_cost = block_switch_bitcost; - // More blocks for the beginning. - if (byte_ix < 2000) { - block_switch_cost *= 0.77 + 0.07 * static_cast<double>(byte_ix) / 2000; - } - for (size_t k = 0; k < num_histograms; ++k) { - cost[k] -= min_cost; - if (cost[k] >= block_switch_cost) { - cost[k] = block_switch_cost; - const uint8_t mask = static_cast<uint8_t>(1u << (k & 7)); - assert((k >> 3) < bitmaplen); - switch_signal[ix + (k >> 3)] |= mask; - } - } - } - // Now trace back from the last position and switch at the marked places. - size_t byte_ix = length - 1; - size_t ix = byte_ix * bitmaplen; - uint8_t cur_id = block_id[byte_ix]; - size_t num_blocks = 1; - while (byte_ix > 0) { - --byte_ix; - ix -= bitmaplen; - const uint8_t mask = static_cast<uint8_t>(1u << (cur_id & 7)); - assert((static_cast<size_t>(cur_id) >> 3) < bitmaplen); - if (switch_signal[ix + (cur_id >> 3)] & mask) { - if (cur_id != block_id[byte_ix]) { - cur_id = block_id[byte_ix]; - ++num_blocks; - } - } - block_id[byte_ix] = cur_id; - } - return num_blocks; -} - -static size_t RemapBlockIds(uint8_t* block_ids, const size_t length, - uint16_t* new_id, const size_t num_histograms) { - static const uint16_t kInvalidId = 256; - for (size_t i = 0; i < num_histograms; ++i) { - new_id[i] = kInvalidId; - } - uint16_t next_id = 0; - for (size_t i = 0; i < length; ++i) { - assert(block_ids[i] < num_histograms); - if (new_id[block_ids[i]] == kInvalidId) { - new_id[block_ids[i]] = next_id++; - } - } - for (size_t i = 0; i < length; ++i) { - block_ids[i] = static_cast<uint8_t>(new_id[block_ids[i]]); - assert(block_ids[i] < num_histograms); - } - assert(next_id <= num_histograms); - return next_id; -} - -template<typename HistogramType, typename DataType> -void BuildBlockHistograms(const DataType* data, const size_t length, - const uint8_t* block_ids, - const size_t num_histograms, - HistogramType* histograms) { - for (size_t i = 0; i < num_histograms; ++i) { - histograms[i].Clear(); - } - for (size_t i = 0; i < length; ++i) { - histograms[block_ids[i]].Add(data[i]); - } -} - -template<typename HistogramType, typename DataType> -void ClusterBlocks(const DataType* data, const size_t length, - const size_t num_blocks, - uint8_t* block_ids, - BlockSplit* split) { - static const size_t kMaxNumberOfBlockTypes = 256; - static const size_t kHistogramsPerBatch = 64; - static const size_t kClustersPerBatch = 16; - std::vector<uint32_t> histogram_symbols(num_blocks); - std::vector<uint32_t> block_lengths(num_blocks); - - size_t block_idx = 0; - for (size_t i = 0; i < length; ++i) { - assert(block_idx < num_blocks); - ++block_lengths[block_idx]; - if (i + 1 == length || block_ids[i] != block_ids[i + 1]) { - ++block_idx; - } - } - assert(block_idx == num_blocks); - - const size_t expected_num_clusters = - kClustersPerBatch * - (num_blocks + kHistogramsPerBatch - 1) / kHistogramsPerBatch; - std::vector<HistogramType> all_histograms; - std::vector<uint32_t> cluster_size; - all_histograms.reserve(expected_num_clusters); - cluster_size.reserve(expected_num_clusters); - size_t num_clusters = 0; - std::vector<HistogramType> histograms( - std::min(num_blocks, kHistogramsPerBatch)); - size_t max_num_pairs = kHistogramsPerBatch * kHistogramsPerBatch / 2; - std::vector<HistogramPair> pairs(max_num_pairs + 1); - size_t pos = 0; - for (size_t i = 0; i < num_blocks; i += kHistogramsPerBatch) { - const size_t num_to_combine = std::min(num_blocks - i, kHistogramsPerBatch); - uint32_t sizes[kHistogramsPerBatch]; - uint32_t clusters[kHistogramsPerBatch]; - uint32_t symbols[kHistogramsPerBatch]; - uint32_t remap[kHistogramsPerBatch]; - for (size_t j = 0; j < num_to_combine; ++j) { - histograms[j].Clear(); - for (size_t k = 0; k < block_lengths[i + j]; ++k) { - histograms[j].Add(data[pos++]); - } - histograms[j].bit_cost_ = PopulationCost(histograms[j]); - symbols[j] = clusters[j] = static_cast<uint32_t>(j); - sizes[j] = 1; - } - size_t num_new_clusters = HistogramCombine( - &histograms[0], sizes, symbols, clusters, &pairs[0], num_to_combine, - num_to_combine, kHistogramsPerBatch, max_num_pairs); - for (size_t j = 0; j < num_new_clusters; ++j) { - all_histograms.push_back(histograms[clusters[j]]); - cluster_size.push_back(sizes[clusters[j]]); - remap[clusters[j]] = static_cast<uint32_t>(j); - } - for (size_t j = 0; j < num_to_combine; ++j) { - histogram_symbols[i + j] = - static_cast<uint32_t>(num_clusters) + remap[symbols[j]]; - } - num_clusters += num_new_clusters; - assert(num_clusters == cluster_size.size()); - assert(num_clusters == all_histograms.size()); - } - - max_num_pairs = - std::min(64 * num_clusters, (num_clusters / 2) * num_clusters); - pairs.resize(max_num_pairs + 1); - - std::vector<uint32_t> clusters(num_clusters); - for (size_t i = 0; i < num_clusters; ++i) { - clusters[i] = static_cast<uint32_t>(i); - } - size_t num_final_clusters = - HistogramCombine(&all_histograms[0], &cluster_size[0], - &histogram_symbols[0], - &clusters[0], &pairs[0], num_clusters, - num_blocks, kMaxNumberOfBlockTypes, max_num_pairs); - - static const uint32_t kInvalidIndex = std::numeric_limits<uint32_t>::max(); - std::vector<uint32_t> new_index(num_clusters, kInvalidIndex); - uint32_t next_index = 0; - pos = 0; - for (size_t i = 0; i < num_blocks; ++i) { - HistogramType histo; - for (size_t j = 0; j < block_lengths[i]; ++j) { - histo.Add(data[pos++]); - } - uint32_t best_out = - i == 0 ? histogram_symbols[0] : histogram_symbols[i - 1]; - double best_bits = HistogramBitCostDistance( - histo, all_histograms[best_out]); - for (size_t j = 0; j < num_final_clusters; ++j) { - const double cur_bits = HistogramBitCostDistance( - histo, all_histograms[clusters[j]]); - if (cur_bits < best_bits) { - best_bits = cur_bits; - best_out = clusters[j]; - } - } - histogram_symbols[i] = best_out; - if (new_index[best_out] == kInvalidIndex) { - new_index[best_out] = next_index++; - } - } - uint8_t max_type = 0; - uint32_t cur_length = 0; - block_idx = 0; - split->types.resize(num_blocks); - split->lengths.resize(num_blocks); - for (size_t i = 0; i < num_blocks; ++i) { - cur_length += block_lengths[i]; - if (i + 1 == num_blocks || - histogram_symbols[i] != histogram_symbols[i + 1]) { - const uint8_t id = static_cast<uint8_t>(new_index[histogram_symbols[i]]); - split->types[block_idx] = id; - split->lengths[block_idx] = cur_length; - max_type = std::max(max_type, id); - cur_length = 0; - ++block_idx; - } - } - split->types.resize(block_idx); - split->lengths.resize(block_idx); - split->num_types = static_cast<size_t>(max_type) + 1; -} - -template<int kSize, typename DataType> -void SplitByteVector(const std::vector<DataType>& data, - const size_t literals_per_histogram, - const size_t max_histograms, - const size_t sampling_stride_length, - const double block_switch_cost, - BlockSplit* split) { - if (data.empty()) { - split->num_types = 1; - return; - } else if (data.size() < kMinLengthForBlockSplitting) { - split->num_types = 1; - split->types.push_back(0); - split->lengths.push_back(static_cast<uint32_t>(data.size())); - return; - } - size_t num_histograms = data.size() / literals_per_histogram + 1; - if (num_histograms > max_histograms) { - num_histograms = max_histograms; - } - Histogram<kSize>* histograms = new Histogram<kSize>[num_histograms]; - // Find good entropy codes. - InitialEntropyCodes(&data[0], data.size(), - sampling_stride_length, - num_histograms, histograms); - RefineEntropyCodes(&data[0], data.size(), - sampling_stride_length, - num_histograms, histograms); - // Find a good path through literals with the good entropy codes. - std::vector<uint8_t> block_ids(data.size()); - size_t num_blocks; - const size_t bitmaplen = (num_histograms + 7) >> 3; - double* insert_cost = new double[kSize * num_histograms]; - double *cost = new double[num_histograms]; - uint8_t* switch_signal = new uint8_t[data.size() * bitmaplen]; - uint16_t* new_id = new uint16_t[num_histograms]; - for (size_t i = 0; i < 10; ++i) { - num_blocks = FindBlocks(&data[0], data.size(), - block_switch_cost, - num_histograms, histograms, - insert_cost, cost, switch_signal, - &block_ids[0]); - num_histograms = RemapBlockIds(&block_ids[0], data.size(), - new_id, num_histograms); - BuildBlockHistograms(&data[0], data.size(), &block_ids[0], - num_histograms, histograms); - } - delete[] insert_cost; - delete[] cost; - delete[] switch_signal; - delete[] new_id; - delete[] histograms; - ClusterBlocks<Histogram<kSize> >(&data[0], data.size(), num_blocks, - &block_ids[0], split); -} - -void SplitBlock(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t pos, - const size_t mask, - BlockSplit* literal_split, - BlockSplit* insert_and_copy_split, - BlockSplit* dist_split) { - { - // Create a continuous array of literals. - std::vector<uint8_t> literals; - CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, &literals); - // Create the block split on the array of literals. - // Literal histograms have alphabet size 256. - SplitByteVector<256>( - literals, - kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, - kLiteralStrideLength, kLiteralBlockSwitchCost, - literal_split); - } - - { - // Compute prefix codes for commands. - std::vector<uint16_t> insert_and_copy_codes(num_commands); - for (size_t i = 0; i < num_commands; ++i) { - insert_and_copy_codes[i] = cmds[i].cmd_prefix_; - } - // Create the block split on the array of command prefixes. - SplitByteVector<kNumCommandPrefixes>( - insert_and_copy_codes, - kSymbolsPerCommandHistogram, kMaxCommandHistograms, - kCommandStrideLength, kCommandBlockSwitchCost, - insert_and_copy_split); - } - - { - // Create a continuous array of distance prefixes. - std::vector<uint16_t> distance_prefixes(num_commands); - size_t pos = 0; - for (size_t i = 0; i < num_commands; ++i) { - const Command& cmd = cmds[i]; - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - distance_prefixes[pos++] = cmd.dist_prefix_; - } - } - distance_prefixes.resize(pos); - // Create the block split on the array of distance prefixes. - SplitByteVector<kNumDistancePrefixes>( - distance_prefixes, - kSymbolsPerDistanceHistogram, kMaxCommandHistograms, - kCommandStrideLength, kDistanceBlockSwitchCost, - dist_split); - } -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/block_splitter.h b/third_party/brotli/enc/block_splitter.h index 4f69296..6abac08 100644 --- a/third_party/brotli/enc/block_splitter.h +++ b/third_party/brotli/enc/block_splitter.h
@@ -4,58 +4,48 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Block split point selection utilities. +/* Block split point selection utilities. */ #ifndef BROTLI_ENC_BLOCK_SPLITTER_H_ #define BROTLI_ENC_BLOCK_SPLITTER_H_ -#include <vector> - +#include <brotli/types.h> #include "./command.h" -#include "./metablock.h" -#include "./types.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -struct BlockSplitIterator { - explicit BlockSplitIterator(const BlockSplit& split) - : split_(split), idx_(0), type_(0), length_(0) { - if (!split.lengths.empty()) { - length_ = split.lengths[0]; - } - } +typedef struct BlockSplit { + size_t num_types; /* Amount of distinct types */ + size_t num_blocks; /* Amount of values in types and length */ + uint8_t* types; + uint32_t* lengths; - void Next(void) { - if (length_ == 0) { - ++idx_; - type_ = split_.types[idx_]; - length_ = split_.lengths[idx_]; - } - --length_; - } + size_t types_alloc_size; + size_t lengths_alloc_size; +} BlockSplit; - const BlockSplit& split_; - size_t idx_; - size_t type_; - size_t length_; -}; +BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self); +BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m, + BlockSplit* self); -void CopyLiteralsToByteArray(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - std::vector<uint8_t>* literals); +BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m, + const Command* cmds, + const size_t num_commands, + const uint8_t* data, + const size_t offset, + const size_t mask, + const BrotliEncoderParams* params, + BlockSplit* literal_split, + BlockSplit* insert_and_copy_split, + BlockSplit* dist_split); -void SplitBlock(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - BlockSplit* literal_split, - BlockSplit* insert_and_copy_split, - BlockSplit* dist_split); +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -} // namespace brotli - -#endif // BROTLI_ENC_BLOCK_SPLITTER_H_ +#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */
diff --git a/third_party/brotli/enc/block_splitter_inc.h b/third_party/brotli/enc/block_splitter_inc.h new file mode 100644 index 0000000..8574fb9 --- /dev/null +++ b/third_party/brotli/enc/block_splitter_inc.h
@@ -0,0 +1,432 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, DataType */ + +#define HistogramType FN(Histogram) + +static void FN(InitialEntropyCodes)(const DataType* data, size_t length, + size_t stride, + size_t num_histograms, + HistogramType* histograms) { + unsigned int seed = 7; + size_t block_length = length / num_histograms; + size_t i; + FN(ClearHistograms)(histograms, num_histograms); + for (i = 0; i < num_histograms; ++i) { + size_t pos = length * i / num_histograms; + if (i != 0) { + pos += MyRand(&seed) % block_length; + } + if (pos + stride >= length) { + pos = length - stride - 1; + } + FN(HistogramAddVector)(&histograms[i], data + pos, stride); + } +} + +static void FN(RandomSample)(unsigned int* seed, + const DataType* data, + size_t length, + size_t stride, + HistogramType* sample) { + size_t pos = 0; + if (stride >= length) { + pos = 0; + stride = length; + } else { + pos = MyRand(seed) % (length - stride + 1); + } + FN(HistogramAddVector)(sample, data + pos, stride); +} + +static void FN(RefineEntropyCodes)(const DataType* data, size_t length, + size_t stride, + size_t num_histograms, + HistogramType* histograms) { + size_t iters = + kIterMulForRefining * length / stride + kMinItersForRefining; + unsigned int seed = 7; + size_t iter; + iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms; + for (iter = 0; iter < iters; ++iter) { + HistogramType sample; + FN(HistogramClear)(&sample); + FN(RandomSample)(&seed, data, length, stride, &sample); + FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample); + } +} + +/* Assigns a block id from the range [0, num_histograms) to each data element + in data[0..length) and fills in block_id[0..length) with the assigned values. + Returns the number of blocks, i.e. one plus the number of block switches. */ +static size_t FN(FindBlocks)(const DataType* data, const size_t length, + const double block_switch_bitcost, + const size_t num_histograms, + const HistogramType* histograms, + double* insert_cost, + double* cost, + uint8_t* switch_signal, + uint8_t *block_id) { + const size_t data_size = FN(HistogramDataSize)(); + const size_t bitmaplen = (num_histograms + 7) >> 3; + size_t num_blocks = 1; + size_t i; + size_t j; + assert(num_histograms <= 256); + if (num_histograms <= 1) { + for (i = 0; i < length; ++i) { + block_id[i] = 0; + } + return 1; + } + memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histograms); + for (i = 0; i < num_histograms; ++i) { + insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_); + } + for (i = data_size; i != 0;) { + --i; + for (j = 0; j < num_histograms; ++j) { + insert_cost[i * num_histograms + j] = + insert_cost[j] - BitCost(histograms[j].data_[i]); + } + } + memset(cost, 0, sizeof(cost[0]) * num_histograms); + memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen); + /* After each iteration of this loop, cost[k] will contain the difference + between the minimum cost of arriving at the current byte position using + entropy code k, and the minimum cost of arriving at the current byte + position. This difference is capped at the block switch cost, and if it + reaches block switch cost, it means that when we trace back from the last + position, we need to switch here. */ + for (i = 0; i < length; ++i) { + const size_t byte_ix = i; + size_t ix = byte_ix * bitmaplen; + size_t insert_cost_ix = data[byte_ix] * num_histograms; + double min_cost = 1e99; + double block_switch_cost = block_switch_bitcost; + size_t k; + for (k = 0; k < num_histograms; ++k) { + /* We are coding the symbol in data[byte_ix] with entropy code k. */ + cost[k] += insert_cost[insert_cost_ix + k]; + if (cost[k] < min_cost) { + min_cost = cost[k]; + block_id[byte_ix] = (uint8_t)k; + } + } + /* More blocks for the beginning. */ + if (byte_ix < 2000) { + block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000; + } + for (k = 0; k < num_histograms; ++k) { + cost[k] -= min_cost; + if (cost[k] >= block_switch_cost) { + const uint8_t mask = (uint8_t)(1u << (k & 7)); + cost[k] = block_switch_cost; + assert((k >> 3) < bitmaplen); + switch_signal[ix + (k >> 3)] |= mask; + } + } + } + { /* Trace back from the last position and switch at the marked places. */ + size_t byte_ix = length - 1; + size_t ix = byte_ix * bitmaplen; + uint8_t cur_id = block_id[byte_ix]; + while (byte_ix > 0) { + const uint8_t mask = (uint8_t)(1u << (cur_id & 7)); + assert(((size_t)cur_id >> 3) < bitmaplen); + --byte_ix; + ix -= bitmaplen; + if (switch_signal[ix + (cur_id >> 3)] & mask) { + if (cur_id != block_id[byte_ix]) { + cur_id = block_id[byte_ix]; + ++num_blocks; + } + } + block_id[byte_ix] = cur_id; + } + } + return num_blocks; +} + +static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length, + uint16_t* new_id, const size_t num_histograms) { + static const uint16_t kInvalidId = 256; + uint16_t next_id = 0; + size_t i; + for (i = 0; i < num_histograms; ++i) { + new_id[i] = kInvalidId; + } + for (i = 0; i < length; ++i) { + assert(block_ids[i] < num_histograms); + if (new_id[block_ids[i]] == kInvalidId) { + new_id[block_ids[i]] = next_id++; + } + } + for (i = 0; i < length; ++i) { + block_ids[i] = (uint8_t)new_id[block_ids[i]]; + assert(block_ids[i] < num_histograms); + } + assert(next_id <= num_histograms); + return next_id; +} + +static void FN(BuildBlockHistograms)(const DataType* data, const size_t length, + const uint8_t* block_ids, + const size_t num_histograms, + HistogramType* histograms) { + size_t i; + FN(ClearHistograms)(histograms, num_histograms); + for (i = 0; i < length; ++i) { + FN(HistogramAdd)(&histograms[block_ids[i]], data[i]); + } +} + +static void FN(ClusterBlocks)(MemoryManager* m, + const DataType* data, const size_t length, + const size_t num_blocks, + uint8_t* block_ids, + BlockSplit* split) { + uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks); + uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks); + const size_t expected_num_clusters = CLUSTERS_PER_BATCH * + (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH; + size_t all_histograms_size = 0; + size_t all_histograms_capacity = expected_num_clusters; + HistogramType* all_histograms = + BROTLI_ALLOC(m, HistogramType, all_histograms_capacity); + size_t cluster_size_size = 0; + size_t cluster_size_capacity = expected_num_clusters; + uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity); + size_t num_clusters = 0; + HistogramType* histograms = BROTLI_ALLOC(m, HistogramType, + BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH)); + size_t max_num_pairs = + HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2; + size_t pairs_capacity = max_num_pairs + 1; + HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity); + size_t pos = 0; + uint32_t* clusters; + size_t num_final_clusters; + static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX; + uint32_t* new_index; + uint8_t max_type = 0; + size_t i; + uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 }; + uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 }; + uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 }; + uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 }; + + if (BROTLI_IS_OOM(m)) return; + + memset(block_lengths, 0, num_blocks * sizeof(uint32_t)); + + { + size_t block_idx = 0; + for (i = 0; i < length; ++i) { + assert(block_idx < num_blocks); + ++block_lengths[block_idx]; + if (i + 1 == length || block_ids[i] != block_ids[i + 1]) { + ++block_idx; + } + } + assert(block_idx == num_blocks); + } + + for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) { + const size_t num_to_combine = + BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH); + size_t num_new_clusters; + size_t j; + for (j = 0; j < num_to_combine; ++j) { + size_t k; + FN(HistogramClear)(&histograms[j]); + for (k = 0; k < block_lengths[i + j]; ++k) { + FN(HistogramAdd)(&histograms[j], data[pos++]); + } + histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]); + new_clusters[j] = (uint32_t)j; + symbols[j] = (uint32_t)j; + sizes[j] = 1; + } + num_new_clusters = FN(BrotliHistogramCombine)( + histograms, sizes, symbols, new_clusters, pairs, num_to_combine, + num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs); + BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms, + all_histograms_capacity, all_histograms_size + num_new_clusters); + BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size, + cluster_size_capacity, cluster_size_size + num_new_clusters); + if (BROTLI_IS_OOM(m)) return; + for (j = 0; j < num_new_clusters; ++j) { + all_histograms[all_histograms_size++] = histograms[new_clusters[j]]; + cluster_size[cluster_size_size++] = sizes[new_clusters[j]]; + remap[new_clusters[j]] = (uint32_t)j; + } + for (j = 0; j < num_to_combine; ++j) { + histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]]; + } + num_clusters += num_new_clusters; + assert(num_clusters == cluster_size_size); + assert(num_clusters == all_histograms_size); + } + BROTLI_FREE(m, histograms); + + max_num_pairs = + BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters); + if (pairs_capacity < max_num_pairs + 1) { + BROTLI_FREE(m, pairs); + pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1); + if (BROTLI_IS_OOM(m)) return; + } + + clusters = BROTLI_ALLOC(m, uint32_t, num_clusters); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_clusters; ++i) { + clusters[i] = (uint32_t)i; + } + num_final_clusters = FN(BrotliHistogramCombine)( + all_histograms, cluster_size, histogram_symbols, clusters, pairs, + num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES, + max_num_pairs); + BROTLI_FREE(m, pairs); + BROTLI_FREE(m, cluster_size); + + new_index = BROTLI_ALLOC(m, uint32_t, num_clusters); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex; + pos = 0; + { + uint32_t next_index = 0; + for (i = 0; i < num_blocks; ++i) { + HistogramType histo; + size_t j; + uint32_t best_out; + double best_bits; + FN(HistogramClear)(&histo); + for (j = 0; j < block_lengths[i]; ++j) { + FN(HistogramAdd)(&histo, data[pos++]); + } + best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1]; + best_bits = + FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best_out]); + for (j = 0; j < num_final_clusters; ++j) { + const double cur_bits = FN(BrotliHistogramBitCostDistance)( + &histo, &all_histograms[clusters[j]]); + if (cur_bits < best_bits) { + best_bits = cur_bits; + best_out = clusters[j]; + } + } + histogram_symbols[i] = best_out; + if (new_index[best_out] == kInvalidIndex) { + new_index[best_out] = next_index++; + } + } + } + BROTLI_FREE(m, clusters); + BROTLI_FREE(m, all_histograms); + BROTLI_ENSURE_CAPACITY( + m, uint8_t, split->types, split->types_alloc_size, num_blocks); + BROTLI_ENSURE_CAPACITY( + m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks); + if (BROTLI_IS_OOM(m)) return; + { + uint32_t cur_length = 0; + size_t block_idx = 0; + for (i = 0; i < num_blocks; ++i) { + cur_length += block_lengths[i]; + if (i + 1 == num_blocks || + histogram_symbols[i] != histogram_symbols[i + 1]) { + const uint8_t id = (uint8_t)new_index[histogram_symbols[i]]; + split->types[block_idx] = id; + split->lengths[block_idx] = cur_length; + max_type = BROTLI_MAX(uint8_t, max_type, id); + cur_length = 0; + ++block_idx; + } + } + split->num_blocks = block_idx; + split->num_types = (size_t)max_type + 1; + } + BROTLI_FREE(m, new_index); + BROTLI_FREE(m, block_lengths); + BROTLI_FREE(m, histogram_symbols); +} + +static void FN(SplitByteVector)(MemoryManager* m, + const DataType* data, const size_t length, + const size_t literals_per_histogram, + const size_t max_histograms, + const size_t sampling_stride_length, + const double block_switch_cost, + const BrotliEncoderParams* params, + BlockSplit* split) { + const size_t data_size = FN(HistogramDataSize)(); + size_t num_histograms = length / literals_per_histogram + 1; + HistogramType* histograms; + if (num_histograms > max_histograms) { + num_histograms = max_histograms; + } + if (length == 0) { + split->num_types = 1; + return; + } else if (length < kMinLengthForBlockSplitting) { + BROTLI_ENSURE_CAPACITY(m, uint8_t, + split->types, split->types_alloc_size, split->num_blocks + 1); + BROTLI_ENSURE_CAPACITY(m, uint32_t, + split->lengths, split->lengths_alloc_size, split->num_blocks + 1); + if (BROTLI_IS_OOM(m)) return; + split->num_types = 1; + split->types[split->num_blocks] = 0; + split->lengths[split->num_blocks] = (uint32_t)length; + split->num_blocks++; + return; + } + histograms = BROTLI_ALLOC(m, HistogramType, num_histograms); + if (BROTLI_IS_OOM(m)) return; + /* Find good entropy codes. */ + FN(InitialEntropyCodes)(data, length, + sampling_stride_length, + num_histograms, histograms); + FN(RefineEntropyCodes)(data, length, + sampling_stride_length, + num_histograms, histograms); + { + /* Find a good path through literals with the good entropy codes. */ + uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length); + size_t num_blocks = 0; + const size_t bitmaplen = (num_histograms + 7) >> 3; + double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms); + double* cost = BROTLI_ALLOC(m, double, num_histograms); + uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen); + uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms); + const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10; + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < iters; ++i) { + num_blocks = FN(FindBlocks)(data, length, + block_switch_cost, + num_histograms, histograms, + insert_cost, cost, switch_signal, + block_ids); + num_histograms = FN(RemapBlockIds)(block_ids, length, + new_id, num_histograms); + FN(BuildBlockHistograms)(data, length, block_ids, + num_histograms, histograms); + } + BROTLI_FREE(m, insert_cost); + BROTLI_FREE(m, cost); + BROTLI_FREE(m, switch_signal); + BROTLI_FREE(m, new_id); + BROTLI_FREE(m, histograms); + FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, block_ids); + } +} + +#undef HistogramType
diff --git a/third_party/brotli/enc/brotli_bit_stream.c b/third_party/brotli/enc/brotli_bit_stream.c new file mode 100644 index 0000000..4874695 --- /dev/null +++ b/third_party/brotli/enc/brotli_bit_stream.c
@@ -0,0 +1,1341 @@ +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Brotli bit stream functions to support the low level format. There are no + compression algorithms here, just the right ordering of bits to match the + specs. */ + +#include "./brotli_bit_stream.h" + +#include <string.h> /* memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./context.h" +#include "./entropy_encode.h" +#include "./entropy_encode_static.h" +#include "./fast_log.h" +#include "./memory.h" +#include "./port.h" +#include "./write_bits.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1) +/* The size of Huffman dictionary for distances assuming that NPOSTFIX = 0 and + NDIRECT = 0. */ +#define SIMPLE_DISTANCE_ALPHABET_SIZE (BROTLI_NUM_DISTANCE_SHORT_CODES + \ + (2 * BROTLI_MAX_DISTANCE_BITS)) +/* SIMPLE_DISTANCE_ALPHABET_SIZE == 64 */ +#define SIMPLE_DISTANCE_ALPHABET_BITS 6 + +/* Represents the range of values belonging to a prefix code: + [offset, offset + 2^nbits) */ +typedef struct PrefixCodeRange { + uint32_t offset; + uint32_t nbits; +} PrefixCodeRange; + +static const PrefixCodeRange + kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = { + { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3}, + {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5}, + {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, + {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24} +}; + +static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) { + uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0); + while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) && + len >= kBlockLengthPrefixCode[code + 1].offset) ++code; + return code; +} + +static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code, + uint32_t* n_extra, uint32_t* extra) { + *code = BlockLengthPrefixCode(len); + *n_extra = kBlockLengthPrefixCode[*code].nbits; + *extra = len - kBlockLengthPrefixCode[*code].offset; +} + +typedef struct BlockTypeCodeCalculator { + size_t last_type; + size_t second_last_type; +} BlockTypeCodeCalculator; + +static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) { + self->last_type = 1; + self->second_last_type = 0; +} + +static BROTLI_INLINE size_t NextBlockTypeCode( + BlockTypeCodeCalculator* calculator, uint8_t type) { + size_t type_code = (type == calculator->last_type + 1) ? 1u : + (type == calculator->second_last_type) ? 0u : type + 2u; + calculator->second_last_type = calculator->last_type; + calculator->last_type = type; + return type_code; +} + +/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3) + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +static void BrotliEncodeMlen(size_t length, uint64_t* bits, + size_t* numbits, uint64_t* nibblesbits) { + size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1; + size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4; + assert(length > 0); + assert(length <= (1 << 24)); + assert(lg <= 24); + *nibblesbits = mnibbles - 4; + *numbits = mnibbles * 4; + *bits = length - 1; +} + +static BROTLI_INLINE void StoreCommandExtra( + const Command* cmd, size_t* storage_ix, uint8_t* storage) { + uint32_t copylen_code = CommandCopyLenCode(cmd); + uint16_t inscode = GetInsertLengthCode(cmd->insert_len_); + uint16_t copycode = GetCopyLengthCode(copylen_code); + uint32_t insnumextra = GetInsertExtra(inscode); + uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode); + uint64_t copyextraval = copylen_code - GetCopyBase(copycode); + uint64_t bits = (copyextraval << insnumextra) | insextraval; + BrotliWriteBits( + insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage); +} + +/* Data structure that stores almost everything that is needed to encode each + block switch command. */ +typedef struct BlockSplitCode { + BlockTypeCodeCalculator type_code_calculator; + uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; + uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; + uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; + uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; +} BlockSplitCode; + +/* Stores a number between 0 and 255. */ +static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) { + if (n == 0) { + BrotliWriteBits(1, 0, storage_ix, storage); + } else { + size_t nbits = Log2FloorNonZero(n); + BrotliWriteBits(1, 1, storage_ix, storage); + BrotliWriteBits(3, nbits, storage_ix, storage); + BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage); + } +} + +/* Stores the compressed meta-block header. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block, + size_t length, + size_t* storage_ix, + uint8_t* storage) { + uint64_t lenbits; + size_t nlenbits; + uint64_t nibblesbits; + + /* Write ISLAST bit. */ + BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage); + /* Write ISEMPTY bit. */ + if (is_final_block) { + BrotliWriteBits(1, 0, storage_ix, storage); + } + + BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); + BrotliWriteBits(2, nibblesbits, storage_ix, storage); + BrotliWriteBits(nlenbits, lenbits, storage_ix, storage); + + if (!is_final_block) { + /* Write ISUNCOMPRESSED bit. */ + BrotliWriteBits(1, 0, storage_ix, storage); + } +} + +/* Stores the uncompressed meta-block header. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +static void BrotliStoreUncompressedMetaBlockHeader(size_t length, + size_t* storage_ix, + uint8_t* storage) { + uint64_t lenbits; + size_t nlenbits; + uint64_t nibblesbits; + + /* Write ISLAST bit. + Uncompressed block cannot be the last one, so set to 0. */ + BrotliWriteBits(1, 0, storage_ix, storage); + BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); + BrotliWriteBits(2, nibblesbits, storage_ix, storage); + BrotliWriteBits(nlenbits, lenbits, storage_ix, storage); + /* Write ISUNCOMPRESSED bit. */ + BrotliWriteBits(1, 1, storage_ix, storage); +} + +static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask( + const int num_codes, const uint8_t* code_length_bitdepth, + size_t* storage_ix, uint8_t* storage) { + static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = { + 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15 + }; + /* The bit lengths of the Huffman code over the code length alphabet + are compressed with the following static Huffman code: + Symbol Code + ------ ---- + 0 00 + 1 1110 + 2 110 + 3 01 + 4 10 + 5 1111 */ + static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = { + 0, 7, 3, 2, 1, 15 + }; + static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = { + 2, 4, 3, 2, 2, 4 + }; + + size_t skip_some = 0; /* skips none. */ + + /* Throw away trailing zeros: */ + size_t codes_to_store = BROTLI_CODE_LENGTH_CODES; + if (num_codes > 1) { + for (; codes_to_store > 0; --codes_to_store) { + if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) { + break; + } + } + } + if (code_length_bitdepth[kStorageOrder[0]] == 0 && + code_length_bitdepth[kStorageOrder[1]] == 0) { + skip_some = 2; /* skips two. */ + if (code_length_bitdepth[kStorageOrder[2]] == 0) { + skip_some = 3; /* skips three. */ + } + } + BrotliWriteBits(2, skip_some, storage_ix, storage); + { + size_t i; + for (i = skip_some; i < codes_to_store; ++i) { + size_t l = code_length_bitdepth[kStorageOrder[i]]; + BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l], + kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage); + } + } +} + +static void BrotliStoreHuffmanTreeToBitMask( + const size_t huffman_tree_size, const uint8_t* huffman_tree, + const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth, + const uint16_t* code_length_bitdepth_symbols, + size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) { + size_t i; + for (i = 0; i < huffman_tree_size; ++i) { + size_t ix = huffman_tree[i]; + BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix], + storage_ix, storage); + /* Extra bits */ + switch (ix) { + case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH: + BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage); + break; + case BROTLI_REPEAT_ZERO_CODE_LENGTH: + BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage); + break; + } + } +} + +static void StoreSimpleHuffmanTree(const uint8_t* depths, + size_t symbols[4], + size_t num_symbols, + size_t max_bits, + size_t *storage_ix, uint8_t *storage) { + /* value of 1 indicates a simple Huffman code */ + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */ + + { + /* Sort */ + size_t i; + for (i = 0; i < num_symbols; i++) { + size_t j; + for (j = i + 1; j < num_symbols; j++) { + if (depths[symbols[j]] < depths[symbols[i]]) { + BROTLI_SWAP(size_t, symbols, j, i); + } + } + } + } + + if (num_symbols == 2) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + } else if (num_symbols == 3) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + } else { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[3], storage_ix, storage); + /* tree-select */ + BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); + } +} + +/* num = alphabet size + depths = symbol depths */ +void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num, + HuffmanTree* tree, + size_t *storage_ix, uint8_t *storage) { + /* Write the Huffman tree into the brotli-representation. + The command alphabet is the largest, so this allocation will fit all + alphabets. */ + uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS]; + uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS]; + size_t huffman_tree_size = 0; + uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 }; + uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES]; + uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 }; + size_t i; + int num_codes = 0; + size_t code = 0; + + assert(num <= BROTLI_NUM_COMMAND_SYMBOLS); + + BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree, + huffman_tree_extra_bits); + + /* Calculate the statistics of the Huffman tree in brotli-representation. */ + for (i = 0; i < huffman_tree_size; ++i) { + ++huffman_tree_histogram[huffman_tree[i]]; + } + + for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) { + if (huffman_tree_histogram[i]) { + if (num_codes == 0) { + code = i; + num_codes = 1; + } else if (num_codes == 1) { + num_codes = 2; + break; + } + } + } + + /* Calculate another Huffman tree to use for compressing both the + earlier Huffman tree with. */ + BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES, + 5, tree, code_length_bitdepth); + BrotliConvertBitDepthsToSymbols(code_length_bitdepth, + BROTLI_CODE_LENGTH_CODES, + code_length_bitdepth_symbols); + + /* Now, we have all the data, let's start storing it */ + BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth, + storage_ix, storage); + + if (num_codes == 1) { + code_length_bitdepth[code] = 0; + } + + /* Store the real Huffman tree now. */ + BrotliStoreHuffmanTreeToBitMask(huffman_tree_size, + huffman_tree, + huffman_tree_extra_bits, + code_length_bitdepth, + code_length_bitdepth_symbols, + storage_ix, storage); +} + +/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and + bits[0:length] and stores the encoded tree to the bit stream. */ +static void BuildAndStoreHuffmanTree(const uint32_t *histogram, + const size_t length, + HuffmanTree* tree, + uint8_t* depth, + uint16_t* bits, + size_t* storage_ix, + uint8_t* storage) { + size_t count = 0; + size_t s4[4] = { 0 }; + size_t i; + size_t max_bits = 0; + for (i = 0; i < length; i++) { + if (histogram[i]) { + if (count < 4) { + s4[count] = i; + } else if (count > 4) { + break; + } + count++; + } + } + + { + size_t max_bits_counter = length - 1; + while (max_bits_counter) { + max_bits_counter >>= 1; + ++max_bits; + } + } + + if (count <= 1) { + BrotliWriteBits(4, 1, storage_ix, storage); + BrotliWriteBits(max_bits, s4[0], storage_ix, storage); + depth[s4[0]] = 0; + bits[s4[0]] = 0; + return; + } + + memset(depth, 0, length * sizeof(depth[0])); + BrotliCreateHuffmanTree(histogram, length, 15, tree, depth); + BrotliConvertBitDepthsToSymbols(depth, length, bits); + + if (count <= 4) { + StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage); + } else { + BrotliStoreHuffmanTree(depth, length, tree, storage_ix, storage); + } +} + +static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree( + const HuffmanTree* v0, const HuffmanTree* v1) { + return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_); +} + +void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m, + const uint32_t* histogram, + const size_t histogram_total, + const size_t max_bits, + uint8_t* depth, uint16_t* bits, + size_t* storage_ix, + uint8_t* storage) { + size_t count = 0; + size_t symbols[4] = { 0 }; + size_t length = 0; + size_t total = histogram_total; + while (total != 0) { + if (histogram[length]) { + if (count < 4) { + symbols[count] = length; + } + ++count; + total -= histogram[length]; + } + ++length; + } + + if (count <= 1) { + BrotliWriteBits(4, 1, storage_ix, storage); + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + depth[symbols[0]] = 0; + bits[symbols[0]] = 0; + return; + } + + memset(depth, 0, length * sizeof(depth[0])); + { + const size_t max_tree_size = 2 * length + 1; + HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size); + uint32_t count_limit; + if (BROTLI_IS_OOM(m)) return; + for (count_limit = 1; ; count_limit *= 2) { + HuffmanTree* node = tree; + size_t l; + for (l = length; l != 0;) { + --l; + if (histogram[l]) { + if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) { + InitHuffmanTree(node, histogram[l], -1, (int16_t)l); + } else { + InitHuffmanTree(node, count_limit, -1, (int16_t)l); + } + ++node; + } + } + { + const int n = (int)(node - tree); + HuffmanTree sentinel; + int i = 0; /* Points to the next leaf node. */ + int j = n + 1; /* Points to the next non-leaf node. */ + int k; + + SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree); + /* The nodes are: + [0, n): the sorted leaf nodes that we start with. + [n]: we add a sentinel here. + [n + 1, 2n): new parent nodes are added here, starting from + (n+1). These are naturally in ascending order. + [2n]: we add a sentinel at the end as well. + There will be (2n+1) elements at the end. */ + InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1); + *node++ = sentinel; + *node++ = sentinel; + + for (k = n - 1; k > 0; --k) { + int left, right; + if (tree[i].total_count_ <= tree[j].total_count_) { + left = i; + ++i; + } else { + left = j; + ++j; + } + if (tree[i].total_count_ <= tree[j].total_count_) { + right = i; + ++i; + } else { + right = j; + ++j; + } + /* The sentinel node becomes the parent node. */ + node[-1].total_count_ = + tree[left].total_count_ + tree[right].total_count_; + node[-1].index_left_ = (int16_t)left; + node[-1].index_right_or_value_ = (int16_t)right; + /* Add back the last sentinel node. */ + *node++ = sentinel; + } + if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) { + /* We need to pack the Huffman tree in 14 bits. If this was not + successful, add fake entities to the lowest values and retry. */ + break; + } + } + } + BROTLI_FREE(m, tree); + } + BrotliConvertBitDepthsToSymbols(depth, length, bits); + if (count <= 4) { + size_t i; + /* value of 1 indicates a simple Huffman code */ + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */ + + /* Sort */ + for (i = 0; i < count; i++) { + size_t j; + for (j = i + 1; j < count; j++) { + if (depth[symbols[j]] < depth[symbols[i]]) { + BROTLI_SWAP(size_t, symbols, j, i); + } + } + } + + if (count == 2) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + } else if (count == 3) { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + } else { + BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); + BrotliWriteBits(max_bits, symbols[3], storage_ix, storage); + /* tree-select */ + BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); + } + } else { + uint8_t previous_value = 8; + size_t i; + /* Complex Huffman Tree */ + StoreStaticCodeLengthCode(storage_ix, storage); + + /* Actual RLE coding. */ + for (i = 0; i < length;) { + const uint8_t value = depth[i]; + size_t reps = 1; + size_t k; + for (k = i + 1; k < length && depth[k] == value; ++k) { + ++reps; + } + i += reps; + if (value == 0) { + BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps], + storage_ix, storage); + } else { + if (previous_value != value) { + BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], + storage_ix, storage); + --reps; + } + if (reps < 3) { + while (reps != 0) { + reps--; + BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], + storage_ix, storage); + } + } else { + reps -= 3; + BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps], + storage_ix, storage); + } + previous_value = value; + } + } + } +} + +static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) { + size_t i = 0; + for (; i < v_size; ++i) { + if (v[i] == value) return i; + } + return i; +} + +static void MoveToFront(uint8_t* v, size_t index) { + uint8_t value = v[index]; + size_t i; + for (i = index; i != 0; --i) { + v[i] = v[i - 1]; + } + v[0] = value; +} + +static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in, + const size_t v_size, + uint32_t* v_out) { + size_t i; + uint8_t mtf[256]; + uint32_t max_value; + if (v_size == 0) { + return; + } + max_value = v_in[0]; + for (i = 1; i < v_size; ++i) { + if (v_in[i] > max_value) max_value = v_in[i]; + } + assert(max_value < 256u); + for (i = 0; i <= max_value; ++i) { + mtf[i] = (uint8_t)i; + } + { + size_t mtf_size = max_value + 1; + for (i = 0; i < v_size; ++i) { + size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]); + assert(index < mtf_size); + v_out[i] = (uint32_t)index; + MoveToFront(mtf, index); + } + } +} + +/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of + the run length plus extra bits (lower 9 bits is the prefix code and the rest + are the extra bits). Non-zero values in v[] are shifted by + *max_length_prefix. Will not create prefix codes bigger than the initial + value of *max_run_length_prefix. The prefix code of run length L is simply + Log2Floor(L) and the number of extra bits is the same as the prefix code. */ +static void RunLengthCodeZeros(const size_t in_size, + uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size, + uint32_t* BROTLI_RESTRICT max_run_length_prefix) { + uint32_t max_reps = 0; + size_t i; + uint32_t max_prefix; + for (i = 0; i < in_size;) { + uint32_t reps = 0; + for (; i < in_size && v[i] != 0; ++i) ; + for (; i < in_size && v[i] == 0; ++i) { + ++reps; + } + max_reps = BROTLI_MAX(uint32_t, reps, max_reps); + } + max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0; + max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix); + *max_run_length_prefix = max_prefix; + *out_size = 0; + for (i = 0; i < in_size;) { + assert(*out_size <= i); + if (v[i] != 0) { + v[*out_size] = v[i] + *max_run_length_prefix; + ++i; + ++(*out_size); + } else { + uint32_t reps = 1; + size_t k; + for (k = i + 1; k < in_size && v[k] == 0; ++k) { + ++reps; + } + i += reps; + while (reps != 0) { + if (reps < (2u << max_prefix)) { + uint32_t run_length_prefix = Log2FloorNonZero(reps); + const uint32_t extra_bits = reps - (1u << run_length_prefix); + v[*out_size] = run_length_prefix + (extra_bits << 9); + ++(*out_size); + break; + } else { + const uint32_t extra_bits = (1u << max_prefix) - 1u; + v[*out_size] = max_prefix + (extra_bits << 9); + reps -= (2u << max_prefix) - 1u; + ++(*out_size); + } + } + } + } +} + +#define SYMBOL_BITS 9 + +static void EncodeContextMap(MemoryManager* m, + const uint32_t* context_map, + size_t context_map_size, + size_t num_clusters, + HuffmanTree* tree, + size_t* storage_ix, uint8_t* storage) { + size_t i; + uint32_t* rle_symbols; + uint32_t max_run_length_prefix = 6; + size_t num_rle_symbols = 0; + uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u; + uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + + StoreVarLenUint8(num_clusters - 1, storage_ix, storage); + + if (num_clusters == 1) { + return; + } + + rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size); + if (BROTLI_IS_OOM(m)) return; + MoveToFrontTransform(context_map, context_map_size, rle_symbols); + RunLengthCodeZeros(context_map_size, rle_symbols, + &num_rle_symbols, &max_run_length_prefix); + memset(histogram, 0, sizeof(histogram)); + for (i = 0; i < num_rle_symbols; ++i) { + ++histogram[rle_symbols[i] & kSymbolMask]; + } + { + BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0); + BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage); + if (use_rle) { + BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage); + } + } + BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix, + tree, depths, bits, storage_ix, storage); + for (i = 0; i < num_rle_symbols; ++i) { + const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask; + const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS; + BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage); + if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) { + BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage); + } + } + BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */ + BROTLI_FREE(m, rle_symbols); +} + +/* Stores the block switch command with index block_ix to the bit stream. */ +static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code, + const uint32_t block_len, + const uint8_t block_type, + BROTLI_BOOL is_first_block, + size_t* storage_ix, + uint8_t* storage) { + size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type); + size_t lencode; + uint32_t len_nextra; + uint32_t len_extra; + if (!is_first_block) { + BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode], + storage_ix, storage); + } + GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra); + + BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode], + storage_ix, storage); + BrotliWriteBits(len_nextra, len_extra, storage_ix, storage); +} + +/* Builds a BlockSplitCode data structure from the block split given by the + vector of block types and block lengths and stores it to the bit stream. */ +static void BuildAndStoreBlockSplitCode(const uint8_t* types, + const uint32_t* lengths, + const size_t num_blocks, + const size_t num_types, + HuffmanTree* tree, + BlockSplitCode* code, + size_t* storage_ix, + uint8_t* storage) { + uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; + uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; + size_t i; + BlockTypeCodeCalculator type_code_calculator; + memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0])); + memset(length_histo, 0, sizeof(length_histo)); + InitBlockTypeCodeCalculator(&type_code_calculator); + for (i = 0; i < num_blocks; ++i) { + size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]); + if (i != 0) ++type_histo[type_code]; + ++length_histo[BlockLengthPrefixCode(lengths[i])]; + } + StoreVarLenUint8(num_types - 1, storage_ix, storage); + if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */ + BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, tree, + &code->type_depths[0], &code->type_bits[0], + storage_ix, storage); + BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS, + tree, &code->length_depths[0], + &code->length_bits[0], storage_ix, storage); + StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage); + } +} + +/* Stores a context map where the histogram type is always the block type. */ +static void StoreTrivialContextMap(size_t num_types, + size_t context_bits, + HuffmanTree* tree, + size_t* storage_ix, + uint8_t* storage) { + StoreVarLenUint8(num_types - 1, storage_ix, storage); + if (num_types > 1) { + size_t repeat_code = context_bits - 1u; + size_t repeat_bits = (1u << repeat_code) - 1u; + size_t alphabet_size = num_types + repeat_code; + uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; + size_t i; + memset(histogram, 0, alphabet_size * sizeof(histogram[0])); + /* Write RLEMAX. */ + BrotliWriteBits(1, 1, storage_ix, storage); + BrotliWriteBits(4, repeat_code - 1, storage_ix, storage); + histogram[repeat_code] = (uint32_t)num_types; + histogram[0] = 1; + for (i = context_bits; i < alphabet_size; ++i) { + histogram[i] = 1; + } + BuildAndStoreHuffmanTree(histogram, alphabet_size, tree, + depths, bits, storage_ix, storage); + for (i = 0; i < num_types; ++i) { + size_t code = (i == 0 ? 0 : i + context_bits - 1); + BrotliWriteBits(depths[code], bits[code], storage_ix, storage); + BrotliWriteBits( + depths[repeat_code], bits[repeat_code], storage_ix, storage); + BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage); + } + /* Write IMTF (inverse-move-to-front) bit. */ + BrotliWriteBits(1, 1, storage_ix, storage); + } +} + +/* Manages the encoding of one block category (literal, command or distance). */ +typedef struct BlockEncoder { + size_t alphabet_size_; + size_t num_block_types_; + const uint8_t* block_types_; /* Not owned. */ + const uint32_t* block_lengths_; /* Not owned. */ + size_t num_blocks_; + BlockSplitCode block_split_code_; + size_t block_ix_; + size_t block_len_; + size_t entropy_ix_; + uint8_t* depths_; + uint16_t* bits_; +} BlockEncoder; + +static void InitBlockEncoder(BlockEncoder* self, size_t alphabet_size, + size_t num_block_types, const uint8_t* block_types, + const uint32_t* block_lengths, const size_t num_blocks) { + self->alphabet_size_ = alphabet_size; + self->num_block_types_ = num_block_types; + self->block_types_ = block_types; + self->block_lengths_ = block_lengths; + self->num_blocks_ = num_blocks; + InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator); + self->block_ix_ = 0; + self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0]; + self->entropy_ix_ = 0; + self->depths_ = 0; + self->bits_ = 0; +} + +static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) { + BROTLI_FREE(m, self->depths_); + BROTLI_FREE(m, self->bits_); +} + +/* Creates entropy codes of block lengths and block types and stores them + to the bit stream. */ +static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self, + HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) { + BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_, + self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_, + storage_ix, storage); +} + +/* Stores the next symbol with the entropy code of the current block type. + Updates the block type and block length at block boundaries. */ +static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix, + uint8_t* storage) { + if (self->block_len_ == 0) { + size_t block_ix = ++self->block_ix_; + uint32_t block_len = self->block_lengths_[block_ix]; + uint8_t block_type = self->block_types_[block_ix]; + self->block_len_ = block_len; + self->entropy_ix_ = block_type * self->alphabet_size_; + StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0, + storage_ix, storage); + } + --self->block_len_; + { + size_t ix = self->entropy_ix_ + symbol; + BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage); + } +} + +/* Stores the next symbol with the entropy code of the current block type and + context value. + Updates the block type and block length at block boundaries. */ +static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol, + size_t context, const uint32_t* context_map, size_t* storage_ix, + uint8_t* storage, const size_t context_bits) { + if (self->block_len_ == 0) { + size_t block_ix = ++self->block_ix_; + uint32_t block_len = self->block_lengths_[block_ix]; + uint8_t block_type = self->block_types_[block_ix]; + self->block_len_ = block_len; + self->entropy_ix_ = (size_t)block_type << context_bits; + StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0, + storage_ix, storage); + } + --self->block_len_; + { + size_t histo_ix = context_map[self->entropy_ix_ + context]; + size_t ix = histo_ix * self->alphabet_size_ + symbol; + BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage); + } +} + +#define FN(X) X ## Literal +/* NOLINTNEXTLINE(build/include) */ +#include "./block_encoder_inc.h" +#undef FN + +#define FN(X) X ## Command +/* NOLINTNEXTLINE(build/include) */ +#include "./block_encoder_inc.h" +#undef FN + +#define FN(X) X ## Distance +/* NOLINTNEXTLINE(build/include) */ +#include "./block_encoder_inc.h" +#undef FN + +static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) { + *storage_ix = (*storage_ix + 7u) & ~7u; + storage[*storage_ix >> 3] = 0; +} + +void BrotliStoreMetaBlock(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + BROTLI_BOOL is_last, + uint32_t num_direct_distance_codes, + uint32_t distance_postfix_bits, + ContextType literal_context_mode, + const Command *commands, + size_t n_commands, + const MetaBlockSplit* mb, + size_t *storage_ix, + uint8_t *storage) { + size_t pos = start_pos; + size_t i; + size_t num_distance_codes = + BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_distance_codes + + (48u << distance_postfix_bits); + HuffmanTree* tree; + BlockEncoder literal_enc; + BlockEncoder command_enc; + BlockEncoder distance_enc; + + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + + tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); + if (BROTLI_IS_OOM(m)) return; + InitBlockEncoder(&literal_enc, 256, mb->literal_split.num_types, + mb->literal_split.types, mb->literal_split.lengths, + mb->literal_split.num_blocks); + InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS, + mb->command_split.num_types, mb->command_split.types, + mb->command_split.lengths, mb->command_split.num_blocks); + InitBlockEncoder(&distance_enc, num_distance_codes, + mb->distance_split.num_types, mb->distance_split.types, + mb->distance_split.lengths, mb->distance_split.num_blocks); + + BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, storage); + BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, storage); + BuildAndStoreBlockSwitchEntropyCodes( + &distance_enc, tree, storage_ix, storage); + + BrotliWriteBits(2, distance_postfix_bits, storage_ix, storage); + BrotliWriteBits(4, num_direct_distance_codes >> distance_postfix_bits, + storage_ix, storage); + for (i = 0; i < mb->literal_split.num_types; ++i) { + BrotliWriteBits(2, literal_context_mode, storage_ix, storage); + } + + if (mb->literal_context_map_size == 0) { + StoreTrivialContextMap(mb->literal_histograms_size, + BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage); + } else { + EncodeContextMap(m, + mb->literal_context_map, mb->literal_context_map_size, + mb->literal_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } + + if (mb->distance_context_map_size == 0) { + StoreTrivialContextMap(mb->distance_histograms_size, + BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage); + } else { + EncodeContextMap(m, + mb->distance_context_map, mb->distance_context_map_size, + mb->distance_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } + + BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms, + mb->literal_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histograms, + mb->command_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histograms, + mb->distance_histograms_size, tree, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, tree); + + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t cmd_code = cmd.cmd_prefix_; + StoreSymbol(&command_enc, cmd_code, storage_ix, storage); + StoreCommandExtra(&cmd, storage_ix, storage); + if (mb->literal_context_map_size == 0) { + size_t j; + for (j = cmd.insert_len_; j != 0; --j) { + StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage); + ++pos; + } + } else { + size_t j; + for (j = cmd.insert_len_; j != 0; --j) { + size_t context = Context(prev_byte, prev_byte2, literal_context_mode); + uint8_t literal = input[pos & mask]; + StoreSymbolWithContext(&literal_enc, literal, context, + mb->literal_context_map, storage_ix, storage, + BROTLI_LITERAL_CONTEXT_BITS); + prev_byte2 = prev_byte; + prev_byte = literal; + ++pos; + } + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd)) { + prev_byte2 = input[(pos - 2) & mask]; + prev_byte = input[(pos - 1) & mask]; + if (cmd.cmd_prefix_ >= 128) { + size_t dist_code = cmd.dist_prefix_; + uint32_t distnumextra = cmd.dist_extra_ >> 24; + uint64_t distextra = cmd.dist_extra_ & 0xffffff; + if (mb->distance_context_map_size == 0) { + StoreSymbol(&distance_enc, dist_code, storage_ix, storage); + } else { + size_t context = CommandDistanceContext(&cmd); + StoreSymbolWithContext(&distance_enc, dist_code, context, + mb->distance_context_map, storage_ix, storage, + BROTLI_DISTANCE_CONTEXT_BITS); + } + BrotliWriteBits(distnumextra, distextra, storage_ix, storage); + } + } + } + CleanupBlockEncoder(m, &distance_enc); + CleanupBlockEncoder(m, &command_enc); + CleanupBlockEncoder(m, &literal_enc); + if (is_last) { + JumpToByteBoundary(storage_ix, storage); + } +} + +static void BuildHistograms(const uint8_t* input, + size_t start_pos, + size_t mask, + const Command *commands, + size_t n_commands, + HistogramLiteral* lit_histo, + HistogramCommand* cmd_histo, + HistogramDistance* dist_histo) { + size_t pos = start_pos; + size_t i; + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + HistogramAddCommand(cmd_histo, cmd.cmd_prefix_); + for (j = cmd.insert_len_; j != 0; --j) { + HistogramAddLiteral(lit_histo, input[pos & mask]); + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) { + HistogramAddDistance(dist_histo, cmd.dist_prefix_); + } + } +} + +static void StoreDataWithHuffmanCodes(const uint8_t* input, + size_t start_pos, + size_t mask, + const Command *commands, + size_t n_commands, + const uint8_t* lit_depth, + const uint16_t* lit_bits, + const uint8_t* cmd_depth, + const uint16_t* cmd_bits, + const uint8_t* dist_depth, + const uint16_t* dist_bits, + size_t* storage_ix, + uint8_t* storage) { + size_t pos = start_pos; + size_t i; + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + const size_t cmd_code = cmd.cmd_prefix_; + size_t j; + BrotliWriteBits( + cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage); + StoreCommandExtra(&cmd, storage_ix, storage); + for (j = cmd.insert_len_; j != 0; --j) { + const uint8_t literal = input[pos & mask]; + BrotliWriteBits( + lit_depth[literal], lit_bits[literal], storage_ix, storage); + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) { + const size_t dist_code = cmd.dist_prefix_; + const uint32_t distnumextra = cmd.dist_extra_ >> 24; + const uint32_t distextra = cmd.dist_extra_ & 0xffffff; + BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code], + storage_ix, storage); + BrotliWriteBits(distnumextra, distextra, storage_ix, storage); + } + } +} + +void BrotliStoreMetaBlockTrivial(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t *storage_ix, + uint8_t *storage) { + HistogramLiteral lit_histo; + HistogramCommand cmd_histo; + HistogramDistance dist_histo; + uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; + uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS]; + uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS]; + uint8_t dist_depth[SIMPLE_DISTANCE_ALPHABET_SIZE]; + uint16_t dist_bits[SIMPLE_DISTANCE_ALPHABET_SIZE]; + HuffmanTree* tree; + + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + + HistogramClearLiteral(&lit_histo); + HistogramClearCommand(&cmd_histo); + HistogramClearDistance(&dist_histo); + + BuildHistograms(input, start_pos, mask, commands, n_commands, + &lit_histo, &cmd_histo, &dist_histo); + + BrotliWriteBits(13, 0, storage_ix, storage); + + tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS, tree, + lit_depth, lit_bits, + storage_ix, storage); + BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS, tree, + cmd_depth, cmd_bits, + storage_ix, storage); + BuildAndStoreHuffmanTree(dist_histo.data_, SIMPLE_DISTANCE_ALPHABET_SIZE, + tree, + dist_depth, dist_bits, + storage_ix, storage); + BROTLI_FREE(m, tree); + StoreDataWithHuffmanCodes(input, start_pos, mask, commands, + n_commands, lit_depth, lit_bits, + cmd_depth, cmd_bits, + dist_depth, dist_bits, + storage_ix, storage); + if (is_last) { + JumpToByteBoundary(storage_ix, storage); + } +} + +void BrotliStoreMetaBlockFast(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t *storage_ix, + uint8_t *storage) { + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + + BrotliWriteBits(13, 0, storage_ix, storage); + + if (n_commands <= 128) { + uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 }; + size_t pos = start_pos; + size_t num_literals = 0; + size_t i; + uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; + uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + for (j = cmd.insert_len_; j != 0; --j) { + ++histogram[input[pos & mask]]; + ++pos; + } + num_literals += cmd.insert_len_; + pos += CommandCopyLen(&cmd); + } + BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals, + /* max_bits = */ 8, + lit_depth, lit_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + StoreStaticCommandHuffmanTree(storage_ix, storage); + StoreStaticDistanceHuffmanTree(storage_ix, storage); + StoreDataWithHuffmanCodes(input, start_pos, mask, commands, + n_commands, lit_depth, lit_bits, + kStaticCommandCodeDepth, + kStaticCommandCodeBits, + kStaticDistanceCodeDepth, + kStaticDistanceCodeBits, + storage_ix, storage); + } else { + HistogramLiteral lit_histo; + HistogramCommand cmd_histo; + HistogramDistance dist_histo; + uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; + uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS]; + uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS]; + uint8_t dist_depth[SIMPLE_DISTANCE_ALPHABET_SIZE]; + uint16_t dist_bits[SIMPLE_DISTANCE_ALPHABET_SIZE]; + HistogramClearLiteral(&lit_histo); + HistogramClearCommand(&cmd_histo); + HistogramClearDistance(&dist_histo); + BuildHistograms(input, start_pos, mask, commands, n_commands, + &lit_histo, &cmd_histo, &dist_histo); + BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_, + lit_histo.total_count_, + /* max_bits = */ 8, + lit_depth, lit_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_, + cmd_histo.total_count_, + /* max_bits = */ 10, + cmd_depth, cmd_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_, + dist_histo.total_count_, + /* max_bits = */ + SIMPLE_DISTANCE_ALPHABET_BITS, + dist_depth, dist_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + StoreDataWithHuffmanCodes(input, start_pos, mask, commands, + n_commands, lit_depth, lit_bits, + cmd_depth, cmd_bits, + dist_depth, dist_bits, + storage_ix, storage); + } + + if (is_last) { + JumpToByteBoundary(storage_ix, storage); + } +} + +/* This is for storing uncompressed blocks (simple raw storage of + bytes-as-bytes). */ +void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block, + const uint8_t * BROTLI_RESTRICT input, + size_t position, size_t mask, + size_t len, + size_t * BROTLI_RESTRICT storage_ix, + uint8_t * BROTLI_RESTRICT storage) { + size_t masked_pos = position & mask; + BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); + + if (masked_pos + len > mask + 1) { + size_t len1 = mask + 1 - masked_pos; + memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1); + *storage_ix += len1 << 3; + len -= len1; + masked_pos = 0; + } + memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len); + *storage_ix += len << 3; + + /* We need to clear the next 4 bytes to continue to be + compatible with BrotliWriteBits. */ + BrotliWriteBitsPrepareStorage(*storage_ix, storage); + + /* Since the uncompressed block itself may not be the final block, add an + empty one after this. */ + if (is_final_block) { + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + JumpToByteBoundary(storage_ix, storage); + } +} + +void BrotliStoreSyncMetaBlock(size_t* BROTLI_RESTRICT storage_ix, + uint8_t* BROTLI_RESTRICT storage) { + /* Empty metadata meta-block bit pattern: + 1 bit: is_last (0) + 2 bits: num nibbles (3) + 1 bit: reserved (0) + 2 bits: metadata length bytes (0) */ + BrotliWriteBits(6, 6, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/brotli_bit_stream.cc b/third_party/brotli/enc/brotli_bit_stream.cc deleted file mode 100644 index 43f1210..0000000 --- a/third_party/brotli/enc/brotli_bit_stream.cc +++ /dev/null
@@ -1,1181 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Brotli bit stream functions to support the low level format. There are no -// compression algorithms here, just the right ordering of bits to match the -// specs. - -#include "./brotli_bit_stream.h" - -#include <algorithm> -#include <cstdlib> /* free, malloc */ -#include <cstring> -#include <limits> -#include <vector> - -#include "./bit_cost.h" -#include "./context.h" -#include "./entropy_encode.h" -#include "./entropy_encode_static.h" -#include "./fast_log.h" -#include "./prefix.h" -#include "./write_bits.h" - -namespace brotli { - -namespace { - -static const size_t kMaxHuffmanTreeSize = 2 * kNumCommandPrefixes + 1; -// Context map alphabet has 256 context id symbols plus max 16 rle symbols. -static const size_t kContextMapAlphabetSize = 256 + 16; -// Block type alphabet has 256 block id symbols plus 2 special symbols. -static const size_t kBlockTypeAlphabetSize = 256 + 2; - -// nibblesbits represents the 2 bits to encode MNIBBLES (0-3) -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void EncodeMlen(size_t length, uint64_t* bits, - size_t* numbits, uint64_t* nibblesbits) { - assert(length > 0); - assert(length <= (1 << 24)); - length--; // MLEN - 1 is encoded - size_t lg = length == 0 ? 1 : Log2FloorNonZero( - static_cast<uint32_t>(length)) + 1; - assert(lg <= 24); - size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4; - *nibblesbits = mnibbles - 4; - *numbits = mnibbles * 4; - *bits = length; -} - -static inline void StoreCommandExtra( - const Command& cmd, size_t* storage_ix, uint8_t* storage) { - uint32_t copylen_code = cmd.copy_len_code(); - uint16_t inscode = GetInsertLengthCode(cmd.insert_len_); - uint16_t copycode = GetCopyLengthCode(copylen_code); - uint32_t insnumextra = GetInsertExtra(inscode); - uint64_t insextraval = cmd.insert_len_ - GetInsertBase(inscode); - uint64_t copyextraval = copylen_code - GetCopyBase(copycode); - uint64_t bits = (copyextraval << insnumextra) | insextraval; - WriteBits(insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage); -} - -} // namespace - -void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) { - if (n == 0) { - WriteBits(1, 0, storage_ix, storage); - } else { - WriteBits(1, 1, storage_ix, storage); - size_t nbits = Log2FloorNonZero(n); - WriteBits(3, nbits, storage_ix, storage); - WriteBits(nbits, n - (1 << nbits), storage_ix, storage); - } -} - -void StoreCompressedMetaBlockHeader(bool final_block, - size_t length, - size_t* storage_ix, - uint8_t* storage) { - // Write ISLAST bit. - WriteBits(1, final_block, storage_ix, storage); - // Write ISEMPTY bit. - if (final_block) { - WriteBits(1, 0, storage_ix, storage); - } - - uint64_t lenbits; - size_t nlenbits; - uint64_t nibblesbits; - EncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); - WriteBits(2, nibblesbits, storage_ix, storage); - WriteBits(nlenbits, lenbits, storage_ix, storage); - - if (!final_block) { - // Write ISUNCOMPRESSED bit. - WriteBits(1, 0, storage_ix, storage); - } -} - -void StoreUncompressedMetaBlockHeader(size_t length, - size_t* storage_ix, - uint8_t* storage) { - // Write ISLAST bit. Uncompressed block cannot be the last one, so set to 0. - WriteBits(1, 0, storage_ix, storage); - uint64_t lenbits; - size_t nlenbits; - uint64_t nibblesbits; - EncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); - WriteBits(2, nibblesbits, storage_ix, storage); - WriteBits(nlenbits, lenbits, storage_ix, storage); - // Write ISUNCOMPRESSED bit. - WriteBits(1, 1, storage_ix, storage); -} - -void StoreHuffmanTreeOfHuffmanTreeToBitMask( - const int num_codes, - const uint8_t *code_length_bitdepth, - size_t *storage_ix, - uint8_t *storage) { - static const uint8_t kStorageOrder[kCodeLengthCodes] = { - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15 - }; - // The bit lengths of the Huffman code over the code length alphabet - // are compressed with the following static Huffman code: - // Symbol Code - // ------ ---- - // 0 00 - // 1 1110 - // 2 110 - // 3 01 - // 4 10 - // 5 1111 - static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = { - 0, 7, 3, 2, 1, 15 - }; - static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = { - 2, 4, 3, 2, 2, 4 - }; - - // Throw away trailing zeros: - size_t codes_to_store = kCodeLengthCodes; - if (num_codes > 1) { - for (; codes_to_store > 0; --codes_to_store) { - if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) { - break; - } - } - } - size_t skip_some = 0; // skips none. - if (code_length_bitdepth[kStorageOrder[0]] == 0 && - code_length_bitdepth[kStorageOrder[1]] == 0) { - skip_some = 2; // skips two. - if (code_length_bitdepth[kStorageOrder[2]] == 0) { - skip_some = 3; // skips three. - } - } - WriteBits(2, skip_some, storage_ix, storage); - for (size_t i = skip_some; i < codes_to_store; ++i) { - size_t l = code_length_bitdepth[kStorageOrder[i]]; - WriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l], - kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage); - } -} - -static void StoreHuffmanTreeToBitMask( - const size_t huffman_tree_size, - const uint8_t* huffman_tree, - const uint8_t* huffman_tree_extra_bits, - const uint8_t* code_length_bitdepth, - const uint16_t* code_length_bitdepth_symbols, - size_t * __restrict storage_ix, - uint8_t * __restrict storage) { - for (size_t i = 0; i < huffman_tree_size; ++i) { - size_t ix = huffman_tree[i]; - WriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix], - storage_ix, storage); - // Extra bits - switch (ix) { - case 16: - WriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage); - break; - case 17: - WriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage); - break; - } - } -} - -static void StoreSimpleHuffmanTree(const uint8_t* depths, - size_t symbols[4], - size_t num_symbols, - size_t max_bits, - size_t *storage_ix, uint8_t *storage) { - // value of 1 indicates a simple Huffman code - WriteBits(2, 1, storage_ix, storage); - WriteBits(2, num_symbols - 1, storage_ix, storage); // NSYM - 1 - - // Sort - for (size_t i = 0; i < num_symbols; i++) { - for (size_t j = i + 1; j < num_symbols; j++) { - if (depths[symbols[j]] < depths[symbols[i]]) { - std::swap(symbols[j], symbols[i]); - } - } - } - - if (num_symbols == 2) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - } else if (num_symbols == 3) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - } else { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - WriteBits(max_bits, symbols[3], storage_ix, storage); - // tree-select - WriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); - } -} - -// num = alphabet size -// depths = symbol depths -void StoreHuffmanTree(const uint8_t* depths, size_t num, - HuffmanTree* tree, - size_t *storage_ix, uint8_t *storage) { - // Write the Huffman tree into the brotli-representation. - // The command alphabet is the largest, so this allocation will fit all - // alphabets. - assert(num <= kNumCommandPrefixes); - uint8_t huffman_tree[kNumCommandPrefixes]; - uint8_t huffman_tree_extra_bits[kNumCommandPrefixes]; - size_t huffman_tree_size = 0; - WriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree, - huffman_tree_extra_bits); - - // Calculate the statistics of the Huffman tree in brotli-representation. - uint32_t huffman_tree_histogram[kCodeLengthCodes] = { 0 }; - for (size_t i = 0; i < huffman_tree_size; ++i) { - ++huffman_tree_histogram[huffman_tree[i]]; - } - - int num_codes = 0; - int code = 0; - for (int i = 0; i < kCodeLengthCodes; ++i) { - if (huffman_tree_histogram[i]) { - if (num_codes == 0) { - code = i; - num_codes = 1; - } else if (num_codes == 1) { - num_codes = 2; - break; - } - } - } - - // Calculate another Huffman tree to use for compressing both the - // earlier Huffman tree with. - uint8_t code_length_bitdepth[kCodeLengthCodes] = { 0 }; - uint16_t code_length_bitdepth_symbols[kCodeLengthCodes] = { 0 }; - CreateHuffmanTree(&huffman_tree_histogram[0], kCodeLengthCodes, - 5, tree, &code_length_bitdepth[0]); - ConvertBitDepthsToSymbols(code_length_bitdepth, kCodeLengthCodes, - &code_length_bitdepth_symbols[0]); - - // Now, we have all the data, let's start storing it - StoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth, - storage_ix, storage); - - if (num_codes == 1) { - code_length_bitdepth[code] = 0; - } - - // Store the real huffman tree now. - StoreHuffmanTreeToBitMask(huffman_tree_size, - huffman_tree, - huffman_tree_extra_bits, - &code_length_bitdepth[0], - code_length_bitdepth_symbols, - storage_ix, storage); -} - -void BuildAndStoreHuffmanTree(const uint32_t *histogram, - const size_t length, - HuffmanTree* tree, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage) { - size_t count = 0; - size_t s4[4] = { 0 }; - for (size_t i = 0; i < length; i++) { - if (histogram[i]) { - if (count < 4) { - s4[count] = i; - } else if (count > 4) { - break; - } - count++; - } - } - - size_t max_bits_counter = length - 1; - size_t max_bits = 0; - while (max_bits_counter) { - max_bits_counter >>= 1; - ++max_bits; - } - - if (count <= 1) { - WriteBits(4, 1, storage_ix, storage); - WriteBits(max_bits, s4[0], storage_ix, storage); - return; - } - - CreateHuffmanTree(histogram, length, 15, tree, depth); - ConvertBitDepthsToSymbols(depth, length, bits); - - if (count <= 4) { - StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage); - } else { - StoreHuffmanTree(depth, length, tree, storage_ix, storage); - } -} - -static inline bool SortHuffmanTree(const HuffmanTree& v0, - const HuffmanTree& v1) { - return v0.total_count_ < v1.total_count_; -} - -void BuildAndStoreHuffmanTreeFast(const uint32_t *histogram, - const size_t histogram_total, - const size_t max_bits, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage) { - size_t count = 0; - size_t symbols[4] = { 0 }; - size_t length = 0; - size_t total = histogram_total; - while (total != 0) { - if (histogram[length]) { - if (count < 4) { - symbols[count] = length; - } - ++count; - total -= histogram[length]; - } - ++length; - } - - if (count <= 1) { - WriteBits(4, 1, storage_ix, storage); - WriteBits(max_bits, symbols[0], storage_ix, storage); - return; - } - - const size_t max_tree_size = 2 * length + 1; - HuffmanTree* const tree = - static_cast<HuffmanTree*>(malloc(max_tree_size * sizeof(HuffmanTree))); - for (uint32_t count_limit = 1; ; count_limit *= 2) { - HuffmanTree* node = tree; - for (size_t i = length; i != 0;) { - --i; - if (histogram[i]) { - if (PREDICT_TRUE(histogram[i] >= count_limit)) { - *node = HuffmanTree(histogram[i], -1, static_cast<int16_t>(i)); - } else { - *node = HuffmanTree(count_limit, -1, static_cast<int16_t>(i)); - } - ++node; - } - } - const int n = static_cast<int>(node - tree); - std::sort(tree, node, SortHuffmanTree); - // The nodes are: - // [0, n): the sorted leaf nodes that we start with. - // [n]: we add a sentinel here. - // [n + 1, 2n): new parent nodes are added here, starting from - // (n+1). These are naturally in ascending order. - // [2n]: we add a sentinel at the end as well. - // There will be (2n+1) elements at the end. - const HuffmanTree sentinel(std::numeric_limits<int>::max(), -1, -1); - *node++ = sentinel; - *node++ = sentinel; - - int i = 0; // Points to the next leaf node. - int j = n + 1; // Points to the next non-leaf node. - for (int k = n - 1; k > 0; --k) { - int left, right; - if (tree[i].total_count_ <= tree[j].total_count_) { - left = i; - ++i; - } else { - left = j; - ++j; - } - if (tree[i].total_count_ <= tree[j].total_count_) { - right = i; - ++i; - } else { - right = j; - ++j; - } - // The sentinel node becomes the parent node. - node[-1].total_count_ = - tree[left].total_count_ + tree[right].total_count_; - node[-1].index_left_ = static_cast<int16_t>(left); - node[-1].index_right_or_value_ = static_cast<int16_t>(right); - // Add back the last sentinel node. - *node++ = sentinel; - } - SetDepth(tree[2 * n - 1], &tree[0], depth, 0); - // We need to pack the Huffman tree in 14 bits. - // If this was not successful, add fake entities to the lowest values - // and retry. - if (PREDICT_TRUE(*std::max_element(&depth[0], &depth[length]) <= 14)) { - break; - } - } - free(tree); - ConvertBitDepthsToSymbols(depth, length, bits); - if (count <= 4) { - // value of 1 indicates a simple Huffman code - WriteBits(2, 1, storage_ix, storage); - WriteBits(2, count - 1, storage_ix, storage); // NSYM - 1 - - // Sort - for (size_t i = 0; i < count; i++) { - for (size_t j = i + 1; j < count; j++) { - if (depth[symbols[j]] < depth[symbols[i]]) { - std::swap(symbols[j], symbols[i]); - } - } - } - - if (count == 2) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - } else if (count == 3) { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - } else { - WriteBits(max_bits, symbols[0], storage_ix, storage); - WriteBits(max_bits, symbols[1], storage_ix, storage); - WriteBits(max_bits, symbols[2], storage_ix, storage); - WriteBits(max_bits, symbols[3], storage_ix, storage); - // tree-select - WriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage); - } - } else { - // Complex Huffman Tree - StoreStaticCodeLengthCode(storage_ix, storage); - - // Actual rle coding. - uint8_t previous_value = 8; - for (size_t i = 0; i < length;) { - const uint8_t value = depth[i]; - size_t reps = 1; - for (size_t k = i + 1; k < length && depth[k] == value; ++k) { - ++reps; - } - i += reps; - if (value == 0) { - WriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps], - storage_ix, storage); - } else { - if (previous_value != value) { - WriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], - storage_ix, storage); - --reps; - } - if (reps < 3) { - while (reps != 0) { - reps--; - WriteBits(kCodeLengthDepth[value], kCodeLengthBits[value], - storage_ix, storage); - } - } else { - reps -= 3; - WriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps], - storage_ix, storage); - } - previous_value = value; - } - } - } -} - -static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) { - size_t i = 0; - for (; i < v_size; ++i) { - if (v[i] == value) return i; - } - return i; -} - -static void MoveToFront(uint8_t* v, size_t index) { - uint8_t value = v[index]; - for (size_t i = index; i != 0; --i) { - v[i] = v[i - 1]; - } - v[0] = value; -} - -static void MoveToFrontTransform(const uint32_t* __restrict v_in, - const size_t v_size, - uint32_t* v_out) { - if (v_size == 0) { - return; - } - uint32_t max_value = *std::max_element(v_in, v_in + v_size); - assert(max_value < 256u); - uint8_t mtf[256]; - size_t mtf_size = max_value + 1; - for (uint32_t i = 0; i <= max_value; ++i) { - mtf[i] = static_cast<uint8_t>(i); - } - for (size_t i = 0; i < v_size; ++i) { - size_t index = IndexOf(mtf, mtf_size, static_cast<uint8_t>(v_in[i])); - assert(index < mtf_size); - v_out[i] = static_cast<uint32_t>(index); - MoveToFront(mtf, index); - } -} - -// Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of -// the run length plus extra bits (lower 9 bits is the prefix code and the rest -// are the extra bits). Non-zero values in v[] are shifted by -// *max_length_prefix. Will not create prefix codes bigger than the initial -// value of *max_run_length_prefix. The prefix code of run length L is simply -// Log2Floor(L) and the number of extra bits is the same as the prefix code. -static void RunLengthCodeZeros(const size_t in_size, - uint32_t* __restrict v, - size_t* __restrict out_size, - uint32_t* __restrict max_run_length_prefix) { - uint32_t max_reps = 0; - for (size_t i = 0; i < in_size;) { - for (; i < in_size && v[i] != 0; ++i) ; - uint32_t reps = 0; - for (; i < in_size && v[i] == 0; ++i) { - ++reps; - } - max_reps = std::max(reps, max_reps); - } - uint32_t max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0; - max_prefix = std::min(max_prefix, *max_run_length_prefix); - *max_run_length_prefix = max_prefix; - *out_size = 0; - for (size_t i = 0; i < in_size;) { - assert(*out_size <= i); - if (v[i] != 0) { - v[*out_size] = v[i] + *max_run_length_prefix; - ++i; - ++(*out_size); - } else { - uint32_t reps = 1; - for (size_t k = i + 1; k < in_size && v[k] == 0; ++k) { - ++reps; - } - i += reps; - while (reps != 0) { - if (reps < (2u << max_prefix)) { - uint32_t run_length_prefix = Log2FloorNonZero(reps); - const uint32_t extra_bits = reps - (1u << run_length_prefix); - v[*out_size] = run_length_prefix + (extra_bits << 9); - ++(*out_size); - break; - } else { - const uint32_t extra_bits = (1u << max_prefix) - 1u; - v[*out_size] = max_prefix + (extra_bits << 9); - reps -= (2u << max_prefix) - 1u; - ++(*out_size); - } - } - } - } -} - -void EncodeContextMap(const std::vector<uint32_t>& context_map, - size_t num_clusters, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - StoreVarLenUint8(num_clusters - 1, storage_ix, storage); - - if (num_clusters == 1) { - return; - } - - uint32_t* rle_symbols = new uint32_t[context_map.size()]; - MoveToFrontTransform(&context_map[0], context_map.size(), rle_symbols); - uint32_t max_run_length_prefix = 6; - size_t num_rle_symbols = 0; - RunLengthCodeZeros(context_map.size(), rle_symbols, - &num_rle_symbols, &max_run_length_prefix); - uint32_t histogram[kContextMapAlphabetSize]; - memset(histogram, 0, sizeof(histogram)); - static const int kSymbolBits = 9; - static const uint32_t kSymbolMask = (1u << kSymbolBits) - 1u; - for (size_t i = 0; i < num_rle_symbols; ++i) { - ++histogram[rle_symbols[i] & kSymbolMask]; - } - bool use_rle = max_run_length_prefix > 0; - WriteBits(1, use_rle, storage_ix, storage); - if (use_rle) { - WriteBits(4, max_run_length_prefix - 1, storage_ix, storage); - } - uint8_t depths[kContextMapAlphabetSize]; - uint16_t bits[kContextMapAlphabetSize]; - memset(depths, 0, sizeof(depths)); - memset(bits, 0, sizeof(bits)); - BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix, - tree, depths, bits, storage_ix, storage); - for (size_t i = 0; i < num_rle_symbols; ++i) { - const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask; - const uint32_t extra_bits_val = rle_symbols[i] >> kSymbolBits; - WriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage); - if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) { - WriteBits(rle_symbol, extra_bits_val, storage_ix, storage); - } - } - WriteBits(1, 1, storage_ix, storage); // use move-to-front - delete[] rle_symbols; -} - -void StoreBlockSwitch(const BlockSplitCode& code, - const size_t block_ix, - size_t* storage_ix, - uint8_t* storage) { - if (block_ix > 0) { - size_t typecode = code.type_code[block_ix]; - WriteBits(code.type_depths[typecode], code.type_bits[typecode], - storage_ix, storage); - } - size_t lencode = code.length_prefix[block_ix]; - WriteBits(code.length_depths[lencode], code.length_bits[lencode], - storage_ix, storage); - WriteBits(code.length_nextra[block_ix], code.length_extra[block_ix], - storage_ix, storage); -} - -static void BuildAndStoreBlockSplitCode(const std::vector<uint8_t>& types, - const std::vector<uint32_t>& lengths, - const size_t num_types, - HuffmanTree* tree, - BlockSplitCode* code, - size_t* storage_ix, - uint8_t* storage) { - const size_t num_blocks = types.size(); - uint32_t type_histo[kBlockTypeAlphabetSize]; - uint32_t length_histo[kNumBlockLenPrefixes]; - memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0])); - memset(length_histo, 0, sizeof(length_histo)); - size_t last_type = 1; - size_t second_last_type = 0; - code->type_code.resize(num_blocks); - code->length_prefix.resize(num_blocks); - code->length_nextra.resize(num_blocks); - code->length_extra.resize(num_blocks); - code->type_depths.resize(num_types + 2); - code->type_bits.resize(num_types + 2); - memset(code->length_depths, 0, sizeof(code->length_depths)); - memset(code->length_bits, 0, sizeof(code->length_bits)); - for (size_t i = 0; i < num_blocks; ++i) { - size_t type = types[i]; - size_t type_code = (type == last_type + 1 ? 1 : - type == second_last_type ? 0 : - type + 2); - second_last_type = last_type; - last_type = type; - code->type_code[i] = static_cast<uint32_t>(type_code); - if (i != 0) ++type_histo[type_code]; - GetBlockLengthPrefixCode(lengths[i], - &code->length_prefix[i], - &code->length_nextra[i], - &code->length_extra[i]); - ++length_histo[code->length_prefix[i]]; - } - StoreVarLenUint8(num_types - 1, storage_ix, storage); - if (num_types > 1) { - BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, tree, - &code->type_depths[0], &code->type_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&length_histo[0], kNumBlockLenPrefixes, tree, - &code->length_depths[0], &code->length_bits[0], - storage_ix, storage); - StoreBlockSwitch(*code, 0, storage_ix, storage); - } -} - -void StoreTrivialContextMap(size_t num_types, - size_t context_bits, - HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage) { - StoreVarLenUint8(num_types - 1, storage_ix, storage); - if (num_types > 1) { - size_t repeat_code = context_bits - 1u; - size_t repeat_bits = (1u << repeat_code) - 1u; - size_t alphabet_size = num_types + repeat_code; - uint32_t histogram[kContextMapAlphabetSize]; - uint8_t depths[kContextMapAlphabetSize]; - uint16_t bits[kContextMapAlphabetSize]; - memset(histogram, 0, alphabet_size * sizeof(histogram[0])); - memset(depths, 0, alphabet_size * sizeof(depths[0])); - memset(bits, 0, alphabet_size * sizeof(bits[0])); - // Write RLEMAX. - WriteBits(1, 1, storage_ix, storage); - WriteBits(4, repeat_code - 1, storage_ix, storage); - histogram[repeat_code] = static_cast<uint32_t>(num_types); - histogram[0] = 1; - for (size_t i = context_bits; i < alphabet_size; ++i) { - histogram[i] = 1; - } - BuildAndStoreHuffmanTree(&histogram[0], alphabet_size, tree, - &depths[0], &bits[0], - storage_ix, storage); - for (size_t i = 0; i < num_types; ++i) { - size_t code = (i == 0 ? 0 : i + context_bits - 1); - WriteBits(depths[code], bits[code], storage_ix, storage); - WriteBits(depths[repeat_code], bits[repeat_code], storage_ix, storage); - WriteBits(repeat_code, repeat_bits, storage_ix, storage); - } - // Write IMTF (inverse-move-to-front) bit. - WriteBits(1, 1, storage_ix, storage); - } -} - -// Manages the encoding of one block category (literal, command or distance). -class BlockEncoder { - public: - BlockEncoder(size_t alphabet_size, - size_t num_block_types, - const std::vector<uint8_t>& block_types, - const std::vector<uint32_t>& block_lengths) - : alphabet_size_(alphabet_size), - num_block_types_(num_block_types), - block_types_(block_types), - block_lengths_(block_lengths), - block_ix_(0), - block_len_(block_lengths.empty() ? 0 : block_lengths[0]), - entropy_ix_(0) {} - - // Creates entropy codes of block lengths and block types and stores them - // to the bit stream. - void BuildAndStoreBlockSwitchEntropyCodes(HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage) { - BuildAndStoreBlockSplitCode( - block_types_, block_lengths_, num_block_types_, - tree, &block_split_code_, storage_ix, storage); - } - - // Creates entropy codes for all block types and stores them to the bit - // stream. - template<int kSize> - void BuildAndStoreEntropyCodes( - const std::vector<Histogram<kSize> >& histograms, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - depths_.resize(histograms.size() * alphabet_size_); - bits_.resize(histograms.size() * alphabet_size_); - for (size_t i = 0; i < histograms.size(); ++i) { - size_t ix = i * alphabet_size_; - BuildAndStoreHuffmanTree(&histograms[i].data_[0], alphabet_size_, - tree, - &depths_[ix], &bits_[ix], - storage_ix, storage); - } - } - - // Stores the next symbol with the entropy code of the current block type. - // Updates the block type and block length at block boundaries. - void StoreSymbol(size_t symbol, size_t* storage_ix, uint8_t* storage) { - if (block_len_ == 0) { - ++block_ix_; - block_len_ = block_lengths_[block_ix_]; - entropy_ix_ = block_types_[block_ix_] * alphabet_size_; - StoreBlockSwitch(block_split_code_, block_ix_, storage_ix, storage); - } - --block_len_; - size_t ix = entropy_ix_ + symbol; - WriteBits(depths_[ix], bits_[ix], storage_ix, storage); - } - - // Stores the next symbol with the entropy code of the current block type and - // context value. - // Updates the block type and block length at block boundaries. - template<int kContextBits> - void StoreSymbolWithContext(size_t symbol, size_t context, - const std::vector<uint32_t>& context_map, - size_t* storage_ix, uint8_t* storage) { - if (block_len_ == 0) { - ++block_ix_; - block_len_ = block_lengths_[block_ix_]; - size_t block_type = block_types_[block_ix_]; - entropy_ix_ = block_type << kContextBits; - StoreBlockSwitch(block_split_code_, block_ix_, storage_ix, storage); - } - --block_len_; - size_t histo_ix = context_map[entropy_ix_ + context]; - size_t ix = histo_ix * alphabet_size_ + symbol; - WriteBits(depths_[ix], bits_[ix], storage_ix, storage); - } - - private: - const size_t alphabet_size_; - const size_t num_block_types_; - const std::vector<uint8_t>& block_types_; - const std::vector<uint32_t>& block_lengths_; - BlockSplitCode block_split_code_; - size_t block_ix_; - size_t block_len_; - size_t entropy_ix_; - std::vector<uint8_t> depths_; - std::vector<uint16_t> bits_; -}; - -static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) { - *storage_ix = (*storage_ix + 7u) & ~7u; - storage[*storage_ix >> 3] = 0; -} - -void StoreMetaBlock(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - bool is_last, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits, - ContextType literal_context_mode, - const brotli::Command *commands, - size_t n_commands, - const MetaBlockSplit& mb, - size_t *storage_ix, - uint8_t *storage) { - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - size_t num_distance_codes = - kNumDistanceShortCodes + num_direct_distance_codes + - (48u << distance_postfix_bits); - - HuffmanTree* tree = static_cast<HuffmanTree*>( - malloc(kMaxHuffmanTreeSize * sizeof(HuffmanTree))); - BlockEncoder literal_enc(256, - mb.literal_split.num_types, - mb.literal_split.types, - mb.literal_split.lengths); - BlockEncoder command_enc(kNumCommandPrefixes, - mb.command_split.num_types, - mb.command_split.types, - mb.command_split.lengths); - BlockEncoder distance_enc(num_distance_codes, - mb.distance_split.num_types, - mb.distance_split.types, - mb.distance_split.lengths); - - literal_enc.BuildAndStoreBlockSwitchEntropyCodes(tree, storage_ix, storage); - command_enc.BuildAndStoreBlockSwitchEntropyCodes(tree, storage_ix, storage); - distance_enc.BuildAndStoreBlockSwitchEntropyCodes(tree, storage_ix, storage); - - WriteBits(2, distance_postfix_bits, storage_ix, storage); - WriteBits(4, num_direct_distance_codes >> distance_postfix_bits, - storage_ix, storage); - for (size_t i = 0; i < mb.literal_split.num_types; ++i) { - WriteBits(2, literal_context_mode, storage_ix, storage); - } - - size_t num_literal_histograms = mb.literal_histograms.size(); - if (mb.literal_context_map.empty()) { - StoreTrivialContextMap(num_literal_histograms, kLiteralContextBits, tree, - storage_ix, storage); - } else { - EncodeContextMap(mb.literal_context_map, num_literal_histograms, tree, - storage_ix, storage); - } - - size_t num_dist_histograms = mb.distance_histograms.size(); - if (mb.distance_context_map.empty()) { - StoreTrivialContextMap(num_dist_histograms, kDistanceContextBits, tree, - storage_ix, storage); - } else { - EncodeContextMap(mb.distance_context_map, num_dist_histograms, tree, - storage_ix, storage); - } - - literal_enc.BuildAndStoreEntropyCodes(mb.literal_histograms, tree, - storage_ix, storage); - command_enc.BuildAndStoreEntropyCodes(mb.command_histograms, tree, - storage_ix, storage); - distance_enc.BuildAndStoreEntropyCodes(mb.distance_histograms, tree, - storage_ix, storage); - free(tree); - - size_t pos = start_pos; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - size_t cmd_code = cmd.cmd_prefix_; - command_enc.StoreSymbol(cmd_code, storage_ix, storage); - StoreCommandExtra(cmd, storage_ix, storage); - if (mb.literal_context_map.empty()) { - for (size_t j = cmd.insert_len_; j != 0; --j) { - literal_enc.StoreSymbol(input[pos & mask], storage_ix, storage); - ++pos; - } - } else { - for (size_t j = cmd.insert_len_; j != 0; --j) { - size_t context = Context(prev_byte, prev_byte2, literal_context_mode); - uint8_t literal = input[pos & mask]; - literal_enc.StoreSymbolWithContext<kLiteralContextBits>( - literal, context, mb.literal_context_map, storage_ix, storage); - prev_byte2 = prev_byte; - prev_byte = literal; - ++pos; - } - } - pos += cmd.copy_len(); - if (cmd.copy_len()) { - prev_byte2 = input[(pos - 2) & mask]; - prev_byte = input[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >= 128) { - size_t dist_code = cmd.dist_prefix_; - uint32_t distnumextra = cmd.dist_extra_ >> 24; - uint64_t distextra = cmd.dist_extra_ & 0xffffff; - if (mb.distance_context_map.empty()) { - distance_enc.StoreSymbol(dist_code, storage_ix, storage); - } else { - size_t context = cmd.DistanceContext(); - distance_enc.StoreSymbolWithContext<kDistanceContextBits>( - dist_code, context, mb.distance_context_map, storage_ix, storage); - } - brotli::WriteBits(distnumextra, distextra, storage_ix, storage); - } - } - } - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -static void BuildHistograms(const uint8_t* input, - size_t start_pos, - size_t mask, - const brotli::Command *commands, - size_t n_commands, - HistogramLiteral* lit_histo, - HistogramCommand* cmd_histo, - HistogramDistance* dist_histo) { - size_t pos = start_pos; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - cmd_histo->Add(cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - lit_histo->Add(input[pos & mask]); - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - dist_histo->Add(cmd.dist_prefix_); - } - } -} - -static void StoreDataWithHuffmanCodes(const uint8_t* input, - size_t start_pos, - size_t mask, - const brotli::Command *commands, - size_t n_commands, - const uint8_t* lit_depth, - const uint16_t* lit_bits, - const uint8_t* cmd_depth, - const uint16_t* cmd_bits, - const uint8_t* dist_depth, - const uint16_t* dist_bits, - size_t* storage_ix, - uint8_t* storage) { - size_t pos = start_pos; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - const size_t cmd_code = cmd.cmd_prefix_; - WriteBits(cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage); - StoreCommandExtra(cmd, storage_ix, storage); - for (size_t j = cmd.insert_len_; j != 0; --j) { - const uint8_t literal = input[pos & mask]; - WriteBits(lit_depth[literal], lit_bits[literal], storage_ix, storage); - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - const size_t dist_code = cmd.dist_prefix_; - const uint32_t distnumextra = cmd.dist_extra_ >> 24; - const uint32_t distextra = cmd.dist_extra_ & 0xffffff; - WriteBits(dist_depth[dist_code], dist_bits[dist_code], - storage_ix, storage); - WriteBits(distnumextra, distextra, storage_ix, storage); - } - } -} - -void StoreMetaBlockTrivial(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage) { - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - HistogramLiteral lit_histo; - HistogramCommand cmd_histo; - HistogramDistance dist_histo; - - BuildHistograms(input, start_pos, mask, commands, n_commands, - &lit_histo, &cmd_histo, &dist_histo); - - WriteBits(13, 0, storage_ix, storage); - - std::vector<uint8_t> lit_depth(256); - std::vector<uint16_t> lit_bits(256); - std::vector<uint8_t> cmd_depth(kNumCommandPrefixes); - std::vector<uint16_t> cmd_bits(kNumCommandPrefixes); - std::vector<uint8_t> dist_depth(64); - std::vector<uint16_t> dist_bits(64); - - HuffmanTree* tree = static_cast<HuffmanTree*>( - malloc(kMaxHuffmanTreeSize * sizeof(HuffmanTree))); - BuildAndStoreHuffmanTree(&lit_histo.data_[0], 256, tree, - &lit_depth[0], &lit_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&cmd_histo.data_[0], kNumCommandPrefixes, tree, - &cmd_depth[0], &cmd_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&dist_histo.data_[0], 64, tree, - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - free(tree); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, &lit_depth[0], &lit_bits[0], - &cmd_depth[0], &cmd_bits[0], - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -void StoreMetaBlockFast(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage) { - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - WriteBits(13, 0, storage_ix, storage); - - if (n_commands <= 128) { - uint32_t histogram[256] = { 0 }; - size_t pos = start_pos; - size_t num_literals = 0; - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - for (size_t j = cmd.insert_len_; j != 0; --j) { - ++histogram[input[pos & mask]]; - ++pos; - } - num_literals += cmd.insert_len_; - pos += cmd.copy_len(); - } - uint8_t lit_depth[256] = { 0 }; - uint16_t lit_bits[256] = { 0 }; - BuildAndStoreHuffmanTreeFast(histogram, num_literals, - /* max_bits = */ 8, - lit_depth, lit_bits, - storage_ix, storage); - StoreStaticCommandHuffmanTree(storage_ix, storage); - StoreStaticDistanceHuffmanTree(storage_ix, storage); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, &lit_depth[0], &lit_bits[0], - kStaticCommandCodeDepth, - kStaticCommandCodeBits, - kStaticDistanceCodeDepth, - kStaticDistanceCodeBits, - storage_ix, storage); - } else { - HistogramLiteral lit_histo; - HistogramCommand cmd_histo; - HistogramDistance dist_histo; - BuildHistograms(input, start_pos, mask, commands, n_commands, - &lit_histo, &cmd_histo, &dist_histo); - std::vector<uint8_t> lit_depth(256); - std::vector<uint16_t> lit_bits(256); - std::vector<uint8_t> cmd_depth(kNumCommandPrefixes); - std::vector<uint16_t> cmd_bits(kNumCommandPrefixes); - std::vector<uint8_t> dist_depth(64); - std::vector<uint16_t> dist_bits(64); - BuildAndStoreHuffmanTreeFast(&lit_histo.data_[0], lit_histo.total_count_, - /* max_bits = */ 8, - &lit_depth[0], &lit_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTreeFast(&cmd_histo.data_[0], cmd_histo.total_count_, - /* max_bits = */ 10, - &cmd_depth[0], &cmd_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTreeFast(&dist_histo.data_[0], dist_histo.total_count_, - /* max_bits = */ 6, - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, &lit_depth[0], &lit_bits[0], - &cmd_depth[0], &cmd_bits[0], - &dist_depth[0], &dist_bits[0], - storage_ix, storage); - } - - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -// This is for storing uncompressed blocks (simple raw storage of -// bytes-as-bytes). -void StoreUncompressedMetaBlock(bool final_block, - const uint8_t * __restrict input, - size_t position, size_t mask, - size_t len, - size_t * __restrict storage_ix, - uint8_t * __restrict storage) { - StoreUncompressedMetaBlockHeader(len, storage_ix, storage); - JumpToByteBoundary(storage_ix, storage); - - size_t masked_pos = position & mask; - if (masked_pos + len > mask + 1) { - size_t len1 = mask + 1 - masked_pos; - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1); - *storage_ix += len1 << 3; - len -= len1; - masked_pos = 0; - } - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len); - *storage_ix += len << 3; - - // We need to clear the next 4 bytes to continue to be - // compatible with WriteBits. - brotli::WriteBitsPrepareStorage(*storage_ix, storage); - - // Since the uncompressed block itself may not be the final block, add an - // empty one after this. - if (final_block) { - brotli::WriteBits(1, 1, storage_ix, storage); // islast - brotli::WriteBits(1, 1, storage_ix, storage); // isempty - JumpToByteBoundary(storage_ix, storage); - } -} - -void StoreSyncMetaBlock(size_t * __restrict storage_ix, - uint8_t * __restrict storage) { - // Empty metadata meta-block bit pattern: - // 1 bit: is_last (0) - // 2 bits: num nibbles (3) - // 1 bit: reserved (0) - // 2 bits: metadata length bytes (0) - WriteBits(6, 6, storage_ix, storage); - JumpToByteBoundary(storage_ix, storage); -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/brotli_bit_stream.h b/third_party/brotli/enc/brotli_bit_stream.h index 6c70653..a98f98f5 100644 --- a/third_party/brotli/enc/brotli_bit_stream.h +++ b/third_party/brotli/enc/brotli_bit_stream.h
@@ -4,176 +4,104 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Functions to convert brotli-related data structures into the -// brotli bit stream. The functions here operate under -// assumption that there is enough space in the storage, i.e., there are -// no out-of-range checks anywhere. -// -// These functions do bit addressing into a byte array. The byte array -// is called "storage" and the index to the bit is called storage_ix -// in function arguments. +/* Functions to convert brotli-related data structures into the + brotli bit stream. The functions here operate under + assumption that there is enough space in the storage, i.e., there are + no out-of-range checks anywhere. + + These functions do bit addressing into a byte array. The byte array + is called "storage" and the index to the bit is called storage_ix + in function arguments. */ #ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_ #define BROTLI_ENC_BROTLI_BIT_STREAM_H_ -#include <vector> - +#include <brotli/types.h> +#include "./command.h" +#include "./context.h" #include "./entropy_encode.h" +#include "./memory.h" #include "./metablock.h" -#include "./types.h" +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// All Store functions here will use a storage_ix, which is always the bit -// position for the current storage. +/* All Store functions here will use a storage_ix, which is always the bit + position for the current storage. */ -// Stores a number between 0 and 255. -void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage); +BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num, + HuffmanTree* tree, size_t *storage_ix, uint8_t *storage); -// Stores the compressed meta-block header. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreCompressedMetaBlockHeader(bool final_block, - size_t length, - size_t* storage_ix, - uint8_t* storage); +BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast( + MemoryManager* m, const uint32_t* histogram, const size_t histogram_total, + const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix, + uint8_t* storage); -// Stores the uncompressed meta-block header. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreUncompressedMetaBlockHeader(size_t length, - size_t* storage_ix, - uint8_t* storage); +/* REQUIRES: length > 0 */ +/* REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + BROTLI_BOOL is_final_block, + uint32_t num_direct_distance_codes, + uint32_t distance_postfix_bits, + ContextType literal_context_mode, + const Command* commands, + size_t n_commands, + const MetaBlockSplit* mb, + size_t* storage_ix, + uint8_t* storage); -// Stores a context map where the histogram type is always the block type. -void StoreTrivialContextMap(size_t num_types, - size_t context_bits, - HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage); +/* Stores the meta-block without doing any block splitting, just collects + one histogram per block category and uses that for entropy coding. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t* storage_ix, + uint8_t* storage); -void StoreHuffmanTreeOfHuffmanTreeToBitMask( - const int num_codes, - const uint8_t *code_length_bitdepth, - size_t *storage_ix, - uint8_t *storage); +/* Same as above, but uses static prefix codes for histograms with a only a few + symbols, and uses static code length prefix codes for all other histograms. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m, + const uint8_t* input, + size_t start_pos, + size_t length, + size_t mask, + BROTLI_BOOL is_last, + const Command *commands, + size_t n_commands, + size_t* storage_ix, + uint8_t* storage); -void StoreHuffmanTree(const uint8_t* depths, size_t num, HuffmanTree* tree, - size_t *storage_ix, uint8_t *storage); +/* This is for storing uncompressed blocks (simple raw storage of + bytes-as-bytes). + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock( + BROTLI_BOOL is_final_block, const uint8_t* input, size_t position, + size_t mask, size_t len, size_t* storage_ix, uint8_t* storage); -// Builds a Huffman tree from histogram[0:length] into depth[0:length] and -// bits[0:length] and stores the encoded tree to the bit stream. -void BuildAndStoreHuffmanTree(const uint32_t *histogram, - const size_t length, - HuffmanTree* tree, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage); +/* Stores an empty metadata meta-block and syncs to a byte boundary. */ +BROTLI_INTERNAL void BrotliStoreSyncMetaBlock(size_t* storage_ix, + uint8_t* storage); -void BuildAndStoreHuffmanTreeFast(const uint32_t *histogram, - const size_t histogram_total, - const size_t max_bits, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage); +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -// Encodes the given context map to the bit stream. The number of different -// histogram ids is given by num_clusters. -void EncodeContextMap(const std::vector<uint32_t>& context_map, - size_t num_clusters, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage); - -// Data structure that stores everything that is needed to encode each block -// switch command. -struct BlockSplitCode { - std::vector<uint32_t> type_code; - std::vector<uint32_t> length_prefix; - std::vector<uint32_t> length_nextra; - std::vector<uint32_t> length_extra; - std::vector<uint8_t> type_depths; - std::vector<uint16_t> type_bits; - uint8_t length_depths[kNumBlockLenPrefixes]; - uint16_t length_bits[kNumBlockLenPrefixes]; -}; - -// Builds a BlockSplitCode data structure from the block split given by the -// vector of block types and block lengths and stores it to the bit stream. -void BuildAndStoreBlockSplitCode(const std::vector<uint8_t>& types, - const std::vector<uint32_t>& lengths, - const size_t num_types, - BlockSplitCode* code, - size_t* storage_ix, - uint8_t* storage); - -// Stores the block switch command with index block_ix to the bit stream. -void StoreBlockSwitch(const BlockSplitCode& code, - const size_t block_ix, - size_t* storage_ix, - uint8_t* storage); - -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreMetaBlock(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - bool final_block, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits, - ContextType literal_context_mode, - const brotli::Command *commands, - size_t n_commands, - const MetaBlockSplit& mb, - size_t *storage_ix, - uint8_t *storage); - -// Stores the meta-block without doing any block splitting, just collects -// one histogram per block category and uses that for entropy coding. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreMetaBlockTrivial(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage); - -// Same as above, but uses static prefix codes for histograms with a only a few -// symbols, and uses static code length prefix codes for all other histograms. -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreMetaBlockFast(const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - bool is_last, - const brotli::Command *commands, - size_t n_commands, - size_t *storage_ix, - uint8_t *storage); - -// This is for storing uncompressed blocks (simple raw storage of -// bytes-as-bytes). -// REQUIRES: length > 0 -// REQUIRES: length <= (1 << 24) -void StoreUncompressedMetaBlock(bool final_block, - const uint8_t* input, - size_t position, size_t mask, - size_t len, - size_t* storage_ix, - uint8_t* storage); - -// Stores an empty metadata meta-block and syncs to a byte boundary. -void StoreSyncMetaBlock(size_t* storage_ix, uint8_t* storage); - -} // namespace brotli - -#endif // BROTLI_ENC_BROTLI_BIT_STREAM_H_ +#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */
diff --git a/third_party/brotli/enc/cluster.c b/third_party/brotli/enc/cluster.c new file mode 100644 index 0000000..bb66327 --- /dev/null +++ b/third_party/brotli/enc/cluster.c
@@ -0,0 +1,56 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for clustering similar histograms together. */ + +#include "./cluster.h" + +#include <brotli/types.h> +#include "./bit_cost.h" /* BrotliPopulationCost */ +#include "./fast_log.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess( + const HistogramPair* p1, const HistogramPair* p2) { + if (p1->cost_diff != p2->cost_diff) { + return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff); + } + return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1)); +} + +/* Returns entropy reduction of the context map when we combine two clusters. */ +static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) { + size_t size_c = size_a + size_b; + return (double)size_a * FastLog2(size_a) + + (double)size_b * FastLog2(size_b) - + (double)size_c * FastLog2(size_c); +} + +#define CODE(X) X + +#define FN(X) X ## Literal +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN + +#undef CODE + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/cluster.h b/third_party/brotli/enc/cluster.h index 28d7c98..be58614 100644 --- a/third_party/brotli/enc/cluster.h +++ b/third_party/brotli/enc/cluster.h
@@ -4,327 +4,45 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Functions for clustering similar histograms together. +/* Functions for clustering similar histograms together. */ #ifndef BROTLI_ENC_CLUSTER_H_ #define BROTLI_ENC_CLUSTER_H_ -#include <math.h> -#include <algorithm> -#include <utility> -#include <vector> - -#include "./bit_cost.h" -#include "./entropy_encode.h" -#include "./fast_log.h" +#include <brotli/types.h> #include "./histogram.h" +#include "./memory.h" #include "./port.h" -#include "./types.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -struct HistogramPair { +typedef struct HistogramPair { uint32_t idx1; uint32_t idx2; double cost_combo; double cost_diff; -}; +} HistogramPair; -inline bool operator<(const HistogramPair& p1, const HistogramPair& p2) { - if (p1.cost_diff != p2.cost_diff) { - return p1.cost_diff > p2.cost_diff; - } - return (p1.idx2 - p1.idx1) > (p2.idx2 - p2.idx1); -} +#define CODE(X) /* Declaration */; -// Returns entropy reduction of the context map when we combine two clusters. -inline double ClusterCostDiff(size_t size_a, size_t size_b) { - size_t size_c = size_a + size_b; - return static_cast<double>(size_a) * FastLog2(size_a) + - static_cast<double>(size_b) * FastLog2(size_b) - - static_cast<double>(size_c) * FastLog2(size_c); -} +#define FN(X) X ## Literal +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN -// Computes the bit cost reduction by combining out[idx1] and out[idx2] and if -// it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. -template<typename HistogramType> -void CompareAndPushToQueue(const HistogramType* out, - const uint32_t* cluster_size, - uint32_t idx1, uint32_t idx2, - size_t max_num_pairs, - HistogramPair* pairs, - size_t* num_pairs) { - if (idx1 == idx2) { - return; - } - if (idx2 < idx1) { - uint32_t t = idx2; - idx2 = idx1; - idx1 = t; - } - bool store_pair = false; - HistogramPair p = {}; - p.idx1 = idx1; - p.idx2 = idx2; - p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]); - p.cost_diff -= out[idx1].bit_cost_; - p.cost_diff -= out[idx2].bit_cost_; +#define FN(X) X ## Command +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN - if (out[idx1].total_count_ == 0) { - p.cost_combo = out[idx2].bit_cost_; - store_pair = true; - } else if (out[idx2].total_count_ == 0) { - p.cost_combo = out[idx1].bit_cost_; - store_pair = true; - } else { - double threshold = *num_pairs == 0 ? 1e99 : - std::max(0.0, pairs[0].cost_diff); - HistogramType combo = out[idx1]; - combo.AddHistogram(out[idx2]); - double cost_combo = PopulationCost(combo); - if (cost_combo < threshold - p.cost_diff) { - p.cost_combo = cost_combo; - store_pair = true; - } - } - if (store_pair) { - p.cost_diff += p.cost_combo; - if (*num_pairs > 0 && pairs[0] < p) { - // Replace the top of the queue if needed. - if (*num_pairs < max_num_pairs) { - pairs[*num_pairs] = pairs[0]; - ++(*num_pairs); - } - pairs[0] = p; - } else if (*num_pairs < max_num_pairs) { - pairs[*num_pairs] = p; - ++(*num_pairs); - } - } -} +#define FN(X) X ## Distance +#include "./cluster_inc.h" /* NOLINT(build/include) */ +#undef FN -template<typename HistogramType> -size_t HistogramCombine(HistogramType* out, - uint32_t* cluster_size, - uint32_t* symbols, - uint32_t* clusters, - HistogramPair* pairs, - size_t num_clusters, - size_t symbols_size, - size_t max_clusters, - size_t max_num_pairs) { - double cost_diff_threshold = 0.0; - size_t min_cluster_size = 1; +#undef CODE - // We maintain a vector of histogram pairs, with the property that the pair - // with the maximum bit cost reduction is the first. - size_t num_pairs = 0; - for (size_t idx1 = 0; idx1 < num_clusters; ++idx1) { - for (size_t idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) { - CompareAndPushToQueue(out, cluster_size, clusters[idx1], clusters[idx2], - max_num_pairs, &pairs[0], &num_pairs); - } - } +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif - while (num_clusters > min_cluster_size) { - if (pairs[0].cost_diff >= cost_diff_threshold) { - cost_diff_threshold = 1e99; - min_cluster_size = max_clusters; - continue; - } - // Take the best pair from the top of heap. - uint32_t best_idx1 = pairs[0].idx1; - uint32_t best_idx2 = pairs[0].idx2; - out[best_idx1].AddHistogram(out[best_idx2]); - out[best_idx1].bit_cost_ = pairs[0].cost_combo; - cluster_size[best_idx1] += cluster_size[best_idx2]; - for (size_t i = 0; i < symbols_size; ++i) { - if (symbols[i] == best_idx2) { - symbols[i] = best_idx1; - } - } - for (size_t i = 0; i < num_clusters; ++i) { - if (clusters[i] == best_idx2) { - memmove(&clusters[i], &clusters[i + 1], - (num_clusters - i - 1) * sizeof(clusters[0])); - break; - } - } - --num_clusters; - // Remove pairs intersecting the just combined best pair. - size_t copy_to_idx = 0; - for (size_t i = 0; i < num_pairs; ++i) { - HistogramPair& p = pairs[i]; - if (p.idx1 == best_idx1 || p.idx2 == best_idx1 || - p.idx1 == best_idx2 || p.idx2 == best_idx2) { - // Remove invalid pair from the queue. - continue; - } - if (pairs[0] < p) { - // Replace the top of the queue if needed. - HistogramPair front = pairs[0]; - pairs[0] = p; - pairs[copy_to_idx] = front; - } else { - pairs[copy_to_idx] = p; - } - ++copy_to_idx; - } - num_pairs = copy_to_idx; - - // Push new pairs formed with the combined histogram to the heap. - for (size_t i = 0; i < num_clusters; ++i) { - CompareAndPushToQueue(out, cluster_size, best_idx1, clusters[i], - max_num_pairs, &pairs[0], &num_pairs); - } - } - return num_clusters; -} - -// ----------------------------------------------------------------------------- -// Histogram refinement - -// What is the bit cost of moving histogram from cur_symbol to candidate. -template<typename HistogramType> -double HistogramBitCostDistance(const HistogramType& histogram, - const HistogramType& candidate) { - if (histogram.total_count_ == 0) { - return 0.0; - } - HistogramType tmp = histogram; - tmp.AddHistogram(candidate); - return PopulationCost(tmp) - candidate.bit_cost_; -} - -// Find the best 'out' histogram for each of the 'in' histograms. -// When called, clusters[0..num_clusters) contains the unique values from -// symbols[0..in_size), but this property is not preserved in this function. -// Note: we assume that out[]->bit_cost_ is already up-to-date. -template<typename HistogramType> -void HistogramRemap(const HistogramType* in, size_t in_size, - const uint32_t* clusters, size_t num_clusters, - HistogramType* out, uint32_t* symbols) { - for (size_t i = 0; i < in_size; ++i) { - uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1]; - double best_bits = HistogramBitCostDistance(in[i], out[best_out]); - for (size_t j = 0; j < num_clusters; ++j) { - const double cur_bits = HistogramBitCostDistance(in[i], out[clusters[j]]); - if (cur_bits < best_bits) { - best_bits = cur_bits; - best_out = clusters[j]; - } - } - symbols[i] = best_out; - } - - // Recompute each out based on raw and symbols. - for (size_t j = 0; j < num_clusters; ++j) { - out[clusters[j]].Clear(); - } - for (size_t i = 0; i < in_size; ++i) { - out[symbols[i]].AddHistogram(in[i]); - } -} - -// Reorders elements of the out[0..length) array and changes values in -// symbols[0..length) array in the following way: -// * when called, symbols[] contains indexes into out[], and has N unique -// values (possibly N < length) -// * on return, symbols'[i] = f(symbols[i]) and -// out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, -// where f is a bijection between the range of symbols[] and [0..N), and -// the first occurrences of values in symbols'[i] come in consecutive -// increasing order. -// Returns N, the number of unique values in symbols[]. -template<typename HistogramType> -size_t HistogramReindex(HistogramType* out, uint32_t* symbols, size_t length) { - static const uint32_t kInvalidIndex = std::numeric_limits<uint32_t>::max(); - std::vector<uint32_t> new_index(length, kInvalidIndex); - uint32_t next_index = 0; - for (size_t i = 0; i < length; ++i) { - if (new_index[symbols[i]] == kInvalidIndex) { - new_index[symbols[i]] = next_index; - ++next_index; - } - } - std::vector<HistogramType> tmp(next_index); - next_index = 0; - for (size_t i = 0; i < length; ++i) { - if (new_index[symbols[i]] == next_index) { - tmp[next_index] = out[symbols[i]]; - ++next_index; - } - symbols[i] = new_index[symbols[i]]; - } - for (size_t i = 0; i < next_index; ++i) { - out[i] = tmp[i]; - } - return next_index; -} - -// Clusters similar histograms in 'in' together, the selected histograms are -// placed in 'out', and for each index in 'in', *histogram_symbols will -// indicate which of the 'out' histograms is the best approximation. -template<typename HistogramType> -void ClusterHistograms(const std::vector<HistogramType>& in, - size_t num_contexts, size_t num_blocks, - size_t max_histograms, - std::vector<HistogramType>* out, - std::vector<uint32_t>* histogram_symbols) { - const size_t in_size = num_contexts * num_blocks; - assert(in_size == in.size()); - std::vector<uint32_t> cluster_size(in_size, 1); - std::vector<uint32_t> clusters(in_size); - size_t num_clusters = 0; - out->resize(in_size); - histogram_symbols->resize(in_size); - for (size_t i = 0; i < in_size; ++i) { - (*out)[i] = in[i]; - (*out)[i].bit_cost_ = PopulationCost(in[i]); - (*histogram_symbols)[i] = static_cast<uint32_t>(i); - } - - const size_t max_input_histograms = 64; - // For the first pass of clustering, we allow all pairs. - size_t max_num_pairs = max_input_histograms * max_input_histograms / 2; - std::vector<HistogramPair> pairs(max_num_pairs + 1); - - for (size_t i = 0; i < in_size; i += max_input_histograms) { - size_t num_to_combine = std::min(in_size - i, max_input_histograms); - for (size_t j = 0; j < num_to_combine; ++j) { - clusters[num_clusters + j] = static_cast<uint32_t>(i + j); - } - size_t num_new_clusters = - HistogramCombine(&(*out)[0], &cluster_size[0], - &(*histogram_symbols)[i], - &clusters[num_clusters], &pairs[0], - num_to_combine, num_to_combine, - max_histograms, max_num_pairs); - num_clusters += num_new_clusters; - } - - // For the second pass, we limit the total number of histogram pairs. - // After this limit is reached, we only keep searching for the best pair. - max_num_pairs = - std::min(64 * num_clusters, (num_clusters / 2) * num_clusters); - pairs.resize(max_num_pairs + 1); - - // Collapse similar histograms. - num_clusters = HistogramCombine(&(*out)[0], &cluster_size[0], - &(*histogram_symbols)[0], &clusters[0], - &pairs[0], num_clusters, in_size, - max_histograms, max_num_pairs); - - // Find the optimal map from original histograms to the final ones. - HistogramRemap(&in[0], in_size, &clusters[0], num_clusters, - &(*out)[0], &(*histogram_symbols)[0]); - - // Convert the context map to a canonical form. - size_t num_histograms = - HistogramReindex(&(*out)[0], &(*histogram_symbols)[0], in_size); - out->resize(num_histograms); -} - -} // namespace brotli - -#endif // BROTLI_ENC_CLUSTER_H_ +#endif /* BROTLI_ENC_CLUSTER_H_ */
diff --git a/third_party/brotli/enc/cluster_inc.h b/third_party/brotli/enc/cluster_inc.h new file mode 100644 index 0000000..8e69d81 --- /dev/null +++ b/third_party/brotli/enc/cluster_inc.h
@@ -0,0 +1,315 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, CODE */ + +#define HistogramType FN(Histogram) + +/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if + it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ +BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)( + const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1, + uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs, + size_t* num_pairs) CODE({ + BROTLI_BOOL is_good_pair = BROTLI_FALSE; + HistogramPair p = {0}; + if (idx1 == idx2) { + return; + } + if (idx2 < idx1) { + uint32_t t = idx2; + idx2 = idx1; + idx1 = t; + } + p.idx1 = idx1; + p.idx2 = idx2; + p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]); + p.cost_diff -= out[idx1].bit_cost_; + p.cost_diff -= out[idx2].bit_cost_; + + if (out[idx1].total_count_ == 0) { + p.cost_combo = out[idx2].bit_cost_; + is_good_pair = BROTLI_TRUE; + } else if (out[idx2].total_count_ == 0) { + p.cost_combo = out[idx1].bit_cost_; + is_good_pair = BROTLI_TRUE; + } else { + double threshold = *num_pairs == 0 ? 1e99 : + BROTLI_MAX(double, 0.0, pairs[0].cost_diff); + HistogramType combo = out[idx1]; + double cost_combo; + FN(HistogramAddHistogram)(&combo, &out[idx2]); + cost_combo = FN(BrotliPopulationCost)(&combo); + if (cost_combo < threshold - p.cost_diff) { + p.cost_combo = cost_combo; + is_good_pair = BROTLI_TRUE; + } + } + if (is_good_pair) { + p.cost_diff += p.cost_combo; + if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) { + /* Replace the top of the queue if needed. */ + if (*num_pairs < max_num_pairs) { + pairs[*num_pairs] = pairs[0]; + ++(*num_pairs); + } + pairs[0] = p; + } else if (*num_pairs < max_num_pairs) { + pairs[*num_pairs] = p; + ++(*num_pairs); + } + } +}) + +BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out, + uint32_t* cluster_size, + uint32_t* symbols, + uint32_t* clusters, + HistogramPair* pairs, + size_t num_clusters, + size_t symbols_size, + size_t max_clusters, + size_t max_num_pairs) CODE({ + double cost_diff_threshold = 0.0; + size_t min_cluster_size = 1; + size_t num_pairs = 0; + + { + /* We maintain a vector of histogram pairs, with the property that the pair + with the maximum bit cost reduction is the first. */ + size_t idx1; + for (idx1 = 0; idx1 < num_clusters; ++idx1) { + size_t idx2; + for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) { + FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1], + clusters[idx2], max_num_pairs, &pairs[0], &num_pairs); + } + } + } + + while (num_clusters > min_cluster_size) { + uint32_t best_idx1; + uint32_t best_idx2; + size_t i; + if (pairs[0].cost_diff >= cost_diff_threshold) { + cost_diff_threshold = 1e99; + min_cluster_size = max_clusters; + continue; + } + /* Take the best pair from the top of heap. */ + best_idx1 = pairs[0].idx1; + best_idx2 = pairs[0].idx2; + FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]); + out[best_idx1].bit_cost_ = pairs[0].cost_combo; + cluster_size[best_idx1] += cluster_size[best_idx2]; + for (i = 0; i < symbols_size; ++i) { + if (symbols[i] == best_idx2) { + symbols[i] = best_idx1; + } + } + for (i = 0; i < num_clusters; ++i) { + if (clusters[i] == best_idx2) { + memmove(&clusters[i], &clusters[i + 1], + (num_clusters - i - 1) * sizeof(clusters[0])); + break; + } + } + --num_clusters; + { + /* Remove pairs intersecting the just combined best pair. */ + size_t copy_to_idx = 0; + for (i = 0; i < num_pairs; ++i) { + HistogramPair* p = &pairs[i]; + if (p->idx1 == best_idx1 || p->idx2 == best_idx1 || + p->idx1 == best_idx2 || p->idx2 == best_idx2) { + /* Remove invalid pair from the queue. */ + continue; + } + if (HistogramPairIsLess(&pairs[0], p)) { + /* Replace the top of the queue if needed. */ + HistogramPair front = pairs[0]; + pairs[0] = *p; + pairs[copy_to_idx] = front; + } else { + pairs[copy_to_idx] = *p; + } + ++copy_to_idx; + } + num_pairs = copy_to_idx; + } + + /* Push new pairs formed with the combined histogram to the heap. */ + for (i = 0; i < num_clusters; ++i) { + FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clusters[i], + max_num_pairs, &pairs[0], &num_pairs); + } + } + return num_clusters; +}) + +/* What is the bit cost of moving histogram from cur_symbol to candidate. */ +BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)( + const HistogramType* histogram, const HistogramType* candidate) CODE({ + if (histogram->total_count_ == 0) { + return 0.0; + } else { + HistogramType tmp = *histogram; + FN(HistogramAddHistogram)(&tmp, candidate); + return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_; + } +}) + +/* Find the best 'out' histogram for each of the 'in' histograms. + When called, clusters[0..num_clusters) contains the unique values from + symbols[0..in_size), but this property is not preserved in this function. + Note: we assume that out[]->bit_cost_ is already up-to-date. */ +BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in, + size_t in_size, const uint32_t* clusters, size_t num_clusters, + HistogramType* out, uint32_t* symbols) CODE({ + size_t i; + for (i = 0; i < in_size; ++i) { + uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1]; + double best_bits = + FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]); + size_t j; + for (j = 0; j < num_clusters; ++j) { + const double cur_bits = + FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]); + if (cur_bits < best_bits) { + best_bits = cur_bits; + best_out = clusters[j]; + } + } + symbols[i] = best_out; + } + + /* Recompute each out based on raw and symbols. */ + for (i = 0; i < num_clusters; ++i) { + FN(HistogramClear)(&out[clusters[i]]); + } + for (i = 0; i < in_size; ++i) { + FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]); + } +}) + +/* Reorders elements of the out[0..length) array and changes values in + symbols[0..length) array in the following way: + * when called, symbols[] contains indexes into out[], and has N unique + values (possibly N < length) + * on return, symbols'[i] = f(symbols[i]) and + out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, + where f is a bijection between the range of symbols[] and [0..N), and + the first occurrences of values in symbols'[i] come in consecutive + increasing order. + Returns N, the number of unique values in symbols[]. */ +BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m, + HistogramType* out, uint32_t* symbols, size_t length) CODE({ + static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX; + uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length); + uint32_t next_index; + HistogramType* tmp; + size_t i; + if (BROTLI_IS_OOM(m)) return 0; + for (i = 0; i < length; ++i) { + new_index[i] = kInvalidIndex; + } + next_index = 0; + for (i = 0; i < length; ++i) { + if (new_index[symbols[i]] == kInvalidIndex) { + new_index[symbols[i]] = next_index; + ++next_index; + } + } + /* TODO: by using idea of "cycle-sort" we can avoid allocation of + tmp and reduce the number of copying by the factor of 2. */ + tmp = BROTLI_ALLOC(m, HistogramType, next_index); + if (BROTLI_IS_OOM(m)) return 0; + next_index = 0; + for (i = 0; i < length; ++i) { + if (new_index[symbols[i]] == next_index) { + tmp[next_index] = out[symbols[i]]; + ++next_index; + } + symbols[i] = new_index[symbols[i]]; + } + BROTLI_FREE(m, new_index); + for (i = 0; i < next_index; ++i) { + out[i] = tmp[i]; + } + BROTLI_FREE(m, tmp); + return next_index; +}) + +BROTLI_INTERNAL void FN(BrotliClusterHistograms)( + MemoryManager* m, const HistogramType* in, const size_t in_size, + size_t max_histograms, HistogramType* out, size_t* out_size, + uint32_t* histogram_symbols) CODE({ + uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size); + uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size); + size_t num_clusters = 0; + const size_t max_input_histograms = 64; + size_t pairs_capacity = max_input_histograms * max_input_histograms / 2; + /* For the first pass of clustering, we allow all pairs. */ + HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1); + size_t i; + + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < in_size; ++i) { + cluster_size[i] = 1; + } + + for (i = 0; i < in_size; ++i) { + out[i] = in[i]; + out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]); + histogram_symbols[i] = (uint32_t)i; + } + + for (i = 0; i < in_size; i += max_input_histograms) { + size_t num_to_combine = + BROTLI_MIN(size_t, in_size - i, max_input_histograms); + size_t num_new_clusters; + size_t j; + for (j = 0; j < num_to_combine; ++j) { + clusters[num_clusters + j] = (uint32_t)(i + j); + } + num_new_clusters = + FN(BrotliHistogramCombine)(out, cluster_size, + &histogram_symbols[i], + &clusters[num_clusters], pairs, + num_to_combine, num_to_combine, + max_histograms, pairs_capacity); + num_clusters += num_new_clusters; + } + + { + /* For the second pass, we limit the total number of histogram pairs. + After this limit is reached, we only keep searching for the best pair. */ + size_t max_num_pairs = BROTLI_MIN(size_t, + 64 * num_clusters, (num_clusters / 2) * num_clusters); + BROTLI_ENSURE_CAPACITY( + m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1); + if (BROTLI_IS_OOM(m)) return; + + /* Collapse similar histograms. */ + num_clusters = FN(BrotliHistogramCombine)(out, cluster_size, + histogram_symbols, clusters, + pairs, num_clusters, in_size, + max_histograms, max_num_pairs); + } + BROTLI_FREE(m, pairs); + BROTLI_FREE(m, cluster_size); + /* Find the optimal map from original histograms to the final ones. */ + FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters, + out, histogram_symbols); + BROTLI_FREE(m, clusters); + /* Convert the context map to a canonical form. */ + *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size); + if (BROTLI_IS_OOM(m)) return; +}) + +#undef HistogramType
diff --git a/third_party/brotli/enc/command.h b/third_party/brotli/enc/command.h index b5cc872..d4a3019 100644 --- a/third_party/brotli/enc/command.h +++ b/third_party/brotli/enc/command.h
@@ -4,16 +4,20 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// This class models a sequence of literals and a backward reference copy. +/* This class models a sequence of literals and a backward reference copy. */ #ifndef BROTLI_ENC_COMMAND_H_ #define BROTLI_ENC_COMMAND_H_ +#include "../common/constants.h" +#include <brotli/port.h> +#include <brotli/types.h> #include "./fast_log.h" #include "./prefix.h" -#include "./types.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 }; @@ -24,15 +28,14 @@ static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 }; -static inline uint16_t GetInsertLengthCode(size_t insertlen) { +static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) { if (insertlen < 6) { - return static_cast<uint16_t>(insertlen); + return (uint16_t)insertlen; } else if (insertlen < 130) { - insertlen -= 2; - uint32_t nbits = Log2FloorNonZero(insertlen) - 1u; - return static_cast<uint16_t>((nbits << 1) + (insertlen >> nbits) + 2); + uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u; + return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2); } else if (insertlen < 2114) { - return static_cast<uint16_t>(Log2FloorNonZero(insertlen - 66) + 10); + return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10); } else if (insertlen < 6210) { return 21u; } else if (insertlen < 22594) { @@ -42,115 +45,127 @@ } } -static inline uint16_t GetCopyLengthCode(size_t copylen) { +static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) { if (copylen < 10) { - return static_cast<uint16_t>(copylen - 2); + return (uint16_t)(copylen - 2); } else if (copylen < 134) { - copylen -= 6; - uint32_t nbits = Log2FloorNonZero(copylen) - 1u; - return static_cast<uint16_t>((nbits << 1) + (copylen >> nbits) + 4); + uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u; + return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4); } else if (copylen < 2118) { - return static_cast<uint16_t>(Log2FloorNonZero(copylen - 70) + 12); + return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12); } else { return 23u; } } -static inline uint16_t CombineLengthCodes( - uint16_t inscode, uint16_t copycode, bool use_last_distance) { +static BROTLI_INLINE uint16_t CombineLengthCodes( + uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) { uint16_t bits64 = - static_cast<uint16_t>((copycode & 0x7u) | ((inscode & 0x7u) << 3)); + (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3)); if (use_last_distance && inscode < 8 && copycode < 16) { return (copycode < 8) ? bits64 : (bits64 | 64); } else { - // "To convert an insert-and-copy length code to an insert length code and - // a copy length code, the following table can be used" + /* "To convert an insert-and-copy length code to an insert length code and + a copy length code, the following table can be used" */ static const uint16_t cells[9] = { 128u, 192u, 384u, 256u, 320u, 512u, 448u, 576u, 640u }; return cells[(copycode >> 3) + 3 * (inscode >> 3)] | bits64; } } -static inline void GetLengthCode(size_t insertlen, size_t copylen, - bool use_last_distance, - uint16_t* code) { +static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen, + BROTLI_BOOL use_last_distance, + uint16_t* code) { uint16_t inscode = GetInsertLengthCode(insertlen); uint16_t copycode = GetCopyLengthCode(copylen); *code = CombineLengthCodes(inscode, copycode, use_last_distance); } -static inline uint32_t GetInsertBase(uint16_t inscode) { +static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) { return kInsBase[inscode]; } -static inline uint32_t GetInsertExtra(uint16_t inscode) { +static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) { return kInsExtra[inscode]; } -static inline uint32_t GetCopyBase(uint16_t copycode) { +static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) { return kCopyBase[copycode]; } -static inline uint32_t GetCopyExtra(uint16_t copycode) { +static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) { return kCopyExtra[copycode]; } -struct Command { - // distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. - Command(size_t insertlen, size_t copylen, size_t copylen_code, - size_t distance_code) - : insert_len_(static_cast<uint32_t>(insertlen)) { - copy_len_ = static_cast<uint32_t>( - copylen | ((copylen_code ^ copylen) << 24)); - // The distance prefix and extra bits are stored in this Command as if - // npostfix and ndirect were 0, they are only recomputed later after the - // clustering if needed. - PrefixEncodeCopyDistance(distance_code, 0, 0, &dist_prefix_, &dist_extra_); - GetLengthCode(insertlen, copylen_code, dist_prefix_ == 0, - &cmd_prefix_); - } - - explicit Command(size_t insertlen) - : insert_len_(static_cast<uint32_t>(insertlen)) - , copy_len_(4 << 24), dist_extra_(0), dist_prefix_(16) { - GetLengthCode(insertlen, 4, dist_prefix_ == 0, &cmd_prefix_); - } - - uint32_t DistanceCode(void) const { - if (dist_prefix_ < 16) { - return dist_prefix_; - } - uint32_t nbits = dist_extra_ >> 24; - uint32_t extra = dist_extra_ & 0xffffff; - uint32_t prefix = dist_prefix_ - 12 - 2 * nbits; - return (prefix << nbits) + extra + 12; - } - - uint32_t DistanceContext(void) const { - uint32_t r = cmd_prefix_ >> 6; - uint32_t c = cmd_prefix_ & 7; - if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) { - return c; - } - return 3; - } - - inline uint32_t copy_len(void) const { - return copy_len_ & 0xFFFFFF; - } - - inline uint32_t copy_len_code(void) const { - return (copy_len_ & 0xFFFFFF) ^ (copy_len_ >> 24); - } - +typedef struct Command { uint32_t insert_len_; /* Stores copy_len in low 24 bits and copy_len XOR copy_code in high 8 bit. */ uint32_t copy_len_; uint32_t dist_extra_; uint16_t cmd_prefix_; uint16_t dist_prefix_; -}; +} Command; -} // namespace brotli +/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */ +static BROTLI_INLINE void InitCommand(Command* self, size_t insertlen, + size_t copylen, size_t copylen_code, size_t distance_code) { + self->insert_len_ = (uint32_t)insertlen; + self->copy_len_ = (uint32_t)(copylen | ((copylen_code ^ copylen) << 24)); + /* The distance prefix and extra bits are stored in this Command as if + npostfix and ndirect were 0, they are only recomputed later after the + clustering if needed. */ + PrefixEncodeCopyDistance( + distance_code, 0, 0, &self->dist_prefix_, &self->dist_extra_); + GetLengthCode( + insertlen, copylen_code, TO_BROTLI_BOOL(self->dist_prefix_ == 0), + &self->cmd_prefix_); +} -#endif // BROTLI_ENC_COMMAND_H_ +static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) { + self->insert_len_ = (uint32_t)insertlen; + self->copy_len_ = 4 << 24; + self->dist_extra_ = 0; + self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES; + GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_); +} + +static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(const Command* self) { + if (self->dist_prefix_ < BROTLI_NUM_DISTANCE_SHORT_CODES) { + return self->dist_prefix_; + } else { + uint32_t nbits = self->dist_extra_ >> 24; + uint32_t extra = self->dist_extra_ & 0xffffff; + /* It is assumed that the distance was first encoded with NPOSTFIX = 0 and + NDIRECT = 0, so the code itself is of this form: + BROTLI_NUM_DISTANCE_SHORT_CODES + 2 * (nbits - 1) + prefix_bit + Therefore, the following expression results in (2 + prefix_bit). */ + uint32_t prefix = + self->dist_prefix_ + 4u - BROTLI_NUM_DISTANCE_SHORT_CODES - 2u * nbits; + /* Subtract 4 for offset (Chapter 4.) and + increase by BROTLI_NUM_DISTANCE_SHORT_CODES - 1 */ + return (prefix << nbits) + extra + BROTLI_NUM_DISTANCE_SHORT_CODES - 4u; + } +} + +static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) { + uint32_t r = self->cmd_prefix_ >> 6; + uint32_t c = self->cmd_prefix_ & 7; + if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) { + return c; + } + return 3; +} + +static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) { + return self->copy_len_ & 0xFFFFFF; +} + +static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) { + return (self->copy_len_ & 0xFFFFFF) ^ (self->copy_len_ >> 24); +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_COMMAND_H_ */
diff --git a/third_party/brotli/enc/compress_fragment.c b/third_party/brotli/enc/compress_fragment.c new file mode 100644 index 0000000..474f1c3 --- /dev/null +++ b/third_party/brotli/enc/compress_fragment.c
@@ -0,0 +1,783 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses one-pass processing: when we find a backward + match, we immediately emit the corresponding command and literal codes to + the bit stream. + + Adapted from the CompressFragment() function in + https://github.com/google/snappy/blob/master/snappy.cc */ + +#include "./compress_fragment.h" + +#include <string.h> /* memcmp, memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./brotli_bit_stream.h" +#include "./entropy_encode.h" +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./memory.h" +#include "./port.h" +#include "./write_bits.h" + + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Same as MaxBackwardLimit(18) */ +#define MAX_DISTANCE ((1 << 18) - BROTLI_WINDOW_GAP) + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ +static const uint32_t kHashMul32 = 0x1e35a7bd; + +static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) { + const uint64_t h = (BROTLI_UNALIGNED_LOAD64(p) << 24) * kHashMul32; + return (uint32_t)(h >> shift); +} + +static BROTLI_INLINE uint32_t HashBytesAtOffset( + uint64_t v, int offset, size_t shift) { + assert(offset >= 0); + assert(offset <= 3); + { + const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32; + return (uint32_t)(h >> shift); + } +} + +static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) { + return TO_BROTLI_BOOL( + BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && + p1[4] == p2[4]); +} + +/* Builds a literal prefix code into "depths" and "bits" based on the statistics + of the "input" string and stores it into the bit stream. + Note that the prefix code here is built from the pre-LZ77 input, therefore + we can only approximate the statistics of the actual literal stream. + Moreover, for long inputs we build a histogram from a sample of the input + and thus have to assign a non-zero depth for each literal. + Returns estimated compression ratio millibytes/char for encoding given input + with generated code. */ +static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m, + const uint8_t* input, + const size_t input_size, + uint8_t depths[256], + uint16_t bits[256], + size_t* storage_ix, + uint8_t* storage) { + uint32_t histogram[256] = { 0 }; + size_t histogram_total; + size_t i; + if (input_size < (1 << 15)) { + for (i = 0; i < input_size; ++i) { + ++histogram[input[i]]; + } + histogram_total = input_size; + for (i = 0; i < 256; ++i) { + /* We weigh the first 11 samples with weight 3 to account for the + balancing effect of the LZ77 phase on the histogram. */ + const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u); + histogram[i] += adjust; + histogram_total += adjust; + } + } else { + static const size_t kSampleRate = 29; + for (i = 0; i < input_size; i += kSampleRate) { + ++histogram[input[i]]; + } + histogram_total = (input_size + kSampleRate - 1) / kSampleRate; + for (i = 0; i < 256; ++i) { + /* We add 1 to each population count to avoid 0 bit depths (since this is + only a sample and we don't know if the symbol appears or not), and we + weigh the first 11 samples with weight 3 to account for the balancing + effect of the LZ77 phase on the histogram (more frequent symbols are + more likely to be in backward references instead as literals). */ + const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u); + histogram[i] += adjust; + histogram_total += adjust; + } + } + BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total, + /* max_bits = */ 8, + depths, bits, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return 0; + { + size_t literal_ratio = 0; + for (i = 0; i < 256; ++i) { + if (histogram[i]) literal_ratio += histogram[i] * depths[i]; + } + /* Estimated encoding ratio, millibytes per symbol. */ + return (literal_ratio * 125) / histogram_total; + } +} + +/* Builds a command and distance prefix code (each 64 symbols) into "depth" and + "bits" based on "histogram" and stores it into the bit stream. */ +static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128], + uint8_t depth[128], uint16_t bits[128], size_t* storage_ix, + uint8_t* storage) { + /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ + HuffmanTree tree[129]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 }; + uint16_t cmd_bits[64]; + + BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth); + BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + memcpy(cmd_depth, depth, 24); + memcpy(cmd_depth + 24, depth + 40, 8); + memcpy(cmd_depth + 32, depth + 24, 8); + memcpy(cmd_depth + 40, depth + 48, 8); + memcpy(cmd_depth + 48, depth + 32, 8); + memcpy(cmd_depth + 56, depth + 56, 8); + BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); + memcpy(bits, cmd_bits, 48); + memcpy(bits + 24, cmd_bits + 32, 16); + memcpy(bits + 32, cmd_bits + 48, 16); + memcpy(bits + 40, cmd_bits + 24, 16); + memcpy(bits + 48, cmd_bits + 40, 16); + memcpy(bits + 56, cmd_bits + 56, 16); + BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); + { + /* Create the bit length array for the full command alphabet. */ + size_t i; + memset(cmd_depth, 0, 64); /* only 64 first values were used */ + memcpy(cmd_depth, depth, 8); + memcpy(cmd_depth + 64, depth + 8, 8); + memcpy(cmd_depth + 128, depth + 16, 8); + memcpy(cmd_depth + 192, depth + 24, 8); + memcpy(cmd_depth + 384, depth + 32, 8); + for (i = 0; i < 8; ++i) { + cmd_depth[128 + 8 * i] = depth[40 + i]; + cmd_depth[256 + 8 * i] = depth[48 + i]; + cmd_depth[448 + 8 * i] = depth[56 + i]; + } + BrotliStoreHuffmanTree( + cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage); + } + BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); +} + +/* REQUIRES: insertlen < 6210 */ +static BROTLI_INLINE void EmitInsertLen(size_t insertlen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (insertlen < 6) { + const size_t code = insertlen + 40; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + ++histo[code]; + } else if (insertlen < 130) { + const size_t tail = insertlen - 2; + const uint32_t nbits = Log2FloorNonZero(tail) - 1u; + const size_t prefix = tail >> nbits; + const size_t inscode = (nbits << 1) + prefix + 42; + BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage); + BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); + ++histo[inscode]; + } else if (insertlen < 2114) { + const size_t tail = insertlen - 66; + const uint32_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 50; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage); + ++histo[code]; + } else { + BrotliWriteBits(depth[61], bits[61], storage_ix, storage); + BrotliWriteBits(12, insertlen - 2114, storage_ix, storage); + ++histo[21]; + } +} + +static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (insertlen < 22594) { + BrotliWriteBits(depth[62], bits[62], storage_ix, storage); + BrotliWriteBits(14, insertlen - 6210, storage_ix, storage); + ++histo[22]; + } else { + BrotliWriteBits(depth[63], bits[63], storage_ix, storage); + BrotliWriteBits(24, insertlen - 22594, storage_ix, storage); + ++histo[23]; + } +} + +static BROTLI_INLINE void EmitCopyLen(size_t copylen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (copylen < 10) { + BrotliWriteBits( + depth[copylen + 14], bits[copylen + 14], storage_ix, storage); + ++histo[copylen + 14]; + } else if (copylen < 134) { + const size_t tail = copylen - 6; + const uint32_t nbits = Log2FloorNonZero(tail) - 1u; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 20; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); + ++histo[code]; + } else if (copylen < 2118) { + const size_t tail = copylen - 70; + const uint32_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 28; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage); + ++histo[code]; + } else { + BrotliWriteBits(depth[39], bits[39], storage_ix, storage); + BrotliWriteBits(24, copylen - 2118, storage_ix, storage); + ++histo[47]; + } +} + +static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, + uint8_t* storage) { + if (copylen < 12) { + BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage); + ++histo[copylen - 4]; + } else if (copylen < 72) { + const size_t tail = copylen - 8; + const uint32_t nbits = Log2FloorNonZero(tail) - 1; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 4; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); + ++histo[code]; + } else if (copylen < 136) { + const size_t tail = copylen - 8; + const size_t code = (tail >> 5) + 30; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(5, tail & 31, storage_ix, storage); + BrotliWriteBits(depth[64], bits[64], storage_ix, storage); + ++histo[code]; + ++histo[64]; + } else if (copylen < 2120) { + const size_t tail = copylen - 72; + const uint32_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 28; + BrotliWriteBits(depth[code], bits[code], storage_ix, storage); + BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage); + BrotliWriteBits(depth[64], bits[64], storage_ix, storage); + ++histo[code]; + ++histo[64]; + } else { + BrotliWriteBits(depth[39], bits[39], storage_ix, storage); + BrotliWriteBits(24, copylen - 2120, storage_ix, storage); + BrotliWriteBits(depth[64], bits[64], storage_ix, storage); + ++histo[47]; + ++histo[64]; + } +} + +static BROTLI_INLINE void EmitDistance(size_t distance, + const uint8_t depth[128], + const uint16_t bits[128], + uint32_t histo[128], + size_t* storage_ix, uint8_t* storage) { + const size_t d = distance + 3; + const uint32_t nbits = Log2FloorNonZero(d) - 1u; + const size_t prefix = (d >> nbits) & 1; + const size_t offset = (2 + prefix) << nbits; + const size_t distcode = 2 * (nbits - 1) + prefix + 80; + BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage); + BrotliWriteBits(nbits, d - offset, storage_ix, storage); + ++histo[distcode]; +} + +static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len, + const uint8_t depth[256], + const uint16_t bits[256], + size_t* storage_ix, uint8_t* storage) { + size_t j; + for (j = 0; j < len; j++) { + const uint8_t lit = input[j]; + BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage); + } +} + +/* REQUIRES: len <= 1 << 20. */ +static void BrotliStoreMetaBlockHeader( + size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix, + uint8_t* storage) { + /* ISLAST */ + BrotliWriteBits(1, 0, storage_ix, storage); + if (len <= (1U << 16)) { + /* MNIBBLES is 4 */ + BrotliWriteBits(2, 0, storage_ix, storage); + BrotliWriteBits(16, len - 1, storage_ix, storage); + } else { + /* MNIBBLES is 5 */ + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(20, len - 1, storage_ix, storage); + } + /* ISUNCOMPRESSED */ + BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage); +} + +static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos, + uint8_t *array) { + while (n_bits > 0) { + size_t byte_pos = pos >> 3; + size_t n_unchanged_bits = pos & 7; + size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits); + size_t total_bits = n_unchanged_bits + n_changed_bits; + uint32_t mask = + (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u); + uint32_t unchanged_bits = array[byte_pos] & mask; + uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u); + array[byte_pos] = + (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits); + n_bits -= n_changed_bits; + bits >>= n_changed_bits; + pos += n_changed_bits; + } +} + +static void RewindBitPosition(const size_t new_storage_ix, + size_t* storage_ix, uint8_t* storage) { + const size_t bitpos = new_storage_ix & 7; + const size_t mask = (1u << bitpos) - 1; + storage[new_storage_ix >> 3] &= (uint8_t)mask; + *storage_ix = new_storage_ix; +} + +static BROTLI_BOOL ShouldMergeBlock( + const uint8_t* data, size_t len, const uint8_t* depths) { + size_t histo[256] = { 0 }; + static const size_t kSampleRate = 43; + size_t i; + for (i = 0; i < len; i += kSampleRate) { + ++histo[data[i]]; + } + { + const size_t total = (len + kSampleRate - 1) / kSampleRate; + double r = (FastLog2(total) + 0.5) * (double)total + 200; + for (i = 0; i < 256; ++i) { + r -= (double)histo[i] * (depths[i] + FastLog2(histo[i])); + } + return TO_BROTLI_BOOL(r >= 0.0); + } +} + +/* Acceptable loss for uncompressible speedup is 2% */ +#define MIN_RATIO 980 + +static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode( + const uint8_t* metablock_start, const uint8_t* next_emit, + const size_t insertlen, const size_t literal_ratio) { + const size_t compressed = (size_t)(next_emit - metablock_start); + if (compressed * 50 > insertlen) { + return BROTLI_FALSE; + } else { + return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO); + } +} + +static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end, + const size_t storage_ix_start, + size_t* storage_ix, uint8_t* storage) { + const size_t len = (size_t)(end - begin); + RewindBitPosition(storage_ix_start, storage_ix, storage); + BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage); + *storage_ix = (*storage_ix + 7u) & ~7u; + memcpy(&storage[*storage_ix >> 3], begin, len); + *storage_ix += len << 3; + storage[*storage_ix >> 3] = 0; +} + +static uint32_t kCmdHistoSeed[128] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, +}; + +static BROTLI_INLINE void BrotliCompressFragmentFastImpl( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth[128], + uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, + size_t* storage_ix, uint8_t* storage) { + uint32_t cmd_histo[128]; + const uint8_t* ip_end; + + /* "next_emit" is a pointer to the first byte that is not covered by a + previous copy. Bytes between "next_emit" and the start of the next copy or + the end of the input will be emitted as literal bytes. */ + const uint8_t* next_emit = input; + /* Save the start of the first block for position and distance computations. + */ + const uint8_t* base_ip = input; + + static const size_t kFirstBlockSize = 3 << 15; + static const size_t kMergeBlockSize = 1 << 16; + + const size_t kInputMarginBytes = BROTLI_WINDOW_GAP; + const size_t kMinMatchLen = 5; + + const uint8_t* metablock_start = input; + size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize); + size_t total_block_size = block_size; + /* Save the bit position of the MLEN field of the meta-block header, so that + we can update it later if we decide to extend this meta-block. */ + size_t mlen_storage_ix = *storage_ix + 3; + + uint8_t lit_depth[256]; + uint16_t lit_bits[256]; + + size_t literal_ratio; + + const uint8_t* ip; + int last_distance; + + const size_t shift = 64u - table_bits; + + if (input_size == 0) { + assert(is_last); + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + *storage_ix = (*storage_ix + 7u) & ~7u; + return; + } + + BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); + /* No block splits, no contexts. */ + BrotliWriteBits(13, 0, storage_ix, storage); + + literal_ratio = BuildAndStoreLiteralPrefixCode( + m, input, block_size, lit_depth, lit_bits, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + + { + /* Store the pre-compressed command and distance prefix codes. */ + size_t i; + for (i = 0; i + 7 < *cmd_code_numbits; i += 8) { + BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage); + } + } + BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3], + storage_ix, storage); + + emit_commands: + /* Initialize the command and distance histograms. We will gather + statistics of command and distance codes during the processing + of this block and use it to update the command and distance + prefix codes for the next block. */ + memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed)); + + /* "ip" is the input pointer. */ + ip = input; + last_distance = -1; + ip_end = input + block_size; + + if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) { + /* For the last block, we need to keep a 16 bytes margin so that we can be + sure that all distances are at most window size - 16. + For all other blocks, we only need to keep a margin of 5 bytes so that + we don't go over the block size with a copy. */ + const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen, + input_size - kInputMarginBytes); + const uint8_t* ip_limit = input + len_limit; + + uint32_t next_hash; + for (next_hash = Hash(++ip, shift); ; ) { + /* Step 1: Scan forward in the input looking for a 5-byte-long match. + If we get close to exhausting the input then goto emit_remainder. + + Heuristic match skipping: If 32 bytes are scanned with no matches + found, start looking only at every other byte. If 32 more bytes are + scanned, look at every third byte, etc.. When a match is found, + immediately go back to looking at every byte. This is a small loss + (~5% performance, ~0.1% density) for compressible data due to more + bookkeeping, but for non-compressible data (such as JPEG) it's a huge + win since the compressor quickly "realizes" the data is incompressible + and doesn't bother looking for matches everywhere. + + The "skip" variable keeps track of how many bytes there are since the + last match; dividing it by 32 (i.e. right-shifting by five) gives the + number of bytes to move ahead for each iteration. */ + uint32_t skip = 32; + + const uint8_t* next_ip = ip; + const uint8_t* candidate; + assert(next_emit < ip); +trawl: + do { + uint32_t hash = next_hash; + uint32_t bytes_between_hash_lookups = skip++ >> 5; + assert(hash == Hash(next_ip, shift)); + ip = next_ip; + next_ip = ip + bytes_between_hash_lookups; + if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) { + goto emit_remainder; + } + next_hash = Hash(next_ip, shift); + candidate = ip - last_distance; + if (IsMatch(ip, candidate)) { + if (BROTLI_PREDICT_TRUE(candidate < ip)) { + table[hash] = (int)(ip - base_ip); + break; + } + } + candidate = base_ip + table[hash]; + assert(candidate >= base_ip); + assert(candidate < ip); + + table[hash] = (int)(ip - base_ip); + } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate))); + + /* Check copy distance. If candidate is not feasible, continue search. + Checking is done outside of hot loop to reduce overhead. */ + if (ip - candidate > MAX_DISTANCE) goto trawl; + + /* Step 2: Emit the found match together with the literal bytes from + "next_emit" to the bit stream, and then see if we can find a next match + immediately afterwards. Repeat until we find no match for the input + without emitting some literal bytes. */ + + { + /* We have a 5-byte match at ip, and we need to emit bytes in + [next_emit, ip). */ + const uint8_t* base = ip; + size_t matched = 5 + FindMatchLengthWithLimit( + candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5); + int distance = (int)(base - candidate); /* > 0 */ + size_t insert = (size_t)(base - next_emit); + ip += matched; + assert(0 == memcmp(base, candidate, matched)); + if (BROTLI_PREDICT_TRUE(insert < 6210)) { + EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, + literal_ratio)) { + EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3, + storage_ix, storage); + input_size -= (size_t)(base - input); + input = base; + next_emit = input; + goto next_block; + } else { + EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + } + EmitLiterals(next_emit, insert, lit_depth, lit_bits, + storage_ix, storage); + if (distance == last_distance) { + BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage); + ++cmd_histo[64]; + } else { + EmitDistance((size_t)distance, cmd_depth, cmd_bits, + cmd_histo, storage_ix, storage); + last_distance = distance; + } + EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some positions + within the last copy. */ + { + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 3); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + while (IsMatch(ip, candidate)) { + /* We have a 5-byte match at ip, and no need to emit any literal bytes + prior to ip. */ + const uint8_t* base = ip; + size_t matched = 5 + FindMatchLengthWithLimit( + candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5); + if (ip - candidate > MAX_DISTANCE) break; + ip += matched; + last_distance = (int)(base - candidate); /* > 0 */ + assert(0 == memcmp(base, candidate, matched)); + EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + EmitDistance((size_t)last_distance, cmd_depth, cmd_bits, + cmd_histo, storage_ix, storage); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some positions + within the last copy. */ + { + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 3); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + next_hash = Hash(++ip, shift); + } + } + + emit_remainder: + assert(next_emit <= ip_end); + input += block_size; + input_size -= block_size; + block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize); + + /* Decide if we want to continue this meta-block instead of emitting the + last insert-only command. */ + if (input_size > 0 && + total_block_size + block_size <= (1 << 20) && + ShouldMergeBlock(input, block_size, lit_depth)) { + assert(total_block_size > (1 << 16)); + /* Update the size of the current meta-block and continue emitting commands. + We can do this because the current size and the new size both have 5 + nibbles. */ + total_block_size += block_size; + UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage); + goto emit_commands; + } + + /* Emit the remaining bytes as literals. */ + if (next_emit < ip_end) { + const size_t insert = (size_t)(ip_end - next_emit); + if (BROTLI_PREDICT_TRUE(insert < 6210)) { + EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage); + } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, + literal_ratio)) { + EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3, + storage_ix, storage); + } else { + EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, + storage_ix, storage); + EmitLiterals(next_emit, insert, lit_depth, lit_bits, + storage_ix, storage); + } + } + next_emit = ip_end; + +next_block: + /* If we have more data, write a new meta-block header and prefix codes and + then continue emitting commands. */ + if (input_size > 0) { + metablock_start = input; + block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize); + total_block_size = block_size; + /* Save the bit position of the MLEN field of the meta-block header, so that + we can update it later if we decide to extend this meta-block. */ + mlen_storage_ix = *storage_ix + 3; + BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); + /* No block splits, no contexts. */ + BrotliWriteBits(13, 0, storage_ix, storage); + literal_ratio = BuildAndStoreLiteralPrefixCode( + m, input, block_size, lit_depth, lit_bits, storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, + storage_ix, storage); + goto emit_commands; + } + + if (is_last) { + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + *storage_ix = (*storage_ix + 7u) & ~7u; + } else { + /* If this is not the last block, update the command and distance prefix + codes for the next block and store the compressed forms. */ + cmd_code[0] = 0; + *cmd_code_numbits = 0; + BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, + cmd_code_numbits, cmd_code); + } +} + +#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15) + +#define BAKE_METHOD_PARAM_(B) \ +static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \ + MemoryManager* m, const uint8_t* input, size_t input_size, \ + BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \ + uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, \ + size_t* storage_ix, uint8_t* storage) { \ + BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \ + cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage); \ +} +FOR_TABLE_BITS_(BAKE_METHOD_PARAM_) +#undef BAKE_METHOD_PARAM_ + +void BrotliCompressFragmentFast( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth[128], + uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, + size_t* storage_ix, uint8_t* storage) { + const size_t table_bits = Log2FloorNonZero(table_size); + switch (table_bits) { +#define CASE_(B) \ + case B: \ + BrotliCompressFragmentFastImpl ## B( \ + m, input, input_size, is_last, table, cmd_depth, cmd_bits, \ + cmd_code_numbits, cmd_code, storage_ix, storage); \ + break; + FOR_TABLE_BITS_(CASE_) +#undef CASE_ + default: assert(0); break; + } +} + +#undef FOR_TABLE_BITS_ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/compress_fragment.cc b/third_party/brotli/enc/compress_fragment.cc deleted file mode 100644 index 5620112..0000000 --- a/third_party/brotli/enc/compress_fragment.cc +++ /dev/null
@@ -1,701 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses one-pass processing: when we find a backward -// match, we immediately emit the corresponding command and literal codes to -// the bit stream. -// -// Adapted from the CompressFragment() function in -// https://github.com/google/snappy/blob/master/snappy.cc - -#include "./compress_fragment.h" - -#include <algorithm> -#include <cstring> - -#include "./brotli_bit_stream.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./port.h" -#include "./types.h" -#include "./write_bits.h" - -namespace brotli { - -// kHashMul32 multiplier has these properties: -// * The multiplier must be odd. Otherwise we may lose the highest bit. -// * No long streaks of 1s or 0s. -// * There is no effort to ensure that it is a prime, the oddity is enough -// for this use. -// * The number has been tuned heuristically against compression benchmarks. -static const uint32_t kHashMul32 = 0x1e35a7bd; - -static inline uint32_t Hash(const uint8_t* p, size_t shift) { - const uint64_t h = (BROTLI_UNALIGNED_LOAD64(p) << 24) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline uint32_t HashBytesAtOffset(uint64_t v, int offset, size_t shift) { - assert(offset >= 0); - assert(offset <= 3); - const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline int IsMatch(const uint8_t* p1, const uint8_t* p2) { - return (BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && - p1[4] == p2[4]); -} - -// Builds a literal prefix code into "depths" and "bits" based on the statistics -// of the "input" string and stores it into the bit stream. -// Note that the prefix code here is built from the pre-LZ77 input, therefore -// we can only approximate the statistics of the actual literal stream. -// Moreover, for long inputs we build a histogram from a sample of the input -// and thus have to assign a non-zero depth for each literal. -static void BuildAndStoreLiteralPrefixCode(const uint8_t* input, - const size_t input_size, - uint8_t depths[256], - uint16_t bits[256], - size_t* storage_ix, - uint8_t* storage) { - uint32_t histogram[256] = { 0 }; - size_t histogram_total; - if (input_size < (1 << 15)) { - for (size_t i = 0; i < input_size; ++i) { - ++histogram[input[i]]; - } - histogram_total = input_size; - for (size_t i = 0; i < 256; ++i) { - // We weigh the first 11 samples with weight 3 to account for the - // balancing effect of the LZ77 phase on the histogram. - const uint32_t adjust = 2 * std::min(histogram[i], 11u); - histogram[i] += adjust; - histogram_total += adjust; - } - } else { - static const size_t kSampleRate = 29; - for (size_t i = 0; i < input_size; i += kSampleRate) { - ++histogram[input[i]]; - } - histogram_total = (input_size + kSampleRate - 1) / kSampleRate; - for (size_t i = 0; i < 256; ++i) { - // We add 1 to each population count to avoid 0 bit depths (since this is - // only a sample and we don't know if the symbol appears or not), and we - // weigh the first 11 samples with weight 3 to account for the balancing - // effect of the LZ77 phase on the histogram (more frequent symbols are - // more likely to be in backward references instead as literals). - const uint32_t adjust = 1 + 2 * std::min(histogram[i], 11u); - histogram[i] += adjust; - histogram_total += adjust; - } - } - BuildAndStoreHuffmanTreeFast(histogram, histogram_total, - /* max_bits = */ 8, - depths, bits, storage_ix, storage); -} - -// Builds a command and distance prefix code (each 64 symbols) into "depth" and -// "bits" based on "histogram" and stores it into the bit stream. -static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128], - uint8_t depth[128], - uint16_t bits[128], - size_t* storage_ix, - uint8_t* storage) { - // Tree size for building a tree over 64 symbols is 2 * 64 + 1. - static const size_t kTreeSize = 129; - HuffmanTree tree[kTreeSize]; - CreateHuffmanTree(histogram, 64, 15, tree, depth); - CreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); - // We have to jump through a few hoopes here in order to compute - // the command bits because the symbols are in a different order than in - // the full alphabet. This looks complicated, but having the symbols - // in this order in the command bits saves a few branches in the Emit* - // functions. - uint8_t cmd_depth[64]; - uint16_t cmd_bits[64]; - memcpy(cmd_depth, depth, 24); - memcpy(cmd_depth + 24, depth + 40, 8); - memcpy(cmd_depth + 32, depth + 24, 8); - memcpy(cmd_depth + 40, depth + 48, 8); - memcpy(cmd_depth + 48, depth + 32, 8); - memcpy(cmd_depth + 56, depth + 56, 8); - ConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); - memcpy(bits, cmd_bits, 48); - memcpy(bits + 24, cmd_bits + 32, 16); - memcpy(bits + 32, cmd_bits + 48, 16); - memcpy(bits + 40, cmd_bits + 24, 16); - memcpy(bits + 48, cmd_bits + 40, 16); - memcpy(bits + 56, cmd_bits + 56, 16); - ConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); - { - // Create the bit length array for the full command alphabet. - uint8_t cmd_depth[704] = { 0 }; - memcpy(cmd_depth, depth, 8); - memcpy(cmd_depth + 64, depth + 8, 8); - memcpy(cmd_depth + 128, depth + 16, 8); - memcpy(cmd_depth + 192, depth + 24, 8); - memcpy(cmd_depth + 384, depth + 32, 8); - for (size_t i = 0; i < 8; ++i) { - cmd_depth[128 + 8 * i] = depth[40 + i]; - cmd_depth[256 + 8 * i] = depth[48 + i]; - cmd_depth[448 + 8 * i] = depth[56 + i]; - } - StoreHuffmanTree(cmd_depth, 704, tree, storage_ix, storage); - } - StoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); -} - -// REQUIRES: insertlen < 6210 -inline void EmitInsertLen(size_t insertlen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (insertlen < 6) { - const size_t code = insertlen + 40; - WriteBits(depth[code], bits[code], storage_ix, storage); - ++histo[code]; - } else if (insertlen < 130) { - insertlen -= 2; - const uint32_t nbits = Log2FloorNonZero(insertlen) - 1u; - const size_t prefix = insertlen >> nbits; - const size_t inscode = (nbits << 1) + prefix + 42; - WriteBits(depth[inscode], bits[inscode], storage_ix, storage); - WriteBits(nbits, insertlen - (prefix << nbits), storage_ix, storage); - ++histo[inscode]; - } else if (insertlen < 2114) { - insertlen -= 66; - const uint32_t nbits = Log2FloorNonZero(insertlen); - const size_t code = nbits + 50; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, insertlen - (1 << nbits), storage_ix, storage); - ++histo[code]; - } else { - WriteBits(depth[61], bits[61], storage_ix, storage); - WriteBits(12, insertlen - 2114, storage_ix, storage); - ++histo[21]; - } -} - -inline void EmitLongInsertLen(size_t insertlen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (insertlen < 22594) { - WriteBits(depth[62], bits[62], storage_ix, storage); - WriteBits(14, insertlen - 6210, storage_ix, storage); - ++histo[22]; - } else { - WriteBits(depth[63], bits[63], storage_ix, storage); - WriteBits(24, insertlen - 22594, storage_ix, storage); - ++histo[23]; - } -} - -inline void EmitCopyLen(size_t copylen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (copylen < 10) { - WriteBits(depth[copylen + 14], bits[copylen + 14], storage_ix, storage); - ++histo[copylen + 14]; - } else if (copylen < 134) { - copylen -= 6; - const uint32_t nbits = Log2FloorNonZero(copylen) - 1u; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 20; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (prefix << nbits), storage_ix, storage); - ++histo[code]; - } else if (copylen < 2118) { - copylen -= 70; - const uint32_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 28; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (1 << nbits), storage_ix, storage); - ++histo[code]; - } else { - WriteBits(depth[39], bits[39], storage_ix, storage); - WriteBits(24, copylen - 2118, storage_ix, storage); - ++histo[47]; - } -} - -inline void EmitCopyLenLastDistance(size_t copylen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (copylen < 12) { - WriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage); - ++histo[copylen - 4]; - } else if (copylen < 72) { - copylen -= 8; - const uint32_t nbits = Log2FloorNonZero(copylen) - 1; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 4; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (prefix << nbits), storage_ix, storage); - ++histo[code]; - } else if (copylen < 136) { - copylen -= 8; - const size_t code = (copylen >> 5) + 30; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(5, copylen & 31, storage_ix, storage); - WriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[code]; - ++histo[64]; - } else if (copylen < 2120) { - copylen -= 72; - const uint32_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 28; - WriteBits(depth[code], bits[code], storage_ix, storage); - WriteBits(nbits, copylen - (1 << nbits), storage_ix, storage); - WriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[code]; - ++histo[64]; - } else { - WriteBits(depth[39], bits[39], storage_ix, storage); - WriteBits(24, copylen - 2120, storage_ix, storage); - WriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[47]; - ++histo[64]; - } -} - -inline void EmitDistance(size_t distance, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, uint8_t* storage) { - distance += 3; - const uint32_t nbits = Log2FloorNonZero(distance) - 1u; - const size_t prefix = (distance >> nbits) & 1; - const size_t offset = (2 + prefix) << nbits; - const size_t distcode = 2 * (nbits - 1) + prefix + 80; - WriteBits(depth[distcode], bits[distcode], storage_ix, storage); - WriteBits(nbits, distance - offset, storage_ix, storage); - ++histo[distcode]; -} - -inline void EmitLiterals(const uint8_t* input, const size_t len, - const uint8_t depth[256], const uint16_t bits[256], - size_t* storage_ix, uint8_t* storage) { - for (size_t j = 0; j < len; j++) { - const uint8_t lit = input[j]; - WriteBits(depth[lit], bits[lit], storage_ix, storage); - } -} - -// REQUIRES: len <= 1 << 20. -static void StoreMetaBlockHeader( - size_t len, bool is_uncompressed, size_t* storage_ix, uint8_t* storage) { - // ISLAST - WriteBits(1, 0, storage_ix, storage); - if (len <= (1U << 16)) { - // MNIBBLES is 4 - WriteBits(2, 0, storage_ix, storage); - WriteBits(16, len - 1, storage_ix, storage); - } else { - // MNIBBLES is 5 - WriteBits(2, 1, storage_ix, storage); - WriteBits(20, len - 1, storage_ix, storage); - } - // ISUNCOMPRESSED - WriteBits(1, is_uncompressed, storage_ix, storage); -} - -static void UpdateBits(size_t n_bits, - uint32_t bits, - size_t pos, - uint8_t *array) { - while (n_bits > 0) { - size_t byte_pos = pos >> 3; - size_t n_unchanged_bits = pos & 7; - size_t n_changed_bits = std::min(n_bits, 8 - n_unchanged_bits); - size_t total_bits = n_unchanged_bits + n_changed_bits; - uint32_t mask = (~((1 << total_bits) - 1)) | ((1 << n_unchanged_bits) - 1); - uint32_t unchanged_bits = array[byte_pos] & mask; - uint32_t changed_bits = bits & ((1 << n_changed_bits) - 1); - array[byte_pos] = - static_cast<uint8_t>((changed_bits << n_unchanged_bits) | - unchanged_bits); - n_bits -= n_changed_bits; - bits >>= n_changed_bits; - pos += n_changed_bits; - } -} - -static void RewindBitPosition(const size_t new_storage_ix, - size_t* storage_ix, uint8_t* storage) { - const size_t bitpos = new_storage_ix & 7; - const size_t mask = (1u << bitpos) - 1; - storage[new_storage_ix >> 3] &= static_cast<uint8_t>(mask); - *storage_ix = new_storage_ix; -} - -static bool ShouldMergeBlock(const uint8_t* data, size_t len, - const uint8_t* depths) { - size_t histo[256] = { 0 }; - static const size_t kSampleRate = 43; - for (size_t i = 0; i < len; i += kSampleRate) { - ++histo[data[i]]; - } - const size_t total = (len + kSampleRate - 1) / kSampleRate; - double r = (FastLog2(total) + 0.5) * static_cast<double>(total) + 200; - for (size_t i = 0; i < 256; ++i) { - r -= static_cast<double>(histo[i]) * (depths[i] + FastLog2(histo[i])); - } - return r >= 0.0; -} - -inline bool ShouldUseUncompressedMode(const uint8_t* metablock_start, - const uint8_t* next_emit, - const size_t insertlen, - const uint8_t literal_depths[256]) { - const size_t compressed = static_cast<size_t>(next_emit - metablock_start); - if (compressed * 50 > insertlen) { - return false; - } - static const double kAcceptableLossForUncompressibleSpeedup = 0.02; - static const double kMinEntropy = - 8 * (1.0 - kAcceptableLossForUncompressibleSpeedup); - uint32_t sum = 0; - for (int i = 0; i < 256; ++i) { - const uint32_t n = literal_depths[i]; - sum += n << (15 - n); - } - return sum > static_cast<uint32_t>((1 << 15) * kMinEntropy); -} - -static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end, - const size_t storage_ix_start, - size_t* storage_ix, uint8_t* storage) { - const size_t len = static_cast<size_t>(end - begin); - RewindBitPosition(storage_ix_start, storage_ix, storage); - StoreMetaBlockHeader(len, 1, storage_ix, storage); - *storage_ix = (*storage_ix + 7u) & ~7u; - memcpy(&storage[*storage_ix >> 3], begin, len); - *storage_ix += len << 3; - storage[*storage_ix >> 3] = 0; -} - -void BrotliCompressFragmentFast(const uint8_t* input, size_t input_size, - bool is_last, - int* table, size_t table_size, - uint8_t cmd_depth[128], uint16_t cmd_bits[128], - size_t* cmd_code_numbits, uint8_t* cmd_code, - size_t* storage_ix, uint8_t* storage) { - if (input_size == 0) { - assert(is_last); - WriteBits(1, 1, storage_ix, storage); // islast - WriteBits(1, 1, storage_ix, storage); // isempty - *storage_ix = (*storage_ix + 7u) & ~7u; - return; - } - - // "next_emit" is a pointer to the first byte that is not covered by a - // previous copy. Bytes between "next_emit" and the start of the next copy or - // the end of the input will be emitted as literal bytes. - const uint8_t* next_emit = input; - // Save the start of the first block for position and distance computations. - const uint8_t* base_ip = input; - - static const size_t kFirstBlockSize = 3 << 15; - static const size_t kMergeBlockSize = 1 << 16; - - const uint8_t* metablock_start = input; - size_t block_size = std::min(input_size, kFirstBlockSize); - size_t total_block_size = block_size; - // Save the bit position of the MLEN field of the meta-block header, so that - // we can update it later if we decide to extend this meta-block. - size_t mlen_storage_ix = *storage_ix + 3; - StoreMetaBlockHeader(block_size, 0, storage_ix, storage); - // No block splits, no contexts. - WriteBits(13, 0, storage_ix, storage); - - uint8_t lit_depth[256] = { 0 }; - uint16_t lit_bits[256] = { 0 }; - BuildAndStoreLiteralPrefixCode(input, block_size, lit_depth, lit_bits, - storage_ix, storage); - - // Store the pre-compressed command and distance prefix codes. - for (size_t i = 0; i + 7 < *cmd_code_numbits; i += 8) { - WriteBits(8, cmd_code[i >> 3], storage_ix, storage); - } - WriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3], - storage_ix, storage); - - emit_commands: - // Initialize the command and distance histograms. We will gather - // statistics of command and distance codes during the processing - // of this block and use it to update the command and distance - // prefix codes for the next block. - uint32_t cmd_histo[128] = { - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 0, 0, 0, - }; - - // "ip" is the input pointer. - const uint8_t* ip = input; - assert(table_size); - assert(table_size <= (1u << 31)); - assert((table_size & (table_size - 1)) == 0); // table must be power of two - const size_t shift = 64u - Log2FloorNonZero(table_size); - assert(table_size - 1 == static_cast<size_t>( - MAKE_UINT64_T(0xFFFFFFFF, 0xFFFFFF) >> shift)); - const uint8_t* ip_end = input + block_size; - - int last_distance = -1; - const size_t kInputMarginBytes = 16; - const size_t kMinMatchLen = 5; - if (PREDICT_TRUE(block_size >= kInputMarginBytes)) { - // For the last block, we need to keep a 16 bytes margin so that we can be - // sure that all distances are at most window size - 16. - // For all other blocks, we only need to keep a margin of 5 bytes so that - // we don't go over the block size with a copy. - const size_t len_limit = std::min(block_size - kMinMatchLen, - input_size - kInputMarginBytes); - const uint8_t* ip_limit = input + len_limit; - - for (uint32_t next_hash = Hash(++ip, shift); ; ) { - assert(next_emit < ip); - // Step 1: Scan forward in the input looking for a 5-byte-long match. - // If we get close to exhausting the input then goto emit_remainder. - // - // Heuristic match skipping: If 32 bytes are scanned with no matches - // found, start looking only at every other byte. If 32 more bytes are - // scanned, look at every third byte, etc.. When a match is found, - // immediately go back to looking at every byte. This is a small loss - // (~5% performance, ~0.1% density) for compressible data due to more - // bookkeeping, but for non-compressible data (such as JPEG) it's a huge - // win since the compressor quickly "realizes" the data is incompressible - // and doesn't bother looking for matches everywhere. - // - // The "skip" variable keeps track of how many bytes there are since the - // last match; dividing it by 32 (ie. right-shifting by five) gives the - // number of bytes to move ahead for each iteration. - uint32_t skip = 32; - - const uint8_t* next_ip = ip; - const uint8_t* candidate; - do { - ip = next_ip; - uint32_t hash = next_hash; - assert(hash == Hash(ip, shift)); - uint32_t bytes_between_hash_lookups = skip++ >> 5; - next_ip = ip + bytes_between_hash_lookups; - if (PREDICT_FALSE(next_ip > ip_limit)) { - goto emit_remainder; - } - next_hash = Hash(next_ip, shift); - candidate = ip - last_distance; - if (IsMatch(ip, candidate)) { - if (PREDICT_TRUE(candidate < ip)) { - table[hash] = static_cast<int>(ip - base_ip); - break; - } - } - candidate = base_ip + table[hash]; - assert(candidate >= base_ip); - assert(candidate < ip); - - table[hash] = static_cast<int>(ip - base_ip); - } while (PREDICT_TRUE(!IsMatch(ip, candidate))); - - // Step 2: Emit the found match together with the literal bytes from - // "next_emit" to the bit stream, and then see if we can find a next macth - // immediately afterwards. Repeat until we find no match for the input - // without emitting some literal bytes. - uint64_t input_bytes; - - { - // We have a 5-byte match at ip, and we need to emit bytes in - // [next_emit, ip). - const uint8_t* base = ip; - size_t matched = 5 + FindMatchLengthWithLimit( - candidate + 5, ip + 5, static_cast<size_t>(ip_end - ip) - 5); - ip += matched; - int distance = static_cast<int>(base - candidate); /* > 0 */ - size_t insert = static_cast<size_t>(base - next_emit); - assert(0 == memcmp(base, candidate, matched)); - if (PREDICT_TRUE(insert < 6210)) { - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, - lit_depth)) { - EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3, - storage_ix, storage); - input_size -= static_cast<size_t>(base - input); - input = base; - next_emit = input; - goto next_block; - } else { - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - } - EmitLiterals(next_emit, insert, lit_depth, lit_bits, - storage_ix, storage); - if (distance == last_distance) { - WriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage); - ++cmd_histo[64]; - } else { - EmitDistance(static_cast<size_t>(distance), cmd_depth, cmd_bits, - cmd_histo, storage_ix, storage); - last_distance = distance; - } - EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 3); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - while (IsMatch(ip, candidate)) { - // We have a 5-byte match at ip, and no need to emit any literal bytes - // prior to ip. - const uint8_t* base = ip; - size_t matched = 5 + FindMatchLengthWithLimit( - candidate + 5, ip + 5, static_cast<size_t>(ip_end - ip) - 5); - ip += matched; - last_distance = static_cast<int>(base - candidate); /* > 0 */ - assert(0 == memcmp(base, candidate, matched)); - EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitDistance(static_cast<size_t>(last_distance), cmd_depth, cmd_bits, - cmd_histo, storage_ix, storage); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 3); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - next_hash = Hash(++ip, shift); - } - } - - emit_remainder: - assert(next_emit <= ip_end); - input += block_size; - input_size -= block_size; - block_size = std::min(input_size, kMergeBlockSize); - - // Decide if we want to continue this meta-block instead of emitting the - // last insert-only command. - if (input_size > 0 && - total_block_size + block_size <= (1 << 20) && - ShouldMergeBlock(input, block_size, lit_depth)) { - assert(total_block_size > (1 << 16)); - // Update the size of the current meta-block and continue emitting commands. - // We can do this because the current size and the new size both have 5 - // nibbles. - total_block_size += block_size; - UpdateBits(20, static_cast<uint32_t>(total_block_size - 1), - mlen_storage_ix, storage); - goto emit_commands; - } - - // Emit the remaining bytes as literals. - if (next_emit < ip_end) { - const size_t insert = static_cast<size_t>(ip_end - next_emit); - if (PREDICT_TRUE(insert < 6210)) { - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage); - } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert, - lit_depth)) { - EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3, - storage_ix, storage); - } else { - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitLiterals(next_emit, insert, lit_depth, lit_bits, - storage_ix, storage); - } - } - next_emit = ip_end; - -next_block: - // If we have more data, write a new meta-block header and prefix codes and - // then continue emitting commands. - if (input_size > 0) { - metablock_start = input; - block_size = std::min(input_size, kFirstBlockSize); - total_block_size = block_size; - // Save the bit position of the MLEN field of the meta-block header, so that - // we can update it later if we decide to extend this meta-block. - mlen_storage_ix = *storage_ix + 3; - StoreMetaBlockHeader(block_size, 0, storage_ix, storage); - // No block splits, no contexts. - WriteBits(13, 0, storage_ix, storage); - memset(lit_depth, 0, sizeof(lit_depth)); - memset(lit_bits, 0, sizeof(lit_bits)); - BuildAndStoreLiteralPrefixCode(input, block_size, lit_depth, lit_bits, - storage_ix, storage); - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, - storage_ix, storage); - goto emit_commands; - } - - if (is_last) { - WriteBits(1, 1, storage_ix, storage); // islast - WriteBits(1, 1, storage_ix, storage); // isempty - *storage_ix = (*storage_ix + 7u) & ~7u; - } else { - // If this is not the last block, update the command and distance prefix - // codes for the next block and store the compressed forms. - cmd_code[0] = 0; - *cmd_code_numbits = 0; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, - cmd_code_numbits, cmd_code); - } -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/compress_fragment.h b/third_party/brotli/enc/compress_fragment.h index 7ce05fdf..64e7987 100644 --- a/third_party/brotli/enc/compress_fragment.h +++ b/third_party/brotli/enc/compress_fragment.h
@@ -4,44 +4,57 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses one-pass processing: when we find a backward -// match, we immediately emit the corresponding command and literal codes to -// the bit stream. +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses one-pass processing: when we find a backward + match, we immediately emit the corresponding command and literal codes to + the bit stream. */ #ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_ #define BROTLI_ENC_COMPRESS_FRAGMENT_H_ -#include "./types.h" +#include <brotli/types.h> +#include "./memory.h" +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// Compresses "input" string to the "*storage" buffer as one or more complete -// meta-blocks, and updates the "*storage_ix" bit position. -// -// If "is_last" is true, emits an additional empty last meta-block. -// -// "cmd_depth" and "cmd_bits" contain the command and distance prefix codes -// (see comment in encode.h) used for the encoding of this input fragment. -// If "is_last" is false, they are updated to reflect the statistics -// of this input fragment, to be used for the encoding of the next fragment. -// -// "*cmd_code_numbits" is the number of bits of the compressed representation -// of the command and distance prefix codes, and "cmd_code" is an array of -// at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed -// command and distance prefix codes. If "is_last" is false, these are also -// updated to represent the updated "cmd_depth" and "cmd_bits". -// -// REQUIRES: "input_size" is greater than zero, or "is_last" is true. -// REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. -// REQUIRES: "table_size" is a power of two -void BrotliCompressFragmentFast(const uint8_t* input, size_t input_size, - bool is_last, - int* table, size_t table_size, - uint8_t cmd_depth[128], uint16_t cmd_bits[128], - size_t* cmd_code_numbits, uint8_t* cmd_code, - size_t* storage_ix, uint8_t* storage); +/* Compresses "input" string to the "*storage" buffer as one or more complete + meta-blocks, and updates the "*storage_ix" bit position. -} // namespace brotli + If "is_last" is 1, emits an additional empty last meta-block. -#endif // BROTLI_ENC_COMPRESS_FRAGMENT_H_ + "cmd_depth" and "cmd_bits" contain the command and distance prefix codes + (see comment in encode.h) used for the encoding of this input fragment. + If "is_last" is 0, they are updated to reflect the statistics + of this input fragment, to be used for the encoding of the next fragment. + + "*cmd_code_numbits" is the number of bits of the compressed representation + of the command and distance prefix codes, and "cmd_code" is an array of + at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed + command and distance prefix codes. If "is_last" is 0, these are also + updated to represent the updated "cmd_depth" and "cmd_bits". + + REQUIRES: "input_size" is greater than zero, or "is_last" is 1. + REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. + REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two + OUTPUT: maximal copy distance <= |input_size| + OUTPUT: maximal copy distance <= MaxBackwardLimit(18) */ +BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m, + const uint8_t* input, + size_t input_size, + BROTLI_BOOL is_last, + int* table, size_t table_size, + uint8_t cmd_depth[128], + uint16_t cmd_bits[128], + size_t* cmd_code_numbits, + uint8_t* cmd_code, + size_t* storage_ix, + uint8_t* storage); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */
diff --git a/third_party/brotli/enc/compress_fragment_two_pass.c b/third_party/brotli/enc/compress_fragment_two_pass.c new file mode 100644 index 0000000..1768dd7 --- /dev/null +++ b/third_party/brotli/enc/compress_fragment_two_pass.c
@@ -0,0 +1,590 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses two-pass processing: in the first pass we save + the found backward matches and literal bytes into a buffer, and in the + second pass we emit them into the bit stream using prefix codes built based + on the actual command and literal byte histograms. */ + +#include "./compress_fragment_two_pass.h" + +#include <string.h> /* memcmp, memcpy, memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./bit_cost.h" +#include "./brotli_bit_stream.h" +#include "./entropy_encode.h" +#include "./fast_log.h" +#include "./find_match_length.h" +#include "./memory.h" +#include "./port.h" +#include "./write_bits.h" + + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* Same as MaxBackwardLimit(18) */ +#define MAX_DISTANCE ((1 << 18) - BROTLI_WINDOW_GAP) + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ +static const uint32_t kHashMul32 = 0x1e35a7bd; + +static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) { + const uint64_t h = (BROTLI_UNALIGNED_LOAD64(p) << 16) * kHashMul32; + return (uint32_t)(h >> shift); +} + +static BROTLI_INLINE uint32_t HashBytesAtOffset( + uint64_t v, int offset, size_t shift) { + assert(offset >= 0); + assert(offset <= 2); + { + const uint64_t h = ((v >> (8 * offset)) << 16) * kHashMul32; + return (uint32_t)(h >> shift); + } +} + +static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) { + return TO_BROTLI_BOOL( + BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && + p1[4] == p2[4] && + p1[5] == p2[5]); +} + +/* Builds a command and distance prefix code (each 64 symbols) into "depth" and + "bits" based on "histogram" and stores it into the bit stream. */ +static void BuildAndStoreCommandPrefixCode( + const uint32_t histogram[128], + uint8_t depth[128], uint16_t bits[128], + size_t* storage_ix, uint8_t* storage) { + /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ + HuffmanTree tree[129]; + uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 }; + uint16_t cmd_bits[64]; + BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth); + BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + memcpy(cmd_depth, depth + 24, 24); + memcpy(cmd_depth + 24, depth, 8); + memcpy(cmd_depth + 32, depth + 48, 8); + memcpy(cmd_depth + 40, depth + 8, 8); + memcpy(cmd_depth + 48, depth + 56, 8); + memcpy(cmd_depth + 56, depth + 16, 8); + BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); + memcpy(bits, cmd_bits + 24, 16); + memcpy(bits + 8, cmd_bits + 40, 16); + memcpy(bits + 16, cmd_bits + 56, 16); + memcpy(bits + 24, cmd_bits, 48); + memcpy(bits + 48, cmd_bits + 32, 16); + memcpy(bits + 56, cmd_bits + 48, 16); + BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); + { + /* Create the bit length array for the full command alphabet. */ + size_t i; + memset(cmd_depth, 0, 64); /* only 64 first values were used */ + memcpy(cmd_depth, depth + 24, 8); + memcpy(cmd_depth + 64, depth + 32, 8); + memcpy(cmd_depth + 128, depth + 40, 8); + memcpy(cmd_depth + 192, depth + 48, 8); + memcpy(cmd_depth + 384, depth + 56, 8); + for (i = 0; i < 8; ++i) { + cmd_depth[128 + 8 * i] = depth[i]; + cmd_depth[256 + 8 * i] = depth[8 + i]; + cmd_depth[448 + 8 * i] = depth[16 + i]; + } + BrotliStoreHuffmanTree( + cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage); + } + BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); +} + +static BROTLI_INLINE void EmitInsertLen( + uint32_t insertlen, uint32_t** commands) { + if (insertlen < 6) { + **commands = insertlen; + } else if (insertlen < 130) { + const uint32_t tail = insertlen - 2; + const uint32_t nbits = Log2FloorNonZero(tail) - 1u; + const uint32_t prefix = tail >> nbits; + const uint32_t inscode = (nbits << 1) + prefix + 2; + const uint32_t extra = tail - (prefix << nbits); + **commands = inscode | (extra << 8); + } else if (insertlen < 2114) { + const uint32_t tail = insertlen - 66; + const uint32_t nbits = Log2FloorNonZero(tail); + const uint32_t code = nbits + 10; + const uint32_t extra = tail - (1u << nbits); + **commands = code | (extra << 8); + } else if (insertlen < 6210) { + const uint32_t extra = insertlen - 2114; + **commands = 21 | (extra << 8); + } else if (insertlen < 22594) { + const uint32_t extra = insertlen - 6210; + **commands = 22 | (extra << 8); + } else { + const uint32_t extra = insertlen - 22594; + **commands = 23 | (extra << 8); + } + ++(*commands); +} + +static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) { + if (copylen < 10) { + **commands = (uint32_t)(copylen + 38); + } else if (copylen < 134) { + const size_t tail = copylen - 6; + const size_t nbits = Log2FloorNonZero(tail) - 1; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 44; + const size_t extra = tail - (prefix << nbits); + **commands = (uint32_t)(code | (extra << 8)); + } else if (copylen < 2118) { + const size_t tail = copylen - 70; + const size_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 52; + const size_t extra = tail - ((size_t)1 << nbits); + **commands = (uint32_t)(code | (extra << 8)); + } else { + const size_t extra = copylen - 2118; + **commands = (uint32_t)(63 | (extra << 8)); + } + ++(*commands); +} + +static BROTLI_INLINE void EmitCopyLenLastDistance( + size_t copylen, uint32_t** commands) { + if (copylen < 12) { + **commands = (uint32_t)(copylen + 20); + ++(*commands); + } else if (copylen < 72) { + const size_t tail = copylen - 8; + const size_t nbits = Log2FloorNonZero(tail) - 1; + const size_t prefix = tail >> nbits; + const size_t code = (nbits << 1) + prefix + 28; + const size_t extra = tail - (prefix << nbits); + **commands = (uint32_t)(code | (extra << 8)); + ++(*commands); + } else if (copylen < 136) { + const size_t tail = copylen - 8; + const size_t code = (tail >> 5) + 54; + const size_t extra = tail & 31; + **commands = (uint32_t)(code | (extra << 8)); + ++(*commands); + **commands = 64; + ++(*commands); + } else if (copylen < 2120) { + const size_t tail = copylen - 72; + const size_t nbits = Log2FloorNonZero(tail); + const size_t code = nbits + 52; + const size_t extra = tail - ((size_t)1 << nbits); + **commands = (uint32_t)(code | (extra << 8)); + ++(*commands); + **commands = 64; + ++(*commands); + } else { + const size_t extra = copylen - 2120; + **commands = (uint32_t)(63 | (extra << 8)); + ++(*commands); + **commands = 64; + ++(*commands); + } +} + +static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) { + uint32_t d = distance + 3; + uint32_t nbits = Log2FloorNonZero(d) - 1; + const uint32_t prefix = (d >> nbits) & 1; + const uint32_t offset = (2 + prefix) << nbits; + const uint32_t distcode = 2 * (nbits - 1) + prefix + 80; + uint32_t extra = d - offset; + **commands = distcode | (extra << 8); + ++(*commands); +} + +/* REQUIRES: len <= 1 << 20. */ +static void BrotliStoreMetaBlockHeader( + size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix, + uint8_t* storage) { + /* ISLAST */ + BrotliWriteBits(1, 0, storage_ix, storage); + if (len <= (1U << 16)) { + /* MNIBBLES is 4 */ + BrotliWriteBits(2, 0, storage_ix, storage); + BrotliWriteBits(16, len - 1, storage_ix, storage); + } else { + /* MNIBBLES is 5 */ + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(20, len - 1, storage_ix, storage); + } + /* ISUNCOMPRESSED */ + BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage); +} + +static BROTLI_INLINE void CreateCommands(const uint8_t* input, + size_t block_size, size_t input_size, const uint8_t* base_ip, int* table, + size_t table_bits, uint8_t** literals, uint32_t** commands) { + /* "ip" is the input pointer. */ + const uint8_t* ip = input; + const size_t shift = 64u - table_bits; + const uint8_t* ip_end = input + block_size; + /* "next_emit" is a pointer to the first byte that is not covered by a + previous copy. Bytes between "next_emit" and the start of the next copy or + the end of the input will be emitted as literal bytes. */ + const uint8_t* next_emit = input; + + int last_distance = -1; + const size_t kInputMarginBytes = BROTLI_WINDOW_GAP; + const size_t kMinMatchLen = 6; + + if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) { + /* For the last block, we need to keep a 16 bytes margin so that we can be + sure that all distances are at most window size - 16. + For all other blocks, we only need to keep a margin of 5 bytes so that + we don't go over the block size with a copy. */ + const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen, + input_size - kInputMarginBytes); + const uint8_t* ip_limit = input + len_limit; + + uint32_t next_hash; + for (next_hash = Hash(++ip, shift); ; ) { + /* Step 1: Scan forward in the input looking for a 6-byte-long match. + If we get close to exhausting the input then goto emit_remainder. + + Heuristic match skipping: If 32 bytes are scanned with no matches + found, start looking only at every other byte. If 32 more bytes are + scanned, look at every third byte, etc.. When a match is found, + immediately go back to looking at every byte. This is a small loss + (~5% performance, ~0.1% density) for compressible data due to more + bookkeeping, but for non-compressible data (such as JPEG) it's a huge + win since the compressor quickly "realizes" the data is incompressible + and doesn't bother looking for matches everywhere. + + The "skip" variable keeps track of how many bytes there are since the + last match; dividing it by 32 (ie. right-shifting by five) gives the + number of bytes to move ahead for each iteration. */ + uint32_t skip = 32; + + const uint8_t* next_ip = ip; + const uint8_t* candidate; + + assert(next_emit < ip); +trawl: + do { + uint32_t hash = next_hash; + uint32_t bytes_between_hash_lookups = skip++ >> 5; + ip = next_ip; + assert(hash == Hash(ip, shift)); + next_ip = ip + bytes_between_hash_lookups; + if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) { + goto emit_remainder; + } + next_hash = Hash(next_ip, shift); + candidate = ip - last_distance; + if (IsMatch(ip, candidate)) { + if (BROTLI_PREDICT_TRUE(candidate < ip)) { + table[hash] = (int)(ip - base_ip); + break; + } + } + candidate = base_ip + table[hash]; + assert(candidate >= base_ip); + assert(candidate < ip); + + table[hash] = (int)(ip - base_ip); + } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate))); + + /* Check copy distance. If candidate is not feasible, continue search. + Checking is done outside of hot loop to reduce overhead. */ + if (ip - candidate > MAX_DISTANCE) goto trawl; + + /* Step 2: Emit the found match together with the literal bytes from + "next_emit", and then see if we can find a next match immediately + afterwards. Repeat until we find no match for the input + without emitting some literal bytes. */ + + { + /* We have a 6-byte match at ip, and we need to emit bytes in + [next_emit, ip). */ + const uint8_t* base = ip; + size_t matched = 6 + FindMatchLengthWithLimit( + candidate + 6, ip + 6, (size_t)(ip_end - ip) - 6); + int distance = (int)(base - candidate); /* > 0 */ + int insert = (int)(base - next_emit); + ip += matched; + assert(0 == memcmp(base, candidate, matched)); + EmitInsertLen((uint32_t)insert, commands); + memcpy(*literals, next_emit, (size_t)insert); + *literals += insert; + if (distance == last_distance) { + **commands = 64; + ++(*commands); + } else { + EmitDistance((uint32_t)distance, commands); + last_distance = distance; + } + EmitCopyLenLastDistance(matched, commands); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + { + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some + positions within the last copy. */ + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 5); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash; + table[prev_hash] = (int)(ip - base_ip - 5); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 4); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 2); + cur_hash = HashBytesAtOffset(input_bytes, 2, shift); + prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + while (ip - candidate <= MAX_DISTANCE && IsMatch(ip, candidate)) { + /* We have a 6-byte match at ip, and no need to emit any + literal bytes prior to ip. */ + const uint8_t* base = ip; + size_t matched = 6 + FindMatchLengthWithLimit( + candidate + 6, ip + 6, (size_t)(ip_end - ip) - 6); + ip += matched; + last_distance = (int)(base - candidate); /* > 0 */ + assert(0 == memcmp(base, candidate, matched)); + EmitCopyLen(matched, commands); + EmitDistance((uint32_t)last_distance, commands); + + next_emit = ip; + if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) { + goto emit_remainder; + } + { + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some + positions within the last copy. */ + uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 5); + uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + uint32_t cur_hash; + table[prev_hash] = (int)(ip - base_ip - 5); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 4); + prev_hash = HashBytesAtOffset(input_bytes, 2, shift); + table[prev_hash] = (int)(ip - base_ip - 3); + input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 2); + cur_hash = HashBytesAtOffset(input_bytes, 2, shift); + prev_hash = HashBytesAtOffset(input_bytes, 0, shift); + table[prev_hash] = (int)(ip - base_ip - 2); + prev_hash = HashBytesAtOffset(input_bytes, 1, shift); + table[prev_hash] = (int)(ip - base_ip - 1); + + candidate = base_ip + table[cur_hash]; + table[cur_hash] = (int)(ip - base_ip); + } + } + + next_hash = Hash(++ip, shift); + } + } + +emit_remainder: + assert(next_emit <= ip_end); + /* Emit the remaining bytes as literals. */ + if (next_emit < ip_end) { + const uint32_t insert = (uint32_t)(ip_end - next_emit); + EmitInsertLen(insert, commands); + memcpy(*literals, next_emit, insert); + *literals += insert; + } +} + +static void StoreCommands(MemoryManager* m, + const uint8_t* literals, const size_t num_literals, + const uint32_t* commands, const size_t num_commands, + size_t* storage_ix, uint8_t* storage) { + static const uint32_t kNumExtraBits[128] = { + 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, + 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, + 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, + }; + static const uint32_t kInsertOffset[24] = { + 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, + 1090, 2114, 6210, 22594, + }; + + uint8_t lit_depths[256]; + uint16_t lit_bits[256]; + uint32_t lit_histo[256] = { 0 }; + uint8_t cmd_depths[128] = { 0 }; + uint16_t cmd_bits[128] = { 0 }; + uint32_t cmd_histo[128] = { 0 }; + size_t i; + for (i = 0; i < num_literals; ++i) { + ++lit_histo[literals[i]]; + } + BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals, + /* max_bits = */ 8, + lit_depths, lit_bits, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < num_commands; ++i) { + ++cmd_histo[commands[i] & 0xff]; + } + cmd_histo[1] += 1; + cmd_histo[2] += 1; + cmd_histo[64] += 1; + cmd_histo[84] += 1; + BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits, + storage_ix, storage); + + for (i = 0; i < num_commands; ++i) { + const uint32_t cmd = commands[i]; + const uint32_t code = cmd & 0xff; + const uint32_t extra = cmd >> 8; + BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage); + BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage); + if (code < 24) { + const uint32_t insert = kInsertOffset[code] + extra; + uint32_t j; + for (j = 0; j < insert; ++j) { + const uint8_t lit = *literals; + BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage); + ++literals; + } + } + } +} + +/* Acceptable loss for uncompressible speedup is 2% */ +#define MIN_RATIO 0.98 +#define SAMPLE_RATE 43 + +static BROTLI_BOOL ShouldCompress( + const uint8_t* input, size_t input_size, size_t num_literals) { + double corpus_size = (double)input_size; + if (num_literals < MIN_RATIO * corpus_size) { + return BROTLI_TRUE; + } else { + uint32_t literal_histo[256] = { 0 }; + const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE; + size_t i; + for (i = 0; i < input_size; i += SAMPLE_RATE) { + ++literal_histo[input[i]]; + } + return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit_cost); + } +} + +static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, + int* table, size_t table_bits, size_t* storage_ix, uint8_t* storage) { + /* Save the start of the first block for position and distance computations. + */ + const uint8_t* base_ip = input; + + while (input_size > 0) { + size_t block_size = + BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize); + uint32_t* commands = command_buf; + uint8_t* literals = literal_buf; + size_t num_literals; + CreateCommands(input, block_size, input_size, base_ip, table, table_bits, + &literals, &commands); + num_literals = (size_t)(literals - literal_buf); + if (ShouldCompress(input, block_size, num_literals)) { + const size_t num_commands = (size_t)(commands - command_buf); + BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); + /* No block splits, no contexts. */ + BrotliWriteBits(13, 0, storage_ix, storage); + StoreCommands(m, literal_buf, num_literals, command_buf, num_commands, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } else { + /* Since we did not find many backward references and the entropy of + the data is close to 8 bits, we can simply emit an uncompressed block. + This makes compression speed of uncompressible data about 3x faster. */ + BrotliStoreMetaBlockHeader(block_size, 1, storage_ix, storage); + *storage_ix = (*storage_ix + 7u) & ~7u; + memcpy(&storage[*storage_ix >> 3], input, block_size); + *storage_ix += block_size << 3; + storage[*storage_ix >> 3] = 0; + } + input += block_size; + input_size -= block_size; + } + + if (is_last) { + BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ + BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ + *storage_ix = (*storage_ix + 7u) & ~7u; + } +} + +#define FOR_TABLE_BITS_(X) \ + X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) + +#define BAKE_METHOD_PARAM_(B) \ +static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( \ + MemoryManager* m, const uint8_t* input, size_t input_size, \ + BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \ + int* table, size_t* storage_ix, uint8_t* storage) { \ + BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, command_buf,\ + literal_buf, table, B, storage_ix, storage); \ +} +FOR_TABLE_BITS_(BAKE_METHOD_PARAM_) +#undef BAKE_METHOD_PARAM_ + +void BrotliCompressFragmentTwoPass( + MemoryManager* m, const uint8_t* input, size_t input_size, + BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, + int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) { + const size_t table_bits = Log2FloorNonZero(table_size); + switch (table_bits) { +#define CASE_(B) \ + case B: \ + BrotliCompressFragmentTwoPassImpl ## B( \ + m, input, input_size, is_last, command_buf, \ + literal_buf, table, storage_ix, storage); \ + break; + FOR_TABLE_BITS_(CASE_) +#undef CASE_ + default: assert(0); break; + } +} + +#undef FOR_TABLE_BITS_ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/compress_fragment_two_pass.cc b/third_party/brotli/enc/compress_fragment_two_pass.cc deleted file mode 100644 index a032740..0000000 --- a/third_party/brotli/enc/compress_fragment_two_pass.cc +++ /dev/null
@@ -1,524 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses two-pass processing: in the first pass we save -// the found backward matches and literal bytes into a buffer, and in the -// second pass we emit them into the bit stream using prefix codes built based -// on the actual command and literal byte histograms. - -#include "./compress_fragment_two_pass.h" - -#include <algorithm> - -#include "./brotli_bit_stream.h" -#include "./bit_cost.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./port.h" -#include "./types.h" -#include "./write_bits.h" - -namespace brotli { - -// kHashMul32 multiplier has these properties: -// * The multiplier must be odd. Otherwise we may lose the highest bit. -// * No long streaks of 1s or 0s. -// * There is no effort to ensure that it is a prime, the oddity is enough -// for this use. -// * The number has been tuned heuristically against compression benchmarks. -static const uint32_t kHashMul32 = 0x1e35a7bd; - -static inline uint32_t Hash(const uint8_t* p, size_t shift) { - const uint64_t h = (BROTLI_UNALIGNED_LOAD64(p) << 16) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline uint32_t HashBytesAtOffset(uint64_t v, int offset, size_t shift) { - assert(offset >= 0); - assert(offset <= 2); - const uint64_t h = ((v >> (8 * offset)) << 16) * kHashMul32; - return static_cast<uint32_t>(h >> shift); -} - -static inline int IsMatch(const uint8_t* p1, const uint8_t* p2) { - return (BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && - p1[4] == p2[4] && - p1[5] == p2[5]); -} - -// Builds a command and distance prefix code (each 64 symbols) into "depth" and -// "bits" based on "histogram" and stores it into the bit stream. -static void BuildAndStoreCommandPrefixCode( - const uint32_t histogram[128], - uint8_t depth[128], uint16_t bits[128], - size_t* storage_ix, uint8_t* storage) { - // Tree size for building a tree over 64 symbols is 2 * 64 + 1. - static const size_t kTreeSize = 129; - HuffmanTree tree[kTreeSize]; - CreateHuffmanTree(histogram, 64, 15, tree, depth); - CreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); - // We have to jump through a few hoopes here in order to compute - // the command bits because the symbols are in a different order than in - // the full alphabet. This looks complicated, but having the symbols - // in this order in the command bits saves a few branches in the Emit* - // functions. - uint8_t cmd_depth[64]; - uint16_t cmd_bits[64]; - memcpy(cmd_depth, depth + 24, 24); - memcpy(cmd_depth + 24, depth, 8); - memcpy(cmd_depth + 32, depth + 48, 8); - memcpy(cmd_depth + 40, depth + 8, 8); - memcpy(cmd_depth + 48, depth + 56, 8); - memcpy(cmd_depth + 56, depth + 16, 8); - ConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); - memcpy(bits, cmd_bits + 24, 16); - memcpy(bits + 8, cmd_bits + 40, 16); - memcpy(bits + 16, cmd_bits + 56, 16); - memcpy(bits + 24, cmd_bits, 48); - memcpy(bits + 48, cmd_bits + 32, 16); - memcpy(bits + 56, cmd_bits + 48, 16); - ConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); - { - // Create the bit length array for the full command alphabet. - uint8_t cmd_depth[704] = { 0 }; - memcpy(cmd_depth, depth + 24, 8); - memcpy(cmd_depth + 64, depth + 32, 8); - memcpy(cmd_depth + 128, depth + 40, 8); - memcpy(cmd_depth + 192, depth + 48, 8); - memcpy(cmd_depth + 384, depth + 56, 8); - for (size_t i = 0; i < 8; ++i) { - cmd_depth[128 + 8 * i] = depth[i]; - cmd_depth[256 + 8 * i] = depth[8 + i]; - cmd_depth[448 + 8 * i] = depth[16 + i]; - } - StoreHuffmanTree(cmd_depth, 704, tree, storage_ix, storage); - } - StoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); -} - -inline void EmitInsertLen(uint32_t insertlen, uint32_t** commands) { - if (insertlen < 6) { - **commands = insertlen; - } else if (insertlen < 130) { - insertlen -= 2; - const uint32_t nbits = Log2FloorNonZero(insertlen) - 1u; - const uint32_t prefix = insertlen >> nbits; - const uint32_t inscode = (nbits << 1) + prefix + 2; - const uint32_t extra = insertlen - (prefix << nbits); - **commands = inscode | (extra << 8); - } else if (insertlen < 2114) { - insertlen -= 66; - const uint32_t nbits = Log2FloorNonZero(insertlen); - const uint32_t code = nbits + 10; - const uint32_t extra = insertlen - (1 << nbits); - **commands = code | (extra << 8); - } else if (insertlen < 6210) { - const uint32_t extra = insertlen - 2114; - **commands = 21 | (extra << 8); - } else if (insertlen < 22594) { - const uint32_t extra = insertlen - 6210; - **commands = 22 | (extra << 8); - } else { - const uint32_t extra = insertlen - 22594; - **commands = 23 | (extra << 8); - } - ++(*commands); -} - -inline void EmitCopyLen(size_t copylen, uint32_t** commands) { - if (copylen < 10) { - **commands = static_cast<uint32_t>(copylen + 38); - } else if (copylen < 134) { - copylen -= 6; - const size_t nbits = Log2FloorNonZero(copylen) - 1; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 44; - const size_t extra = copylen - (prefix << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - } else if (copylen < 2118) { - copylen -= 70; - const size_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 52; - const size_t extra = copylen - (1 << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - } else { - const size_t extra = copylen - 2118; - **commands = static_cast<uint32_t>(63 | (extra << 8)); - } - ++(*commands); -} - -inline void EmitCopyLenLastDistance(size_t copylen, uint32_t** commands) { - if (copylen < 12) { - **commands = static_cast<uint32_t>(copylen + 20); - ++(*commands); - } else if (copylen < 72) { - copylen -= 8; - const size_t nbits = Log2FloorNonZero(copylen) - 1; - const size_t prefix = copylen >> nbits; - const size_t code = (nbits << 1) + prefix + 28; - const size_t extra = copylen - (prefix << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - ++(*commands); - } else if (copylen < 136) { - copylen -= 8; - const size_t code = (copylen >> 5) + 54; - const size_t extra = copylen & 31; - **commands = static_cast<uint32_t>(code | (extra << 8)); - ++(*commands); - **commands = 64; - ++(*commands); - } else if (copylen < 2120) { - copylen -= 72; - const size_t nbits = Log2FloorNonZero(copylen); - const size_t code = nbits + 52; - const size_t extra = copylen - (1 << nbits); - **commands = static_cast<uint32_t>(code | (extra << 8)); - ++(*commands); - **commands = 64; - ++(*commands); - } else { - const size_t extra = copylen - 2120; - **commands = static_cast<uint32_t>(63 | (extra << 8)); - ++(*commands); - **commands = 64; - ++(*commands); - } -} - -inline void EmitDistance(uint32_t distance, uint32_t** commands) { - distance += 3; - uint32_t nbits = Log2FloorNonZero(distance) - 1; - const uint32_t prefix = (distance >> nbits) & 1; - const uint32_t offset = (2 + prefix) << nbits; - const uint32_t distcode = 2 * (nbits - 1) + prefix + 80; - uint32_t extra = distance - offset; - **commands = distcode | (extra << 8); - ++(*commands); -} - -// REQUIRES: len <= 1 << 20. -static void StoreMetaBlockHeader( - size_t len, bool is_uncompressed, size_t* storage_ix, uint8_t* storage) { - // ISLAST - WriteBits(1, 0, storage_ix, storage); - if (len <= (1U << 16)) { - // MNIBBLES is 4 - WriteBits(2, 0, storage_ix, storage); - WriteBits(16, len - 1, storage_ix, storage); - } else { - // MNIBBLES is 5 - WriteBits(2, 1, storage_ix, storage); - WriteBits(20, len - 1, storage_ix, storage); - } - // ISUNCOMPRESSED - WriteBits(1, is_uncompressed, storage_ix, storage); -} - -static void CreateCommands(const uint8_t* input, size_t block_size, - size_t input_size, const uint8_t* base_ip, - int* table, size_t table_size, - uint8_t** literals, uint32_t** commands) { - // "ip" is the input pointer. - const uint8_t* ip = input; - assert(table_size); - assert(table_size <= (1u << 31)); - assert((table_size & (table_size - 1)) == 0); // table must be power of two - const size_t shift = 64u - Log2FloorNonZero(table_size); - assert(table_size - 1 == static_cast<size_t>( - MAKE_UINT64_T(0xFFFFFFFF, 0xFFFFFF) >> shift)); - const uint8_t* ip_end = input + block_size; - // "next_emit" is a pointer to the first byte that is not covered by a - // previous copy. Bytes between "next_emit" and the start of the next copy or - // the end of the input will be emitted as literal bytes. - const uint8_t* next_emit = input; - - int last_distance = -1; - const size_t kInputMarginBytes = 16; - const size_t kMinMatchLen = 6; - if (PREDICT_TRUE(block_size >= kInputMarginBytes)) { - // For the last block, we need to keep a 16 bytes margin so that we can be - // sure that all distances are at most window size - 16. - // For all other blocks, we only need to keep a margin of 5 bytes so that - // we don't go over the block size with a copy. - const size_t len_limit = std::min(block_size - kMinMatchLen, - input_size - kInputMarginBytes); - const uint8_t* ip_limit = input + len_limit; - - for (uint32_t next_hash = Hash(++ip, shift); ; ) { - assert(next_emit < ip); - // Step 1: Scan forward in the input looking for a 6-byte-long match. - // If we get close to exhausting the input then goto emit_remainder. - // - // Heuristic match skipping: If 32 bytes are scanned with no matches - // found, start looking only at every other byte. If 32 more bytes are - // scanned, look at every third byte, etc.. When a match is found, - // immediately go back to looking at every byte. This is a small loss - // (~5% performance, ~0.1% density) for compressible data due to more - // bookkeeping, but for non-compressible data (such as JPEG) it's a huge - // win since the compressor quickly "realizes" the data is incompressible - // and doesn't bother looking for matches everywhere. - // - // The "skip" variable keeps track of how many bytes there are since the - // last match; dividing it by 32 (ie. right-shifting by five) gives the - // number of bytes to move ahead for each iteration. - uint32_t skip = 32; - - const uint8_t* next_ip = ip; - const uint8_t* candidate; - do { - ip = next_ip; - uint32_t hash = next_hash; - assert(hash == Hash(ip, shift)); - uint32_t bytes_between_hash_lookups = skip++ >> 5; - next_ip = ip + bytes_between_hash_lookups; - if (PREDICT_FALSE(next_ip > ip_limit)) { - goto emit_remainder; - } - next_hash = Hash(next_ip, shift); - candidate = ip - last_distance; - if (IsMatch(ip, candidate)) { - if (PREDICT_TRUE(candidate < ip)) { - table[hash] = static_cast<int>(ip - base_ip); - break; - } - } - candidate = base_ip + table[hash]; - assert(candidate >= base_ip); - assert(candidate < ip); - - table[hash] = static_cast<int>(ip - base_ip); - } while (PREDICT_TRUE(!IsMatch(ip, candidate))); - - // Step 2: Emit the found match together with the literal bytes from - // "next_emit", and then see if we can find a next macth immediately - // afterwards. Repeat until we find no match for the input - // without emitting some literal bytes. - uint64_t input_bytes; - - { - // We have a 6-byte match at ip, and we need to emit bytes in - // [next_emit, ip). - const uint8_t* base = ip; - size_t matched = 6 + FindMatchLengthWithLimit( - candidate + 6, ip + 6, static_cast<size_t>(ip_end - ip) - 6); - ip += matched; - int distance = static_cast<int>(base - candidate); /* > 0 */ - int insert = static_cast<int>(base - next_emit); - assert(0 == memcmp(base, candidate, matched)); - EmitInsertLen(static_cast<uint32_t>(insert), commands); - memcpy(*literals, next_emit, static_cast<size_t>(insert)); - *literals += insert; - if (distance == last_distance) { - **commands = 64; - ++(*commands); - } else { - EmitDistance(static_cast<uint32_t>(distance), commands); - last_distance = distance; - } - EmitCopyLenLastDistance(matched, commands); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 5); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 5); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 4); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 2, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - while (IsMatch(ip, candidate)) { - // We have a 6-byte match at ip, and no need to emit any - // literal bytes prior to ip. - const uint8_t* base = ip; - size_t matched = 6 + FindMatchLengthWithLimit( - candidate + 6, ip + 6, static_cast<size_t>(ip_end - ip) - 6); - ip += matched; - last_distance = static_cast<int>(base - candidate); /* > 0 */ - assert(0 == memcmp(base, candidate, matched)); - EmitCopyLen(matched, commands); - EmitDistance(static_cast<uint32_t>(last_distance), commands); - - next_emit = ip; - if (PREDICT_FALSE(ip >= ip_limit)) { - goto emit_remainder; - } - // We could immediately start working at ip now, but to improve - // compression we first update "table" with the hashes of some positions - // within the last copy. - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 5); - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 5); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 4); - prev_hash = HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 3); - input_bytes = BROTLI_UNALIGNED_LOAD64(ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 0, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 2); - prev_hash = HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] = static_cast<int>(ip - base_ip - 1); - - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 2, shift); - candidate = base_ip + table[cur_hash]; - table[cur_hash] = static_cast<int>(ip - base_ip); - } - - next_hash = Hash(++ip, shift); - } - } - -emit_remainder: - assert(next_emit <= ip_end); - // Emit the remaining bytes as literals. - if (next_emit < ip_end) { - const uint32_t insert = static_cast<uint32_t>(ip_end - next_emit); - EmitInsertLen(insert, commands); - memcpy(*literals, next_emit, insert); - *literals += insert; - } -} - -static void StoreCommands(const uint8_t* literals, const size_t num_literals, - const uint32_t* commands, const size_t num_commands, - size_t* storage_ix, uint8_t* storage) { - uint8_t lit_depths[256] = { 0 }; - uint16_t lit_bits[256] = { 0 }; - uint32_t lit_histo[256] = { 0 }; - for (size_t i = 0; i < num_literals; ++i) { - ++lit_histo[literals[i]]; - } - BuildAndStoreHuffmanTreeFast(lit_histo, num_literals, - /* max_bits = */ 8, - lit_depths, lit_bits, - storage_ix, storage); - - uint8_t cmd_depths[128] = { 0 }; - uint16_t cmd_bits[128] = { 0 }; - uint32_t cmd_histo[128] = { 0 }; - for (size_t i = 0; i < num_commands; ++i) { - ++cmd_histo[commands[i] & 0xff]; - } - cmd_histo[1] += 1; - cmd_histo[2] += 1; - cmd_histo[64] += 1; - cmd_histo[84] += 1; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits, - storage_ix, storage); - - static const uint32_t kNumExtraBits[128] = { - 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, - 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, - }; - static const uint32_t kInsertOffset[24] = { - 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578, - 1090, 2114, 6210, 22594, - }; - - for (size_t i = 0; i < num_commands; ++i) { - const uint32_t cmd = commands[i]; - const uint32_t code = cmd & 0xff; - const uint32_t extra = cmd >> 8; - WriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage); - WriteBits(kNumExtraBits[code], extra, storage_ix, storage); - if (code < 24) { - const uint32_t insert = kInsertOffset[code] + extra; - for (uint32_t j = 0; j < insert; ++j) { - const uint8_t lit = *literals; - WriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage); - ++literals; - } - } - } -} - -static bool ShouldCompress(const uint8_t* input, size_t input_size, - size_t num_literals) { - static const double kAcceptableLossForUncompressibleSpeedup = 0.02; - static const double kMaxRatioOfLiterals = - 1.0 - kAcceptableLossForUncompressibleSpeedup; - if (num_literals < kMaxRatioOfLiterals * static_cast<double>(input_size)) { - return true; - } - uint32_t literal_histo[256] = { 0 }; - static const uint32_t kSampleRate = 43; - static const double kMaxEntropy = - 8 * (1.0 - kAcceptableLossForUncompressibleSpeedup); - const double max_total_bit_cost = - static_cast<double>(input_size) * kMaxEntropy / kSampleRate; - for (size_t i = 0; i < input_size; i += kSampleRate) { - ++literal_histo[input[i]]; - } - return BitsEntropy(literal_histo, 256) < max_total_bit_cost; -} - -void BrotliCompressFragmentTwoPass(const uint8_t* input, size_t input_size, - bool is_last, - uint32_t* command_buf, uint8_t* literal_buf, - int* table, size_t table_size, - size_t* storage_ix, uint8_t* storage) { - // Save the start of the first block for position and distance computations. - const uint8_t* base_ip = input; - - while (input_size > 0) { - size_t block_size = std::min(input_size, kCompressFragmentTwoPassBlockSize); - uint32_t* commands = command_buf; - uint8_t* literals = literal_buf; - CreateCommands(input, block_size, input_size, base_ip, table, table_size, - &literals, &commands); - const size_t num_literals = static_cast<size_t>(literals - literal_buf); - const size_t num_commands = static_cast<size_t>(commands - command_buf); - if (ShouldCompress(input, block_size, num_literals)) { - StoreMetaBlockHeader(block_size, 0, storage_ix, storage); - // No block splits, no contexts. - WriteBits(13, 0, storage_ix, storage); - StoreCommands(literal_buf, num_literals, command_buf, num_commands, - storage_ix, storage); - } else { - // Since we did not find many backward references and the entropy of - // the data is close to 8 bits, we can simply emit an uncompressed block. - // This makes compression speed of uncompressible data about 3x faster. - StoreMetaBlockHeader(block_size, 1, storage_ix, storage); - *storage_ix = (*storage_ix + 7u) & ~7u; - memcpy(&storage[*storage_ix >> 3], input, block_size); - *storage_ix += block_size << 3; - storage[*storage_ix >> 3] = 0; - } - input += block_size; - input_size -= block_size; - } - - if (is_last) { - WriteBits(1, 1, storage_ix, storage); // islast - WriteBits(1, 1, storage_ix, storage); // isempty - *storage_ix = (*storage_ix + 7u) & ~7u; - } -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/compress_fragment_two_pass.h b/third_party/brotli/enc/compress_fragment_two_pass.h index 690ed081..b75e69d5 100644 --- a/third_party/brotli/enc/compress_fragment_two_pass.h +++ b/third_party/brotli/enc/compress_fragment_two_pass.h
@@ -4,37 +4,50 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Function for fast encoding of an input fragment, independently from the input -// history. This function uses two-pass processing: in the first pass we save -// the found backward matches and literal bytes into a buffer, and in the -// second pass we emit them into the bit stream using prefix codes built based -// on the actual command and literal byte histograms. +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses two-pass processing: in the first pass we save + the found backward matches and literal bytes into a buffer, and in the + second pass we emit them into the bit stream using prefix codes built based + on the actual command and literal byte histograms. */ #ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ #define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ -#include "./types.h" +#include <brotli/types.h> +#include "./memory.h" +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17; -// Compresses "input" string to the "*storage" buffer as one or more complete -// meta-blocks, and updates the "*storage_ix" bit position. -// -// If "is_last" is true, emits an additional empty last meta-block. -// -// REQUIRES: "input_size" is greater than zero, or "is_last" is true. -// REQUIRES: "command_buf" and "literal_buf" point to at least -// kCompressFragmentTwoPassBlockSize long arrays. -// REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. -// REQUIRES: "table_size" is a power of two -void BrotliCompressFragmentTwoPass(const uint8_t* input, size_t input_size, - bool is_last, - uint32_t* command_buf, uint8_t* literal_buf, - int* table, size_t table_size, - size_t* storage_ix, uint8_t* storage); +/* Compresses "input" string to the "*storage" buffer as one or more complete + meta-blocks, and updates the "*storage_ix" bit position. -} // namespace brotli + If "is_last" is 1, emits an additional empty last meta-block. -#endif // BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ + REQUIRES: "input_size" is greater than zero, or "is_last" is 1. + REQUIRES: "command_buf" and "literal_buf" point to at least + kCompressFragmentTwoPassBlockSize long arrays. + REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. + REQUIRES: "table_size" is a power of two + OUTPUT: maximal copy distance <= |input_size| + OUTPUT: maximal copy distance <= MaxBackwardLimit(18) */ +BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m, + const uint8_t* input, + size_t input_size, + BROTLI_BOOL is_last, + uint32_t* command_buf, + uint8_t* literal_buf, + int* table, + size_t table_size, + size_t* storage_ix, + uint8_t* storage); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */
diff --git a/third_party/brotli/enc/compressor.h b/third_party/brotli/enc/compressor.h deleted file mode 100644 index 1dfc42e..0000000 --- a/third_party/brotli/enc/compressor.h +++ /dev/null
@@ -1,15 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* C++ API for Brotli compression. */ - -#ifndef BROTLI_ENC_COMPRESSOR_H_ -#define BROTLI_ENC_COMPRESSOR_H_ - -#include "./encode.h" -#include "./streams.h" - -#endif /* BROTLI_ENC_COMPRESSOR_H_ */
diff --git a/third_party/brotli/enc/context.h b/third_party/brotli/enc/context.h index 00c065b..9cde400b 100644 --- a/third_party/brotli/enc/context.h +++ b/third_party/brotli/enc/context.h
@@ -4,91 +4,95 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Functions to map previous bytes into a context id. +/* Functions to map previous bytes into a context id. */ #ifndef BROTLI_ENC_CONTEXT_H_ #define BROTLI_ENC_CONTEXT_H_ -#include "./types.h" +#include <brotli/port.h> +#include <brotli/types.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// Second-order context lookup table for UTF8 byte streams. -// -// If p1 and p2 are the previous two bytes, we calculate the context as -// -// context = kUTF8ContextLookup[p1] | kUTF8ContextLookup[p2 + 256]. -// -// If the previous two bytes are ASCII characters (i.e. < 128), this will be -// equivalent to -// -// context = 4 * context1(p1) + context2(p2), -// -// where context1 is based on the previous byte in the following way: -// -// 0 : non-ASCII control -// 1 : \t, \n, \r -// 2 : space -// 3 : other punctuation -// 4 : " ' -// 5 : % -// 6 : ( < [ { -// 7 : ) > ] } -// 8 : , ; : -// 9 : . -// 10 : = -// 11 : number -// 12 : upper-case vowel -// 13 : upper-case consonant -// 14 : lower-case vowel -// 15 : lower-case consonant -// -// and context2 is based on the second last byte: -// -// 0 : control, space -// 1 : punctuation -// 2 : upper-case letter, number -// 3 : lower-case letter -// -// If the last byte is ASCII, and the second last byte is not (in a valid UTF8 -// stream it will be a continuation byte, value between 128 and 191), the -// context is the same as if the second last byte was an ASCII control or space. -// -// If the last byte is a UTF8 lead byte (value >= 192), then the next byte will -// be a continuation byte and the context id is 2 or 3 depending on the LSB of -// the last byte and to a lesser extent on the second last byte if it is ASCII. -// -// If the last byte is a UTF8 continuation byte, the second last byte can be: -// - continuation byte: the next byte is probably ASCII or lead byte (assuming -// 4-byte UTF8 characters are rare) and the context id is 0 or 1. -// - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 -// - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 -// -// The possible value combinations of the previous two bytes, the range of -// context ids and the type of the next byte is summarized in the table below: -// -// |--------\-----------------------------------------------------------------| -// | \ Last byte | -// | Second \---------------------------------------------------------------| -// | last byte \ ASCII | cont. byte | lead byte | -// | \ (0-127) | (128-191) | (192-) | -// |=============|===================|=====================|==================| -// | ASCII | next: ASCII/lead | not valid | next: cont. | -// | (0-127) | context: 4 - 63 | | context: 2 - 3 | -// |-------------|-------------------|---------------------|------------------| -// | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | -// | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | -// |-------------|-------------------|---------------------|------------------| -// | lead byte | not valid | next: ASCII/lead | not valid | -// | (192-207) | | context: 0 - 1 | | -// |-------------|-------------------|---------------------|------------------| -// | lead byte | not valid | next: cont. | not valid | -// | (208-) | | context: 2 - 3 | | -// |-------------|-------------------|---------------------|------------------| +/* Second-order context lookup table for UTF8 byte streams. + + If p1 and p2 are the previous two bytes, we calculate the context as + + context = kUTF8ContextLookup[p1] | kUTF8ContextLookup[p2 + 256]. + + If the previous two bytes are ASCII characters (i.e. < 128), this will be + equivalent to + + context = 4 * context1(p1) + context2(p2), + + where context1 is based on the previous byte in the following way: + + 0 : non-ASCII control + 1 : \t, \n, \r + 2 : space + 3 : other punctuation + 4 : " ' + 5 : % + 6 : ( < [ { + 7 : ) > ] } + 8 : , ; : + 9 : . + 10 : = + 11 : number + 12 : upper-case vowel + 13 : upper-case consonant + 14 : lower-case vowel + 15 : lower-case consonant + + and context2 is based on the second last byte: + + 0 : control, space + 1 : punctuation + 2 : upper-case letter, number + 3 : lower-case letter + + If the last byte is ASCII, and the second last byte is not (in a valid UTF8 + stream it will be a continuation byte, value between 128 and 191), the + context is the same as if the second last byte was an ASCII control or space. + + If the last byte is a UTF8 lead byte (value >= 192), then the next byte will + be a continuation byte and the context id is 2 or 3 depending on the LSB of + the last byte and to a lesser extent on the second last byte if it is ASCII. + + If the last byte is a UTF8 continuation byte, the second last byte can be: + - continuation byte: the next byte is probably ASCII or lead byte (assuming + 4-byte UTF8 characters are rare) and the context id is 0 or 1. + - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 + - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 + + The possible value combinations of the previous two bytes, the range of + context ids and the type of the next byte is summarized in the table below: + + |--------\-----------------------------------------------------------------| + | \ Last byte | + | Second \---------------------------------------------------------------| + | last byte \ ASCII | cont. byte | lead byte | + | \ (0-127) | (128-191) | (192-) | + |=============|===================|=====================|==================| + | ASCII | next: ASCII/lead | not valid | next: cont. | + | (0-127) | context: 4 - 63 | | context: 2 - 3 | + |-------------|-------------------|---------------------|------------------| + | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | + | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | + |-------------|-------------------|---------------------|------------------| + | lead byte | not valid | next: ASCII/lead | not valid | + | (192-207) | | context: 0 - 1 | | + |-------------|-------------------|---------------------|------------------| + | lead byte | not valid | next: cont. | not valid | + | (208-) | | context: 2 - 3 | | + |-------------|-------------------|---------------------|------------------| +*/ static const uint8_t kUTF8ContextLookup[512] = { - // Last byte. - // - // ASCII range. + /* Last byte. */ + /* */ + /* ASCII range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, @@ -97,19 +101,19 @@ 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, - // UTF8 continuation byte range. + /* UTF8 continuation byte range. */ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - // UTF8 lead byte range. + /* UTF8 lead byte range. */ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - // Second last byte. - // - // ASCII range. + /* Second last byte. */ + /* */ + /* ASCII range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -118,19 +122,19 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, - // UTF8 continuation byte range. + /* UTF8 continuation byte range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // UTF8 lead byte range. + /* UTF8 lead byte range. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -// Context lookup table for small signed integers. +/* Context lookup table for small signed integers. */ static const uint8_t kSigned3BitContextLookup[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -150,29 +154,31 @@ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, }; -enum ContextType { +typedef enum ContextType { CONTEXT_LSB6 = 0, CONTEXT_MSB6 = 1, CONTEXT_UTF8 = 2, CONTEXT_SIGNED = 3 -}; +} ContextType; -static inline uint8_t Context(uint8_t p1, uint8_t p2, ContextType mode) { +static BROTLI_INLINE uint8_t Context(uint8_t p1, uint8_t p2, ContextType mode) { switch (mode) { case CONTEXT_LSB6: return p1 & 0x3f; case CONTEXT_MSB6: - return static_cast<uint8_t>(p1 >> 2); + return (uint8_t)(p1 >> 2); case CONTEXT_UTF8: return kUTF8ContextLookup[p1] | kUTF8ContextLookup[p2 + 256]; case CONTEXT_SIGNED: - return static_cast<uint8_t>((kSigned3BitContextLookup[p1] << 3) + - kSigned3BitContextLookup[p2]); + return (uint8_t)((kSigned3BitContextLookup[p1] << 3) + + kSigned3BitContextLookup[p2]); default: return 0; } } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_CONTEXT_H_ +#endif /* BROTLI_ENC_CONTEXT_H_ */
diff --git a/third_party/brotli/enc/dictionary.cc b/third_party/brotli/enc/dictionary.cc deleted file mode 100644 index 0564bab6..0000000 --- a/third_party/brotli/enc/dictionary.cc +++ /dev/null
@@ -1,9466 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -#include "./dictionary.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -// In case of multiple definition linker error with dictionary.c from the -// decoder: include only one of enc/dictionary.cc or dec/dictionary.c in a -// target using both enc and dec. -const uint8_t kBrotliDictionary[122784] = { - 0x74, 0x69, 0x6d, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x66, 0x65, 0x6c, - 0x65, 0x66, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x68, 0x6f, 0x77, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x69, 0x74, - 0x65, 0x63, 0x69, 0x74, 0x79, 0x6f, 0x70, 0x65, 0x6e, 0x6a, 0x75, 0x73, 0x74, - 0x6c, 0x69, 0x6b, 0x65, 0x66, 0x72, 0x65, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x74, - 0x65, 0x78, 0x74, 0x79, 0x65, 0x61, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x6f, - 0x64, 0x79, 0x6c, 0x6f, 0x76, 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x62, 0x6f, 0x6f, - 0x6b, 0x70, 0x6c, 0x61, 0x79, 0x6c, 0x69, 0x76, 0x65, 0x6c, 0x69, 0x6e, 0x65, - 0x68, 0x65, 0x6c, 0x70, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6d, - 0x6f, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x6f, 0x6e, 0x67, 0x74, 0x68, - 0x65, 0x6d, 0x76, 0x69, 0x65, 0x77, 0x66, 0x69, 0x6e, 0x64, 0x70, 0x61, 0x67, - 0x65, 0x64, 0x61, 0x79, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x68, 0x65, 0x61, 0x64, - 0x74, 0x65, 0x72, 0x6d, 0x65, 0x61, 0x63, 0x68, 0x61, 0x72, 0x65, 0x61, 0x66, - 0x72, 0x6f, 0x6d, 0x74, 0x72, 0x75, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x61, 0x62, - 0x6c, 0x65, 0x75, 0x70, 0x6f, 0x6e, 0x68, 0x69, 0x67, 0x68, 0x64, 0x61, 0x74, - 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x6e, 0x65, 0x77, 0x73, 0x65, 0x76, 0x65, 0x6e, - 0x6e, 0x65, 0x78, 0x74, 0x63, 0x61, 0x73, 0x65, 0x62, 0x6f, 0x74, 0x68, 0x70, - 0x6f, 0x73, 0x74, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x61, 0x64, 0x65, 0x68, 0x61, - 0x6e, 0x64, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x61, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x4c, 0x69, 0x6e, 0x6b, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x69, 0x7a, 0x65, - 0x62, 0x61, 0x73, 0x65, 0x68, 0x65, 0x6c, 0x64, 0x6d, 0x61, 0x6b, 0x65, 0x6d, - 0x61, 0x69, 0x6e, 0x75, 0x73, 0x65, 0x72, 0x27, 0x29, 0x20, 0x2b, 0x68, 0x6f, - 0x6c, 0x64, 0x65, 0x6e, 0x64, 0x73, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x65, 0x77, - 0x73, 0x72, 0x65, 0x61, 0x64, 0x77, 0x65, 0x72, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x74, 0x61, 0x6b, 0x65, 0x68, 0x61, 0x76, 0x65, 0x67, 0x61, 0x6d, 0x65, 0x73, - 0x65, 0x65, 0x6e, 0x63, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x74, 0x68, 0x77, 0x65, - 0x6c, 0x6c, 0x70, 0x6c, 0x75, 0x73, 0x6d, 0x65, 0x6e, 0x75, 0x66, 0x69, 0x6c, - 0x6d, 0x70, 0x61, 0x72, 0x74, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x68, 0x69, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x67, 0x6f, 0x6f, 0x64, 0x6e, 0x65, 0x65, 0x64, 0x77, - 0x61, 0x79, 0x73, 0x77, 0x65, 0x73, 0x74, 0x6a, 0x6f, 0x62, 0x73, 0x6d, 0x69, - 0x6e, 0x64, 0x61, 0x6c, 0x73, 0x6f, 0x6c, 0x6f, 0x67, 0x6f, 0x72, 0x69, 0x63, - 0x68, 0x75, 0x73, 0x65, 0x73, 0x6c, 0x61, 0x73, 0x74, 0x74, 0x65, 0x61, 0x6d, - 0x61, 0x72, 0x6d, 0x79, 0x66, 0x6f, 0x6f, 0x64, 0x6b, 0x69, 0x6e, 0x67, 0x77, - 0x69, 0x6c, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x77, 0x61, 0x72, 0x64, 0x62, 0x65, - 0x73, 0x74, 0x66, 0x69, 0x72, 0x65, 0x50, 0x61, 0x67, 0x65, 0x6b, 0x6e, 0x6f, - 0x77, 0x61, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x6e, 0x67, 0x6d, 0x6f, 0x76, 0x65, - 0x74, 0x68, 0x61, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x67, 0x69, 0x76, 0x65, 0x73, - 0x65, 0x6c, 0x66, 0x6e, 0x6f, 0x74, 0x65, 0x6d, 0x75, 0x63, 0x68, 0x66, 0x65, - 0x65, 0x64, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x6f, 0x63, 0x6b, 0x69, 0x63, 0x6f, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x6c, 0x6f, 0x6f, 0x6b, 0x68, 0x69, 0x64, 0x65, - 0x64, 0x69, 0x65, 0x64, 0x48, 0x6f, 0x6d, 0x65, 0x72, 0x75, 0x6c, 0x65, 0x68, - 0x6f, 0x73, 0x74, 0x61, 0x6a, 0x61, 0x78, 0x69, 0x6e, 0x66, 0x6f, 0x63, 0x6c, - 0x75, 0x62, 0x6c, 0x61, 0x77, 0x73, 0x6c, 0x65, 0x73, 0x73, 0x68, 0x61, 0x6c, - 0x66, 0x73, 0x6f, 0x6d, 0x65, 0x73, 0x75, 0x63, 0x68, 0x7a, 0x6f, 0x6e, 0x65, - 0x31, 0x30, 0x30, 0x25, 0x6f, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x72, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x72, 0x61, 0x63, 0x65, 0x62, 0x6c, 0x75, 0x65, 0x66, 0x6f, - 0x75, 0x72, 0x77, 0x65, 0x65, 0x6b, 0x66, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x70, - 0x65, 0x67, 0x61, 0x76, 0x65, 0x68, 0x61, 0x72, 0x64, 0x6c, 0x6f, 0x73, 0x74, - 0x77, 0x68, 0x65, 0x6e, 0x70, 0x61, 0x72, 0x6b, 0x6b, 0x65, 0x70, 0x74, 0x70, - 0x61, 0x73, 0x73, 0x73, 0x68, 0x69, 0x70, 0x72, 0x6f, 0x6f, 0x6d, 0x48, 0x54, - 0x4d, 0x4c, 0x70, 0x6c, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x6f, 0x6e, - 0x65, 0x73, 0x61, 0x76, 0x65, 0x6b, 0x65, 0x65, 0x70, 0x66, 0x6c, 0x61, 0x67, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x6f, 0x6c, 0x64, 0x66, 0x69, 0x76, 0x65, 0x74, - 0x6f, 0x6f, 0x6b, 0x72, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x77, 0x6e, 0x6a, 0x75, - 0x6d, 0x70, 0x74, 0x68, 0x75, 0x73, 0x64, 0x61, 0x72, 0x6b, 0x63, 0x61, 0x72, - 0x64, 0x66, 0x69, 0x6c, 0x65, 0x66, 0x65, 0x61, 0x72, 0x73, 0x74, 0x61, 0x79, - 0x6b, 0x69, 0x6c, 0x6c, 0x74, 0x68, 0x61, 0x74, 0x66, 0x61, 0x6c, 0x6c, 0x61, - 0x75, 0x74, 0x6f, 0x65, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x74, 0x61, - 0x6c, 0x6b, 0x73, 0x68, 0x6f, 0x70, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x65, 0x65, - 0x70, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x73, 0x74, 0x74, 0x75, 0x72, 0x6e, - 0x62, 0x6f, 0x72, 0x6e, 0x62, 0x61, 0x6e, 0x64, 0x66, 0x65, 0x6c, 0x6c, 0x72, - 0x6f, 0x73, 0x65, 0x75, 0x72, 0x6c, 0x28, 0x73, 0x6b, 0x69, 0x6e, 0x72, 0x6f, - 0x6c, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x61, 0x63, 0x74, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x6d, 0x65, 0x65, 0x74, 0x67, 0x6f, 0x6c, 0x64, 0x2e, 0x6a, 0x70, 0x67, - 0x69, 0x74, 0x65, 0x6d, 0x76, 0x61, 0x72, 0x79, 0x66, 0x65, 0x6c, 0x74, 0x74, - 0x68, 0x65, 0x6e, 0x73, 0x65, 0x6e, 0x64, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x69, - 0x65, 0x77, 0x63, 0x6f, 0x70, 0x79, 0x31, 0x2e, 0x30, 0x22, 0x3c, 0x2f, 0x61, - 0x3e, 0x73, 0x74, 0x6f, 0x70, 0x65, 0x6c, 0x73, 0x65, 0x6c, 0x69, 0x65, 0x73, - 0x74, 0x6f, 0x75, 0x72, 0x70, 0x61, 0x63, 0x6b, 0x2e, 0x67, 0x69, 0x66, 0x70, - 0x61, 0x73, 0x74, 0x63, 0x73, 0x73, 0x3f, 0x67, 0x72, 0x61, 0x79, 0x6d, 0x65, - 0x61, 0x6e, 0x26, 0x67, 0x74, 0x3b, 0x72, 0x69, 0x64, 0x65, 0x73, 0x68, 0x6f, - 0x74, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x61, 0x69, 0x64, 0x72, 0x6f, 0x61, 0x64, - 0x76, 0x61, 0x72, 0x20, 0x66, 0x65, 0x65, 0x6c, 0x6a, 0x6f, 0x68, 0x6e, 0x72, - 0x69, 0x63, 0x6b, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x61, 0x73, 0x74, 0x27, 0x55, - 0x41, 0x2d, 0x64, 0x65, 0x61, 0x64, 0x3c, 0x2f, 0x62, 0x3e, 0x70, 0x6f, 0x6f, - 0x72, 0x62, 0x69, 0x6c, 0x6c, 0x74, 0x79, 0x70, 0x65, 0x55, 0x2e, 0x53, 0x2e, - 0x77, 0x6f, 0x6f, 0x64, 0x6d, 0x75, 0x73, 0x74, 0x32, 0x70, 0x78, 0x3b, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x61, 0x6e, 0x6b, 0x77, 0x69, 0x64, 0x65, 0x77, 0x61, - 0x6e, 0x74, 0x77, 0x61, 0x6c, 0x6c, 0x6c, 0x65, 0x61, 0x64, 0x5b, 0x30, 0x5d, - 0x3b, 0x70, 0x61, 0x75, 0x6c, 0x77, 0x61, 0x76, 0x65, 0x73, 0x75, 0x72, 0x65, - 0x24, 0x28, 0x27, 0x23, 0x77, 0x61, 0x69, 0x74, 0x6d, 0x61, 0x73, 0x73, 0x61, - 0x72, 0x6d, 0x73, 0x67, 0x6f, 0x65, 0x73, 0x67, 0x61, 0x69, 0x6e, 0x6c, 0x61, - 0x6e, 0x67, 0x70, 0x61, 0x69, 0x64, 0x21, 0x2d, 0x2d, 0x20, 0x6c, 0x6f, 0x63, - 0x6b, 0x75, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x6f, 0x74, 0x77, 0x61, 0x6c, 0x6b, - 0x66, 0x69, 0x72, 0x6d, 0x77, 0x69, 0x66, 0x65, 0x78, 0x6d, 0x6c, 0x22, 0x73, - 0x6f, 0x6e, 0x67, 0x74, 0x65, 0x73, 0x74, 0x32, 0x30, 0x70, 0x78, 0x6b, 0x69, - 0x6e, 0x64, 0x72, 0x6f, 0x77, 0x73, 0x74, 0x6f, 0x6f, 0x6c, 0x66, 0x6f, 0x6e, - 0x74, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x61, 0x66, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x6d, 0x61, 0x70, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x72, 0x61, 0x69, 0x6e, 0x66, - 0x6c, 0x6f, 0x77, 0x62, 0x61, 0x62, 0x79, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x61, - 0x79, 0x73, 0x34, 0x70, 0x78, 0x3b, 0x36, 0x70, 0x78, 0x3b, 0x61, 0x72, 0x74, - 0x73, 0x66, 0x6f, 0x6f, 0x74, 0x72, 0x65, 0x61, 0x6c, 0x77, 0x69, 0x6b, 0x69, - 0x68, 0x65, 0x61, 0x74, 0x73, 0x74, 0x65, 0x70, 0x74, 0x72, 0x69, 0x70, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x61, 0x6b, 0x65, 0x77, 0x65, 0x61, 0x6b, 0x74, 0x6f, - 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x63, 0x61, 0x73, 0x74, 0x66, 0x61, 0x6e, - 0x73, 0x62, 0x61, 0x6e, 0x6b, 0x76, 0x65, 0x72, 0x79, 0x72, 0x75, 0x6e, 0x73, - 0x6a, 0x75, 0x6c, 0x79, 0x74, 0x61, 0x73, 0x6b, 0x31, 0x70, 0x78, 0x3b, 0x67, - 0x6f, 0x61, 0x6c, 0x67, 0x72, 0x65, 0x77, 0x73, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x67, 0x65, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x74, 0x73, 0x35, 0x70, 0x78, - 0x3b, 0x2e, 0x6a, 0x73, 0x3f, 0x34, 0x30, 0x70, 0x78, 0x69, 0x66, 0x20, 0x28, - 0x73, 0x6f, 0x6f, 0x6e, 0x73, 0x65, 0x61, 0x74, 0x6e, 0x6f, 0x6e, 0x65, 0x74, - 0x75, 0x62, 0x65, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x65, 0x6e, 0x74, 0x72, 0x65, - 0x65, 0x64, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x74, 0x6f, 0x67, 0x69, 0x66, - 0x74, 0x68, 0x61, 0x72, 0x6d, 0x31, 0x38, 0x70, 0x78, 0x63, 0x61, 0x6d, 0x65, - 0x68, 0x69, 0x6c, 0x6c, 0x62, 0x6f, 0x6c, 0x64, 0x7a, 0x6f, 0x6f, 0x6d, 0x76, - 0x6f, 0x69, 0x64, 0x65, 0x61, 0x73, 0x79, 0x72, 0x69, 0x6e, 0x67, 0x66, 0x69, - 0x6c, 0x6c, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x69, 0x74, 0x63, 0x6f, 0x73, - 0x74, 0x33, 0x70, 0x78, 0x3b, 0x6a, 0x61, 0x63, 0x6b, 0x74, 0x61, 0x67, 0x73, - 0x62, 0x69, 0x74, 0x73, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x69, 0x74, 0x6b, - 0x6e, 0x65, 0x77, 0x6e, 0x65, 0x61, 0x72, 0x3c, 0x21, 0x2d, 0x2d, 0x67, 0x72, - 0x6f, 0x77, 0x4a, 0x53, 0x4f, 0x4e, 0x64, 0x75, 0x74, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x61, 0x6c, 0x65, 0x79, 0x6f, 0x75, 0x20, 0x6c, 0x6f, 0x74, 0x73, - 0x70, 0x61, 0x69, 0x6e, 0x6a, 0x61, 0x7a, 0x7a, 0x63, 0x6f, 0x6c, 0x64, 0x65, - 0x79, 0x65, 0x73, 0x66, 0x69, 0x73, 0x68, 0x77, 0x77, 0x77, 0x2e, 0x72, 0x69, - 0x73, 0x6b, 0x74, 0x61, 0x62, 0x73, 0x70, 0x72, 0x65, 0x76, 0x31, 0x30, 0x70, - 0x78, 0x72, 0x69, 0x73, 0x65, 0x32, 0x35, 0x70, 0x78, 0x42, 0x6c, 0x75, 0x65, - 0x64, 0x69, 0x6e, 0x67, 0x33, 0x30, 0x30, 0x2c, 0x62, 0x61, 0x6c, 0x6c, 0x66, - 0x6f, 0x72, 0x64, 0x65, 0x61, 0x72, 0x6e, 0x77, 0x69, 0x6c, 0x64, 0x62, 0x6f, - 0x78, 0x2e, 0x66, 0x61, 0x69, 0x72, 0x6c, 0x61, 0x63, 0x6b, 0x76, 0x65, 0x72, - 0x73, 0x70, 0x61, 0x69, 0x72, 0x6a, 0x75, 0x6e, 0x65, 0x74, 0x65, 0x63, 0x68, - 0x69, 0x66, 0x28, 0x21, 0x70, 0x69, 0x63, 0x6b, 0x65, 0x76, 0x69, 0x6c, 0x24, - 0x28, 0x22, 0x23, 0x77, 0x61, 0x72, 0x6d, 0x6c, 0x6f, 0x72, 0x64, 0x64, 0x6f, - 0x65, 0x73, 0x70, 0x75, 0x6c, 0x6c, 0x2c, 0x30, 0x30, 0x30, 0x69, 0x64, 0x65, - 0x61, 0x64, 0x72, 0x61, 0x77, 0x68, 0x75, 0x67, 0x65, 0x73, 0x70, 0x6f, 0x74, - 0x66, 0x75, 0x6e, 0x64, 0x62, 0x75, 0x72, 0x6e, 0x68, 0x72, 0x65, 0x66, 0x63, - 0x65, 0x6c, 0x6c, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x68, 0x6f, - 0x75, 0x72, 0x6c, 0x6f, 0x73, 0x73, 0x66, 0x75, 0x65, 0x6c, 0x31, 0x32, 0x70, - 0x78, 0x73, 0x75, 0x69, 0x74, 0x64, 0x65, 0x61, 0x6c, 0x52, 0x53, 0x53, 0x22, - 0x61, 0x67, 0x65, 0x64, 0x67, 0x72, 0x65, 0x79, 0x47, 0x45, 0x54, 0x22, 0x65, - 0x61, 0x73, 0x65, 0x61, 0x69, 0x6d, 0x73, 0x67, 0x69, 0x72, 0x6c, 0x61, 0x69, - 0x64, 0x73, 0x38, 0x70, 0x78, 0x3b, 0x6e, 0x61, 0x76, 0x79, 0x67, 0x72, 0x69, - 0x64, 0x74, 0x69, 0x70, 0x73, 0x23, 0x39, 0x39, 0x39, 0x77, 0x61, 0x72, 0x73, - 0x6c, 0x61, 0x64, 0x79, 0x63, 0x61, 0x72, 0x73, 0x29, 0x3b, 0x20, 0x7d, 0x70, - 0x68, 0x70, 0x3f, 0x68, 0x65, 0x6c, 0x6c, 0x74, 0x61, 0x6c, 0x6c, 0x77, 0x68, - 0x6f, 0x6d, 0x7a, 0x68, 0x3a, 0xe5, 0x2a, 0x2f, 0x0d, 0x0a, 0x20, 0x31, 0x30, - 0x30, 0x68, 0x61, 0x6c, 0x6c, 0x2e, 0x0a, 0x0a, 0x41, 0x37, 0x70, 0x78, 0x3b, - 0x70, 0x75, 0x73, 0x68, 0x63, 0x68, 0x61, 0x74, 0x30, 0x70, 0x78, 0x3b, 0x63, - 0x72, 0x65, 0x77, 0x2a, 0x2f, 0x3c, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x37, 0x35, - 0x70, 0x78, 0x66, 0x6c, 0x61, 0x74, 0x72, 0x61, 0x72, 0x65, 0x20, 0x26, 0x26, - 0x20, 0x74, 0x65, 0x6c, 0x6c, 0x63, 0x61, 0x6d, 0x70, 0x6f, 0x6e, 0x74, 0x6f, - 0x6c, 0x61, 0x69, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x73, 0x6b, 0x69, 0x70, 0x74, - 0x65, 0x6e, 0x74, 0x66, 0x69, 0x6e, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x67, 0x65, - 0x74, 0x73, 0x70, 0x6c, 0x6f, 0x74, 0x34, 0x30, 0x30, 0x2c, 0x0d, 0x0a, 0x0d, - 0x0a, 0x63, 0x6f, 0x6f, 0x6c, 0x66, 0x65, 0x65, 0x74, 0x2e, 0x70, 0x68, 0x70, - 0x3c, 0x62, 0x72, 0x3e, 0x65, 0x72, 0x69, 0x63, 0x6d, 0x6f, 0x73, 0x74, 0x67, - 0x75, 0x69, 0x64, 0x62, 0x65, 0x6c, 0x6c, 0x64, 0x65, 0x73, 0x63, 0x68, 0x61, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x68, 0x61, 0x74, 0x6f, 0x6d, 0x2f, 0x69, 0x6d, - 0x67, 0x26, 0x23, 0x38, 0x32, 0x6c, 0x75, 0x63, 0x6b, 0x63, 0x65, 0x6e, 0x74, - 0x30, 0x30, 0x30, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x67, 0x6f, 0x6e, 0x65, 0x68, - 0x74, 0x6d, 0x6c, 0x73, 0x65, 0x6c, 0x6c, 0x64, 0x72, 0x75, 0x67, 0x46, 0x52, - 0x45, 0x45, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x69, 0x63, 0x6b, 0x3f, 0x69, 0x64, - 0x3d, 0x6c, 0x6f, 0x73, 0x65, 0x6e, 0x75, 0x6c, 0x6c, 0x76, 0x61, 0x73, 0x74, - 0x77, 0x69, 0x6e, 0x64, 0x52, 0x53, 0x53, 0x20, 0x77, 0x65, 0x61, 0x72, 0x72, - 0x65, 0x6c, 0x79, 0x62, 0x65, 0x65, 0x6e, 0x73, 0x61, 0x6d, 0x65, 0x64, 0x75, - 0x6b, 0x65, 0x6e, 0x61, 0x73, 0x61, 0x63, 0x61, 0x70, 0x65, 0x77, 0x69, 0x73, - 0x68, 0x67, 0x75, 0x6c, 0x66, 0x54, 0x32, 0x33, 0x3a, 0x68, 0x69, 0x74, 0x73, - 0x73, 0x6c, 0x6f, 0x74, 0x67, 0x61, 0x74, 0x65, 0x6b, 0x69, 0x63, 0x6b, 0x62, - 0x6c, 0x75, 0x72, 0x74, 0x68, 0x65, 0x79, 0x31, 0x35, 0x70, 0x78, 0x27, 0x27, - 0x29, 0x3b, 0x29, 0x3b, 0x22, 0x3e, 0x6d, 0x73, 0x69, 0x65, 0x77, 0x69, 0x6e, - 0x73, 0x62, 0x69, 0x72, 0x64, 0x73, 0x6f, 0x72, 0x74, 0x62, 0x65, 0x74, 0x61, - 0x73, 0x65, 0x65, 0x6b, 0x54, 0x31, 0x38, 0x3a, 0x6f, 0x72, 0x64, 0x73, 0x74, - 0x72, 0x65, 0x65, 0x6d, 0x61, 0x6c, 0x6c, 0x36, 0x30, 0x70, 0x78, 0x66, 0x61, - 0x72, 0x6d, 0xe2, 0x80, 0x99, 0x73, 0x62, 0x6f, 0x79, 0x73, 0x5b, 0x30, 0x5d, - 0x2e, 0x27, 0x29, 0x3b, 0x22, 0x50, 0x4f, 0x53, 0x54, 0x62, 0x65, 0x61, 0x72, - 0x6b, 0x69, 0x64, 0x73, 0x29, 0x3b, 0x7d, 0x7d, 0x6d, 0x61, 0x72, 0x79, 0x74, - 0x65, 0x6e, 0x64, 0x28, 0x55, 0x4b, 0x29, 0x71, 0x75, 0x61, 0x64, 0x7a, 0x68, - 0x3a, 0xe6, 0x2d, 0x73, 0x69, 0x7a, 0x2d, 0x2d, 0x2d, 0x2d, 0x70, 0x72, 0x6f, - 0x70, 0x27, 0x29, 0x3b, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x54, 0x31, 0x39, 0x3a, - 0x76, 0x69, 0x63, 0x65, 0x61, 0x6e, 0x64, 0x79, 0x64, 0x65, 0x62, 0x74, 0x3e, - 0x52, 0x53, 0x53, 0x70, 0x6f, 0x6f, 0x6c, 0x6e, 0x65, 0x63, 0x6b, 0x62, 0x6c, - 0x6f, 0x77, 0x54, 0x31, 0x36, 0x3a, 0x64, 0x6f, 0x6f, 0x72, 0x65, 0x76, 0x61, - 0x6c, 0x54, 0x31, 0x37, 0x3a, 0x6c, 0x65, 0x74, 0x73, 0x66, 0x61, 0x69, 0x6c, - 0x6f, 0x72, 0x61, 0x6c, 0x70, 0x6f, 0x6c, 0x6c, 0x6e, 0x6f, 0x76, 0x61, 0x63, - 0x6f, 0x6c, 0x73, 0x67, 0x65, 0x6e, 0x65, 0x20, 0xe2, 0x80, 0x94, 0x73, 0x6f, - 0x66, 0x74, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6c, 0x6c, 0x72, 0x6f, 0x73, - 0x73, 0x3c, 0x68, 0x33, 0x3e, 0x70, 0x6f, 0x75, 0x72, 0x66, 0x61, 0x64, 0x65, - 0x70, 0x69, 0x6e, 0x6b, 0x3c, 0x74, 0x72, 0x3e, 0x6d, 0x69, 0x6e, 0x69, 0x29, - 0x7c, 0x21, 0x28, 0x6d, 0x69, 0x6e, 0x65, 0x7a, 0x68, 0x3a, 0xe8, 0x62, 0x61, - 0x72, 0x73, 0x68, 0x65, 0x61, 0x72, 0x30, 0x30, 0x29, 0x3b, 0x6d, 0x69, 0x6c, - 0x6b, 0x20, 0x2d, 0x2d, 0x3e, 0x69, 0x72, 0x6f, 0x6e, 0x66, 0x72, 0x65, 0x64, - 0x64, 0x69, 0x73, 0x6b, 0x77, 0x65, 0x6e, 0x74, 0x73, 0x6f, 0x69, 0x6c, 0x70, - 0x75, 0x74, 0x73, 0x2f, 0x6a, 0x73, 0x2f, 0x68, 0x6f, 0x6c, 0x79, 0x54, 0x32, - 0x32, 0x3a, 0x49, 0x53, 0x42, 0x4e, 0x54, 0x32, 0x30, 0x3a, 0x61, 0x64, 0x61, - 0x6d, 0x73, 0x65, 0x65, 0x73, 0x3c, 0x68, 0x32, 0x3e, 0x6a, 0x73, 0x6f, 0x6e, - 0x27, 0x2c, 0x20, 0x27, 0x63, 0x6f, 0x6e, 0x74, 0x54, 0x32, 0x31, 0x3a, 0x20, - 0x52, 0x53, 0x53, 0x6c, 0x6f, 0x6f, 0x70, 0x61, 0x73, 0x69, 0x61, 0x6d, 0x6f, - 0x6f, 0x6e, 0x3c, 0x2f, 0x70, 0x3e, 0x73, 0x6f, 0x75, 0x6c, 0x4c, 0x49, 0x4e, - 0x45, 0x66, 0x6f, 0x72, 0x74, 0x63, 0x61, 0x72, 0x74, 0x54, 0x31, 0x34, 0x3a, - 0x3c, 0x68, 0x31, 0x3e, 0x38, 0x30, 0x70, 0x78, 0x21, 0x2d, 0x2d, 0x3c, 0x39, - 0x70, 0x78, 0x3b, 0x54, 0x30, 0x34, 0x3a, 0x6d, 0x69, 0x6b, 0x65, 0x3a, 0x34, - 0x36, 0x5a, 0x6e, 0x69, 0x63, 0x65, 0x69, 0x6e, 0x63, 0x68, 0x59, 0x6f, 0x72, - 0x6b, 0x72, 0x69, 0x63, 0x65, 0x7a, 0x68, 0x3a, 0xe4, 0x27, 0x29, 0x29, 0x3b, - 0x70, 0x75, 0x72, 0x65, 0x6d, 0x61, 0x67, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x6f, 0x6e, 0x65, 0x62, 0x6f, 0x6e, 0x64, 0x3a, 0x33, 0x37, 0x5a, 0x5f, 0x6f, - 0x66, 0x5f, 0x27, 0x5d, 0x29, 0x3b, 0x30, 0x30, 0x30, 0x2c, 0x7a, 0x68, 0x3a, - 0xe7, 0x74, 0x61, 0x6e, 0x6b, 0x79, 0x61, 0x72, 0x64, 0x62, 0x6f, 0x77, 0x6c, - 0x62, 0x75, 0x73, 0x68, 0x3a, 0x35, 0x36, 0x5a, 0x4a, 0x61, 0x76, 0x61, 0x33, - 0x30, 0x70, 0x78, 0x0a, 0x7c, 0x7d, 0x0a, 0x25, 0x43, 0x33, 0x25, 0x3a, 0x33, - 0x34, 0x5a, 0x6a, 0x65, 0x66, 0x66, 0x45, 0x58, 0x50, 0x49, 0x63, 0x61, 0x73, - 0x68, 0x76, 0x69, 0x73, 0x61, 0x67, 0x6f, 0x6c, 0x66, 0x73, 0x6e, 0x6f, 0x77, - 0x7a, 0x68, 0x3a, 0xe9, 0x71, 0x75, 0x65, 0x72, 0x2e, 0x63, 0x73, 0x73, 0x73, - 0x69, 0x63, 0x6b, 0x6d, 0x65, 0x61, 0x74, 0x6d, 0x69, 0x6e, 0x2e, 0x62, 0x69, - 0x6e, 0x64, 0x64, 0x65, 0x6c, 0x6c, 0x68, 0x69, 0x72, 0x65, 0x70, 0x69, 0x63, - 0x73, 0x72, 0x65, 0x6e, 0x74, 0x3a, 0x33, 0x36, 0x5a, 0x48, 0x54, 0x54, 0x50, - 0x2d, 0x32, 0x30, 0x31, 0x66, 0x6f, 0x74, 0x6f, 0x77, 0x6f, 0x6c, 0x66, 0x45, - 0x4e, 0x44, 0x20, 0x78, 0x62, 0x6f, 0x78, 0x3a, 0x35, 0x34, 0x5a, 0x42, 0x4f, - 0x44, 0x59, 0x64, 0x69, 0x63, 0x6b, 0x3b, 0x0a, 0x7d, 0x0a, 0x65, 0x78, 0x69, - 0x74, 0x3a, 0x33, 0x35, 0x5a, 0x76, 0x61, 0x72, 0x73, 0x62, 0x65, 0x61, 0x74, - 0x27, 0x7d, 0x29, 0x3b, 0x64, 0x69, 0x65, 0x74, 0x39, 0x39, 0x39, 0x3b, 0x61, - 0x6e, 0x6e, 0x65, 0x7d, 0x7d, 0x3c, 0x2f, 0x5b, 0x69, 0x5d, 0x2e, 0x4c, 0x61, - 0x6e, 0x67, 0x6b, 0x6d, 0xc2, 0xb2, 0x77, 0x69, 0x72, 0x65, 0x74, 0x6f, 0x79, - 0x73, 0x61, 0x64, 0x64, 0x73, 0x73, 0x65, 0x61, 0x6c, 0x61, 0x6c, 0x65, 0x78, - 0x3b, 0x0a, 0x09, 0x7d, 0x65, 0x63, 0x68, 0x6f, 0x6e, 0x69, 0x6e, 0x65, 0x2e, - 0x6f, 0x72, 0x67, 0x30, 0x30, 0x35, 0x29, 0x74, 0x6f, 0x6e, 0x79, 0x6a, 0x65, - 0x77, 0x73, 0x73, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x67, 0x73, 0x72, 0x6f, 0x6f, - 0x66, 0x30, 0x30, 0x30, 0x29, 0x20, 0x32, 0x30, 0x30, 0x77, 0x69, 0x6e, 0x65, - 0x67, 0x65, 0x61, 0x72, 0x64, 0x6f, 0x67, 0x73, 0x62, 0x6f, 0x6f, 0x74, 0x67, - 0x61, 0x72, 0x79, 0x63, 0x75, 0x74, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x6d, 0x6c, 0x63, 0x6f, 0x63, - 0x6b, 0x67, 0x61, 0x6e, 0x67, 0x24, 0x28, 0x27, 0x2e, 0x35, 0x30, 0x70, 0x78, - 0x50, 0x68, 0x2e, 0x44, 0x6d, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x6e, 0x6c, - 0x6f, 0x61, 0x6e, 0x64, 0x65, 0x73, 0x6b, 0x6d, 0x69, 0x6c, 0x65, 0x72, 0x79, - 0x61, 0x6e, 0x75, 0x6e, 0x69, 0x78, 0x64, 0x69, 0x73, 0x63, 0x29, 0x3b, 0x7d, - 0x0a, 0x64, 0x75, 0x73, 0x74, 0x63, 0x6c, 0x69, 0x70, 0x29, 0x2e, 0x0a, 0x0a, - 0x37, 0x30, 0x70, 0x78, 0x2d, 0x32, 0x30, 0x30, 0x44, 0x56, 0x44, 0x73, 0x37, - 0x5d, 0x3e, 0x3c, 0x74, 0x61, 0x70, 0x65, 0x64, 0x65, 0x6d, 0x6f, 0x69, 0x2b, - 0x2b, 0x29, 0x77, 0x61, 0x67, 0x65, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x68, 0x69, - 0x6c, 0x6f, 0x70, 0x74, 0x73, 0x68, 0x6f, 0x6c, 0x65, 0x46, 0x41, 0x51, 0x73, - 0x61, 0x73, 0x69, 0x6e, 0x2d, 0x32, 0x36, 0x54, 0x6c, 0x61, 0x62, 0x73, 0x70, - 0x65, 0x74, 0x73, 0x55, 0x52, 0x4c, 0x20, 0x62, 0x75, 0x6c, 0x6b, 0x63, 0x6f, - 0x6f, 0x6b, 0x3b, 0x7d, 0x0d, 0x0a, 0x48, 0x45, 0x41, 0x44, 0x5b, 0x30, 0x5d, - 0x29, 0x61, 0x62, 0x62, 0x72, 0x6a, 0x75, 0x61, 0x6e, 0x28, 0x31, 0x39, 0x38, - 0x6c, 0x65, 0x73, 0x68, 0x74, 0x77, 0x69, 0x6e, 0x3c, 0x2f, 0x69, 0x3e, 0x73, - 0x6f, 0x6e, 0x79, 0x67, 0x75, 0x79, 0x73, 0x66, 0x75, 0x63, 0x6b, 0x70, 0x69, - 0x70, 0x65, 0x7c, 0x2d, 0x0a, 0x21, 0x30, 0x30, 0x32, 0x29, 0x6e, 0x64, 0x6f, - 0x77, 0x5b, 0x31, 0x5d, 0x3b, 0x5b, 0x5d, 0x3b, 0x0a, 0x4c, 0x6f, 0x67, 0x20, - 0x73, 0x61, 0x6c, 0x74, 0x0d, 0x0a, 0x09, 0x09, 0x62, 0x61, 0x6e, 0x67, 0x74, - 0x72, 0x69, 0x6d, 0x62, 0x61, 0x74, 0x68, 0x29, 0x7b, 0x0d, 0x0a, 0x30, 0x30, - 0x70, 0x78, 0x0a, 0x7d, 0x29, 0x3b, 0x6b, 0x6f, 0x3a, 0xec, 0x66, 0x65, 0x65, - 0x73, 0x61, 0x64, 0x3e, 0x0d, 0x73, 0x3a, 0x2f, 0x2f, 0x20, 0x5b, 0x5d, 0x3b, - 0x74, 0x6f, 0x6c, 0x6c, 0x70, 0x6c, 0x75, 0x67, 0x28, 0x29, 0x7b, 0x0a, 0x7b, - 0x0d, 0x0a, 0x20, 0x2e, 0x6a, 0x73, 0x27, 0x32, 0x30, 0x30, 0x70, 0x64, 0x75, - 0x61, 0x6c, 0x62, 0x6f, 0x61, 0x74, 0x2e, 0x4a, 0x50, 0x47, 0x29, 0x3b, 0x0a, - 0x7d, 0x71, 0x75, 0x6f, 0x74, 0x29, 0x3b, 0x0a, 0x0a, 0x27, 0x29, 0x3b, 0x0a, - 0x0d, 0x0a, 0x7d, 0x0d, 0x32, 0x30, 0x31, 0x34, 0x32, 0x30, 0x31, 0x35, 0x32, - 0x30, 0x31, 0x36, 0x32, 0x30, 0x31, 0x37, 0x32, 0x30, 0x31, 0x38, 0x32, 0x30, - 0x31, 0x39, 0x32, 0x30, 0x32, 0x30, 0x32, 0x30, 0x32, 0x31, 0x32, 0x30, 0x32, - 0x32, 0x32, 0x30, 0x32, 0x33, 0x32, 0x30, 0x32, 0x34, 0x32, 0x30, 0x32, 0x35, - 0x32, 0x30, 0x32, 0x36, 0x32, 0x30, 0x32, 0x37, 0x32, 0x30, 0x32, 0x38, 0x32, - 0x30, 0x32, 0x39, 0x32, 0x30, 0x33, 0x30, 0x32, 0x30, 0x33, 0x31, 0x32, 0x30, - 0x33, 0x32, 0x32, 0x30, 0x33, 0x33, 0x32, 0x30, 0x33, 0x34, 0x32, 0x30, 0x33, - 0x35, 0x32, 0x30, 0x33, 0x36, 0x32, 0x30, 0x33, 0x37, 0x32, 0x30, 0x31, 0x33, - 0x32, 0x30, 0x31, 0x32, 0x32, 0x30, 0x31, 0x31, 0x32, 0x30, 0x31, 0x30, 0x32, - 0x30, 0x30, 0x39, 0x32, 0x30, 0x30, 0x38, 0x32, 0x30, 0x30, 0x37, 0x32, 0x30, - 0x30, 0x36, 0x32, 0x30, 0x30, 0x35, 0x32, 0x30, 0x30, 0x34, 0x32, 0x30, 0x30, - 0x33, 0x32, 0x30, 0x30, 0x32, 0x32, 0x30, 0x30, 0x31, 0x32, 0x30, 0x30, 0x30, - 0x31, 0x39, 0x39, 0x39, 0x31, 0x39, 0x39, 0x38, 0x31, 0x39, 0x39, 0x37, 0x31, - 0x39, 0x39, 0x36, 0x31, 0x39, 0x39, 0x35, 0x31, 0x39, 0x39, 0x34, 0x31, 0x39, - 0x39, 0x33, 0x31, 0x39, 0x39, 0x32, 0x31, 0x39, 0x39, 0x31, 0x31, 0x39, 0x39, - 0x30, 0x31, 0x39, 0x38, 0x39, 0x31, 0x39, 0x38, 0x38, 0x31, 0x39, 0x38, 0x37, - 0x31, 0x39, 0x38, 0x36, 0x31, 0x39, 0x38, 0x35, 0x31, 0x39, 0x38, 0x34, 0x31, - 0x39, 0x38, 0x33, 0x31, 0x39, 0x38, 0x32, 0x31, 0x39, 0x38, 0x31, 0x31, 0x39, - 0x38, 0x30, 0x31, 0x39, 0x37, 0x39, 0x31, 0x39, 0x37, 0x38, 0x31, 0x39, 0x37, - 0x37, 0x31, 0x39, 0x37, 0x36, 0x31, 0x39, 0x37, 0x35, 0x31, 0x39, 0x37, 0x34, - 0x31, 0x39, 0x37, 0x33, 0x31, 0x39, 0x37, 0x32, 0x31, 0x39, 0x37, 0x31, 0x31, - 0x39, 0x37, 0x30, 0x31, 0x39, 0x36, 0x39, 0x31, 0x39, 0x36, 0x38, 0x31, 0x39, - 0x36, 0x37, 0x31, 0x39, 0x36, 0x36, 0x31, 0x39, 0x36, 0x35, 0x31, 0x39, 0x36, - 0x34, 0x31, 0x39, 0x36, 0x33, 0x31, 0x39, 0x36, 0x32, 0x31, 0x39, 0x36, 0x31, - 0x31, 0x39, 0x36, 0x30, 0x31, 0x39, 0x35, 0x39, 0x31, 0x39, 0x35, 0x38, 0x31, - 0x39, 0x35, 0x37, 0x31, 0x39, 0x35, 0x36, 0x31, 0x39, 0x35, 0x35, 0x31, 0x39, - 0x35, 0x34, 0x31, 0x39, 0x35, 0x33, 0x31, 0x39, 0x35, 0x32, 0x31, 0x39, 0x35, - 0x31, 0x31, 0x39, 0x35, 0x30, 0x31, 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x34, - 0x31, 0x33, 0x39, 0x34, 0x30, 0x30, 0x30, 0x30, 0x39, 0x39, 0x39, 0x39, 0x63, - 0x6f, 0x6d, 0x6f, 0x6d, 0xc3, 0xa1, 0x73, 0x65, 0x73, 0x74, 0x65, 0x65, 0x73, - 0x74, 0x61, 0x70, 0x65, 0x72, 0x6f, 0x74, 0x6f, 0x64, 0x6f, 0x68, 0x61, 0x63, - 0x65, 0x63, 0x61, 0x64, 0x61, 0x61, 0xc3, 0xb1, 0x6f, 0x62, 0x69, 0x65, 0x6e, - 0x64, 0xc3, 0xad, 0x61, 0x61, 0x73, 0xc3, 0xad, 0x76, 0x69, 0x64, 0x61, 0x63, - 0x61, 0x73, 0x6f, 0x6f, 0x74, 0x72, 0x6f, 0x66, 0x6f, 0x72, 0x6f, 0x73, 0x6f, - 0x6c, 0x6f, 0x6f, 0x74, 0x72, 0x61, 0x63, 0x75, 0x61, 0x6c, 0x64, 0x69, 0x6a, - 0x6f, 0x73, 0x69, 0x64, 0x6f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x69, 0x70, 0x6f, - 0x74, 0x65, 0x6d, 0x61, 0x64, 0x65, 0x62, 0x65, 0x61, 0x6c, 0x67, 0x6f, 0x71, - 0x75, 0xc3, 0xa9, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x61, 0x64, 0x61, 0x74, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x63, 0x6f, 0x63, 0x61, 0x73, 0x61, 0x62, 0x61, 0x6a, - 0x6f, 0x74, 0x6f, 0x64, 0x61, 0x73, 0x69, 0x6e, 0x6f, 0x61, 0x67, 0x75, 0x61, - 0x70, 0x75, 0x65, 0x73, 0x75, 0x6e, 0x6f, 0x73, 0x61, 0x6e, 0x74, 0x65, 0x64, - 0x69, 0x63, 0x65, 0x6c, 0x75, 0x69, 0x73, 0x65, 0x6c, 0x6c, 0x61, 0x6d, 0x61, - 0x79, 0x6f, 0x7a, 0x6f, 0x6e, 0x61, 0x61, 0x6d, 0x6f, 0x72, 0x70, 0x69, 0x73, - 0x6f, 0x6f, 0x62, 0x72, 0x61, 0x63, 0x6c, 0x69, 0x63, 0x65, 0x6c, 0x6c, 0x6f, - 0x64, 0x69, 0x6f, 0x73, 0x68, 0x6f, 0x72, 0x61, 0x63, 0x61, 0x73, 0x69, 0xd0, - 0xb7, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x80, - 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb7, - 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, - 0xb6, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0x9d, - 0xd0, 0xb0, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbc, 0xd1, - 0x8b, 0xd0, 0x92, 0xd1, 0x8b, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, - 0x9f, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xa0, - 0xd0, 0xa4, 0xd0, 0x9d, 0xd0, 0xb5, 0xd0, 0x9c, 0xd1, 0x8b, 0xd1, 0x82, 0xd1, - 0x8b, 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0x97, 0xd0, 0xb0, 0xd0, 0x94, 0xd0, 0xb0, 0xd0, 0x9d, 0xd1, 0x83, 0xd0, - 0x9e, 0xd0, 0xb1, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0x98, 0xd0, 0xb7, 0xd0, 0xb5, - 0xd0, 0xb9, 0xd0, 0xbd, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xa2, 0xd1, - 0x8b, 0xd1, 0x83, 0xd0, 0xb6, 0xd9, 0x81, 0xd9, 0x8a, 0xd8, 0xa3, 0xd9, 0x86, - 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x83, 0xd9, 0x84, 0xd8, - 0xa3, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x81, - 0xd9, 0x89, 0xd9, 0x87, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, - 0x83, 0xd8, 0xa7, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa8, 0xd8, 0xb3, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd9, 0x86, 0xd9, 0x87, 0xd9, 0x8a, 0xd8, - 0xa3, 0xd9, 0x8a, 0xd9, 0x82, 0xd8, 0xaf, 0xd9, 0x87, 0xd9, 0x84, 0xd8, 0xab, - 0xd9, 0x85, 0xd8, 0xa8, 0xd9, 0x87, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x84, 0xd9, - 0x8a, 0xd8, 0xa8, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x8a, 0xd8, 0xa8, 0xd9, 0x83, - 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa3, 0xd9, 0x85, 0xd9, - 0x86, 0xd8, 0xaa, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x84, 0xd9, 0x86, 0xd8, 0xad, - 0xd8, 0xa8, 0xd9, 0x87, 0xd9, 0x85, 0xd9, 0x85, 0xd8, 0xb4, 0xd9, 0x88, 0xd8, - 0xb4, 0x66, 0x69, 0x72, 0x73, 0x74, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x6d, 0x65, 0x64, 0x69, 0x61, - 0x77, 0x68, 0x69, 0x74, 0x65, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x62, 0x6c, 0x61, - 0x63, 0x6b, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x62, - 0x6f, 0x6f, 0x6b, 0x73, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x75, 0x73, 0x69, - 0x63, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x79, - 0x65, 0x61, 0x72, 0x73, 0x73, 0x74, 0x61, 0x74, 0x65, 0x74, 0x6f, 0x64, 0x61, - 0x79, 0x77, 0x61, 0x74, 0x65, 0x72, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x64, 0x65, 0x61, 0x74, 0x68, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x6e, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x74, 0x6f, 0x6f, 0x6c, - 0x73, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x73, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x67, 0x75, 0x69, 0x64, - 0x65, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x77, 0x6f, - 0x6d, 0x65, 0x6e, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x79, 0x6f, 0x75, - 0x6e, 0x67, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x66, 0x72, 0x6f, 0x6e, - 0x74, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x77, 0x61, 0x74, 0x63, 0x68, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x70, 0x72, 0x69, 0x63, 0x65, 0x72, 0x75, 0x6c, 0x65, 0x73, - 0x62, 0x65, 0x67, 0x69, 0x6e, 0x61, 0x66, 0x74, 0x65, 0x72, 0x76, 0x69, 0x73, - 0x69, 0x74, 0x69, 0x73, 0x73, 0x75, 0x65, 0x61, 0x72, 0x65, 0x61, 0x73, 0x62, - 0x65, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x70, 0x72, - 0x69, 0x6e, 0x74, 0x70, 0x72, 0x65, 0x73, 0x73, 0x62, 0x75, 0x69, 0x6c, 0x74, - 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x73, 0x70, 0x65, 0x65, 0x64, 0x73, 0x74, 0x75, - 0x64, 0x79, 0x74, 0x72, 0x61, 0x64, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x73, - 0x65, 0x6e, 0x73, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x77, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x66, 0x6c, 0x61, - 0x73, 0x68, 0x66, 0x69, 0x78, 0x65, 0x64, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x73, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x72, 0x69, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x73, 0x68, 0x61, 0x70, 0x65, - 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x67, 0x6f, 0x69, - 0x6e, 0x67, 0x6d, 0x6f, 0x76, 0x69, 0x65, 0x74, 0x68, 0x69, 0x72, 0x64, 0x62, - 0x61, 0x73, 0x69, 0x63, 0x70, 0x65, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x67, - 0x65, 0x77, 0x69, 0x64, 0x74, 0x68, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x69, 0x64, - 0x65, 0x61, 0x73, 0x77, 0x72, 0x6f, 0x74, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, - 0x75, 0x73, 0x65, 0x72, 0x73, 0x64, 0x72, 0x69, 0x76, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x76, - 0x6f, 0x69, 0x63, 0x65, 0x73, 0x69, 0x74, 0x65, 0x73, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x77, 0x68, 0x65, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x65, 0x61, 0x72, 0x74, 0x68, 0x66, 0x6f, 0x72, 0x75, 0x6d, - 0x74, 0x68, 0x72, 0x65, 0x65, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x70, 0x61, 0x72, - 0x74, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x6c, - 0x69, 0x76, 0x65, 0x73, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x75, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6f, 0x75, 0x72, 0x74, - 0x79, 0x6f, 0x75, 0x72, 0x20, 0x62, 0x69, 0x72, 0x74, 0x68, 0x70, 0x6f, 0x70, - 0x75, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x75, 0x70, 0x70, 0x65, - 0x72, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x65, 0x76, 0x65, 0x72, 0x79, 0x73, 0x68, - 0x6f, 0x77, 0x73, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x62, 0x65, 0x67, 0x61, 0x6e, 0x73, - 0x75, 0x70, 0x65, 0x72, 0x70, 0x61, 0x70, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x74, - 0x68, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x70, 0x61, 0x72, 0x74, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x62, 0x72, 0x61, - 0x6e, 0x64, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x77, 0x6f, 0x6d, 0x61, 0x6e, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x72, 0x65, 0x61, 0x64, 0x79, 0x61, 0x75, 0x64, 0x69, - 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x63, 0x61, 0x73, 0x65, 0x73, - 0x64, 0x61, 0x69, 0x6c, 0x79, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x6a, 0x75, 0x64, 0x67, 0x65, 0x74, 0x68, 0x6f, 0x73, 0x65, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x62, 0x72, 0x6f, 0x61, - 0x64, 0x63, 0x6f, 0x61, 0x73, 0x74, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x70, - 0x70, 0x6c, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x63, 0x79, 0x63, 0x6c, 0x65, - 0x73, 0x63, 0x65, 0x6e, 0x65, 0x70, 0x6c, 0x61, 0x6e, 0x73, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x71, 0x75, 0x65, 0x65, 0x6e, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x63, 0x61, 0x63, 0x68, 0x65, 0x63, 0x69, 0x76, 0x69, 0x6c, - 0x73, 0x63, 0x61, 0x6c, 0x65, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x68, 0x65, - 0x6d, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x6f, 0x79, 0x61, 0x6c, 0x61, 0x73, 0x6b, 0x65, - 0x64, 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x73, 0x74, - 0x6f, 0x63, 0x6b, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x66, 0x61, 0x69, 0x74, 0x68, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x6f, 0x66, 0x66, - 0x65, 0x72, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x6d, - 0x69, 0x67, 0x68, 0x74, 0x61, 0x6c, 0x62, 0x75, 0x6d, 0x74, 0x68, 0x69, 0x6e, - 0x6b, 0x62, 0x6c, 0x6f, 0x6f, 0x64, 0x61, 0x72, 0x72, 0x61, 0x79, 0x6d, 0x61, - 0x6a, 0x6f, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x63, 0x61, 0x6e, 0x6f, 0x6e, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x68, 0x61, 0x70, 0x70, 0x79, 0x6f, 0x63, 0x63, 0x75, - 0x72, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x66, 0x72, 0x65, 0x73, 0x68, 0x71, 0x75, - 0x69, 0x74, 0x65, 0x66, 0x69, 0x6c, 0x6d, 0x73, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x6e, 0x65, 0x65, 0x64, 0x73, 0x75, 0x72, 0x62, 0x61, 0x6e, 0x66, 0x69, 0x67, - 0x68, 0x74, 0x62, 0x61, 0x73, 0x69, 0x73, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x61, - 0x75, 0x74, 0x6f, 0x3b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x59, 0x6f, - 0x75, 0x72, 0x20, 0x73, 0x6c, 0x69, 0x64, 0x65, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x64, 0x72, 0x61, - 0x77, 0x6e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x72, 0x65, 0x61, 0x63, 0x68, 0x52, - 0x69, 0x67, 0x68, 0x74, 0x64, 0x61, 0x74, 0x65, 0x73, 0x6d, 0x61, 0x72, 0x63, - 0x68, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x67, 0x6f, 0x6f, 0x64, 0x73, 0x4c, 0x69, - 0x6e, 0x6b, 0x73, 0x64, 0x6f, 0x75, 0x62, 0x74, 0x61, 0x73, 0x79, 0x6e, 0x63, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x63, 0x68, 0x69, - 0x65, 0x66, 0x79, 0x6f, 0x75, 0x74, 0x68, 0x6e, 0x6f, 0x76, 0x65, 0x6c, 0x31, - 0x30, 0x70, 0x78, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x75, 0x6e, 0x74, 0x69, - 0x6c, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x71, 0x75, 0x65, 0x72, 0x79, 0x6a, 0x61, 0x6d, 0x65, 0x73, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x74, 0x77, 0x69, 0x63, 0x65, 0x30, 0x2c, 0x30, - 0x30, 0x30, 0x53, 0x74, 0x61, 0x72, 0x74, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x73, - 0x6f, 0x6e, 0x67, 0x73, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x68, 0x69, 0x66, 0x74, 0x77, 0x6f, 0x72, 0x74, 0x68, 0x70, 0x6f, - 0x73, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x77, 0x65, 0x65, 0x6b, 0x73, - 0x61, 0x76, 0x6f, 0x69, 0x64, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6d, 0x69, 0x6c, - 0x65, 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x6d, 0x61, 0x72, 0x74, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x6d, 0x61, 0x72, 0x6b, - 0x73, 0x72, 0x61, 0x74, 0x65, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x65, 0x78, 0x74, 0x73, - 0x73, 0x74, 0x61, 0x72, 0x73, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x3c, 0x2f, 0x68, - 0x33, 0x3e, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x68, 0x65, 0x61, 0x72, 0x64, 0x50, 0x6f, 0x77, 0x65, - 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x6f, - 0x6c, 0x69, 0x64, 0x28, 0x74, 0x68, 0x69, 0x73, 0x62, 0x72, 0x69, 0x6e, 0x67, - 0x73, 0x68, 0x69, 0x70, 0x73, 0x73, 0x74, 0x61, 0x66, 0x66, 0x74, 0x72, 0x69, - 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x2f, 0x2f, 0x2d, 0x2d, 0x3e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x65, 0x67, - 0x79, 0x70, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x31, 0x35, 0x70, 0x78, 0x3b, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x72, 0x75, 0x65, 0x22, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x62, 0x6c, 0x6f, 0x67, 0x73, 0x62, - 0x6f, 0x78, 0x22, 0x3e, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x6c, 0x65, 0x61, 0x76, - 0x65, 0x63, 0x68, 0x69, 0x6e, 0x61, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x67, 0x75, - 0x65, 0x73, 0x74, 0x3c, 0x2f, 0x68, 0x34, 0x3e, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x68, 0x65, 0x61, 0x76, 0x79, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x73, 0x65, 0x76, - 0x65, 0x6e, 0x67, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x72, 0x69, 0x6d, 0x65, 0x73, - 0x69, 0x67, 0x6e, 0x73, 0x61, 0x77, 0x61, 0x72, 0x65, 0x64, 0x61, 0x6e, 0x63, - 0x65, 0x70, 0x68, 0x61, 0x73, 0x65, 0x3e, 0x3c, 0x21, 0x2d, 0x2d, 0x65, 0x6e, - 0x5f, 0x55, 0x53, 0x26, 0x23, 0x33, 0x39, 0x3b, 0x32, 0x30, 0x30, 0x70, 0x78, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x6a, - 0x6f, 0x79, 0x61, 0x6a, 0x61, 0x78, 0x2e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x68, 0x55, 0x2e, 0x53, 0x2e, 0x20, 0x68, 0x6f, 0x6c, 0x64, - 0x73, 0x70, 0x65, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, - 0x76, 0x22, 0x3e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x69, - 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x31, 0x39, 0x39, 0x30, 0x73, 0x72, - 0x6f, 0x6d, 0x61, 0x6e, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x6a, 0x61, 0x70, 0x61, - 0x6e, 0x66, 0x61, 0x6c, 0x6c, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x61, 0x67, 0x72, 0x65, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, - 0x61, 0x62, 0x75, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x22, 0x2d, 0x2f, 0x2f, 0x57, 0x63, 0x61, 0x72, 0x64, 0x73, 0x68, - 0x69, 0x6c, 0x6c, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x50, 0x68, 0x6f, 0x74, - 0x6f, 0x74, 0x72, 0x75, 0x74, 0x68, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x2e, 0x70, - 0x68, 0x70, 0x3f, 0x73, 0x61, 0x69, 0x6e, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x6c, - 0x6c, 0x6f, 0x75, 0x69, 0x73, 0x6d, 0x65, 0x61, 0x6e, 0x74, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x62, 0x72, 0x69, 0x65, 0x66, 0x72, 0x6f, 0x77, 0x22, 0x3e, 0x67, - 0x65, 0x6e, 0x72, 0x65, 0x74, 0x72, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6b, - 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x6e, - 0x65, 0x74, 0x2f, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x74, 0x72, 0x79, 0x20, 0x7b, - 0x0a, 0x76, 0x61, 0x72, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x63, 0x6f, 0x73, - 0x74, 0x73, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x61, 0x64, 0x75, 0x6c, 0x74, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x68, 0x65, 0x6c, 0x70, 0x73, 0x63, 0x61, 0x75, 0x73, 0x65, 0x6d, 0x61, - 0x67, 0x69, 0x63, 0x6d, 0x6f, 0x74, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x69, 0x72, - 0x32, 0x35, 0x30, 0x70, 0x78, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x67, - 0x6c, 0x61, 0x73, 0x73, 0x73, 0x69, 0x64, 0x65, 0x73, 0x66, 0x75, 0x6e, 0x64, - 0x73, 0x68, 0x6f, 0x74, 0x65, 0x6c, 0x61, 0x77, 0x61, 0x72, 0x64, 0x6d, 0x6f, - 0x75, 0x74, 0x68, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x70, 0x61, 0x72, 0x69, 0x73, - 0x67, 0x69, 0x76, 0x65, 0x73, 0x64, 0x75, 0x74, 0x63, 0x68, 0x74, 0x65, 0x78, - 0x61, 0x73, 0x66, 0x72, 0x75, 0x69, 0x74, 0x6e, 0x75, 0x6c, 0x6c, 0x2c, 0x7c, - 0x7c, 0x5b, 0x5d, 0x3b, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, - 0x2d, 0x50, 0x4f, 0x53, 0x54, 0x22, 0x6f, 0x63, 0x65, 0x61, 0x6e, 0x3c, 0x62, - 0x72, 0x2f, 0x3e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x73, 0x70, 0x65, 0x61, 0x6b, - 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x62, 0x61, 0x6e, - 0x6b, 0x73, 0x63, 0x61, 0x74, 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x74, 0x32, - 0x30, 0x70, 0x78, 0x3b, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x64, 0x65, 0x61, 0x6c, - 0x73, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x75, 0x72, - 0x6c, 0x3d, 0x22, 0x70, 0x61, 0x72, 0x6b, 0x73, 0x6d, 0x6f, 0x75, 0x73, 0x65, - 0x4d, 0x6f, 0x73, 0x74, 0x20, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x61, 0x6d, 0x6f, - 0x6e, 0x67, 0x62, 0x72, 0x61, 0x69, 0x6e, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6e, - 0x6f, 0x6e, 0x65, 0x3b, 0x62, 0x61, 0x73, 0x65, 0x64, 0x63, 0x61, 0x72, 0x72, - 0x79, 0x64, 0x72, 0x61, 0x66, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x68, 0x6f, 0x6d, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x64, 0x65, 0x6c, 0x61, 0x79, 0x64, 0x72, 0x65, 0x61, 0x6d, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x64, - 0x72, 0x75, 0x67, 0x73, 0x3c, 0x21, 0x2d, 0x2d, 0x20, 0x61, 0x70, 0x72, 0x69, - 0x6c, 0x69, 0x64, 0x65, 0x61, 0x6c, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x65, 0x78, - 0x61, 0x63, 0x74, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x63, 0x6f, 0x64, 0x65, 0x73, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x56, 0x69, 0x65, 0x77, 0x20, 0x73, 0x65, 0x65, - 0x6d, 0x73, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, - 0x28, 0x32, 0x30, 0x30, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, - 0x6b, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x67, 0x72, - 0x65, 0x65, 0x6b, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x33, 0x30, 0x70, 0x78, 0x3b, 0x77, 0x68, 0x6f, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x29, 0x3b, 0x22, 0x20, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x6a, 0x6f, 0x6e, 0x65, - 0x73, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x27, 0x29, 0x3b, 0x22, 0x3e, 0x29, 0x3b, - 0x69, 0x66, 0x28, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x64, 0x61, 0x76, 0x69, 0x64, - 0x68, 0x6f, 0x72, 0x73, 0x65, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x72, 0x61, 0x69, - 0x73, 0x65, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x65, 0x6d, 0x3e, 0x62, 0x61, 0x72, 0x22, - 0x3e, 0x2e, 0x73, 0x72, 0x63, 0x3d, 0x74, 0x6f, 0x77, 0x65, 0x72, 0x61, 0x6c, - 0x74, 0x3d, 0x22, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x68, 0x65, 0x6e, 0x72, 0x79, - 0x32, 0x34, 0x70, 0x78, 0x3b, 0x73, 0x65, 0x74, 0x75, 0x70, 0x69, 0x74, 0x61, - 0x6c, 0x79, 0x73, 0x68, 0x61, 0x72, 0x70, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x74, - 0x61, 0x73, 0x74, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x73, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x67, 0x69, - 0x72, 0x6c, 0x73, 0x2f, 0x63, 0x73, 0x73, 0x2f, 0x31, 0x30, 0x30, 0x25, 0x3b, - 0x63, 0x6c, 0x75, 0x62, 0x73, 0x73, 0x74, 0x75, 0x66, 0x66, 0x62, 0x69, 0x62, - 0x6c, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x31, 0x30, 0x30, 0x30, 0x6b, - 0x6f, 0x72, 0x65, 0x61, 0x7d, 0x29, 0x3b, 0x0d, 0x0a, 0x62, 0x61, 0x6e, 0x64, - 0x73, 0x71, 0x75, 0x65, 0x75, 0x65, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x38, 0x30, - 0x70, 0x78, 0x3b, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x7b, 0x0d, 0x0a, 0x09, 0x09, - 0x61, 0x68, 0x65, 0x61, 0x64, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x72, 0x69, - 0x73, 0x68, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x22, 0x79, 0x61, 0x68, 0x6f, - 0x6f, 0x29, 0x5b, 0x30, 0x5d, 0x3b, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x66, 0x69, - 0x6e, 0x64, 0x73, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x74, 0x61, 0x73, 0x6b, 0x73, 0x55, 0x52, 0x4c, 0x20, 0x3d, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x31, 0x32, 0x70, 0x78, 0x3b, 0x70, - 0x72, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x6c, 0x6c, 0x73, 0x74, 0x75, 0x72, 0x6e, - 0x73, 0x30, 0x78, 0x36, 0x30, 0x30, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x73, 0x70, - 0x61, 0x69, 0x6e, 0x62, 0x65, 0x61, 0x63, 0x68, 0x74, 0x61, 0x78, 0x65, 0x73, - 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x2d, 0x2d, 0x3e, - 0x3c, 0x2f, 0x67, 0x69, 0x66, 0x74, 0x73, 0x73, 0x74, 0x65, 0x76, 0x65, 0x2d, - 0x6c, 0x69, 0x6e, 0x6b, 0x62, 0x6f, 0x64, 0x79, 0x2e, 0x7d, 0x29, 0x3b, 0x0a, - 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x28, 0x31, 0x39, 0x39, 0x46, 0x41, - 0x51, 0x3c, 0x2f, 0x72, 0x6f, 0x67, 0x65, 0x72, 0x66, 0x72, 0x61, 0x6e, 0x6b, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x38, 0x70, 0x78, 0x3b, 0x66, 0x65, 0x65, - 0x64, 0x73, 0x3c, 0x68, 0x31, 0x3e, 0x3c, 0x73, 0x63, 0x6f, 0x74, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x73, 0x32, 0x32, 0x70, 0x78, 0x3b, 0x64, 0x72, 0x69, 0x6e, - 0x6b, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x6c, 0x65, 0x77, 0x69, 0x73, 0x73, 0x68, - 0x61, 0x6c, 0x6c, 0x23, 0x30, 0x33, 0x39, 0x3b, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x6c, 0x6f, 0x76, 0x65, 0x64, 0x77, 0x61, 0x73, 0x74, 0x65, 0x30, 0x30, 0x70, - 0x78, 0x3b, 0x6a, 0x61, 0x3a, 0xe3, 0x82, 0x73, 0x69, 0x6d, 0x6f, 0x6e, 0x3c, - 0x66, 0x6f, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x6d, 0x65, 0x65, 0x74, - 0x73, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x68, 0x65, 0x61, 0x70, 0x74, 0x69, - 0x67, 0x68, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x64, 0x29, 0x20, 0x21, 0x3d, 0x20, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x63, 0x6c, 0x69, 0x70, 0x73, 0x72, 0x6f, 0x6f, - 0x6d, 0x73, 0x6f, 0x6e, 0x6b, 0x65, 0x79, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x6d, - 0x61, 0x69, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x66, 0x75, 0x6e, 0x6e, 0x79, 0x74, 0x72, 0x65, 0x65, 0x73, 0x63, 0x6f, - 0x6d, 0x2f, 0x22, 0x31, 0x2e, 0x6a, 0x70, 0x67, 0x77, 0x6d, 0x6f, 0x64, 0x65, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x53, 0x54, 0x41, 0x52, 0x54, 0x6c, 0x65, 0x66, - 0x74, 0x20, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x29, - 0x3b, 0x0a, 0x7d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x69, 0x72, 0x75, - 0x73, 0x63, 0x68, 0x61, 0x69, 0x72, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x77, 0x6f, - 0x72, 0x73, 0x74, 0x50, 0x61, 0x67, 0x65, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x70, 0x61, 0x74, 0x63, 0x68, 0x3c, 0x21, 0x2d, 0x2d, 0x0a, 0x6f, 0x2d, 0x63, - 0x61, 0x63, 0x66, 0x69, 0x72, 0x6d, 0x73, 0x74, 0x6f, 0x75, 0x72, 0x73, 0x2c, - 0x30, 0x30, 0x30, 0x20, 0x61, 0x73, 0x69, 0x61, 0x6e, 0x69, 0x2b, 0x2b, 0x29, - 0x7b, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x27, 0x29, 0x5b, 0x30, 0x5d, 0x69, 0x64, - 0x3d, 0x31, 0x30, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x6d, 0x65, 0x6e, 0x75, 0x20, - 0x2e, 0x32, 0x2e, 0x6d, 0x69, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x6b, 0x65, 0x76, - 0x69, 0x6e, 0x63, 0x6f, 0x61, 0x63, 0x68, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x62, - 0x72, 0x75, 0x63, 0x65, 0x32, 0x2e, 0x6a, 0x70, 0x67, 0x55, 0x52, 0x4c, 0x29, - 0x2b, 0x2e, 0x6a, 0x70, 0x67, 0x7c, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x6c, - 0x69, 0x63, 0x65, 0x68, 0x61, 0x72, 0x72, 0x79, 0x31, 0x32, 0x30, 0x22, 0x20, - 0x73, 0x77, 0x65, 0x65, 0x74, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x64, 0x69, 0x65, 0x67, 0x6f, 0x70, 0x61, 0x67, 0x65, 0x20, 0x73, - 0x77, 0x69, 0x73, 0x73, 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x23, 0x66, 0x66, 0x66, - 0x3b, 0x22, 0x3e, 0x4c, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x74, 0x72, - 0x65, 0x61, 0x74, 0x73, 0x68, 0x65, 0x65, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, - 0x31, 0x34, 0x70, 0x78, 0x3b, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x64, 0x6a, 0x61, 0x3a, 0xe3, 0x83, 0x69, - 0x64, 0x3d, 0x22, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x77, 0x6f, 0x72, 0x73, - 0x65, 0x73, 0x68, 0x6f, 0x74, 0x73, 0x2d, 0x62, 0x6f, 0x78, 0x2d, 0x64, 0x65, - 0x6c, 0x74, 0x61, 0x0a, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x65, 0x61, 0x72, 0x73, - 0x3a, 0x34, 0x38, 0x5a, 0x3c, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x72, 0x75, 0x72, - 0x61, 0x6c, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x62, - 0x61, 0x6b, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x70, 0x73, 0x3d, 0x20, 0x22, 0x22, - 0x3b, 0x70, 0x68, 0x70, 0x22, 0x3e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x33, - 0x70, 0x78, 0x3b, 0x62, 0x72, 0x69, 0x61, 0x6e, 0x68, 0x65, 0x6c, 0x6c, 0x6f, - 0x73, 0x69, 0x7a, 0x65, 0x3d, 0x6f, 0x3d, 0x25, 0x32, 0x46, 0x20, 0x6a, 0x6f, - 0x69, 0x6e, 0x6d, 0x61, 0x79, 0x62, 0x65, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x69, - 0x6d, 0x67, 0x22, 0x3e, 0x2c, 0x20, 0x66, 0x6a, 0x73, 0x69, 0x6d, 0x67, 0x22, - 0x20, 0x22, 0x29, 0x5b, 0x30, 0x5d, 0x4d, 0x54, 0x6f, 0x70, 0x42, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x6e, 0x65, 0x77, 0x6c, 0x79, 0x44, 0x61, 0x6e, 0x73, 0x6b, - 0x63, 0x7a, 0x65, 0x63, 0x68, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x6b, 0x6e, 0x6f, - 0x77, 0x73, 0x3c, 0x2f, 0x68, 0x35, 0x3e, 0x66, 0x61, 0x71, 0x22, 0x3e, 0x7a, - 0x68, 0x2d, 0x63, 0x6e, 0x31, 0x30, 0x29, 0x3b, 0x0a, 0x2d, 0x31, 0x22, 0x29, - 0x3b, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x62, 0x6c, 0x75, 0x65, 0x73, 0x74, 0x72, - 0x75, 0x6c, 0x79, 0x64, 0x61, 0x76, 0x69, 0x73, 0x2e, 0x6a, 0x73, 0x27, 0x3b, - 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x73, 0x74, 0x65, 0x65, 0x6c, 0x20, 0x79, 0x6f, - 0x75, 0x20, 0x68, 0x32, 0x3e, 0x0d, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6a, - 0x65, 0x73, 0x75, 0x73, 0x31, 0x30, 0x30, 0x25, 0x20, 0x6d, 0x65, 0x6e, 0x75, - 0x2e, 0x0d, 0x0a, 0x09, 0x0d, 0x0a, 0x77, 0x61, 0x6c, 0x65, 0x73, 0x72, 0x69, - 0x73, 0x6b, 0x73, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x64, 0x69, 0x6e, 0x67, - 0x62, 0x2d, 0x6c, 0x69, 0x6b, 0x74, 0x65, 0x61, 0x63, 0x68, 0x67, 0x69, 0x66, - 0x22, 0x20, 0x76, 0x65, 0x67, 0x61, 0x73, 0x64, 0x61, 0x6e, 0x73, 0x6b, 0x65, - 0x65, 0x73, 0x74, 0x69, 0x73, 0x68, 0x71, 0x69, 0x70, 0x73, 0x75, 0x6f, 0x6d, - 0x69, 0x73, 0x6f, 0x62, 0x72, 0x65, 0x64, 0x65, 0x73, 0x64, 0x65, 0x65, 0x6e, - 0x74, 0x72, 0x65, 0x74, 0x6f, 0x64, 0x6f, 0x73, 0x70, 0x75, 0x65, 0x64, 0x65, - 0x61, 0xc3, 0xb1, 0x6f, 0x73, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x74, 0x69, 0x65, - 0x6e, 0x65, 0x68, 0x61, 0x73, 0x74, 0x61, 0x6f, 0x74, 0x72, 0x6f, 0x73, 0x70, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x6f, 0x6e, 0x64, 0x65, 0x6e, 0x75, 0x65, 0x76, - 0x6f, 0x68, 0x61, 0x63, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6d, 0x69, - 0x73, 0x6d, 0x6f, 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x6d, 0x75, 0x6e, 0x64, 0x6f, - 0x61, 0x71, 0x75, 0xc3, 0xad, 0x64, 0xc3, 0xad, 0x61, 0x73, 0x73, 0xc3, 0xb3, - 0x6c, 0x6f, 0x61, 0x79, 0x75, 0x64, 0x61, 0x66, 0x65, 0x63, 0x68, 0x61, 0x74, - 0x6f, 0x64, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6f, 0x6d, 0x65, 0x6e, 0x6f, - 0x73, 0x64, 0x61, 0x74, 0x6f, 0x73, 0x6f, 0x74, 0x72, 0x61, 0x73, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x6f, 0x61, 0x68, 0x6f, 0x72, 0x61, - 0x6c, 0x75, 0x67, 0x61, 0x72, 0x6d, 0x61, 0x79, 0x6f, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x73, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x6e, 0x74, 0x65, 0x73, 0x66, 0x6f, 0x74, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x61, - 0x73, 0x70, 0x61, 0xc3, 0xad, 0x73, 0x6e, 0x75, 0x65, 0x76, 0x61, 0x73, 0x61, - 0x6c, 0x75, 0x64, 0x66, 0x6f, 0x72, 0x6f, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x6f, - 0x71, 0x75, 0x69, 0x65, 0x6e, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x70, 0x6f, 0x64, - 0x65, 0x72, 0x63, 0x68, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0xc3, 0xa1, 0x76, - 0x65, 0x63, 0x65, 0x73, 0x64, 0x65, 0x63, 0x69, 0x72, 0x6a, 0x6f, 0x73, 0xc3, - 0xa9, 0x65, 0x73, 0x74, 0x61, 0x72, 0x76, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x72, - 0x75, 0x70, 0x6f, 0x68, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x6c, 0x6c, 0x6f, 0x73, - 0x74, 0x65, 0x6e, 0x67, 0x6f, 0x61, 0x6d, 0x69, 0x67, 0x6f, 0x63, 0x6f, 0x73, - 0x61, 0x73, 0x6e, 0x69, 0x76, 0x65, 0x6c, 0x67, 0x65, 0x6e, 0x74, 0x65, 0x6d, - 0x69, 0x73, 0x6d, 0x61, 0x61, 0x69, 0x72, 0x65, 0x73, 0x6a, 0x75, 0x6c, 0x69, - 0x6f, 0x74, 0x65, 0x6d, 0x61, 0x73, 0x68, 0x61, 0x63, 0x69, 0x61, 0x66, 0x61, - 0x76, 0x6f, 0x72, 0x6a, 0x75, 0x6e, 0x69, 0x6f, 0x6c, 0x69, 0x62, 0x72, 0x65, - 0x70, 0x75, 0x6e, 0x74, 0x6f, 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x61, 0x75, 0x74, - 0x6f, 0x72, 0x61, 0x62, 0x72, 0x69, 0x6c, 0x62, 0x75, 0x65, 0x6e, 0x61, 0x74, - 0x65, 0x78, 0x74, 0x6f, 0x6d, 0x61, 0x72, 0x7a, 0x6f, 0x73, 0x61, 0x62, 0x65, - 0x72, 0x6c, 0x69, 0x73, 0x74, 0x61, 0x6c, 0x75, 0x65, 0x67, 0x6f, 0x63, 0xc3, - 0xb3, 0x6d, 0x6f, 0x65, 0x6e, 0x65, 0x72, 0x6f, 0x6a, 0x75, 0x65, 0x67, 0x6f, - 0x70, 0x65, 0x72, 0xc3, 0xba, 0x68, 0x61, 0x62, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x79, 0x6e, 0x75, 0x6e, 0x63, 0x61, 0x6d, 0x75, 0x6a, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x6f, 0x72, 0x66, 0x75, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x62, 0x72, - 0x6f, 0x67, 0x75, 0x73, 0x74, 0x61, 0x69, 0x67, 0x75, 0x61, 0x6c, 0x76, 0x6f, - 0x74, 0x6f, 0x73, 0x63, 0x61, 0x73, 0x6f, 0x73, 0x67, 0x75, 0xc3, 0xad, 0x61, - 0x70, 0x75, 0x65, 0x64, 0x6f, 0x73, 0x6f, 0x6d, 0x6f, 0x73, 0x61, 0x76, 0x69, - 0x73, 0x6f, 0x75, 0x73, 0x74, 0x65, 0x64, 0x64, 0x65, 0x62, 0x65, 0x6e, 0x6e, - 0x6f, 0x63, 0x68, 0x65, 0x62, 0x75, 0x73, 0x63, 0x61, 0x66, 0x61, 0x6c, 0x74, - 0x61, 0x65, 0x75, 0x72, 0x6f, 0x73, 0x73, 0x65, 0x72, 0x69, 0x65, 0x64, 0x69, - 0x63, 0x68, 0x6f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x63, 0x6c, 0x61, 0x76, 0x65, - 0x63, 0x61, 0x73, 0x61, 0x73, 0x6c, 0x65, 0xc3, 0xb3, 0x6e, 0x70, 0x6c, 0x61, - 0x7a, 0x6f, 0x6c, 0x61, 0x72, 0x67, 0x6f, 0x6f, 0x62, 0x72, 0x61, 0x73, 0x76, - 0x69, 0x73, 0x74, 0x61, 0x61, 0x70, 0x6f, 0x79, 0x6f, 0x6a, 0x75, 0x6e, 0x74, - 0x6f, 0x74, 0x72, 0x61, 0x74, 0x61, 0x76, 0x69, 0x73, 0x74, 0x6f, 0x63, 0x72, - 0x65, 0x61, 0x72, 0x63, 0x61, 0x6d, 0x70, 0x6f, 0x68, 0x65, 0x6d, 0x6f, 0x73, - 0x63, 0x69, 0x6e, 0x63, 0x6f, 0x63, 0x61, 0x72, 0x67, 0x6f, 0x70, 0x69, 0x73, - 0x6f, 0x73, 0x6f, 0x72, 0x64, 0x65, 0x6e, 0x68, 0x61, 0x63, 0x65, 0x6e, 0xc3, - 0xa1, 0x72, 0x65, 0x61, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x72, - 0x6f, 0x63, 0x65, 0x72, 0x63, 0x61, 0x70, 0x75, 0x65, 0x64, 0x61, 0x70, 0x61, - 0x70, 0x65, 0x6c, 0x6d, 0x65, 0x6e, 0x6f, 0x72, 0xc3, 0xba, 0x74, 0x69, 0x6c, - 0x63, 0x6c, 0x61, 0x72, 0x6f, 0x6a, 0x6f, 0x72, 0x67, 0x65, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x70, 0x6f, 0x6e, 0x65, 0x72, 0x74, 0x61, 0x72, 0x64, 0x65, 0x6e, - 0x61, 0x64, 0x69, 0x65, 0x6d, 0x61, 0x72, 0x63, 0x61, 0x73, 0x69, 0x67, 0x75, - 0x65, 0x65, 0x6c, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6c, 0x6f, 0x63, 0x6f, - 0x63, 0x68, 0x65, 0x6d, 0x6f, 0x74, 0x6f, 0x73, 0x6d, 0x61, 0x64, 0x72, 0x65, - 0x63, 0x6c, 0x61, 0x73, 0x65, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x6e, 0x69, 0xc3, - 0xb1, 0x6f, 0x71, 0x75, 0x65, 0x64, 0x61, 0x70, 0x61, 0x73, 0x61, 0x72, 0x62, - 0x61, 0x6e, 0x63, 0x6f, 0x68, 0x69, 0x6a, 0x6f, 0x73, 0x76, 0x69, 0x61, 0x6a, - 0x65, 0x70, 0x61, 0x62, 0x6c, 0x6f, 0xc3, 0xa9, 0x73, 0x74, 0x65, 0x76, 0x69, - 0x65, 0x6e, 0x65, 0x72, 0x65, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x6a, 0x61, 0x72, - 0x66, 0x6f, 0x6e, 0x64, 0x6f, 0x63, 0x61, 0x6e, 0x61, 0x6c, 0x6e, 0x6f, 0x72, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x72, 0x61, 0x63, 0x61, 0x75, 0x73, 0x61, 0x74, - 0x6f, 0x6d, 0x61, 0x72, 0x6d, 0x61, 0x6e, 0x6f, 0x73, 0x6c, 0x75, 0x6e, 0x65, - 0x73, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x76, 0x65, - 0x6e, 0x64, 0x6f, 0x70, 0x65, 0x73, 0x61, 0x72, 0x74, 0x69, 0x70, 0x6f, 0x73, - 0x74, 0x65, 0x6e, 0x67, 0x61, 0x6d, 0x61, 0x72, 0x63, 0x6f, 0x6c, 0x6c, 0x65, - 0x76, 0x61, 0x70, 0x61, 0x64, 0x72, 0x65, 0x75, 0x6e, 0x69, 0x64, 0x6f, 0x76, - 0x61, 0x6d, 0x6f, 0x73, 0x7a, 0x6f, 0x6e, 0x61, 0x73, 0x61, 0x6d, 0x62, 0x6f, - 0x73, 0x62, 0x61, 0x6e, 0x64, 0x61, 0x6d, 0x61, 0x72, 0x69, 0x61, 0x61, 0x62, - 0x75, 0x73, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x61, 0x73, 0x75, 0x62, 0x69, 0x72, - 0x72, 0x69, 0x6f, 0x6a, 0x61, 0x76, 0x69, 0x76, 0x69, 0x72, 0x67, 0x72, 0x61, - 0x64, 0x6f, 0x63, 0x68, 0x69, 0x63, 0x61, 0x61, 0x6c, 0x6c, 0xc3, 0xad, 0x6a, - 0x6f, 0x76, 0x65, 0x6e, 0x64, 0x69, 0x63, 0x68, 0x61, 0x65, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x61, 0x6c, 0x65, 0x73, 0x73, 0x61, 0x6c, 0x69, 0x72, 0x73, 0x75, - 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x73, 0x6f, 0x73, 0x66, 0x69, 0x6e, 0x65, 0x73, - 0x6c, 0x6c, 0x61, 0x6d, 0x61, 0x62, 0x75, 0x73, 0x63, 0x6f, 0xc3, 0xa9, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6e, 0x65, 0x67, 0x72, 0x6f, 0x70, - 0x6c, 0x61, 0x7a, 0x61, 0x68, 0x75, 0x6d, 0x6f, 0x72, 0x70, 0x61, 0x67, 0x61, - 0x72, 0x6a, 0x75, 0x6e, 0x74, 0x61, 0x64, 0x6f, 0x62, 0x6c, 0x65, 0x69, 0x73, - 0x6c, 0x61, 0x73, 0x62, 0x6f, 0x6c, 0x73, 0x61, 0x62, 0x61, 0xc3, 0xb1, 0x6f, - 0x68, 0x61, 0x62, 0x6c, 0x61, 0x6c, 0x75, 0x63, 0x68, 0x61, 0xc3, 0x81, 0x72, - 0x65, 0x61, 0x64, 0x69, 0x63, 0x65, 0x6e, 0x6a, 0x75, 0x67, 0x61, 0x72, 0x6e, - 0x6f, 0x74, 0x61, 0x73, 0x76, 0x61, 0x6c, 0x6c, 0x65, 0x61, 0x6c, 0x6c, 0xc3, - 0xa1, 0x63, 0x61, 0x72, 0x67, 0x61, 0x64, 0x6f, 0x6c, 0x6f, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x6f, 0x65, 0x73, 0x74, 0xc3, 0xa9, 0x67, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x6d, 0x61, 0x72, 0x69, 0x6f, 0x66, 0x69, 0x72, - 0x6d, 0x61, 0x63, 0x6f, 0x73, 0x74, 0x6f, 0x66, 0x69, 0x63, 0x68, 0x61, 0x70, - 0x6c, 0x61, 0x74, 0x61, 0x68, 0x6f, 0x67, 0x61, 0x72, 0x61, 0x72, 0x74, 0x65, - 0x73, 0x6c, 0x65, 0x79, 0x65, 0x73, 0x61, 0x71, 0x75, 0x65, 0x6c, 0x6d, 0x75, - 0x73, 0x65, 0x6f, 0x62, 0x61, 0x73, 0x65, 0x73, 0x70, 0x6f, 0x63, 0x6f, 0x73, - 0x6d, 0x69, 0x74, 0x61, 0x64, 0x63, 0x69, 0x65, 0x6c, 0x6f, 0x63, 0x68, 0x69, - 0x63, 0x6f, 0x6d, 0x69, 0x65, 0x64, 0x6f, 0x67, 0x61, 0x6e, 0x61, 0x72, 0x73, - 0x61, 0x6e, 0x74, 0x6f, 0x65, 0x74, 0x61, 0x70, 0x61, 0x64, 0x65, 0x62, 0x65, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x61, 0x72, 0x65, 0x64, 0x65, 0x73, 0x73, 0x69, - 0x65, 0x74, 0x65, 0x63, 0x6f, 0x72, 0x74, 0x65, 0x63, 0x6f, 0x72, 0x65, 0x61, - 0x64, 0x75, 0x64, 0x61, 0x73, 0x64, 0x65, 0x73, 0x65, 0x6f, 0x76, 0x69, 0x65, - 0x6a, 0x6f, 0x64, 0x65, 0x73, 0x65, 0x61, 0x61, 0x67, 0x75, 0x61, 0x73, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x6d, - 0x65, 0x64, 0x69, 0x75, 0x6d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, - 0x70, 0x72, 0x69, 0x6e, 0x67, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x6d, 0x6f, - 0x62, 0x69, 0x6c, 0x65, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x73, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x6c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x66, 0x72, 0x69, - 0x65, 0x6e, 0x64, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x65, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x73, - 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x63, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x6c, 0x65, 0x74, 0x74, 0x65, - 0x72, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x75, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x73, 0x63, 0x68, - 0x6f, 0x6f, 0x6c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x64, 0x65, 0x62, 0x61, 0x74, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x67, 0x75, 0x65, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x71, 0x75, 0x61, 0x72, - 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x6d, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x77, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x46, 0x72, - 0x61, 0x6e, 0x63, 0x65, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x4c, 0x6f, 0x6e, 0x64, - 0x6f, 0x6e, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, - 0x64, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, - 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x74, 0x6f, 0x67, 0x67, 0x6c, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x63, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x79, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x74, 0x74, 0x61, - 0x63, 0x6b, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x66, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x3e, - 0x6f, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x76, - 0x61, 0x6c, 0x6c, 0x65, 0x79, 0x63, 0x61, 0x75, 0x73, 0x65, 0x73, 0x6c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x76, 0x69, - 0x73, 0x75, 0x61, 0x6c, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x6d, 0x75, 0x73, 0x65, - 0x75, 0x6d, 0x6d, 0x6f, 0x76, 0x69, 0x65, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6d, 0x6f, 0x73, 0x74, 0x6c, 0x79, - 0x6d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x68, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x75, 0x72, 0x76, 0x65, 0x79, 0x62, 0x65, 0x66, - 0x6f, 0x72, 0x65, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x6d, 0x6f, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x70, 0x65, 0x65, 0x63, 0x68, 0x6d, 0x6f, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x45, 0x75, - 0x72, 0x6f, 0x70, 0x65, 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x6d, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x65, 0x6e, 0x6f, 0x75, - 0x67, 0x68, 0x63, 0x61, 0x72, 0x65, 0x65, 0x72, 0x61, 0x6e, 0x73, 0x77, 0x65, - 0x72, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6c, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x73, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x74, - 0x68, 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x79, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x65, 0x73, 0x63, 0x61, 0x70, - 0x65, 0x63, 0x68, 0x6f, 0x73, 0x65, 0x6e, 0x63, 0x68, 0x75, 0x72, 0x63, 0x68, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x63, - 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x65, 0x72, - 0x73, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x6c, 0x69, 0x73, 0x74, 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x73, - 0x69, 0x6c, 0x76, 0x65, 0x72, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x62, 0x72, 0x6f, - 0x77, 0x73, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x77, 0x69, 0x64, 0x67, 0x65, - 0x74, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, - 0x6e, 0x6f, 0x77, 0x72, 0x61, 0x70, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, 0x61, - 0x66, 0x65, 0x74, 0x79, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x70, 0x69, - 0x72, 0x69, 0x74, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x70, 0x72, 0x65, - 0x61, 0x64, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6e, 0x65, 0x65, 0x64, 0x65, - 0x64, 0x72, 0x75, 0x73, 0x73, 0x69, 0x61, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x62, - 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x63, 0x68, - 0x61, 0x72, 0x67, 0x65, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x66, 0x61, 0x63, - 0x74, 0x6f, 0x72, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x2d, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x64, - 0x68, 0x65, 0x6c, 0x70, 0x65, 0x64, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x69, - 0x6d, 0x70, 0x61, 0x63, 0x74, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x6c, - 0x77, 0x61, 0x79, 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x20, 0x62, 0x6f, 0x74, - 0x74, 0x6f, 0x6d, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x3e, 0x29, 0x7b, 0x76, 0x61, - 0x72, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x6f, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x70, 0x75, 0x73, 0x68, 0x28, - 0x63, 0x6f, 0x75, 0x70, 0x6c, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x62, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x64, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x42, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x62, 0x65, 0x61, 0x75, 0x74, - 0x79, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x66, 0x6f, 0x72, 0x67, 0x6f, 0x74, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x61, - 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x6f, 0x62, 0x69, - 0x6c, 0x65, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x75, 0x70, 0x70, 0x6c, - 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x76, 0x69, 0x65, 0x77, 0x65, 0x64, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x63, - 0x6f, 0x75, 0x72, 0x73, 0x65, 0x41, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x69, 0x73, - 0x6c, 0x61, 0x6e, 0x64, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x63, 0x6f, 0x6f, - 0x6b, 0x69, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6d, 0x61, 0x7a, - 0x6f, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x61, 0x64, 0x76, 0x69, 0x63, - 0x65, 0x69, 0x6e, 0x3c, 0x2f, 0x61, 0x3e, 0x3a, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x61, 0x6c, 0x6f, 0x67, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x42, - 0x45, 0x47, 0x49, 0x4e, 0x20, 0x4d, 0x65, 0x78, 0x69, 0x63, 0x6f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x73, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x73, 0x6c, 0x61, - 0x6e, 0x64, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x45, 0x6d, 0x70, 0x69, 0x72, - 0x65, 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x6d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x2e, 0x0a, - 0x0a, 0x4f, 0x6e, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x6d, 0x65, 0x6e, - 0x75, 0x22, 0x3e, 0x50, 0x68, 0x69, 0x6c, 0x69, 0x70, 0x61, 0x77, 0x61, 0x72, - 0x64, 0x73, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, - 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x73, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x77, 0x65, - 0x65, 0x6b, 0x6c, 0x79, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x62, 0x65, 0x68, - 0x69, 0x6e, 0x64, 0x64, 0x6f, 0x63, 0x74, 0x6f, 0x72, 0x6c, 0x6f, 0x67, 0x67, - 0x65, 0x64, 0x75, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x62, 0x3e, 0x3c, - 0x2f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x74, 0x73, - 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x64, 0x33, 0x30, 0x30, 0x70, 0x78, 0x7c, 0x63, 0x61, - 0x6e, 0x61, 0x64, 0x61, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x72, 0x61, 0x7a, - 0x69, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x6f, 0x22, - 0x3e, 0x62, 0x65, 0x79, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x6d, - 0x61, 0x72, 0x69, 0x6e, 0x65, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x63, 0x61, - 0x6d, 0x65, 0x72, 0x61, 0x3c, 0x2f, 0x68, 0x31, 0x3e, 0x0a, 0x5f, 0x66, 0x6f, - 0x72, 0x6d, 0x22, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x73, 0x74, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x2e, 0x67, 0x69, 0x66, 0x22, - 0x20, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x78, 0x66, 0x6f, 0x72, 0x64, 0x73, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x75, 0x72, 0x76, 0x69, 0x76, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x66, 0x65, - 0x6d, 0x61, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x69, 0x7a, - 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x3e, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x74, 0x68, 0x61, 0x6e, 0x6b, - 0x73, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, - 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x6e, 0x79, 0x6f, 0x6e, 0x65, 0x41, - 0x66, 0x72, 0x69, 0x63, 0x61, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x3c, 0x62, 0x72, - 0x20, 0x2f, 0x3e, 0x77, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x73, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x7c, 0x7c, 0x20, 0x7b, 0x7d, - 0x3b, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x3e, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x73, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x77, 0x72, 0x61, 0x70, 0x22, 0x3e, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x63, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x6d, 0x69, - 0x6e, 0x75, 0x74, 0x65, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x71, 0x75, 0x6f, - 0x74, 0x65, 0x73, 0x31, 0x35, 0x30, 0x70, 0x78, 0x7c, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3b, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x31, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x70, 0x72, - 0x69, 0x6e, 0x63, 0x65, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x2e, 0x70, 0x6e, - 0x67, 0x22, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x26, - 0x61, 0x6d, 0x70, 0x3b, 0x20, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2e, 0x20, - 0x57, 0x69, 0x74, 0x68, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x70, 0x72, 0x6f, 0x66, - 0x69, 0x74, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x61, 0x6e, 0x6e, 0x75, 0x61, - 0x6c, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x62, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6c, - 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x69, 0x2b, 0x2b, 0x29, 0x20, 0x7b, 0x69, 0x73, - 0x72, 0x61, 0x65, 0x6c, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x63, - 0x69, 0x64, 0x65, 0x68, 0x6f, 0x6d, 0x65, 0x22, 0x3e, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x62, 0x72, 0x61, 0x6e, 0x63, - 0x68, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x64, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x3c, 0x72, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x2d, 0x2d, - 0x26, 0x67, 0x74, 0x3b, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x73, 0x65, 0x78, - 0x75, 0x61, 0x6c, 0x62, 0x75, 0x72, 0x65, 0x61, 0x75, 0x2e, 0x6a, 0x70, 0x67, - 0x22, 0x20, 0x31, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x6f, 0x62, 0x74, 0x61, 0x69, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x73, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x65, 0x64, 0x79, 0x6d, - 0x65, 0x6e, 0x75, 0x22, 0x20, 0x6c, 0x79, 0x72, 0x69, 0x63, 0x73, 0x74, 0x6f, - 0x64, 0x61, 0x79, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x65, 0x64, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x79, 0x5f, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x46, 0x61, 0x6d, 0x69, - 0x6c, 0x79, 0x6c, 0x6f, 0x6f, 0x6b, 0x65, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x74, 0x75, 0x72, 0x6b, 0x65, 0x79, 0x29, 0x3b, 0x76, 0x61, 0x72, 0x20, 0x66, - 0x6f, 0x72, 0x65, 0x73, 0x74, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x7d, 0x65, 0x6c, - 0x73, 0x65, 0x7b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x67, - 0x3c, 0x2f, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, - 0x2e, 0x66, 0x61, 0x73, 0x74, 0x65, 0x72, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, - 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x31, 0x30, 0x70, 0x78, 0x20, 0x30, 0x70, - 0x72, 0x61, 0x67, 0x6d, 0x61, 0x66, 0x72, 0x69, 0x64, 0x61, 0x79, 0x6a, 0x75, - 0x6e, 0x69, 0x6f, 0x72, 0x64, 0x6f, 0x6c, 0x6c, 0x61, 0x72, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x35, 0x2c, 0x30, 0x30, 0x30, 0x20, 0x70, 0x61, 0x67, 0x65, 0x22, - 0x3e, 0x62, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x28, - 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x74, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x66, 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x66, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x72, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x28, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x72, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x3e, - 0x62, 0x6f, 0x64, 0x79, 0x22, 0x3e, 0x0a, 0x2a, 0x20, 0x54, 0x68, 0x65, 0x54, - 0x68, 0x6f, 0x75, 0x67, 0x68, 0x73, 0x65, 0x65, 0x69, 0x6e, 0x67, 0x6a, 0x65, - 0x72, 0x73, 0x65, 0x79, 0x4e, 0x65, 0x77, 0x73, 0x3c, 0x2f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x69, 0x6e, 0x6a, 0x75, - 0x72, 0x79, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x43, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x53, 0x54, 0x41, 0x52, 0x54, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x6e, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x70, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x62, 0x6f, - 0x78, 0x22, 0x3e, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x44, 0x61, - 0x76, 0x69, 0x64, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x41, 0x70, 0x72, 0x69, 0x6c, - 0x20, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, - 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3e, 0x6d, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x73, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x63, 0x61, - 0x6d, 0x70, 0x75, 0x73, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x7c, 0x7c, 0x20, - 0x5b, 0x5d, 0x3b, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x2e, 0x67, 0x75, 0x69, 0x74, - 0x61, 0x72, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x73, 0x68, 0x6f, 0x77, 0x65, 0x64, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x20, - 0x2e, 0x70, 0x68, 0x70, 0x22, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x6c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x77, 0x69, 0x6c, 0x73, 0x6f, 0x6e, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x72, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x73, 0x77, 0x65, - 0x64, 0x65, 0x6e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x69, - 0x6c, 0x79, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x0a, 0x0a, 0x57, 0x68, 0x69, 0x6c, 0x74, 0x61, 0x79, 0x6c, 0x6f, 0x72, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x72, 0x65, 0x73, 0x6f, 0x72, 0x74, 0x66, - 0x72, 0x65, 0x6e, 0x63, 0x68, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x29, - 0x20, 0x2b, 0x20, 0x22, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x62, 0x75, 0x79, - 0x69, 0x6e, 0x67, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3e, 0x6f, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x35, 0x70, 0x78, 0x3b, 0x22, 0x3e, - 0x76, 0x73, 0x70, 0x61, 0x63, 0x65, 0x70, 0x6f, 0x73, 0x74, 0x65, 0x72, 0x6d, - 0x61, 0x6a, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x66, 0x66, 0x65, 0x65, 0x6d, 0x61, - 0x72, 0x74, 0x69, 0x6e, 0x6d, 0x61, 0x74, 0x75, 0x72, 0x65, 0x68, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x3c, 0x2f, 0x6e, 0x61, 0x76, 0x3e, 0x6b, 0x61, 0x6e, 0x73, - 0x61, 0x73, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x73, 0x3d, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, - 0x68, 0x73, 0x70, 0x61, 0x63, 0x65, 0x30, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x20, - 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x20, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x50, 0x6f, - 0x6c, 0x73, 0x6b, 0x69, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x6a, 0x6f, 0x72, - 0x64, 0x61, 0x6e, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x20, 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x2e, 0x68, 0x74, 0x6d, - 0x6c, 0x6e, 0x65, 0x77, 0x73, 0x22, 0x3e, 0x30, 0x31, 0x2e, 0x6a, 0x70, 0x67, - 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6d, - 0x69, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x65, 0x6e, 0x69, 0x6f, 0x72, 0x49, 0x53, - 0x42, 0x4e, 0x20, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x20, 0x67, 0x75, 0x69, - 0x64, 0x65, 0x73, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x61, 0x69, 0x72, 0x2e, 0x78, 0x6d, 0x6c, 0x22, - 0x20, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x2d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x72, 0x65, 0x67, 0x45, 0x78, 0x70, 0x3a, - 0x68, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x76, 0x69, - 0x72, 0x67, 0x69, 0x6e, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x73, 0x3c, 0x2f, 0x74, - 0x72, 0x3e, 0x0d, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x09, 0x76, 0x61, - 0x72, 0x20, 0x3e, 0x27, 0x29, 0x3b, 0x0a, 0x09, 0x3c, 0x2f, 0x74, 0x64, 0x3e, - 0x0a, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x0a, 0x62, 0x61, 0x68, 0x61, 0x73, 0x61, - 0x62, 0x72, 0x61, 0x73, 0x69, 0x6c, 0x67, 0x61, 0x6c, 0x65, 0x67, 0x6f, 0x6d, - 0x61, 0x67, 0x79, 0x61, 0x72, 0x70, 0x6f, 0x6c, 0x73, 0x6b, 0x69, 0x73, 0x72, - 0x70, 0x73, 0x6b, 0x69, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0xe4, 0xb8, 0xad, - 0xe6, 0x96, 0x87, 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0xe7, 0xb9, 0x81, 0xe9, - 0xab, 0x94, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0xe4, 0xb8, 0xad, 0xe5, 0x9b, - 0xbd, 0xe6, 0x88, 0x91, 0xe4, 0xbb, 0xac, 0xe4, 0xb8, 0x80, 0xe4, 0xb8, 0xaa, - 0xe5, 0x85, 0xac, 0xe5, 0x8f, 0xb8, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe8, - 0xae, 0xba, 0xe5, 0x9d, 0x9b, 0xe5, 0x8f, 0xaf, 0xe4, 0xbb, 0xa5, 0xe6, 0x9c, - 0x8d, 0xe5, 0x8a, 0xa1, 0xe6, 0x97, 0xb6, 0xe9, 0x97, 0xb4, 0xe4, 0xb8, 0xaa, - 0xe4, 0xba, 0xba, 0xe4, 0xba, 0xa7, 0xe5, 0x93, 0x81, 0xe8, 0x87, 0xaa, 0xe5, - 0xb7, 0xb1, 0xe4, 0xbc, 0x81, 0xe4, 0xb8, 0x9a, 0xe6, 0x9f, 0xa5, 0xe7, 0x9c, - 0x8b, 0xe5, 0xb7, 0xa5, 0xe4, 0xbd, 0x9c, 0xe8, 0x81, 0x94, 0xe7, 0xb3, 0xbb, - 0xe6, 0xb2, 0xa1, 0xe6, 0x9c, 0x89, 0xe7, 0xbd, 0x91, 0xe7, 0xab, 0x99, 0xe6, - 0x89, 0x80, 0xe6, 0x9c, 0x89, 0xe8, 0xaf, 0x84, 0xe8, 0xae, 0xba, 0xe4, 0xb8, - 0xad, 0xe5, 0xbf, 0x83, 0xe6, 0x96, 0x87, 0xe7, 0xab, 0xa0, 0xe7, 0x94, 0xa8, - 0xe6, 0x88, 0xb7, 0xe9, 0xa6, 0x96, 0xe9, 0xa1, 0xb5, 0xe4, 0xbd, 0x9c, 0xe8, - 0x80, 0x85, 0xe6, 0x8a, 0x80, 0xe6, 0x9c, 0xaf, 0xe9, 0x97, 0xae, 0xe9, 0xa2, - 0x98, 0xe7, 0x9b, 0xb8, 0xe5, 0x85, 0xb3, 0xe4, 0xb8, 0x8b, 0xe8, 0xbd, 0xbd, - 0xe6, 0x90, 0x9c, 0xe7, 0xb4, 0xa2, 0xe4, 0xbd, 0xbf, 0xe7, 0x94, 0xa8, 0xe8, - 0xbd, 0xaf, 0xe4, 0xbb, 0xb6, 0xe5, 0x9c, 0xa8, 0xe7, 0xba, 0xbf, 0xe4, 0xb8, - 0xbb, 0xe9, 0xa2, 0x98, 0xe8, 0xb5, 0x84, 0xe6, 0x96, 0x99, 0xe8, 0xa7, 0x86, - 0xe9, 0xa2, 0x91, 0xe5, 0x9b, 0x9e, 0xe5, 0xa4, 0x8d, 0xe6, 0xb3, 0xa8, 0xe5, - 0x86, 0x8c, 0xe7, 0xbd, 0x91, 0xe7, 0xbb, 0x9c, 0xe6, 0x94, 0xb6, 0xe8, 0x97, - 0x8f, 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0xe6, 0x8e, 0xa8, 0xe8, 0x8d, 0x90, - 0xe5, 0xb8, 0x82, 0xe5, 0x9c, 0xba, 0xe6, 0xb6, 0x88, 0xe6, 0x81, 0xaf, 0xe7, - 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xe5, 0x8f, 0x91, 0xe5, 0xb8, 0x83, 0xe4, 0xbb, - 0x80, 0xe4, 0xb9, 0x88, 0xe5, 0xa5, 0xbd, 0xe5, 0x8f, 0x8b, 0xe7, 0x94, 0x9f, - 0xe6, 0xb4, 0xbb, 0xe5, 0x9b, 0xbe, 0xe7, 0x89, 0x87, 0xe5, 0x8f, 0x91, 0xe5, - 0xb1, 0x95, 0xe5, 0xa6, 0x82, 0xe6, 0x9e, 0x9c, 0xe6, 0x89, 0x8b, 0xe6, 0x9c, - 0xba, 0xe6, 0x96, 0xb0, 0xe9, 0x97, 0xbb, 0xe6, 0x9c, 0x80, 0xe6, 0x96, 0xb0, - 0xe6, 0x96, 0xb9, 0xe5, 0xbc, 0x8f, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe6, - 0x8f, 0x90, 0xe4, 0xbe, 0x9b, 0xe5, 0x85, 0xb3, 0xe4, 0xba, 0x8e, 0xe6, 0x9b, - 0xb4, 0xe5, 0xa4, 0x9a, 0xe8, 0xbf, 0x99, 0xe4, 0xb8, 0xaa, 0xe7, 0xb3, 0xbb, - 0xe7, 0xbb, 0x9f, 0xe7, 0x9f, 0xa5, 0xe9, 0x81, 0x93, 0xe6, 0xb8, 0xb8, 0xe6, - 0x88, 0x8f, 0xe5, 0xb9, 0xbf, 0xe5, 0x91, 0x8a, 0xe5, 0x85, 0xb6, 0xe4, 0xbb, - 0x96, 0xe5, 0x8f, 0x91, 0xe8, 0xa1, 0xa8, 0xe5, 0xae, 0x89, 0xe5, 0x85, 0xa8, - 0xe7, 0xac, 0xac, 0xe4, 0xb8, 0x80, 0xe4, 0xbc, 0x9a, 0xe5, 0x91, 0x98, 0xe8, - 0xbf, 0x9b, 0xe8, 0xa1, 0x8c, 0xe7, 0x82, 0xb9, 0xe5, 0x87, 0xbb, 0xe7, 0x89, - 0x88, 0xe6, 0x9d, 0x83, 0xe7, 0x94, 0xb5, 0xe5, 0xad, 0x90, 0xe4, 0xb8, 0x96, - 0xe7, 0x95, 0x8c, 0xe8, 0xae, 0xbe, 0xe8, 0xae, 0xa1, 0xe5, 0x85, 0x8d, 0xe8, - 0xb4, 0xb9, 0xe6, 0x95, 0x99, 0xe8, 0x82, 0xb2, 0xe5, 0x8a, 0xa0, 0xe5, 0x85, - 0xa5, 0xe6, 0xb4, 0xbb, 0xe5, 0x8a, 0xa8, 0xe4, 0xbb, 0x96, 0xe4, 0xbb, 0xac, - 0xe5, 0x95, 0x86, 0xe5, 0x93, 0x81, 0xe5, 0x8d, 0x9a, 0xe5, 0xae, 0xa2, 0xe7, - 0x8e, 0xb0, 0xe5, 0x9c, 0xa8, 0xe4, 0xb8, 0x8a, 0xe6, 0xb5, 0xb7, 0xe5, 0xa6, - 0x82, 0xe4, 0xbd, 0x95, 0xe5, 0xb7, 0xb2, 0xe7, 0xbb, 0x8f, 0xe7, 0x95, 0x99, - 0xe8, 0xa8, 0x80, 0xe8, 0xaf, 0xa6, 0xe7, 0xbb, 0x86, 0xe7, 0xa4, 0xbe, 0xe5, - 0x8c, 0xba, 0xe7, 0x99, 0xbb, 0xe5, 0xbd, 0x95, 0xe6, 0x9c, 0xac, 0xe7, 0xab, - 0x99, 0xe9, 0x9c, 0x80, 0xe8, 0xa6, 0x81, 0xe4, 0xbb, 0xb7, 0xe6, 0xa0, 0xbc, - 0xe6, 0x94, 0xaf, 0xe6, 0x8c, 0x81, 0xe5, 0x9b, 0xbd, 0xe9, 0x99, 0x85, 0xe9, - 0x93, 0xbe, 0xe6, 0x8e, 0xa5, 0xe5, 0x9b, 0xbd, 0xe5, 0xae, 0xb6, 0xe5, 0xbb, - 0xba, 0xe8, 0xae, 0xbe, 0xe6, 0x9c, 0x8b, 0xe5, 0x8f, 0x8b, 0xe9, 0x98, 0x85, - 0xe8, 0xaf, 0xbb, 0xe6, 0xb3, 0x95, 0xe5, 0xbe, 0x8b, 0xe4, 0xbd, 0x8d, 0xe7, - 0xbd, 0xae, 0xe7, 0xbb, 0x8f, 0xe6, 0xb5, 0x8e, 0xe9, 0x80, 0x89, 0xe6, 0x8b, - 0xa9, 0xe8, 0xbf, 0x99, 0xe6, 0xa0, 0xb7, 0xe5, 0xbd, 0x93, 0xe5, 0x89, 0x8d, - 0xe5, 0x88, 0x86, 0xe7, 0xb1, 0xbb, 0xe6, 0x8e, 0x92, 0xe8, 0xa1, 0x8c, 0xe5, - 0x9b, 0xa0, 0xe4, 0xb8, 0xba, 0xe4, 0xba, 0xa4, 0xe6, 0x98, 0x93, 0xe6, 0x9c, - 0x80, 0xe5, 0x90, 0x8e, 0xe9, 0x9f, 0xb3, 0xe4, 0xb9, 0x90, 0xe4, 0xb8, 0x8d, - 0xe8, 0x83, 0xbd, 0xe9, 0x80, 0x9a, 0xe8, 0xbf, 0x87, 0xe8, 0xa1, 0x8c, 0xe4, - 0xb8, 0x9a, 0xe7, 0xa7, 0x91, 0xe6, 0x8a, 0x80, 0xe5, 0x8f, 0xaf, 0xe8, 0x83, - 0xbd, 0xe8, 0xae, 0xbe, 0xe5, 0xa4, 0x87, 0xe5, 0x90, 0x88, 0xe4, 0xbd, 0x9c, - 0xe5, 0xa4, 0xa7, 0xe5, 0xae, 0xb6, 0xe7, 0xa4, 0xbe, 0xe4, 0xbc, 0x9a, 0xe7, - 0xa0, 0x94, 0xe7, 0xa9, 0xb6, 0xe4, 0xb8, 0x93, 0xe4, 0xb8, 0x9a, 0xe5, 0x85, - 0xa8, 0xe9, 0x83, 0xa8, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe8, 0xbf, 0x99, - 0xe9, 0x87, 0x8c, 0xe8, 0xbf, 0x98, 0xe6, 0x98, 0xaf, 0xe5, 0xbc, 0x80, 0xe5, - 0xa7, 0x8b, 0xe6, 0x83, 0x85, 0xe5, 0x86, 0xb5, 0xe7, 0x94, 0xb5, 0xe8, 0x84, - 0x91, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x93, 0x81, 0xe7, 0x89, 0x8c, - 0xe5, 0xb8, 0xae, 0xe5, 0x8a, 0xa9, 0xe6, 0x96, 0x87, 0xe5, 0x8c, 0x96, 0xe8, - 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0xa4, 0xa7, 0xe5, 0xad, 0xa6, 0xe5, 0xad, - 0xa6, 0xe4, 0xb9, 0xa0, 0xe5, 0x9c, 0xb0, 0xe5, 0x9d, 0x80, 0xe6, 0xb5, 0x8f, - 0xe8, 0xa7, 0x88, 0xe6, 0x8a, 0x95, 0xe8, 0xb5, 0x84, 0xe5, 0xb7, 0xa5, 0xe7, - 0xa8, 0x8b, 0xe8, 0xa6, 0x81, 0xe6, 0xb1, 0x82, 0xe6, 0x80, 0x8e, 0xe4, 0xb9, - 0x88, 0xe6, 0x97, 0xb6, 0xe5, 0x80, 0x99, 0xe5, 0x8a, 0x9f, 0xe8, 0x83, 0xbd, - 0xe4, 0xb8, 0xbb, 0xe8, 0xa6, 0x81, 0xe7, 0x9b, 0xae, 0xe5, 0x89, 0x8d, 0xe8, - 0xb5, 0x84, 0xe8, 0xae, 0xaf, 0xe5, 0x9f, 0x8e, 0xe5, 0xb8, 0x82, 0xe6, 0x96, - 0xb9, 0xe6, 0xb3, 0x95, 0xe7, 0x94, 0xb5, 0xe5, 0xbd, 0xb1, 0xe6, 0x8b, 0x9b, - 0xe8, 0x81, 0x98, 0xe5, 0xa3, 0xb0, 0xe6, 0x98, 0x8e, 0xe4, 0xbb, 0xbb, 0xe4, - 0xbd, 0x95, 0xe5, 0x81, 0xa5, 0xe5, 0xba, 0xb7, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, - 0xae, 0xe7, 0xbe, 0x8e, 0xe5, 0x9b, 0xbd, 0xe6, 0xb1, 0xbd, 0xe8, 0xbd, 0xa6, - 0xe4, 0xbb, 0x8b, 0xe7, 0xbb, 0x8d, 0xe4, 0xbd, 0x86, 0xe6, 0x98, 0xaf, 0xe4, - 0xba, 0xa4, 0xe6, 0xb5, 0x81, 0xe7, 0x94, 0x9f, 0xe4, 0xba, 0xa7, 0xe6, 0x89, - 0x80, 0xe4, 0xbb, 0xa5, 0xe7, 0x94, 0xb5, 0xe8, 0xaf, 0x9d, 0xe6, 0x98, 0xbe, - 0xe7, 0xa4, 0xba, 0xe4, 0xb8, 0x80, 0xe4, 0xba, 0x9b, 0xe5, 0x8d, 0x95, 0xe4, - 0xbd, 0x8d, 0xe4, 0xba, 0xba, 0xe5, 0x91, 0x98, 0xe5, 0x88, 0x86, 0xe6, 0x9e, - 0x90, 0xe5, 0x9c, 0xb0, 0xe5, 0x9b, 0xbe, 0xe6, 0x97, 0x85, 0xe6, 0xb8, 0xb8, - 0xe5, 0xb7, 0xa5, 0xe5, 0x85, 0xb7, 0xe5, 0xad, 0xa6, 0xe7, 0x94, 0x9f, 0xe7, - 0xb3, 0xbb, 0xe5, 0x88, 0x97, 0xe7, 0xbd, 0x91, 0xe5, 0x8f, 0x8b, 0xe5, 0xb8, - 0x96, 0xe5, 0xad, 0x90, 0xe5, 0xaf, 0x86, 0xe7, 0xa0, 0x81, 0xe9, 0xa2, 0x91, - 0xe9, 0x81, 0x93, 0xe6, 0x8e, 0xa7, 0xe5, 0x88, 0xb6, 0xe5, 0x9c, 0xb0, 0xe5, - 0x8c, 0xba, 0xe5, 0x9f, 0xba, 0xe6, 0x9c, 0xac, 0xe5, 0x85, 0xa8, 0xe5, 0x9b, - 0xbd, 0xe7, 0xbd, 0x91, 0xe4, 0xb8, 0x8a, 0xe9, 0x87, 0x8d, 0xe8, 0xa6, 0x81, - 0xe7, 0xac, 0xac, 0xe4, 0xba, 0x8c, 0xe5, 0x96, 0x9c, 0xe6, 0xac, 0xa2, 0xe8, - 0xbf, 0x9b, 0xe5, 0x85, 0xa5, 0xe5, 0x8f, 0x8b, 0xe6, 0x83, 0x85, 0xe8, 0xbf, - 0x99, 0xe4, 0xba, 0x9b, 0xe8, 0x80, 0x83, 0xe8, 0xaf, 0x95, 0xe5, 0x8f, 0x91, - 0xe7, 0x8e, 0xb0, 0xe5, 0x9f, 0xb9, 0xe8, 0xae, 0xad, 0xe4, 0xbb, 0xa5, 0xe4, - 0xb8, 0x8a, 0xe6, 0x94, 0xbf, 0xe5, 0xba, 0x9c, 0xe6, 0x88, 0x90, 0xe4, 0xb8, - 0xba, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe9, 0xa6, 0x99, 0xe6, 0xb8, 0xaf, - 0xe5, 0x90, 0x8c, 0xe6, 0x97, 0xb6, 0xe5, 0xa8, 0xb1, 0xe4, 0xb9, 0x90, 0xe5, - 0x8f, 0x91, 0xe9, 0x80, 0x81, 0xe4, 0xb8, 0x80, 0xe5, 0xae, 0x9a, 0xe5, 0xbc, - 0x80, 0xe5, 0x8f, 0x91, 0xe4, 0xbd, 0x9c, 0xe5, 0x93, 0x81, 0xe6, 0xa0, 0x87, - 0xe5, 0x87, 0x86, 0xe6, 0xac, 0xa2, 0xe8, 0xbf, 0x8e, 0xe8, 0xa7, 0xa3, 0xe5, - 0x86, 0xb3, 0xe5, 0x9c, 0xb0, 0xe6, 0x96, 0xb9, 0xe4, 0xb8, 0x80, 0xe4, 0xb8, - 0x8b, 0xe4, 0xbb, 0xa5, 0xe5, 0x8f, 0x8a, 0xe8, 0xb4, 0xa3, 0xe4, 0xbb, 0xbb, - 0xe6, 0x88, 0x96, 0xe8, 0x80, 0x85, 0xe5, 0xae, 0xa2, 0xe6, 0x88, 0xb7, 0xe4, - 0xbb, 0xa3, 0xe8, 0xa1, 0xa8, 0xe7, 0xa7, 0xaf, 0xe5, 0x88, 0x86, 0xe5, 0xa5, - 0xb3, 0xe4, 0xba, 0xba, 0xe6, 0x95, 0xb0, 0xe7, 0xa0, 0x81, 0xe9, 0x94, 0x80, - 0xe5, 0x94, 0xae, 0xe5, 0x87, 0xba, 0xe7, 0x8e, 0xb0, 0xe7, 0xa6, 0xbb, 0xe7, - 0xba, 0xbf, 0xe5, 0xba, 0x94, 0xe7, 0x94, 0xa8, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0xe4, 0xb8, 0x8d, 0xe5, 0x90, 0x8c, 0xe7, 0xbc, 0x96, 0xe8, 0xbe, 0x91, - 0xe7, 0xbb, 0x9f, 0xe8, 0xae, 0xa1, 0xe6, 0x9f, 0xa5, 0xe8, 0xaf, 0xa2, 0xe4, - 0xb8, 0x8d, 0xe8, 0xa6, 0x81, 0xe6, 0x9c, 0x89, 0xe5, 0x85, 0xb3, 0xe6, 0x9c, - 0xba, 0xe6, 0x9e, 0x84, 0xe5, 0xbe, 0x88, 0xe5, 0xa4, 0x9a, 0xe6, 0x92, 0xad, - 0xe6, 0x94, 0xbe, 0xe7, 0xbb, 0x84, 0xe7, 0xbb, 0x87, 0xe6, 0x94, 0xbf, 0xe7, - 0xad, 0x96, 0xe7, 0x9b, 0xb4, 0xe6, 0x8e, 0xa5, 0xe8, 0x83, 0xbd, 0xe5, 0x8a, - 0x9b, 0xe6, 0x9d, 0xa5, 0xe6, 0xba, 0x90, 0xe6, 0x99, 0x82, 0xe9, 0x96, 0x93, - 0xe7, 0x9c, 0x8b, 0xe5, 0x88, 0xb0, 0xe7, 0x83, 0xad, 0xe9, 0x97, 0xa8, 0xe5, - 0x85, 0xb3, 0xe9, 0x94, 0xae, 0xe4, 0xb8, 0x93, 0xe5, 0x8c, 0xba, 0xe9, 0x9d, - 0x9e, 0xe5, 0xb8, 0xb8, 0xe8, 0x8b, 0xb1, 0xe8, 0xaf, 0xad, 0xe7, 0x99, 0xbe, - 0xe5, 0xba, 0xa6, 0xe5, 0xb8, 0x8c, 0xe6, 0x9c, 0x9b, 0xe7, 0xbe, 0x8e, 0xe5, - 0xa5, 0xb3, 0xe6, 0xaf, 0x94, 0xe8, 0xbe, 0x83, 0xe7, 0x9f, 0xa5, 0xe8, 0xaf, - 0x86, 0xe8, 0xa7, 0x84, 0xe5, 0xae, 0x9a, 0xe5, 0xbb, 0xba, 0xe8, 0xae, 0xae, - 0xe9, 0x83, 0xa8, 0xe9, 0x97, 0xa8, 0xe6, 0x84, 0x8f, 0xe8, 0xa7, 0x81, 0xe7, - 0xb2, 0xbe, 0xe5, 0xbd, 0xa9, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, 0xac, 0xe6, 0x8f, - 0x90, 0xe9, 0xab, 0x98, 0xe5, 0x8f, 0x91, 0xe8, 0xa8, 0x80, 0xe6, 0x96, 0xb9, - 0xe9, 0x9d, 0xa2, 0xe5, 0x9f, 0xba, 0xe9, 0x87, 0x91, 0xe5, 0xa4, 0x84, 0xe7, - 0x90, 0x86, 0xe6, 0x9d, 0x83, 0xe9, 0x99, 0x90, 0xe5, 0xbd, 0xb1, 0xe7, 0x89, - 0x87, 0xe9, 0x93, 0xb6, 0xe8, 0xa1, 0x8c, 0xe8, 0xbf, 0x98, 0xe6, 0x9c, 0x89, - 0xe5, 0x88, 0x86, 0xe4, 0xba, 0xab, 0xe7, 0x89, 0xa9, 0xe5, 0x93, 0x81, 0xe7, - 0xbb, 0x8f, 0xe8, 0x90, 0xa5, 0xe6, 0xb7, 0xbb, 0xe5, 0x8a, 0xa0, 0xe4, 0xb8, - 0x93, 0xe5, 0xae, 0xb6, 0xe8, 0xbf, 0x99, 0xe7, 0xa7, 0x8d, 0xe8, 0xaf, 0x9d, - 0xe9, 0xa2, 0x98, 0xe8, 0xb5, 0xb7, 0xe6, 0x9d, 0xa5, 0xe4, 0xb8, 0x9a, 0xe5, - 0x8a, 0xa1, 0xe5, 0x85, 0xac, 0xe5, 0x91, 0x8a, 0xe8, 0xae, 0xb0, 0xe5, 0xbd, - 0x95, 0xe7, 0xae, 0x80, 0xe4, 0xbb, 0x8b, 0xe8, 0xb4, 0xa8, 0xe9, 0x87, 0x8f, - 0xe7, 0x94, 0xb7, 0xe4, 0xba, 0xba, 0xe5, 0xbd, 0xb1, 0xe5, 0x93, 0x8d, 0xe5, - 0xbc, 0x95, 0xe7, 0x94, 0xa8, 0xe6, 0x8a, 0xa5, 0xe5, 0x91, 0x8a, 0xe9, 0x83, - 0xa8, 0xe5, 0x88, 0x86, 0xe5, 0xbf, 0xab, 0xe9, 0x80, 0x9f, 0xe5, 0x92, 0xa8, - 0xe8, 0xaf, 0xa2, 0xe6, 0x97, 0xb6, 0xe5, 0xb0, 0x9a, 0xe6, 0xb3, 0xa8, 0xe6, - 0x84, 0x8f, 0xe7, 0x94, 0xb3, 0xe8, 0xaf, 0xb7, 0xe5, 0xad, 0xa6, 0xe6, 0xa0, - 0xa1, 0xe5, 0xba, 0x94, 0xe8, 0xaf, 0xa5, 0xe5, 0x8e, 0x86, 0xe5, 0x8f, 0xb2, - 0xe5, 0x8f, 0xaa, 0xe6, 0x98, 0xaf, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe8, - 0xb4, 0xad, 0xe4, 0xb9, 0xb0, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe4, 0xb8, - 0xba, 0xe4, 0xba, 0x86, 0xe6, 0x88, 0x90, 0xe5, 0x8a, 0x9f, 0xe8, 0xaf, 0xb4, - 0xe6, 0x98, 0x8e, 0xe4, 0xbe, 0x9b, 0xe5, 0xba, 0x94, 0xe5, 0xad, 0xa9, 0xe5, - 0xad, 0x90, 0xe4, 0xb8, 0x93, 0xe9, 0xa2, 0x98, 0xe7, 0xa8, 0x8b, 0xe5, 0xba, - 0x8f, 0xe4, 0xb8, 0x80, 0xe8, 0x88, 0xac, 0xe6, 0x9c, 0x83, 0xe5, 0x93, 0xa1, - 0xe5, 0x8f, 0xaa, 0xe6, 0x9c, 0x89, 0xe5, 0x85, 0xb6, 0xe5, 0xae, 0x83, 0xe4, - 0xbf, 0x9d, 0xe6, 0x8a, 0xa4, 0xe8, 0x80, 0x8c, 0xe4, 0xb8, 0x94, 0xe4, 0xbb, - 0x8a, 0xe5, 0xa4, 0xa9, 0xe7, 0xaa, 0x97, 0xe5, 0x8f, 0xa3, 0xe5, 0x8a, 0xa8, - 0xe6, 0x80, 0x81, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0xe7, 0x89, 0xb9, 0xe5, - 0x88, 0xab, 0xe8, 0xae, 0xa4, 0xe4, 0xb8, 0xba, 0xe5, 0xbf, 0x85, 0xe9, 0xa1, - 0xbb, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe5, 0xb0, 0x8f, 0xe8, 0xaf, 0xb4, - 0xe6, 0x88, 0x91, 0xe5, 0x80, 0x91, 0xe4, 0xbd, 0x9c, 0xe4, 0xb8, 0xba, 0xe5, - 0xaa, 0x92, 0xe4, 0xbd, 0x93, 0xe5, 0x8c, 0x85, 0xe6, 0x8b, 0xac, 0xe9, 0x82, - 0xa3, 0xe4, 0xb9, 0x88, 0xe4, 0xb8, 0x80, 0xe6, 0xa0, 0xb7, 0xe5, 0x9b, 0xbd, - 0xe5, 0x86, 0x85, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe6, 0xa0, 0xb9, 0xe6, - 0x8d, 0xae, 0xe7, 0x94, 0xb5, 0xe8, 0xa7, 0x86, 0xe5, 0xad, 0xa6, 0xe9, 0x99, - 0xa2, 0xe5, 0x85, 0xb7, 0xe6, 0x9c, 0x89, 0xe8, 0xbf, 0x87, 0xe7, 0xa8, 0x8b, - 0xe7, 0x94, 0xb1, 0xe4, 0xba, 0x8e, 0xe4, 0xba, 0xba, 0xe6, 0x89, 0x8d, 0xe5, - 0x87, 0xba, 0xe6, 0x9d, 0xa5, 0xe4, 0xb8, 0x8d, 0xe8, 0xbf, 0x87, 0xe6, 0xad, - 0xa3, 0xe5, 0x9c, 0xa8, 0xe6, 0x98, 0x8e, 0xe6, 0x98, 0x9f, 0xe6, 0x95, 0x85, - 0xe4, 0xba, 0x8b, 0xe5, 0x85, 0xb3, 0xe7, 0xb3, 0xbb, 0xe6, 0xa0, 0x87, 0xe9, - 0xa2, 0x98, 0xe5, 0x95, 0x86, 0xe5, 0x8a, 0xa1, 0xe8, 0xbe, 0x93, 0xe5, 0x85, - 0xa5, 0xe4, 0xb8, 0x80, 0xe7, 0x9b, 0xb4, 0xe5, 0x9f, 0xba, 0xe7, 0xa1, 0x80, - 0xe6, 0x95, 0x99, 0xe5, 0xad, 0xa6, 0xe4, 0xba, 0x86, 0xe8, 0xa7, 0xa3, 0xe5, - 0xbb, 0xba, 0xe7, 0xad, 0x91, 0xe7, 0xbb, 0x93, 0xe6, 0x9e, 0x9c, 0xe5, 0x85, - 0xa8, 0xe7, 0x90, 0x83, 0xe9, 0x80, 0x9a, 0xe7, 0x9f, 0xa5, 0xe8, 0xae, 0xa1, - 0xe5, 0x88, 0x92, 0xe5, 0xaf, 0xb9, 0xe4, 0xba, 0x8e, 0xe8, 0x89, 0xba, 0xe6, - 0x9c, 0xaf, 0xe7, 0x9b, 0xb8, 0xe5, 0x86, 0x8c, 0xe5, 0x8f, 0x91, 0xe7, 0x94, - 0x9f, 0xe7, 0x9c, 0x9f, 0xe7, 0x9a, 0x84, 0xe5, 0xbb, 0xba, 0xe7, 0xab, 0x8b, - 0xe7, 0xad, 0x89, 0xe7, 0xba, 0xa7, 0xe7, 0xb1, 0xbb, 0xe5, 0x9e, 0x8b, 0xe7, - 0xbb, 0x8f, 0xe9, 0xaa, 0x8c, 0xe5, 0xae, 0x9e, 0xe7, 0x8e, 0xb0, 0xe5, 0x88, - 0xb6, 0xe4, 0xbd, 0x9c, 0xe6, 0x9d, 0xa5, 0xe8, 0x87, 0xaa, 0xe6, 0xa0, 0x87, - 0xe7, 0xad, 0xbe, 0xe4, 0xbb, 0xa5, 0xe4, 0xb8, 0x8b, 0xe5, 0x8e, 0x9f, 0xe5, - 0x88, 0x9b, 0xe6, 0x97, 0xa0, 0xe6, 0xb3, 0x95, 0xe5, 0x85, 0xb6, 0xe4, 0xb8, - 0xad, 0xe5, 0x80, 0x8b, 0xe4, 0xba, 0xba, 0xe4, 0xb8, 0x80, 0xe5, 0x88, 0x87, - 0xe6, 0x8c, 0x87, 0xe5, 0x8d, 0x97, 0xe5, 0x85, 0xb3, 0xe9, 0x97, 0xad, 0xe9, - 0x9b, 0x86, 0xe5, 0x9b, 0xa2, 0xe7, 0xac, 0xac, 0xe4, 0xb8, 0x89, 0xe5, 0x85, - 0xb3, 0xe6, 0xb3, 0xa8, 0xe5, 0x9b, 0xa0, 0xe6, 0xad, 0xa4, 0xe7, 0x85, 0xa7, - 0xe7, 0x89, 0x87, 0xe6, 0xb7, 0xb1, 0xe5, 0x9c, 0xb3, 0xe5, 0x95, 0x86, 0xe4, - 0xb8, 0x9a, 0xe5, 0xb9, 0xbf, 0xe5, 0xb7, 0x9e, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, - 0x9f, 0xe9, 0xab, 0x98, 0xe7, 0xba, 0xa7, 0xe6, 0x9c, 0x80, 0xe8, 0xbf, 0x91, - 0xe7, 0xbb, 0xbc, 0xe5, 0x90, 0x88, 0xe8, 0xa1, 0xa8, 0xe7, 0xa4, 0xba, 0xe4, - 0xb8, 0x93, 0xe8, 0xbe, 0x91, 0xe8, 0xa1, 0x8c, 0xe4, 0xb8, 0xba, 0xe4, 0xba, - 0xa4, 0xe9, 0x80, 0x9a, 0xe8, 0xaf, 0x84, 0xe4, 0xbb, 0xb7, 0xe8, 0xa7, 0x89, - 0xe5, 0xbe, 0x97, 0xe7, 0xb2, 0xbe, 0xe5, 0x8d, 0x8e, 0xe5, 0xae, 0xb6, 0xe5, - 0xba, 0xad, 0xe5, 0xae, 0x8c, 0xe6, 0x88, 0x90, 0xe6, 0x84, 0x9f, 0xe8, 0xa7, - 0x89, 0xe5, 0xae, 0x89, 0xe8, 0xa3, 0x85, 0xe5, 0xbe, 0x97, 0xe5, 0x88, 0xb0, - 0xe9, 0x82, 0xae, 0xe4, 0xbb, 0xb6, 0xe5, 0x88, 0xb6, 0xe5, 0xba, 0xa6, 0xe9, - 0xa3, 0x9f, 0xe5, 0x93, 0x81, 0xe8, 0x99, 0xbd, 0xe7, 0x84, 0xb6, 0xe8, 0xbd, - 0xac, 0xe8, 0xbd, 0xbd, 0xe6, 0x8a, 0xa5, 0xe4, 0xbb, 0xb7, 0xe8, 0xae, 0xb0, - 0xe8, 0x80, 0x85, 0xe6, 0x96, 0xb9, 0xe6, 0xa1, 0x88, 0xe8, 0xa1, 0x8c, 0xe6, - 0x94, 0xbf, 0xe4, 0xba, 0xba, 0xe6, 0xb0, 0x91, 0xe7, 0x94, 0xa8, 0xe5, 0x93, - 0x81, 0xe4, 0xb8, 0x9c, 0xe8, 0xa5, 0xbf, 0xe6, 0x8f, 0x90, 0xe5, 0x87, 0xba, - 0xe9, 0x85, 0x92, 0xe5, 0xba, 0x97, 0xe7, 0x84, 0xb6, 0xe5, 0x90, 0x8e, 0xe4, - 0xbb, 0x98, 0xe6, 0xac, 0xbe, 0xe7, 0x83, 0xad, 0xe7, 0x82, 0xb9, 0xe4, 0xbb, - 0xa5, 0xe5, 0x89, 0x8d, 0xe5, 0xae, 0x8c, 0xe5, 0x85, 0xa8, 0xe5, 0x8f, 0x91, - 0xe5, 0xb8, 0x96, 0xe8, 0xae, 0xbe, 0xe7, 0xbd, 0xae, 0xe9, 0xa2, 0x86, 0xe5, - 0xaf, 0xbc, 0xe5, 0xb7, 0xa5, 0xe4, 0xb8, 0x9a, 0xe5, 0x8c, 0xbb, 0xe9, 0x99, - 0xa2, 0xe7, 0x9c, 0x8b, 0xe7, 0x9c, 0x8b, 0xe7, 0xbb, 0x8f, 0xe5, 0x85, 0xb8, - 0xe5, 0x8e, 0x9f, 0xe5, 0x9b, 0xa0, 0xe5, 0xb9, 0xb3, 0xe5, 0x8f, 0xb0, 0xe5, - 0x90, 0x84, 0xe7, 0xa7, 0x8d, 0xe5, 0xa2, 0x9e, 0xe5, 0x8a, 0xa0, 0xe6, 0x9d, - 0x90, 0xe6, 0x96, 0x99, 0xe6, 0x96, 0xb0, 0xe5, 0xa2, 0x9e, 0xe4, 0xb9, 0x8b, - 0xe5, 0x90, 0x8e, 0xe8, 0x81, 0x8c, 0xe4, 0xb8, 0x9a, 0xe6, 0x95, 0x88, 0xe6, - 0x9e, 0x9c, 0xe4, 0xbb, 0x8a, 0xe5, 0xb9, 0xb4, 0xe8, 0xae, 0xba, 0xe6, 0x96, - 0x87, 0xe6, 0x88, 0x91, 0xe5, 0x9b, 0xbd, 0xe5, 0x91, 0x8a, 0xe8, 0xaf, 0x89, - 0xe7, 0x89, 0x88, 0xe4, 0xb8, 0xbb, 0xe4, 0xbf, 0xae, 0xe6, 0x94, 0xb9, 0xe5, - 0x8f, 0x82, 0xe4, 0xb8, 0x8e, 0xe6, 0x89, 0x93, 0xe5, 0x8d, 0xb0, 0xe5, 0xbf, - 0xab, 0xe4, 0xb9, 0x90, 0xe6, 0x9c, 0xba, 0xe6, 0xa2, 0xb0, 0xe8, 0xa7, 0x82, - 0xe7, 0x82, 0xb9, 0xe5, 0xad, 0x98, 0xe5, 0x9c, 0xa8, 0xe7, 0xb2, 0xbe, 0xe7, - 0xa5, 0x9e, 0xe8, 0x8e, 0xb7, 0xe5, 0xbe, 0x97, 0xe5, 0x88, 0xa9, 0xe7, 0x94, - 0xa8, 0xe7, 0xbb, 0xa7, 0xe7, 0xbb, 0xad, 0xe4, 0xbd, 0xa0, 0xe4, 0xbb, 0xac, - 0xe8, 0xbf, 0x99, 0xe4, 0xb9, 0x88, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0xe8, - 0xaf, 0xad, 0xe8, 0xa8, 0x80, 0xe8, 0x83, 0xbd, 0xe5, 0xa4, 0x9f, 0xe9, 0x9b, - 0x85, 0xe8, 0x99, 0x8e, 0xe6, 0x93, 0x8d, 0xe4, 0xbd, 0x9c, 0xe9, 0xa3, 0x8e, - 0xe6, 0xa0, 0xbc, 0xe4, 0xb8, 0x80, 0xe8, 0xb5, 0xb7, 0xe7, 0xa7, 0x91, 0xe5, - 0xad, 0xa6, 0xe4, 0xbd, 0x93, 0xe8, 0x82, 0xb2, 0xe7, 0x9f, 0xad, 0xe4, 0xbf, - 0xa1, 0xe6, 0x9d, 0xa1, 0xe4, 0xbb, 0xb6, 0xe6, 0xb2, 0xbb, 0xe7, 0x96, 0x97, - 0xe8, 0xbf, 0x90, 0xe5, 0x8a, 0xa8, 0xe4, 0xba, 0xa7, 0xe4, 0xb8, 0x9a, 0xe4, - 0xbc, 0x9a, 0xe8, 0xae, 0xae, 0xe5, 0xaf, 0xbc, 0xe8, 0x88, 0xaa, 0xe5, 0x85, - 0x88, 0xe7, 0x94, 0x9f, 0xe8, 0x81, 0x94, 0xe7, 0x9b, 0x9f, 0xe5, 0x8f, 0xaf, - 0xe6, 0x98, 0xaf, 0xe5, 0x95, 0x8f, 0xe9, 0xa1, 0x8c, 0xe7, 0xbb, 0x93, 0xe6, - 0x9e, 0x84, 0xe4, 0xbd, 0x9c, 0xe7, 0x94, 0xa8, 0xe8, 0xb0, 0x83, 0xe6, 0x9f, - 0xa5, 0xe8, 0xb3, 0x87, 0xe6, 0x96, 0x99, 0xe8, 0x87, 0xaa, 0xe5, 0x8a, 0xa8, - 0xe8, 0xb4, 0x9f, 0xe8, 0xb4, 0xa3, 0xe5, 0x86, 0x9c, 0xe4, 0xb8, 0x9a, 0xe8, - 0xae, 0xbf, 0xe9, 0x97, 0xae, 0xe5, 0xae, 0x9e, 0xe6, 0x96, 0xbd, 0xe6, 0x8e, - 0xa5, 0xe5, 0x8f, 0x97, 0xe8, 0xae, 0xa8, 0xe8, 0xae, 0xba, 0xe9, 0x82, 0xa3, - 0xe4, 0xb8, 0xaa, 0xe5, 0x8f, 0x8d, 0xe9, 0xa6, 0x88, 0xe5, 0x8a, 0xa0, 0xe5, - 0xbc, 0xba, 0xe5, 0xa5, 0xb3, 0xe6, 0x80, 0xa7, 0xe8, 0x8c, 0x83, 0xe5, 0x9b, - 0xb4, 0xe6, 0x9c, 0x8d, 0xe5, 0x8b, 0x99, 0xe4, 0xbc, 0x91, 0xe9, 0x97, 0xb2, - 0xe4, 0xbb, 0x8a, 0xe6, 0x97, 0xa5, 0xe5, 0xae, 0xa2, 0xe6, 0x9c, 0x8d, 0xe8, - 0xa7, 0x80, 0xe7, 0x9c, 0x8b, 0xe5, 0x8f, 0x82, 0xe5, 0x8a, 0xa0, 0xe7, 0x9a, - 0x84, 0xe8, 0xaf, 0x9d, 0xe4, 0xb8, 0x80, 0xe7, 0x82, 0xb9, 0xe4, 0xbf, 0x9d, - 0xe8, 0xaf, 0x81, 0xe5, 0x9b, 0xbe, 0xe4, 0xb9, 0xa6, 0xe6, 0x9c, 0x89, 0xe6, - 0x95, 0x88, 0xe6, 0xb5, 0x8b, 0xe8, 0xaf, 0x95, 0xe7, 0xa7, 0xbb, 0xe5, 0x8a, - 0xa8, 0xe6, 0x89, 0x8d, 0xe8, 0x83, 0xbd, 0xe5, 0x86, 0xb3, 0xe5, 0xae, 0x9a, - 0xe8, 0x82, 0xa1, 0xe7, 0xa5, 0xa8, 0xe4, 0xb8, 0x8d, 0xe6, 0x96, 0xad, 0xe9, - 0x9c, 0x80, 0xe6, 0xb1, 0x82, 0xe4, 0xb8, 0x8d, 0xe5, 0xbe, 0x97, 0xe5, 0x8a, - 0x9e, 0xe6, 0xb3, 0x95, 0xe4, 0xb9, 0x8b, 0xe9, 0x97, 0xb4, 0xe9, 0x87, 0x87, - 0xe7, 0x94, 0xa8, 0xe8, 0x90, 0xa5, 0xe9, 0x94, 0x80, 0xe6, 0x8a, 0x95, 0xe8, - 0xaf, 0x89, 0xe7, 0x9b, 0xae, 0xe6, 0xa0, 0x87, 0xe7, 0x88, 0xb1, 0xe6, 0x83, - 0x85, 0xe6, 0x91, 0x84, 0xe5, 0xbd, 0xb1, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0x9b, - 0xe8, 0xa4, 0x87, 0xe8, 0xa3, 0xbd, 0xe6, 0x96, 0x87, 0xe5, 0xad, 0xa6, 0xe6, - 0x9c, 0xba, 0xe4, 0xbc, 0x9a, 0xe6, 0x95, 0xb0, 0xe5, 0xad, 0x97, 0xe8, 0xa3, - 0x85, 0xe4, 0xbf, 0xae, 0xe8, 0xb4, 0xad, 0xe7, 0x89, 0xa9, 0xe5, 0x86, 0x9c, - 0xe6, 0x9d, 0x91, 0xe5, 0x85, 0xa8, 0xe9, 0x9d, 0xa2, 0xe7, 0xb2, 0xbe, 0xe5, - 0x93, 0x81, 0xe5, 0x85, 0xb6, 0xe5, 0xae, 0x9e, 0xe4, 0xba, 0x8b, 0xe6, 0x83, - 0x85, 0xe6, 0xb0, 0xb4, 0xe5, 0xb9, 0xb3, 0xe6, 0x8f, 0x90, 0xe7, 0xa4, 0xba, - 0xe4, 0xb8, 0x8a, 0xe5, 0xb8, 0x82, 0xe8, 0xb0, 0xa2, 0xe8, 0xb0, 0xa2, 0xe6, - 0x99, 0xae, 0xe9, 0x80, 0x9a, 0xe6, 0x95, 0x99, 0xe5, 0xb8, 0x88, 0xe4, 0xb8, - 0x8a, 0xe4, 0xbc, 0xa0, 0xe7, 0xb1, 0xbb, 0xe5, 0x88, 0xab, 0xe6, 0xad, 0x8c, - 0xe6, 0x9b, 0xb2, 0xe6, 0x8b, 0xa5, 0xe6, 0x9c, 0x89, 0xe5, 0x88, 0x9b, 0xe6, - 0x96, 0xb0, 0xe9, 0x85, 0x8d, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0xaa, 0xe8, 0xa6, - 0x81, 0xe6, 0x97, 0xb6, 0xe4, 0xbb, 0xa3, 0xe8, 0xb3, 0x87, 0xe8, 0xa8, 0x8a, - 0xe8, 0xbe, 0xbe, 0xe5, 0x88, 0xb0, 0xe4, 0xba, 0xba, 0xe7, 0x94, 0x9f, 0xe8, - 0xae, 0xa2, 0xe9, 0x98, 0x85, 0xe8, 0x80, 0x81, 0xe5, 0xb8, 0x88, 0xe5, 0xb1, - 0x95, 0xe7, 0xa4, 0xba, 0xe5, 0xbf, 0x83, 0xe7, 0x90, 0x86, 0xe8, 0xb4, 0xb4, - 0xe5, 0xad, 0x90, 0xe7, 0xb6, 0xb2, 0xe7, 0xab, 0x99, 0xe4, 0xb8, 0xbb, 0xe9, - 0xa1, 0x8c, 0xe8, 0x87, 0xaa, 0xe7, 0x84, 0xb6, 0xe7, 0xba, 0xa7, 0xe5, 0x88, - 0xab, 0xe7, 0xae, 0x80, 0xe5, 0x8d, 0x95, 0xe6, 0x94, 0xb9, 0xe9, 0x9d, 0xa9, - 0xe9, 0x82, 0xa3, 0xe4, 0xba, 0x9b, 0xe6, 0x9d, 0xa5, 0xe8, 0xaf, 0xb4, 0xe6, - 0x89, 0x93, 0xe5, 0xbc, 0x80, 0xe4, 0xbb, 0xa3, 0xe7, 0xa0, 0x81, 0xe5, 0x88, - 0xa0, 0xe9, 0x99, 0xa4, 0xe8, 0xaf, 0x81, 0xe5, 0x88, 0xb8, 0xe8, 0x8a, 0x82, - 0xe7, 0x9b, 0xae, 0xe9, 0x87, 0x8d, 0xe7, 0x82, 0xb9, 0xe6, 0xac, 0xa1, 0xe6, - 0x95, 0xb8, 0xe5, 0xa4, 0x9a, 0xe5, 0xb0, 0x91, 0xe8, 0xa7, 0x84, 0xe5, 0x88, - 0x92, 0xe8, 0xb5, 0x84, 0xe9, 0x87, 0x91, 0xe6, 0x89, 0xbe, 0xe5, 0x88, 0xb0, - 0xe4, 0xbb, 0xa5, 0xe5, 0x90, 0x8e, 0xe5, 0xa4, 0xa7, 0xe5, 0x85, 0xa8, 0xe4, - 0xb8, 0xbb, 0xe9, 0xa1, 0xb5, 0xe6, 0x9c, 0x80, 0xe4, 0xbd, 0xb3, 0xe5, 0x9b, - 0x9e, 0xe7, 0xad, 0x94, 0xe5, 0xa4, 0xa9, 0xe4, 0xb8, 0x8b, 0xe4, 0xbf, 0x9d, - 0xe9, 0x9a, 0x9c, 0xe7, 0x8e, 0xb0, 0xe4, 0xbb, 0xa3, 0xe6, 0xa3, 0x80, 0xe6, - 0x9f, 0xa5, 0xe6, 0x8a, 0x95, 0xe7, 0xa5, 0xa8, 0xe5, 0xb0, 0x8f, 0xe6, 0x97, - 0xb6, 0xe6, 0xb2, 0x92, 0xe6, 0x9c, 0x89, 0xe6, 0xad, 0xa3, 0xe5, 0xb8, 0xb8, - 0xe7, 0x94, 0x9a, 0xe8, 0x87, 0xb3, 0xe4, 0xbb, 0xa3, 0xe7, 0x90, 0x86, 0xe7, - 0x9b, 0xae, 0xe5, 0xbd, 0x95, 0xe5, 0x85, 0xac, 0xe5, 0xbc, 0x80, 0xe5, 0xa4, - 0x8d, 0xe5, 0x88, 0xb6, 0xe9, 0x87, 0x91, 0xe8, 0x9e, 0x8d, 0xe5, 0xb9, 0xb8, - 0xe7, 0xa6, 0x8f, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0xa2, 0xe6, - 0x88, 0x90, 0xe5, 0x87, 0x86, 0xe5, 0xa4, 0x87, 0xe8, 0xa1, 0x8c, 0xe6, 0x83, - 0x85, 0xe5, 0x9b, 0x9e, 0xe5, 0x88, 0xb0, 0xe6, 0x80, 0x9d, 0xe6, 0x83, 0xb3, - 0xe6, 0x80, 0x8e, 0xe6, 0xa0, 0xb7, 0xe5, 0x8d, 0x8f, 0xe8, 0xae, 0xae, 0xe8, - 0xae, 0xa4, 0xe8, 0xaf, 0x81, 0xe6, 0x9c, 0x80, 0xe5, 0xa5, 0xbd, 0xe4, 0xba, - 0xa7, 0xe7, 0x94, 0x9f, 0xe6, 0x8c, 0x89, 0xe7, 0x85, 0xa7, 0xe6, 0x9c, 0x8d, - 0xe8, 0xa3, 0x85, 0xe5, 0xb9, 0xbf, 0xe4, 0xb8, 0x9c, 0xe5, 0x8a, 0xa8, 0xe6, - 0xbc, 0xab, 0xe9, 0x87, 0x87, 0xe8, 0xb4, 0xad, 0xe6, 0x96, 0xb0, 0xe6, 0x89, - 0x8b, 0xe7, 0xbb, 0x84, 0xe5, 0x9b, 0xbe, 0xe9, 0x9d, 0xa2, 0xe6, 0x9d, 0xbf, - 0xe5, 0x8f, 0x82, 0xe8, 0x80, 0x83, 0xe6, 0x94, 0xbf, 0xe6, 0xb2, 0xbb, 0xe5, - 0xae, 0xb9, 0xe6, 0x98, 0x93, 0xe5, 0xa4, 0xa9, 0xe5, 0x9c, 0xb0, 0xe5, 0x8a, - 0xaa, 0xe5, 0x8a, 0x9b, 0xe4, 0xba, 0xba, 0xe4, 0xbb, 0xac, 0xe5, 0x8d, 0x87, - 0xe7, 0xba, 0xa7, 0xe9, 0x80, 0x9f, 0xe5, 0xba, 0xa6, 0xe4, 0xba, 0xba, 0xe7, - 0x89, 0xa9, 0xe8, 0xb0, 0x83, 0xe6, 0x95, 0xb4, 0xe6, 0xb5, 0x81, 0xe8, 0xa1, - 0x8c, 0xe9, 0x80, 0xa0, 0xe6, 0x88, 0x90, 0xe6, 0x96, 0x87, 0xe5, 0xad, 0x97, - 0xe9, 0x9f, 0xa9, 0xe5, 0x9b, 0xbd, 0xe8, 0xb4, 0xb8, 0xe6, 0x98, 0x93, 0xe5, - 0xbc, 0x80, 0xe5, 0xb1, 0x95, 0xe7, 0x9b, 0xb8, 0xe9, 0x97, 0x9c, 0xe8, 0xa1, - 0xa8, 0xe7, 0x8e, 0xb0, 0xe5, 0xbd, 0xb1, 0xe8, 0xa7, 0x86, 0xe5, 0xa6, 0x82, - 0xe6, 0xad, 0xa4, 0xe7, 0xbe, 0x8e, 0xe5, 0xae, 0xb9, 0xe5, 0xa4, 0xa7, 0xe5, - 0xb0, 0x8f, 0xe6, 0x8a, 0xa5, 0xe9, 0x81, 0x93, 0xe6, 0x9d, 0xa1, 0xe6, 0xac, - 0xbe, 0xe5, 0xbf, 0x83, 0xe6, 0x83, 0x85, 0xe8, 0xae, 0xb8, 0xe5, 0xa4, 0x9a, - 0xe6, 0xb3, 0x95, 0xe8, 0xa7, 0x84, 0xe5, 0xae, 0xb6, 0xe5, 0xb1, 0x85, 0xe4, - 0xb9, 0xa6, 0xe5, 0xba, 0x97, 0xe8, 0xbf, 0x9e, 0xe6, 0x8e, 0xa5, 0xe7, 0xab, - 0x8b, 0xe5, 0x8d, 0xb3, 0xe4, 0xb8, 0xbe, 0xe6, 0x8a, 0xa5, 0xe6, 0x8a, 0x80, - 0xe5, 0xb7, 0xa7, 0xe5, 0xa5, 0xa5, 0xe8, 0xbf, 0x90, 0xe7, 0x99, 0xbb, 0xe5, - 0x85, 0xa5, 0xe4, 0xbb, 0xa5, 0xe6, 0x9d, 0xa5, 0xe7, 0x90, 0x86, 0xe8, 0xae, - 0xba, 0xe4, 0xba, 0x8b, 0xe4, 0xbb, 0xb6, 0xe8, 0x87, 0xaa, 0xe7, 0x94, 0xb1, - 0xe4, 0xb8, 0xad, 0xe5, 0x8d, 0x8e, 0xe5, 0x8a, 0x9e, 0xe5, 0x85, 0xac, 0xe5, - 0xa6, 0x88, 0xe5, 0xa6, 0x88, 0xe7, 0x9c, 0x9f, 0xe6, 0xad, 0xa3, 0xe4, 0xb8, - 0x8d, 0xe9, 0x94, 0x99, 0xe5, 0x85, 0xa8, 0xe6, 0x96, 0x87, 0xe5, 0x90, 0x88, - 0xe5, 0x90, 0x8c, 0xe4, 0xbb, 0xb7, 0xe5, 0x80, 0xbc, 0xe5, 0x88, 0xab, 0xe4, - 0xba, 0xba, 0xe7, 0x9b, 0x91, 0xe7, 0x9d, 0xa3, 0xe5, 0x85, 0xb7, 0xe4, 0xbd, - 0x93, 0xe4, 0xb8, 0x96, 0xe7, 0xba, 0xaa, 0xe5, 0x9b, 0xa2, 0xe9, 0x98, 0x9f, - 0xe5, 0x88, 0x9b, 0xe4, 0xb8, 0x9a, 0xe6, 0x89, 0xbf, 0xe6, 0x8b, 0x85, 0xe5, - 0xa2, 0x9e, 0xe9, 0x95, 0xbf, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0xba, 0xe4, 0xbf, - 0x9d, 0xe6, 0x8c, 0x81, 0xe5, 0x95, 0x86, 0xe5, 0xae, 0xb6, 0xe7, 0xbb, 0xb4, - 0xe4, 0xbf, 0xae, 0xe5, 0x8f, 0xb0, 0xe6, 0xb9, 0xbe, 0xe5, 0xb7, 0xa6, 0xe5, - 0x8f, 0xb3, 0xe8, 0x82, 0xa1, 0xe4, 0xbb, 0xbd, 0xe7, 0xad, 0x94, 0xe6, 0xa1, - 0x88, 0xe5, 0xae, 0x9e, 0xe9, 0x99, 0x85, 0xe7, 0x94, 0xb5, 0xe4, 0xbf, 0xa1, - 0xe7, 0xbb, 0x8f, 0xe7, 0x90, 0x86, 0xe7, 0x94, 0x9f, 0xe5, 0x91, 0xbd, 0xe5, - 0xae, 0xa3, 0xe4, 0xbc, 0xa0, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, 0xe6, 0xad, - 0xa3, 0xe5, 0xbc, 0x8f, 0xe7, 0x89, 0xb9, 0xe8, 0x89, 0xb2, 0xe4, 0xb8, 0x8b, - 0xe6, 0x9d, 0xa5, 0xe5, 0x8d, 0x8f, 0xe4, 0xbc, 0x9a, 0xe5, 0x8f, 0xaa, 0xe8, - 0x83, 0xbd, 0xe5, 0xbd, 0x93, 0xe7, 0x84, 0xb6, 0xe9, 0x87, 0x8d, 0xe6, 0x96, - 0xb0, 0xe5, 0x85, 0xa7, 0xe5, 0xae, 0xb9, 0xe6, 0x8c, 0x87, 0xe5, 0xaf, 0xbc, - 0xe8, 0xbf, 0x90, 0xe8, 0xa1, 0x8c, 0xe6, 0x97, 0xa5, 0xe5, 0xbf, 0x97, 0xe8, - 0xb3, 0xa3, 0xe5, 0xae, 0xb6, 0xe8, 0xb6, 0x85, 0xe8, 0xbf, 0x87, 0xe5, 0x9c, - 0x9f, 0xe5, 0x9c, 0xb0, 0xe6, 0xb5, 0x99, 0xe6, 0xb1, 0x9f, 0xe6, 0x94, 0xaf, - 0xe4, 0xbb, 0x98, 0xe6, 0x8e, 0xa8, 0xe5, 0x87, 0xba, 0xe7, 0xab, 0x99, 0xe9, - 0x95, 0xbf, 0xe6, 0x9d, 0xad, 0xe5, 0xb7, 0x9e, 0xe6, 0x89, 0xa7, 0xe8, 0xa1, - 0x8c, 0xe5, 0x88, 0xb6, 0xe9, 0x80, 0xa0, 0xe4, 0xb9, 0x8b, 0xe4, 0xb8, 0x80, - 0xe6, 0x8e, 0xa8, 0xe5, 0xb9, 0xbf, 0xe7, 0x8e, 0xb0, 0xe5, 0x9c, 0xba, 0xe6, - 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0xe5, 0x8f, 0x98, 0xe5, 0x8c, 0x96, 0xe4, 0xbc, - 0xa0, 0xe7, 0xbb, 0x9f, 0xe6, 0xad, 0x8c, 0xe6, 0x89, 0x8b, 0xe4, 0xbf, 0x9d, - 0xe9, 0x99, 0xa9, 0xe8, 0xaf, 0xbe, 0xe7, 0xa8, 0x8b, 0xe5, 0x8c, 0xbb, 0xe7, - 0x96, 0x97, 0xe7, 0xbb, 0x8f, 0xe8, 0xbf, 0x87, 0xe8, 0xbf, 0x87, 0xe5, 0x8e, - 0xbb, 0xe4, 0xb9, 0x8b, 0xe5, 0x89, 0x8d, 0xe6, 0x94, 0xb6, 0xe5, 0x85, 0xa5, - 0xe5, 0xb9, 0xb4, 0xe5, 0xba, 0xa6, 0xe6, 0x9d, 0x82, 0xe5, 0xbf, 0x97, 0xe7, - 0xbe, 0x8e, 0xe4, 0xb8, 0xbd, 0xe6, 0x9c, 0x80, 0xe9, 0xab, 0x98, 0xe7, 0x99, - 0xbb, 0xe9, 0x99, 0x86, 0xe6, 0x9c, 0xaa, 0xe6, 0x9d, 0xa5, 0xe5, 0x8a, 0xa0, - 0xe5, 0xb7, 0xa5, 0xe5, 0x85, 0x8d, 0xe8, 0xb4, 0xa3, 0xe6, 0x95, 0x99, 0xe7, - 0xa8, 0x8b, 0xe7, 0x89, 0x88, 0xe5, 0x9d, 0x97, 0xe8, 0xba, 0xab, 0xe4, 0xbd, - 0x93, 0xe9, 0x87, 0x8d, 0xe5, 0xba, 0x86, 0xe5, 0x87, 0xba, 0xe5, 0x94, 0xae, - 0xe6, 0x88, 0x90, 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0xa2, 0xe5, 0xbc, 0x8f, 0xe5, - 0x9c, 0x9f, 0xe8, 0xb1, 0x86, 0xe5, 0x87, 0xba, 0xe5, 0x83, 0xb9, 0xe4, 0xb8, - 0x9c, 0xe6, 0x96, 0xb9, 0xe9, 0x82, 0xae, 0xe7, 0xae, 0xb1, 0xe5, 0x8d, 0x97, - 0xe4, 0xba, 0xac, 0xe6, 0xb1, 0x82, 0xe8, 0x81, 0x8c, 0xe5, 0x8f, 0x96, 0xe5, - 0xbe, 0x97, 0xe8, 0x81, 0x8c, 0xe4, 0xbd, 0x8d, 0xe7, 0x9b, 0xb8, 0xe4, 0xbf, - 0xa1, 0xe9, 0xa1, 0xb5, 0xe9, 0x9d, 0xa2, 0xe5, 0x88, 0x86, 0xe9, 0x92, 0x9f, - 0xe7, 0xbd, 0x91, 0xe9, 0xa1, 0xb5, 0xe7, 0xa1, 0xae, 0xe5, 0xae, 0x9a, 0xe5, - 0x9b, 0xbe, 0xe4, 0xbe, 0x8b, 0xe7, 0xbd, 0x91, 0xe5, 0x9d, 0x80, 0xe7, 0xa7, - 0xaf, 0xe6, 0x9e, 0x81, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, 0xe7, 0x9b, 0xae, - 0xe7, 0x9a, 0x84, 0xe5, 0xae, 0x9d, 0xe8, 0xb4, 0x9d, 0xe6, 0x9c, 0xba, 0xe5, - 0x85, 0xb3, 0xe9, 0xa3, 0x8e, 0xe9, 0x99, 0xa9, 0xe6, 0x8e, 0x88, 0xe6, 0x9d, - 0x83, 0xe7, 0x97, 0x85, 0xe6, 0xaf, 0x92, 0xe5, 0xae, 0xa0, 0xe7, 0x89, 0xa9, - 0xe9, 0x99, 0xa4, 0xe4, 0xba, 0x86, 0xe8, 0xa9, 0x95, 0xe8, 0xab, 0x96, 0xe7, - 0x96, 0xbe, 0xe7, 0x97, 0x85, 0xe5, 0x8f, 0x8a, 0xe6, 0x97, 0xb6, 0xe6, 0xb1, - 0x82, 0xe8, 0xb4, 0xad, 0xe7, 0xab, 0x99, 0xe7, 0x82, 0xb9, 0xe5, 0x84, 0xbf, - 0xe7, 0xab, 0xa5, 0xe6, 0xaf, 0x8f, 0xe5, 0xa4, 0xa9, 0xe4, 0xb8, 0xad, 0xe5, - 0xa4, 0xae, 0xe8, 0xae, 0xa4, 0xe8, 0xaf, 0x86, 0xe6, 0xaf, 0x8f, 0xe4, 0xb8, - 0xaa, 0xe5, 0xa4, 0xa9, 0xe6, 0xb4, 0xa5, 0xe5, 0xad, 0x97, 0xe4, 0xbd, 0x93, - 0xe5, 0x8f, 0xb0, 0xe7, 0x81, 0xa3, 0xe7, 0xbb, 0xb4, 0xe6, 0x8a, 0xa4, 0xe6, - 0x9c, 0xac, 0xe9, 0xa1, 0xb5, 0xe4, 0xb8, 0xaa, 0xe6, 0x80, 0xa7, 0xe5, 0xae, - 0x98, 0xe6, 0x96, 0xb9, 0xe5, 0xb8, 0xb8, 0xe8, 0xa7, 0x81, 0xe7, 0x9b, 0xb8, - 0xe6, 0x9c, 0xba, 0xe6, 0x88, 0x98, 0xe7, 0x95, 0xa5, 0xe5, 0xba, 0x94, 0xe5, - 0xbd, 0x93, 0xe5, 0xbe, 0x8b, 0xe5, 0xb8, 0x88, 0xe6, 0x96, 0xb9, 0xe4, 0xbe, - 0xbf, 0xe6, 0xa0, 0xa1, 0xe5, 0x9b, 0xad, 0xe8, 0x82, 0xa1, 0xe5, 0xb8, 0x82, - 0xe6, 0x88, 0xbf, 0xe5, 0xb1, 0x8b, 0xe6, 0xa0, 0x8f, 0xe7, 0x9b, 0xae, 0xe5, - 0x91, 0x98, 0xe5, 0xb7, 0xa5, 0xe5, 0xaf, 0xbc, 0xe8, 0x87, 0xb4, 0xe7, 0xaa, - 0x81, 0xe7, 0x84, 0xb6, 0xe9, 0x81, 0x93, 0xe5, 0x85, 0xb7, 0xe6, 0x9c, 0xac, - 0xe7, 0xbd, 0x91, 0xe7, 0xbb, 0x93, 0xe5, 0x90, 0x88, 0xe6, 0xa1, 0xa3, 0xe6, - 0xa1, 0x88, 0xe5, 0x8a, 0xb3, 0xe5, 0x8a, 0xa8, 0xe5, 0x8f, 0xa6, 0xe5, 0xa4, - 0x96, 0xe7, 0xbe, 0x8e, 0xe5, 0x85, 0x83, 0xe5, 0xbc, 0x95, 0xe8, 0xb5, 0xb7, - 0xe6, 0x94, 0xb9, 0xe5, 0x8f, 0x98, 0xe7, 0xac, 0xac, 0xe5, 0x9b, 0x9b, 0xe4, - 0xbc, 0x9a, 0xe8, 0xae, 0xa1, 0xe8, 0xaa, 0xaa, 0xe6, 0x98, 0x8e, 0xe9, 0x9a, - 0x90, 0xe7, 0xa7, 0x81, 0xe5, 0xae, 0x9d, 0xe5, 0xae, 0x9d, 0xe8, 0xa7, 0x84, - 0xe8, 0x8c, 0x83, 0xe6, 0xb6, 0x88, 0xe8, 0xb4, 0xb9, 0xe5, 0x85, 0xb1, 0xe5, - 0x90, 0x8c, 0xe5, 0xbf, 0x98, 0xe8, 0xae, 0xb0, 0xe4, 0xbd, 0x93, 0xe7, 0xb3, - 0xbb, 0xe5, 0xb8, 0xa6, 0xe6, 0x9d, 0xa5, 0xe5, 0x90, 0x8d, 0xe5, 0xad, 0x97, - 0xe7, 0x99, 0xbc, 0xe8, 0xa1, 0xa8, 0xe5, 0xbc, 0x80, 0xe6, 0x94, 0xbe, 0xe5, - 0x8a, 0xa0, 0xe7, 0x9b, 0x9f, 0xe5, 0x8f, 0x97, 0xe5, 0x88, 0xb0, 0xe4, 0xba, - 0x8c, 0xe6, 0x89, 0x8b, 0xe5, 0xa4, 0xa7, 0xe9, 0x87, 0x8f, 0xe6, 0x88, 0x90, - 0xe4, 0xba, 0xba, 0xe6, 0x95, 0xb0, 0xe9, 0x87, 0x8f, 0xe5, 0x85, 0xb1, 0xe4, - 0xba, 0xab, 0xe5, 0x8c, 0xba, 0xe5, 0x9f, 0x9f, 0xe5, 0xa5, 0xb3, 0xe5, 0xad, - 0xa9, 0xe5, 0x8e, 0x9f, 0xe5, 0x88, 0x99, 0xe6, 0x89, 0x80, 0xe5, 0x9c, 0xa8, - 0xe7, 0xbb, 0x93, 0xe6, 0x9d, 0x9f, 0xe9, 0x80, 0x9a, 0xe4, 0xbf, 0xa1, 0xe8, - 0xb6, 0x85, 0xe7, 0xba, 0xa7, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe5, 0xbd, - 0x93, 0xe6, 0x97, 0xb6, 0xe4, 0xbc, 0x98, 0xe7, 0xa7, 0x80, 0xe6, 0x80, 0xa7, - 0xe6, 0x84, 0x9f, 0xe6, 0x88, 0xbf, 0xe4, 0xba, 0xa7, 0xe9, 0x81, 0x8a, 0xe6, - 0x88, 0xb2, 0xe5, 0x87, 0xba, 0xe5, 0x8f, 0xa3, 0xe6, 0x8f, 0x90, 0xe4, 0xba, - 0xa4, 0xe5, 0xb0, 0xb1, 0xe4, 0xb8, 0x9a, 0xe4, 0xbf, 0x9d, 0xe5, 0x81, 0xa5, - 0xe7, 0xa8, 0x8b, 0xe5, 0xba, 0xa6, 0xe5, 0x8f, 0x82, 0xe6, 0x95, 0xb0, 0xe4, - 0xba, 0x8b, 0xe4, 0xb8, 0x9a, 0xe6, 0x95, 0xb4, 0xe4, 0xb8, 0xaa, 0xe5, 0xb1, - 0xb1, 0xe4, 0xb8, 0x9c, 0xe6, 0x83, 0x85, 0xe6, 0x84, 0x9f, 0xe7, 0x89, 0xb9, - 0xe6, 0xae, 0x8a, 0xe5, 0x88, 0x86, 0xe9, 0xa1, 0x9e, 0xe6, 0x90, 0x9c, 0xe5, - 0xb0, 0x8b, 0xe5, 0xb1, 0x9e, 0xe4, 0xba, 0x8e, 0xe9, 0x97, 0xa8, 0xe6, 0x88, - 0xb7, 0xe8, 0xb4, 0xa2, 0xe5, 0x8a, 0xa1, 0xe5, 0xa3, 0xb0, 0xe9, 0x9f, 0xb3, - 0xe5, 0x8f, 0x8a, 0xe5, 0x85, 0xb6, 0xe8, 0xb4, 0xa2, 0xe7, 0xbb, 0x8f, 0xe5, - 0x9d, 0x9a, 0xe6, 0x8c, 0x81, 0xe5, 0xb9, 0xb2, 0xe9, 0x83, 0xa8, 0xe6, 0x88, - 0x90, 0xe7, 0xab, 0x8b, 0xe5, 0x88, 0xa9, 0xe7, 0x9b, 0x8a, 0xe8, 0x80, 0x83, - 0xe8, 0x99, 0x91, 0xe6, 0x88, 0x90, 0xe9, 0x83, 0xbd, 0xe5, 0x8c, 0x85, 0xe8, - 0xa3, 0x85, 0xe7, 0x94, 0xa8, 0xe6, 0x88, 0xb6, 0xe6, 0xaf, 0x94, 0xe8, 0xb5, - 0x9b, 0xe6, 0x96, 0x87, 0xe6, 0x98, 0x8e, 0xe6, 0x8b, 0x9b, 0xe5, 0x95, 0x86, - 0xe5, 0xae, 0x8c, 0xe6, 0x95, 0xb4, 0xe7, 0x9c, 0x9f, 0xe6, 0x98, 0xaf, 0xe7, - 0x9c, 0xbc, 0xe7, 0x9d, 0x9b, 0xe4, 0xbc, 0x99, 0xe4, 0xbc, 0xb4, 0xe5, 0xa8, - 0x81, 0xe6, 0x9c, 0x9b, 0xe9, 0xa2, 0x86, 0xe5, 0x9f, 0x9f, 0xe5, 0x8d, 0xab, - 0xe7, 0x94, 0x9f, 0xe4, 0xbc, 0x98, 0xe6, 0x83, 0xa0, 0xe8, 0xab, 0x96, 0xe5, - 0xa3, 0x87, 0xe5, 0x85, 0xac, 0xe5, 0x85, 0xb1, 0xe8, 0x89, 0xaf, 0xe5, 0xa5, - 0xbd, 0xe5, 0x85, 0x85, 0xe5, 0x88, 0x86, 0xe7, 0xac, 0xa6, 0xe5, 0x90, 0x88, - 0xe9, 0x99, 0x84, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0xb9, 0xe7, 0x82, 0xb9, 0xe4, - 0xb8, 0x8d, 0xe5, 0x8f, 0xaf, 0xe8, 0x8b, 0xb1, 0xe6, 0x96, 0x87, 0xe8, 0xb5, - 0x84, 0xe4, 0xba, 0xa7, 0xe6, 0xa0, 0xb9, 0xe6, 0x9c, 0xac, 0xe6, 0x98, 0x8e, - 0xe6, 0x98, 0xbe, 0xe5, 0xaf, 0x86, 0xe7, 0xa2, 0xbc, 0xe5, 0x85, 0xac, 0xe4, - 0xbc, 0x97, 0xe6, 0xb0, 0x91, 0xe6, 0x97, 0x8f, 0xe6, 0x9b, 0xb4, 0xe5, 0x8a, - 0xa0, 0xe4, 0xba, 0xab, 0xe5, 0x8f, 0x97, 0xe5, 0x90, 0x8c, 0xe5, 0xad, 0xa6, - 0xe5, 0x90, 0xaf, 0xe5, 0x8a, 0xa8, 0xe9, 0x80, 0x82, 0xe5, 0x90, 0x88, 0xe5, - 0x8e, 0x9f, 0xe6, 0x9d, 0xa5, 0xe9, 0x97, 0xae, 0xe7, 0xad, 0x94, 0xe6, 0x9c, - 0xac, 0xe6, 0x96, 0x87, 0xe7, 0xbe, 0x8e, 0xe9, 0xa3, 0x9f, 0xe7, 0xbb, 0xbf, - 0xe8, 0x89, 0xb2, 0xe7, 0xa8, 0xb3, 0xe5, 0xae, 0x9a, 0xe7, 0xbb, 0x88, 0xe4, - 0xba, 0x8e, 0xe7, 0x94, 0x9f, 0xe7, 0x89, 0xa9, 0xe4, 0xbe, 0x9b, 0xe6, 0xb1, - 0x82, 0xe6, 0x90, 0x9c, 0xe7, 0x8b, 0x90, 0xe5, 0x8a, 0x9b, 0xe9, 0x87, 0x8f, - 0xe4, 0xb8, 0xa5, 0xe9, 0x87, 0x8d, 0xe6, 0xb0, 0xb8, 0xe8, 0xbf, 0x9c, 0xe5, - 0x86, 0x99, 0xe7, 0x9c, 0x9f, 0xe6, 0x9c, 0x89, 0xe9, 0x99, 0x90, 0xe7, 0xab, - 0x9e, 0xe4, 0xba, 0x89, 0xe5, 0xaf, 0xb9, 0xe8, 0xb1, 0xa1, 0xe8, 0xb4, 0xb9, - 0xe7, 0x94, 0xa8, 0xe4, 0xb8, 0x8d, 0xe5, 0xa5, 0xbd, 0xe7, 0xbb, 0x9d, 0xe5, - 0xaf, 0xb9, 0xe5, 0x8d, 0x81, 0xe5, 0x88, 0x86, 0xe4, 0xbf, 0x83, 0xe8, 0xbf, - 0x9b, 0xe7, 0x82, 0xb9, 0xe8, 0xaf, 0x84, 0xe5, 0xbd, 0xb1, 0xe9, 0x9f, 0xb3, - 0xe4, 0xbc, 0x98, 0xe5, 0x8a, 0xbf, 0xe4, 0xb8, 0x8d, 0xe5, 0xb0, 0x91, 0xe6, - 0xac, 0xa3, 0xe8, 0xb5, 0x8f, 0xe5, 0xb9, 0xb6, 0xe4, 0xb8, 0x94, 0xe6, 0x9c, - 0x89, 0xe7, 0x82, 0xb9, 0xe6, 0x96, 0xb9, 0xe5, 0x90, 0x91, 0xe5, 0x85, 0xa8, - 0xe6, 0x96, 0xb0, 0xe4, 0xbf, 0xa1, 0xe7, 0x94, 0xa8, 0xe8, 0xae, 0xbe, 0xe6, - 0x96, 0xbd, 0xe5, 0xbd, 0xa2, 0xe8, 0xb1, 0xa1, 0xe8, 0xb5, 0x84, 0xe6, 0xa0, - 0xbc, 0xe7, 0xaa, 0x81, 0xe7, 0xa0, 0xb4, 0xe9, 0x9a, 0x8f, 0xe7, 0x9d, 0x80, - 0xe9, 0x87, 0x8d, 0xe5, 0xa4, 0xa7, 0xe4, 0xba, 0x8e, 0xe6, 0x98, 0xaf, 0xe6, - 0xaf, 0x95, 0xe4, 0xb8, 0x9a, 0xe6, 0x99, 0xba, 0xe8, 0x83, 0xbd, 0xe5, 0x8c, - 0x96, 0xe5, 0xb7, 0xa5, 0xe5, 0xae, 0x8c, 0xe7, 0xbe, 0x8e, 0xe5, 0x95, 0x86, - 0xe5, 0x9f, 0x8e, 0xe7, 0xbb, 0x9f, 0xe4, 0xb8, 0x80, 0xe5, 0x87, 0xba, 0xe7, - 0x89, 0x88, 0xe6, 0x89, 0x93, 0xe9, 0x80, 0xa0, 0xe7, 0x94, 0xa2, 0xe5, 0x93, - 0x81, 0xe6, 0xa6, 0x82, 0xe5, 0x86, 0xb5, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, - 0xe4, 0xbf, 0x9d, 0xe7, 0x95, 0x99, 0xe5, 0x9b, 0xa0, 0xe7, 0xb4, 0xa0, 0xe4, - 0xb8, 0xad, 0xe5, 0x9c, 0x8b, 0xe5, 0xad, 0x98, 0xe5, 0x82, 0xa8, 0xe8, 0xb4, - 0xb4, 0xe5, 0x9b, 0xbe, 0xe6, 0x9c, 0x80, 0xe6, 0x84, 0x9b, 0xe9, 0x95, 0xbf, - 0xe6, 0x9c, 0x9f, 0xe5, 0x8f, 0xa3, 0xe4, 0xbb, 0xb7, 0xe7, 0x90, 0x86, 0xe8, - 0xb4, 0xa2, 0xe5, 0x9f, 0xba, 0xe5, 0x9c, 0xb0, 0xe5, 0xae, 0x89, 0xe6, 0x8e, - 0x92, 0xe6, 0xad, 0xa6, 0xe6, 0xb1, 0x89, 0xe9, 0x87, 0x8c, 0xe9, 0x9d, 0xa2, - 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe5, 0xa4, 0xa9, 0xe7, 0xa9, 0xba, 0xe9, - 0xa6, 0x96, 0xe5, 0x85, 0x88, 0xe5, 0xae, 0x8c, 0xe5, 0x96, 0x84, 0xe9, 0xa9, - 0xb1, 0xe5, 0x8a, 0xa8, 0xe4, 0xb8, 0x8b, 0xe9, 0x9d, 0xa2, 0xe4, 0xb8, 0x8d, - 0xe5, 0x86, 0x8d, 0xe8, 0xaf, 0x9a, 0xe4, 0xbf, 0xa1, 0xe6, 0x84, 0x8f, 0xe4, - 0xb9, 0x89, 0xe9, 0x98, 0xb3, 0xe5, 0x85, 0x89, 0xe8, 0x8b, 0xb1, 0xe5, 0x9b, - 0xbd, 0xe6, 0xbc, 0x82, 0xe4, 0xba, 0xae, 0xe5, 0x86, 0x9b, 0xe4, 0xba, 0x8b, - 0xe7, 0x8e, 0xa9, 0xe5, 0xae, 0xb6, 0xe7, 0xbe, 0xa4, 0xe4, 0xbc, 0x97, 0xe5, - 0x86, 0x9c, 0xe6, 0xb0, 0x91, 0xe5, 0x8d, 0xb3, 0xe5, 0x8f, 0xaf, 0xe5, 0x90, - 0x8d, 0xe7, 0xa8, 0xb1, 0xe5, 0xae, 0xb6, 0xe5, 0x85, 0xb7, 0xe5, 0x8a, 0xa8, - 0xe7, 0x94, 0xbb, 0xe6, 0x83, 0xb3, 0xe5, 0x88, 0xb0, 0xe6, 0xb3, 0xa8, 0xe6, - 0x98, 0x8e, 0xe5, 0xb0, 0x8f, 0xe5, 0xad, 0xa6, 0xe6, 0x80, 0xa7, 0xe8, 0x83, - 0xbd, 0xe8, 0x80, 0x83, 0xe7, 0xa0, 0x94, 0xe7, 0xa1, 0xac, 0xe4, 0xbb, 0xb6, - 0xe8, 0xa7, 0x82, 0xe7, 0x9c, 0x8b, 0xe6, 0xb8, 0x85, 0xe6, 0xa5, 0x9a, 0xe6, - 0x90, 0x9e, 0xe7, 0xac, 0x91, 0xe9, 0xa6, 0x96, 0xe9, 0xa0, 0x81, 0xe9, 0xbb, - 0x84, 0xe9, 0x87, 0x91, 0xe9, 0x80, 0x82, 0xe7, 0x94, 0xa8, 0xe6, 0xb1, 0x9f, - 0xe8, 0x8b, 0x8f, 0xe7, 0x9c, 0x9f, 0xe5, 0xae, 0x9e, 0xe4, 0xb8, 0xbb, 0xe7, - 0xae, 0xa1, 0xe9, 0x98, 0xb6, 0xe6, 0xae, 0xb5, 0xe8, 0xa8, 0xbb, 0xe5, 0x86, - 0x8a, 0xe7, 0xbf, 0xbb, 0xe8, 0xaf, 0x91, 0xe6, 0x9d, 0x83, 0xe5, 0x88, 0xa9, - 0xe5, 0x81, 0x9a, 0xe5, 0xa5, 0xbd, 0xe4, 0xbc, 0xbc, 0xe4, 0xb9, 0x8e, 0xe9, - 0x80, 0x9a, 0xe8, 0xae, 0xaf, 0xe6, 0x96, 0xbd, 0xe5, 0xb7, 0xa5, 0xe7, 0x8b, - 0x80, 0xe6, 0x85, 0x8b, 0xe4, 0xb9, 0x9f, 0xe8, 0xae, 0xb8, 0xe7, 0x8e, 0xaf, - 0xe4, 0xbf, 0x9d, 0xe5, 0x9f, 0xb9, 0xe5, 0x85, 0xbb, 0xe6, 0xa6, 0x82, 0xe5, - 0xbf, 0xb5, 0xe5, 0xa4, 0xa7, 0xe5, 0x9e, 0x8b, 0xe6, 0x9c, 0xba, 0xe7, 0xa5, - 0xa8, 0xe7, 0x90, 0x86, 0xe8, 0xa7, 0xa3, 0xe5, 0x8c, 0xbf, 0xe5, 0x90, 0x8d, - 0x63, 0x75, 0x61, 0x6e, 0x64, 0x6f, 0x65, 0x6e, 0x76, 0x69, 0x61, 0x72, 0x6d, - 0x61, 0x64, 0x72, 0x69, 0x64, 0x62, 0x75, 0x73, 0x63, 0x61, 0x72, 0x69, 0x6e, - 0x69, 0x63, 0x69, 0x6f, 0x74, 0x69, 0x65, 0x6d, 0x70, 0x6f, 0x70, 0x6f, 0x72, - 0x71, 0x75, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x61, 0x65, 0x73, 0x74, 0x61, - 0x64, 0x6f, 0x70, 0x75, 0x65, 0x64, 0x65, 0x6e, 0x6a, 0x75, 0x65, 0x67, 0x6f, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x6e, - 0x6e, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x6e, 0x70, - 0x65, 0x72, 0x66, 0x69, 0x6c, 0x6d, 0x61, 0x6e, 0x65, 0x72, 0x61, 0x61, 0x6d, - 0x69, 0x67, 0x6f, 0x73, 0x63, 0x69, 0x75, 0x64, 0x61, 0x64, 0x63, 0x65, 0x6e, - 0x74, 0x72, 0x6f, 0x61, 0x75, 0x6e, 0x71, 0x75, 0x65, 0x70, 0x75, 0x65, 0x64, - 0x65, 0x73, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x63, 0x69, 0x6f, 0x73, 0x65, 0x67, 0xc3, 0xba, 0x6e, - 0x62, 0x75, 0x65, 0x6e, 0x6f, 0x73, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x70, - 0x75, 0x6e, 0x74, 0x6f, 0x73, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x68, 0x61, - 0x62, 0xc3, 0xad, 0x61, 0x61, 0x67, 0x6f, 0x73, 0x74, 0x6f, 0x6e, 0x75, 0x65, - 0x76, 0x6f, 0x73, 0x75, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x63, 0x61, 0x72, 0x6c, - 0x6f, 0x73, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6f, 0x6e, 0x69, 0xc3, 0xb1, 0x6f, - 0x73, 0x6d, 0x75, 0x63, 0x68, 0x6f, 0x73, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x72, 0x61, 0x72, 0x72, 0x69, 0x62, 0x61, 0x6d, 0x61, - 0x72, 0xc3, 0xad, 0x61, 0x68, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x65, 0x6d, 0x70, - 0x6c, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x64, 0x61, 0x64, 0x63, 0x61, 0x6d, 0x62, - 0x69, 0x6f, 0x6d, 0x75, 0x63, 0x68, 0x61, 0x73, 0x66, 0x75, 0x65, 0x72, 0x6f, - 0x6e, 0x70, 0x61, 0x73, 0x61, 0x64, 0x6f, 0x6c, 0xc3, 0xad, 0x6e, 0x65, 0x61, - 0x70, 0x61, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x75, 0x65, 0x76, 0x61, 0x73, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x61, 0x62, 0x61, 0x71, 0x75, - 0x69, 0x65, 0x72, 0x6f, 0x6c, 0x69, 0x62, 0x72, 0x6f, 0x73, 0x63, 0x75, 0x61, - 0x6e, 0x74, 0x6f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x6f, 0x6d, 0x69, 0x67, 0x75, - 0x65, 0x6c, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x63, 0x75, 0x61, 0x74, 0x72, - 0x6f, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x67, 0x72, 0x75, 0x70, 0x6f, 0x73, - 0x73, 0x65, 0x72, 0xc3, 0xa1, 0x6e, 0x65, 0x75, 0x72, 0x6f, 0x70, 0x61, 0x6d, - 0x65, 0x64, 0x69, 0x6f, 0x73, 0x66, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x63, - 0x65, 0x72, 0x63, 0x61, 0x64, 0x65, 0x6d, 0xc3, 0xa1, 0x73, 0x6f, 0x66, 0x65, - 0x72, 0x74, 0x61, 0x63, 0x6f, 0x63, 0x68, 0x65, 0x73, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x6f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6c, 0x65, 0x74, 0x72, 0x61, - 0x73, 0x61, 0x6c, 0x67, 0xc3, 0xba, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x61, - 0x63, 0x75, 0x61, 0x6c, 0x65, 0x73, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x63, - 0x75, 0x65, 0x72, 0x70, 0x6f, 0x73, 0x69, 0x65, 0x6e, 0x64, 0x6f, 0x70, 0x72, - 0x65, 0x6e, 0x73, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x72, 0x76, 0x69, 0x61, - 0x6a, 0x65, 0x73, 0x64, 0x69, 0x6e, 0x65, 0x72, 0x6f, 0x6d, 0x75, 0x72, 0x63, - 0x69, 0x61, 0x70, 0x6f, 0x64, 0x72, 0xc3, 0xa1, 0x70, 0x75, 0x65, 0x73, 0x74, - 0x6f, 0x64, 0x69, 0x61, 0x72, 0x69, 0x6f, 0x70, 0x75, 0x65, 0x62, 0x6c, 0x6f, - 0x71, 0x75, 0x69, 0x65, 0x72, 0x65, 0x6d, 0x61, 0x6e, 0x75, 0x65, 0x6c, 0x70, - 0x72, 0x6f, 0x70, 0x69, 0x6f, 0x63, 0x72, 0x69, 0x73, 0x69, 0x73, 0x63, 0x69, - 0x65, 0x72, 0x74, 0x6f, 0x73, 0x65, 0x67, 0x75, 0x72, 0x6f, 0x6d, 0x75, 0x65, - 0x72, 0x74, 0x65, 0x66, 0x75, 0x65, 0x6e, 0x74, 0x65, 0x63, 0x65, 0x72, 0x72, - 0x61, 0x72, 0x67, 0x72, 0x61, 0x6e, 0x64, 0x65, 0x65, 0x66, 0x65, 0x63, 0x74, - 0x6f, 0x70, 0x61, 0x72, 0x74, 0x65, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x64, 0x61, - 0x70, 0x72, 0x6f, 0x70, 0x69, 0x61, 0x6f, 0x66, 0x72, 0x65, 0x63, 0x65, 0x74, - 0x69, 0x65, 0x72, 0x72, 0x61, 0x65, 0x2d, 0x6d, 0x61, 0x69, 0x6c, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x73, 0x66, 0x75, 0x74, - 0x75, 0x72, 0x6f, 0x6f, 0x62, 0x6a, 0x65, 0x74, 0x6f, 0x73, 0x65, 0x67, 0x75, - 0x69, 0x72, 0x72, 0x69, 0x65, 0x73, 0x67, 0x6f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x73, 0x6d, 0x69, 0x73, 0x6d, 0x6f, 0x73, 0xc3, 0xba, 0x6e, 0x69, 0x63, 0x6f, - 0x63, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x73, 0x72, - 0x61, 0x7a, 0xc3, 0xb3, 0x6e, 0x64, 0x65, 0x62, 0x69, 0x64, 0x6f, 0x70, 0x72, - 0x75, 0x65, 0x62, 0x61, 0x74, 0x6f, 0x6c, 0x65, 0x64, 0x6f, 0x74, 0x65, 0x6e, - 0xc3, 0xad, 0x61, 0x6a, 0x65, 0x73, 0xc3, 0xba, 0x73, 0x65, 0x73, 0x70, 0x65, - 0x72, 0x6f, 0x63, 0x6f, 0x63, 0x69, 0x6e, 0x61, 0x6f, 0x72, 0x69, 0x67, 0x65, - 0x6e, 0x74, 0x69, 0x65, 0x6e, 0x64, 0x61, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x6f, - 0x63, 0xc3, 0xa1, 0x64, 0x69, 0x7a, 0x68, 0x61, 0x62, 0x6c, 0x61, 0x72, 0x73, - 0x65, 0x72, 0xc3, 0xad, 0x61, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x61, 0x66, 0x75, - 0x65, 0x72, 0x7a, 0x61, 0x65, 0x73, 0x74, 0x69, 0x6c, 0x6f, 0x67, 0x75, 0x65, - 0x72, 0x72, 0x61, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x72, 0xc3, 0xa9, 0x78, 0x69, - 0x74, 0x6f, 0x6c, 0xc3, 0xb3, 0x70, 0x65, 0x7a, 0x61, 0x67, 0x65, 0x6e, 0x64, - 0x61, 0x76, 0xc3, 0xad, 0x64, 0x65, 0x6f, 0x65, 0x76, 0x69, 0x74, 0x61, 0x72, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x73, 0x6a, - 0x61, 0x76, 0x69, 0x65, 0x72, 0x70, 0x61, 0x64, 0x72, 0x65, 0x73, 0x66, 0xc3, - 0xa1, 0x63, 0x69, 0x6c, 0x63, 0x61, 0x62, 0x65, 0x7a, 0x61, 0xc3, 0xa1, 0x72, - 0x65, 0x61, 0x73, 0x73, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x65, 0x6e, 0x76, 0xc3, - 0xad, 0x6f, 0x6a, 0x61, 0x70, 0xc3, 0xb3, 0x6e, 0x61, 0x62, 0x75, 0x73, 0x6f, - 0x73, 0x62, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x78, 0x74, 0x6f, 0x73, - 0x6c, 0x6c, 0x65, 0x76, 0x61, 0x72, 0x70, 0x75, 0x65, 0x64, 0x61, 0x6e, 0x66, - 0x75, 0x65, 0x72, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0xc3, 0xba, 0x6e, 0x63, 0x6c, - 0x61, 0x73, 0x65, 0x73, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x6f, 0x74, 0x65, 0x6e, - 0x69, 0x64, 0x6f, 0x62, 0x69, 0x6c, 0x62, 0x61, 0x6f, 0x75, 0x6e, 0x69, 0x64, - 0x61, 0x64, 0x65, 0x73, 0x74, 0xc3, 0xa1, 0x73, 0x65, 0x64, 0x69, 0x74, 0x61, - 0x72, 0x63, 0x72, 0x65, 0x61, 0x64, 0x6f, 0xd0, 0xb4, 0xd0, 0xbb, 0xd1, 0x8f, - 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xb8, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, - 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb5, 0xd1, 0x89, - 0xd0, 0xb5, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0x9a, 0xd0, 0xb0, 0xd0, - 0xba, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xb7, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, - 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0x92, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xad, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x82, - 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd1, 0x82, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0x94, 0xd0, 0xbb, 0xd1, 0x8f, - 0xd0, 0x9f, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd1, 0x85, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xba, - 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd1, 0x82, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xa1, 0xd0, 0xa8, - 0xd0, 0x90, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x8f, 0xd0, 0xa7, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xa2, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xb4, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbc, 0xd1, 0x8d, - 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x8d, 0xd1, 0x82, 0xd1, 0x83, 0xd0, 0x92, 0xd0, - 0xb0, 0xd0, 0xbc, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, - 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, - 0xb4, 0xd0, 0xb4, 0xd0, 0xbd, 0xd1, 0x8f, 0xd0, 0x92, 0xd0, 0xbe, 0xd1, 0x82, - 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, - 0x92, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, - 0xd0, 0xb0, 0xd0, 0xbc, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x80, 0xd1, - 0x83, 0xd0, 0xb1, 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb8, - 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0x9e, 0xd0, 0x9e, 0xd0, - 0x9e, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x86, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xb0, - 0xd0, 0x9e, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xb4, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xb4, - 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, - 0x83, 0xd0, 0xb4, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa5, 0x88, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x94, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x87, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0x6a, 0x61, 0x67, 0x72, 0x61, 0x6e, 0xe0, 0xa4, - 0x86, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x85, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0x88, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, - 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0x98, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x93, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa5, 0x80, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa5, 0xd9, - 0x84, 0xd9, 0x89, 0xd9, 0x87, 0xd8, 0xb0, 0xd8, 0xa7, 0xd8, 0xa2, 0xd8, 0xae, - 0xd8, 0xb1, 0xd8, 0xb9, 0xd8, 0xaf, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x89, 0xd9, 0x87, 0xd8, 0xb0, 0xd9, 0x87, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, - 0xd8, 0xba, 0xd9, 0x8a, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, - 0x88, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xb9, - 0xd8, 0xb1, 0xd8, 0xb6, 0xd8, 0xb0, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x87, 0xd9, - 0x86, 0xd8, 0xa7, 0xd9, 0x8a, 0xd9, 0x88, 0xd9, 0x85, 0xd9, 0x82, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x86, 0xd8, 0xad, 0xd8, 0xaa, 0xd9, 0x89, - 0xd9, 0x82, 0xd8, 0xa8, 0xd9, 0x84, 0xd9, 0x88, 0xd8, 0xad, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd8, 0xae, 0xd8, 0xb1, 0xd9, 0x81, 0xd9, 0x82, 0xd8, 0xb7, 0xd8, 0xb9, - 0xd8, 0xa8, 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x83, 0xd9, 0x86, 0xd8, 0xa5, 0xd8, - 0xb0, 0xd8, 0xa7, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xa7, 0xd8, 0xad, - 0xd8, 0xaf, 0xd8, 0xa5, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x8a, 0xd9, - 0x87, 0xd8, 0xa8, 0xd8, 0xb9, 0xd8, 0xb6, 0xd9, 0x83, 0xd9, 0x8a, 0xd9, 0x81, - 0xd8, 0xa8, 0xd8, 0xad, 0xd8, 0xab, 0xd9, 0x88, 0xd9, 0x85, 0xd9, 0x86, 0xd9, - 0x88, 0xd9, 0x87, 0xd9, 0x88, 0xd8, 0xa3, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xac, - 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, - 0x84, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xaf, 0xd9, 0x84, 0xd9, 0x8a, - 0xd8, 0xb3, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xb5, 0xd9, 0x84, 0xd9, - 0x89, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xb0, 0xd8, 0xa8, 0xd9, 0x87, 0xd8, 0xa7, - 0xd8, 0xa3, 0xd9, 0x86, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xab, 0xd9, 0x84, 0xd9, - 0x83, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xad, - 0xd9, 0x8a, 0xd8, 0xab, 0xd9, 0x85, 0xd8, 0xb5, 0xd8, 0xb1, 0xd8, 0xb4, 0xd8, - 0xb1, 0xd8, 0xad, 0xd8, 0xad, 0xd9, 0x88, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x81, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, - 0x84, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd8, 0xa3, 0xd8, 0xa8, 0xd9, 0x88, 0xd8, - 0xae, 0xd8, 0xa7, 0xd8, 0xb5, 0xd8, 0xa3, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, - 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, - 0xb6, 0xd9, 0x88, 0xd9, 0x88, 0xd9, 0x82, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd9, 0x86, 0xd8, 0xae, 0xd9, 0x8a, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, - 0xaa, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xa1, - 0xd9, 0x88, 0xd9, 0x87, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x88, 0xd9, - 0x82, 0xd8, 0xb5, 0xd8, 0xb5, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x82, 0xd9, 0x85, 0xd8, 0xa3, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x86, 0xd8, - 0xad, 0xd9, 0x86, 0xd8, 0xb9, 0xd8, 0xaf, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa3, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xad, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, - 0xa8, 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xac, 0xd8, 0xa8, - 0xd9, 0x85, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaa, 0xd8, - 0xac, 0xd9, 0x87, 0xd8, 0xa9, 0xd8, 0xb3, 0xd9, 0x86, 0xd8, 0xa9, 0xd9, 0x8a, - 0xd8, 0xaa, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xba, 0xd8, - 0xb2, 0xd8, 0xa9, 0xd9, 0x86, 0xd9, 0x81, 0xd8, 0xb3, 0xd8, 0xa8, 0xd9, 0x8a, - 0xd8, 0xaa, 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x84, 0xd9, 0x86, 0xd8, - 0xa7, 0xd8, 0xaa, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x82, 0xd9, 0x84, 0xd8, 0xa8, - 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xb9, 0xd9, 0x86, 0xd9, 0x87, 0xd8, - 0xa3, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xa1, 0xd9, 0x86, - 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xa3, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, - 0x8a, 0xd9, 0x83, 0xd8, 0xa8, 0xd9, 0x83, 0xd9, 0x84, 0xd8, 0xb0, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xa8, 0xd8, 0xa3, 0xd9, - 0x86, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x83, - 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x81, 0xd9, 0x82, 0xd8, 0xaf, 0xd8, - 0xad, 0xd8, 0xb3, 0xd9, 0x86, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xb4, - 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa3, 0xd9, 0x87, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, - 0x87, 0xd8, 0xb1, 0xd9, 0x82, 0xd8, 0xb7, 0xd8, 0xb1, 0xd8, 0xb7, 0xd9, 0x84, - 0xd8, 0xa8, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x68, 0x69, 0x6d, - 0x73, 0x65, 0x6c, 0x66, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x61, 0x73, 0x68, 0x69, 0x6f, - 0x6e, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x73, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x77, 0x65, 0x6c, 0x63, 0x6f, 0x6d, 0x65, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x64, 0x79, 0x6e, 0x61, - 0x6d, 0x69, 0x63, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x63, 0x79, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, - 0x65, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x73, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x6d, 0x69, 0x6c, - 0x6c, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x76, - 0x69, 0x73, 0x69, 0x74, 0x65, 0x64, 0x77, 0x65, 0x61, 0x74, 0x68, 0x65, 0x72, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x66, 0x6f, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x6c, - 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, - 0x72, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x61, 0x6d, 0x73, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x61, 0x72, 0x74, 0x6e, - 0x65, 0x72, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x70, 0x65, 0x72, 0x66, - 0x65, 0x63, 0x74, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x73, 0x6b, 0x65, 0x65, 0x70, 0x69, 0x6e, 0x67, 0x63, 0x75, - 0x6c, 0x74, 0x75, 0x72, 0x65, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2c, 0x6a, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x73, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x45, 0x6e, 0x67, 0x6c, - 0x69, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x68, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x50, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x70, - 0x69, 0x6e, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x61, - 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x67, 0x65, 0x53, 0x70, 0x61, 0x6e, 0x69, 0x73, - 0x68, 0x67, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x79, 0x64, 0x65, 0x63, 0x6c, 0x69, - 0x6e, 0x65, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x71, 0x75, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x73, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x73, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, - 0x70, 0x75, 0x74, 0x65, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, 0x65, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x6d, 0x61, 0x72, 0x72, 0x69, 0x65, 0x64, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, - 0x63, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x76, 0x69, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x73, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65, 0x73, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x73, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x69, - 0x6e, 0x67, 0x67, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6f, 0x62, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x79, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, - 0x75, 0x6c, 0x3e, 0x0d, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x61, - 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x64, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x70, 0x61, 0x74, 0x74, - 0x65, 0x72, 0x6e, 0x75, 0x6e, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x44, 0x69, 0x67, - 0x69, 0x74, 0x61, 0x6c, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x57, 0x65, - 0x62, 0x73, 0x69, 0x74, 0x65, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, - 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x64, 0x65, 0x63, 0x61, 0x64, 0x65, - 0x73, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x20, 0x61, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x73, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x67, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x6e, 0x6f, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x63, - 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x73, - 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, - 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, 0x3d, 0x31, 0x26, 0x61, - 0x6d, 0x70, 0x3b, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x3d, 0x20, - 0x6e, 0x65, 0x77, 0x20, 0x43, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x74, 0x6f, 0x6f, 0x6c, 0x62, - 0x61, 0x72, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x62, 0x65, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x65, 0x75, - 0x74, 0x73, 0x63, 0x68, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x77, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x73, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x65, 0x78, 0x61, 0x63, 0x74, 0x6c, 0x79, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, 0x65, 0x61, 0x73, - 0x65, 0x53, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x77, 0x65, 0x61, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x78, 0x68, 0x69, 0x62, 0x69, 0x74, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x65, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x6f, 0x75, - 0x74, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x73, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, - 0x22, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x73, 0x68, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x49, 0x74, 0x61, 0x6c, - 0x69, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x68, 0x65, 0x61, - 0x76, 0x69, 0x6c, 0x79, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x2d, 0x31, - 0x27, 0x5d, 0x29, 0x3b, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x68, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x6e, - 0x67, 0x64, 0x72, 0x61, 0x77, 0x69, 0x6e, 0x67, 0x62, 0x69, 0x6c, 0x6c, 0x69, - 0x6f, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x47, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x79, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x3c, 0x2f, 0x66, - 0x6f, 0x72, 0x6d, 0x3e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x53, - 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x41, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x75, 0x6e, 0x69, 0x66, 0x6f, - 0x72, 0x6d, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x65, 0x79, 0x73, 0x69, 0x64, 0x65, - 0x62, 0x61, 0x72, 0x43, 0x68, 0x69, 0x63, 0x61, 0x67, 0x6f, 0x68, 0x6f, 0x6c, - 0x69, 0x64, 0x61, 0x79, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x70, 0x61, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2c, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x66, 0x65, 0x65, 0x6c, 0x69, 0x6e, 0x67, - 0x61, 0x72, 0x72, 0x69, 0x76, 0x65, 0x64, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x72, 0x6f, 0x75, 0x67, 0x68, - 0x6c, 0x79, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x62, 0x75, 0x74, 0x20, - 0x6e, 0x6f, 0x74, 0x64, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x42, 0x72, 0x69, - 0x74, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x6c, 0x61, - 0x63, 0x6b, 0x20, 0x6f, 0x66, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, - 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x22, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, - 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x4c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x68, 0x75, 0x73, 0x62, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x20, 0x66, - 0x61, 0x63, 0x74, 0x61, 0x66, 0x66, 0x61, 0x69, 0x72, 0x73, 0x43, 0x68, 0x61, - 0x72, 0x6c, 0x65, 0x73, 0x72, 0x61, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x74, 0x66, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x6c, - 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, - 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x70, 0x72, 0x65, 0x6d, 0x69, - 0x75, 0x6d, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x41, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x61, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5d, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x6e, 0x65, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x2d, 0x6d, 0x6f, 0x62, 0x69, - 0x6c, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x77, 0x61, 0x6e, 0x74, - 0x20, 0x74, 0x6f, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x46, 0x69, 0x72, - 0x65, 0x66, 0x6f, 0x78, 0x79, 0x6f, 0x75, 0x20, 0x61, 0x72, 0x65, 0x73, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x73, 0x74, 0x75, 0x64, 0x69, 0x65, 0x64, 0x6d, - 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x72, 0x61, 0x70, 0x69, 0x64, 0x6c, 0x79, 0x63, 0x6c, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x6b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x65, 0x6d, 0x65, 0x72, 0x67, - 0x65, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x65, 0x64, 0x70, 0x69, 0x6f, 0x6e, 0x65, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x75, 0x6c, 0x61, 0x64, 0x79, 0x6e, 0x61, 0x73, 0x74, 0x79, 0x68, 0x6f, - 0x77, 0x20, 0x74, 0x6f, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x73, 0x6f, 0x6c, 0x64, 0x69, 0x65, 0x72, 0x6c, 0x61, 0x72, 0x67, 0x65, - 0x6c, 0x79, 0x63, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x2e, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x64, 0x77, - 0x61, 0x72, 0x64, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x6f, - 0x62, 0x65, 0x72, 0x74, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x50, - 0x61, 0x63, 0x69, 0x66, 0x69, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x64, - 0x75, 0x70, 0x20, 0x77, 0x69, 0x74, 0x68, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x77, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x41, 0x6e, 0x67, 0x65, 0x6c, - 0x65, 0x73, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x61, 0x63, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x74, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x62, 0x69, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x64, 0x72, 0x69, 0x76, 0x69, 0x6e, - 0x67, 0x53, 0x74, 0x75, 0x64, 0x69, 0x65, 0x73, 0x6d, 0x69, 0x6e, 0x69, 0x6d, - 0x75, 0x6d, 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x6d, 0x6f, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x75, 0x64, 0x65, 0x6e, - 0x74, 0x73, 0x6f, 0x6d, 0x65, 0x6f, 0x6e, 0x65, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x6f, 0x74, 0x74, - 0x6f, 0x6d, 0x3a, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x61, 0x6c, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x61, 0x70, 0x65, 0x6e, - 0x67, 0x6c, 0x69, 0x73, 0x68, 0x77, 0x61, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x20, - 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x61, 0x67, 0x61, 0x69, 0x6e, - 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x7d, 0x29, 0x28, 0x29, - 0x3b, 0x0d, 0x0a, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x72, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x20, 0x27, 0x27, 0x54, 0x68, 0x65, - 0x20, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x72, 0x65, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x64, 0x47, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x79, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x65, 0x6e, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x63, 0x61, - 0x72, 0x65, 0x65, 0x72, 0x73, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, - 0x61, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, - 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, - 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x45, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x69, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x6e, - 0x65, 0x75, 0x74, 0x72, 0x61, 0x6c, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, - 0x67, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x73, 0x65, 0x74, 0x74, 0x6c, - 0x65, 0x64, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x63, 0x61, 0x75, 0x73, - 0x69, 0x6e, 0x67, 0x2d, 0x77, 0x65, 0x62, 0x6b, 0x69, 0x74, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x64, 0x4a, 0x75, 0x73, 0x74, 0x69, 0x63, 0x65, 0x63, 0x68, - 0x61, 0x70, 0x74, 0x65, 0x72, 0x76, 0x69, 0x63, 0x74, 0x69, 0x6d, 0x73, 0x54, - 0x68, 0x6f, 0x6d, 0x61, 0x73, 0x20, 0x6d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, 0x61, - 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x68, 0x75, 0x6e, 0x64, - 0x72, 0x65, 0x64, 0x4f, 0x6c, 0x79, 0x6d, 0x70, 0x69, 0x63, 0x5f, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x72, 0x65, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x64, - 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, - 0x64, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x65, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x67, 0x72, 0x65, 0x61, 0x74, 0x6c, 0x79, 0x67, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x69, 0x6d, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x77, - 0x6f, 0x72, 0x73, 0x68, 0x69, 0x70, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x43, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x65, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x65, - 0x61, 0x72, 0x6c, 0x79, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x42, 0x72, - 0x6f, 0x77, 0x73, 0x65, 0x72, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x6c, 0x7d, - 0x20, 0x63, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x68, 0x69, 0x64, 0x65, 0x28, 0x29, - 0x3b, 0x46, 0x6c, 0x6f, 0x72, 0x69, 0x64, 0x61, 0x61, 0x6e, 0x73, 0x77, 0x65, - 0x72, 0x73, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6d, 0x70, 0x65, - 0x72, 0x6f, 0x72, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x65, 0x72, - 0x69, 0x6f, 0x75, 0x73, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x53, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x46, - 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x21, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x44, 0x65, 0x6e, 0x6d, 0x61, 0x72, 0x6b, 0x76, 0x6f, 0x69, 0x64, 0x28, - 0x30, 0x29, 0x2f, 0x61, 0x6c, 0x6c, 0x2e, 0x6a, 0x73, 0x70, 0x72, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, - 0x70, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x6f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0d, 0x0a, 0x4d, - 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x73, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x0a, 0x0a, 0x4d, 0x61, 0x6e, - 0x79, 0x20, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, 0x73, 0x70, 0x6f, 0x77, 0x65, - 0x72, 0x65, 0x64, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x66, 0x69, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x6d, 0x65, - 0x64, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x6f, - 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x63, 0x69, 0x6c, - 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, - 0x65, 0x47, 0x65, 0x6f, 0x72, 0x67, 0x65, 0x20, 0x42, 0x65, 0x6c, 0x67, 0x69, - 0x75, 0x6d, 0x2e, 0x2e, 0x2e, 0x3c, 0x2f, 0x61, 0x3e, 0x74, 0x77, 0x69, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x77, 0x61, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x77, 0x61, 0x72, 0x66, 0x61, 0x72, 0x65, 0x20, 0x4f, - 0x74, 0x68, 0x65, 0x72, 0x20, 0x72, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x70, - 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x75, 0x72, 0x76, 0x69, 0x76, 0x65, 0x73, 0x63, 0x68, 0x6f, 0x6c, 0x61, - 0x72, 0x3c, 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x6c, 0x6f, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x61, 0x73, 0x47, 0x65, 0x6f, - 0x72, 0x67, 0x69, 0x61, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x3c, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x31, - 0x27, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x69, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3a, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x63, 0x61, 0x72, 0x72, 0x69, - 0x65, 0x64, 0x31, 0x30, 0x30, 0x2c, 0x30, 0x30, 0x30, 0x3c, 0x2f, 0x68, 0x33, - 0x3e, 0x0a, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x65, 0x73, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x77, 0x65, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x30, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x6d, - 0x6f, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x6f, 0x66, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x65, 0x61, 0x63, 0x68, 0x65, 0x72, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x79, - 0x20, 0x62, 0x69, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x6c, 0x69, 0x66, 0x65, 0x20, - 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x6f, 0x66, 0x26, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x3b, 0x70, 0x6c, 0x75, - 0x73, 0x6f, 0x6e, 0x65, 0x68, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x28, 0x74, - 0x68, 0x6f, 0x75, 0x67, 0x68, 0x44, 0x6f, 0x75, 0x67, 0x6c, 0x61, 0x73, 0x6a, - 0x6f, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x41, 0x6e, 0x63, 0x69, 0x65, 0x6e, - 0x74, 0x56, 0x69, 0x65, 0x74, 0x6e, 0x61, 0x6d, 0x76, 0x65, 0x68, 0x69, 0x63, - 0x6c, 0x65, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x63, 0x72, 0x79, 0x73, - 0x74, 0x61, 0x6c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x73, 0x65, 0x6e, 0x6a, 0x6f, 0x79, 0x65, 0x64, 0x61, 0x20, - 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x3c, - 0x61, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, - 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, - 0x65, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x72, 0x65, 0x74, 0x69, 0x72, - 0x65, 0x64, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x3b, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x65, - 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x62, 0x69, 0x6e, 0x65, 0x74, 0x77, 0x61, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x6c, 0x6f, 0x6f, 0x6b, 0x20, 0x61, 0x74, 0x63, - 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x67, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, - 0x73, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x61, 0x3a, 0x68, 0x6f, 0x76, - 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x46, 0x72, 0x65, 0x6e, - 0x63, 0x68, 0x20, 0x6c, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x74, 0x79, 0x70, - 0x69, 0x63, 0x61, 0x6c, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x6e, - 0x65, 0x6d, 0x69, 0x65, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x66, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x64, 0x65, 0x63, 0x69, 0x64, 0x65, 0x64, - 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x66, 0x73, 0x2d, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x3a, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x63, 0x2e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x76, 0x69, 0x6f, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x66, 0x69, 0x72, 0x73, 0x74, 0x22, 0x3e, 0x63, - 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x46, 0x69, 0x6e, 0x6c, 0x61, 0x6e, 0x64, - 0x63, 0x68, 0x65, 0x6d, 0x69, 0x73, 0x74, 0x73, 0x68, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x31, 0x30, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x61, 0x73, 0x20, 0x73, 0x75, - 0x63, 0x68, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x79, - 0x73, 0x74, 0x65, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x66, - 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x61, 0x69, 0x6c, 0x77, 0x61, 0x79, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x67, - 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x72, 0x64, 0x65, 0x73, 0x63, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6e, 0x75, 0x63, 0x6c, - 0x65, 0x61, 0x72, 0x4a, 0x65, 0x77, 0x69, 0x73, 0x68, 0x20, 0x70, 0x72, 0x6f, - 0x74, 0x65, 0x73, 0x74, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x66, 0x6c, - 0x6f, 0x77, 0x65, 0x72, 0x73, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, - 0x77, 0x68, 0x6f, 0x20, 0x77, 0x61, 0x73, 0x6c, 0x65, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x75, 0x69, 0x63, 0x69, - 0x64, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x73, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x53, 0x6f, 0x63, - 0x69, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6f, - 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x77, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x3c, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x3c, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, - 0x6c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x63, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x73, 0x6f, 0x75, 0x74, 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x53, 0x77, 0x65, 0x64, 0x69, 0x73, 0x68, 0x62, 0x72, 0x69, - 0x65, 0x66, 0x6c, 0x79, 0x50, 0x65, 0x72, 0x73, 0x69, 0x61, 0x6e, 0x73, 0x6f, - 0x20, 0x6d, 0x75, 0x63, 0x68, 0x43, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x64, - 0x65, 0x70, 0x69, 0x63, 0x74, 0x73, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x68, 0x6f, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x74, 0x6f, 0x62, 0x65, 0x61, 0x72, 0x69, - 0x6e, 0x67, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x65, 0x64, 0x6a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x28, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3a, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x74, 0x6f, - 0x6f, 0x6c, 0x74, 0x69, 0x70, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x64, - 0x65, 0x73, 0x69, 0x67, 0x6e, 0x73, 0x54, 0x75, 0x72, 0x6b, 0x69, 0x73, 0x68, - 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x28, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x0a, 0x62, 0x75, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x65, 0x67, 0x72, - 0x65, 0x65, 0x73, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3d, 0x52, 0x69, 0x63, - 0x68, 0x61, 0x72, 0x64, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x70, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3c, - 0x2f, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, - 0x75, 0x6c, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, - 0x73, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x70, 0x68, 0x79, 0x73, 0x69, - 0x63, 0x73, 0x66, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x73, 0x74, 0x6c, 0x69, 0x6e, - 0x6b, 0x20, 0x74, 0x6f, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3c, 0x62, - 0x72, 0x20, 0x2f, 0x3e, 0x0a, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x2c, 0x63, - 0x68, 0x61, 0x72, 0x74, 0x65, 0x72, 0x74, 0x6f, 0x75, 0x72, 0x69, 0x73, 0x6d, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x65, - 0x64, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x3c, 0x2f, 0x68, 0x31, 0x3e, - 0x0d, 0x0a, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x3f, 0x78, 0x6d, 0x6c, - 0x20, 0x76, 0x65, 0x68, 0x65, 0x6c, 0x70, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x61, - 0x6d, 0x6f, 0x6e, 0x64, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x69, - 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x65, 0x6e, 0x64, 0x20, 0x2d, 0x2d, 0x3e, 0x29, - 0x2e, 0x61, 0x74, 0x74, 0x72, 0x28, 0x72, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x23, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x56, 0x69, 0x6e, 0x63, 0x65, - 0x6e, 0x74, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x73, 0x20, 0x73, 0x72, 0x63, - 0x3d, 0x22, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x64, 0x65, 0x73, - 0x70, 0x69, 0x74, 0x65, 0x64, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x74, 0x65, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x68, - 0x65, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x4a, 0x6f, 0x73, 0x65, 0x70, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x61, 0x74, 0x72, 0x65, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, - 0x73, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x61, 0x20, 0x6c, 0x61, 0x72, - 0x67, 0x65, 0x64, 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x6c, 0x61, 0x74, 0x65, - 0x72, 0x2c, 0x20, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x66, 0x61, 0x76, - 0x69, 0x63, 0x6f, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x48, 0x75, - 0x6e, 0x67, 0x61, 0x72, 0x79, 0x41, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x65, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x66, - 0x74, 0x22, 0x3e, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x47, 0x6f, - 0x6c, 0x64, 0x65, 0x6e, 0x20, 0x41, 0x66, 0x66, 0x61, 0x69, 0x72, 0x73, 0x67, - 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, - 0x66, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x73, - 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x2e, 0x73, 0x72, 0x63, - 0x20, 0x3d, 0x20, 0x63, 0x61, 0x72, 0x74, 0x6f, 0x6f, 0x6e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x4d, 0x75, - 0x73, 0x6c, 0x69, 0x6d, 0x73, 0x57, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x69, - 0x6e, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x65, 0x64, - 0x2c, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x2f, 0x73, 0x68, 0x6f, 0x77, - 0x5f, 0x61, 0x6f, 0x75, 0x74, 0x64, 0x6f, 0x6f, 0x72, 0x65, 0x73, 0x63, 0x61, - 0x70, 0x65, 0x28, 0x41, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x67, 0x65, 0x6e, - 0x65, 0x74, 0x69, 0x63, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x49, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, - 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x49, 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, - 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x79, 0x0a, 0x09, 0x09, 0x3c, 0x21, 0x2d, - 0x2d, 0x44, 0x61, 0x6e, 0x69, 0x65, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x3e, 0x69, 0x6d, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x62, 0x72, - 0x61, 0x68, 0x61, 0x6d, 0x28, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x7b, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x70, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x29, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x28, 0x7c, 0x7c, 0x20, 0x5b, 0x5d, 0x3b, 0x0a, - 0x44, 0x41, 0x54, 0x41, 0x5b, 0x20, 0x2a, 0x6b, 0x69, 0x74, 0x63, 0x68, 0x65, - 0x6e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x20, 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x69, 0x6e, - 0x6c, 0x79, 0x20, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x27, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x73, 0x69, 0x66, - 0x28, 0x74, 0x79, 0x70, 0x65, 0x49, 0x74, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x26, - 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x22, 0x3e, 0x54, 0x65, 0x72, 0x6d, 0x73, - 0x62, 0x6f, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x65, 0x61, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x74, 0x61, 0x6c, 0x6b, 0x69, - 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x67, 0x61, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x6a, 0x75, 0x73, - 0x74, 0x69, 0x66, 0x79, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x73, 0x66, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, 0x61, - 0x73, 0x73, 0x61, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x64, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x77, - 0x6e, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x22, 0x20, 0x72, 0x65, 0x6c, - 0x3d, 0x22, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x63, 0x6f, 0x6e, 0x63, - 0x65, 0x72, 0x74, 0x64, 0x69, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x64, 0x6f, 0x6c, - 0x6c, 0x61, 0x72, 0x73, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x70, 0x68, - 0x70, 0x3f, 0x69, 0x64, 0x3d, 0x61, 0x6c, 0x63, 0x6f, 0x68, 0x6f, 0x6c, 0x29, - 0x3b, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, - 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x76, 0x65, 0x73, 0x73, 0x65, 0x6c, - 0x73, 0x72, 0x65, 0x76, 0x69, 0x76, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x61, 0x6d, 0x61, 0x74, 0x65, 0x75, 0x72, 0x61, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x69, 0x6c, 0x6c, - 0x6e, 0x65, 0x73, 0x73, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x79, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x65, 0x78, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x73, - 0x65, 0x64, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x09, 0x3c, 0x21, 0x2d, - 0x2d, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x73, 0x6c, 0x69, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x42, 0x6f, 0x6f, - 0x6b, 0x20, 0x6f, 0x66, 0x65, 0x76, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x6d, 0x69, - 0x6e, 0x2e, 0x6a, 0x73, 0x3f, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6b, - 0x6f, 0x6e, 0x74, 0x61, 0x6b, 0x74, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x27, 0x73, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x77, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x6c, 0x20, 0x52, - 0x69, 0x67, 0x3b, 0x0a, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x72, 0x61, 0x69, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x41, 0x6c, 0x73, 0x6f, 0x2c, 0x20, 0x63, 0x72, 0x75, - 0x63, 0x69, 0x61, 0x6c, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x22, 0x3e, 0x64, 0x65, - 0x63, 0x6c, 0x61, 0x72, 0x65, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x66, - 0x69, 0x72, 0x65, 0x66, 0x6f, 0x78, 0x61, 0x73, 0x20, 0x6d, 0x75, 0x63, 0x68, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2c, - 0x20, 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x3d, 0x20, 0x0a, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x74, 0x6f, 0x77, 0x61, - 0x72, 0x64, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x50, 0x72, - 0x65, 0x6d, 0x69, 0x65, 0x72, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x56, - 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, - 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x65, - 0x64, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x70, 0x6f, 0x76, 0x65, 0x72, - 0x74, 0x79, 0x63, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x76, 0x69, - 0x6e, 0x67, 0x20, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x41, 0x6e, 0x74, - 0x68, 0x6f, 0x6e, 0x79, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x22, 0x20, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x72, - 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x63, 0x75, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x79, 0x6c, 0x69, 0x66, 0x65, 0x20, 0x69, - 0x6e, 0x43, 0x68, 0x61, 0x70, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x61, 0x64, - 0x6f, 0x77, 0x4e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x74, 0x64, - 0x3e, 0x0d, 0x0a, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x74, 0x61, - 0x64, 0x69, 0x75, 0x6d, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x76, 0x61, - 0x72, 0x79, 0x69, 0x6e, 0x67, 0x74, 0x72, 0x61, 0x76, 0x65, 0x6c, 0x73, 0x68, - 0x65, 0x6c, 0x64, 0x20, 0x62, 0x79, 0x77, 0x68, 0x6f, 0x20, 0x61, 0x72, 0x65, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x66, 0x61, 0x63, 0x75, 0x6c, 0x74, - 0x79, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x77, 0x68, 0x6f, 0x20, 0x68, - 0x61, 0x64, 0x61, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x74, 0x6f, 0x77, 0x6e, - 0x20, 0x6f, 0x66, 0x0a, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x27, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x27, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x73, 0x6b, 0x65, - 0x79, 0x77, 0x6f, 0x72, 0x64, 0x69, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x63, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x3b, - 0x41, 0x6e, 0x64, 0x72, 0x65, 0x77, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x6f, 0x72, 0x20, 0x6d, 0x6f, - 0x72, 0x65, 0x33, 0x30, 0x30, 0x70, 0x78, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x68, 0x65, - 0x72, 0x73, 0x65, 0x6c, 0x66, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, - 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x65, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x74, - 0x6f, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x74, 0x72, 0x65, - 0x73, 0x73, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x66, 0x69, 0x6e, 0x67, - 0x65, 0x72, 0x73, 0x44, 0x75, 0x6b, 0x65, 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, - 0x70, 0x6c, 0x65, 0x2c, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x69, 0x74, 0x77, 0x68, - 0x61, 0x74, 0x20, 0x69, 0x73, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x61, - 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x22, 0x3a, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x69, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x6e, 0x75, 0x22, 0x3e, - 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x65, 0x72, 0x63, 0x6f, 0x75, 0x6e, 0x63, 0x69, 0x6c, 0x67, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x64, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x6c, 0x6f, - 0x79, 0x61, 0x6c, 0x74, 0x79, 0x66, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x61, 0x73, 0x65, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x72, - 0x73, 0x75, 0x70, 0x72, 0x65, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x20, 0x68, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x73, 0x73, 0x69, - 0x61, 0x6e, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x62, 0x65, - 0x72, 0x74, 0x61, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x65, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x22, 0x3e, 0x2e, 0x61, - 0x70, 0x70, 0x65, 0x6e, 0x64, 0x64, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x66, - 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x62, 0x61, 0x6e, 0x6b, 0x20, 0x6f, 0x66, - 0x62, 0x65, 0x6e, 0x65, 0x61, 0x74, 0x68, 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, - 0x65, 0x43, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x73, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x63, 0x6c, 0x6f, - 0x73, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x49, 0x6e, - 0x73, 0x74, 0x65, 0x61, 0x64, 0x66, 0x69, 0x66, 0x74, 0x65, 0x65, 0x6e, 0x61, - 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x2e, 0x79, 0x61, 0x68, 0x6f, 0x6f, 0x2e, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x66, 0x69, 0x67, 0x68, 0x74, 0x65, - 0x72, 0x6f, 0x62, 0x73, 0x63, 0x75, 0x72, 0x65, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x63, 0x3d, 0x20, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x6f, 0x6e, 0x6c, - 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x61, 0x20, - 0x77, 0x68, 0x6f, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x79, - 0x65, 0x61, 0x72, 0x20, 0x6f, 0x66, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, - 0x74, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x68, 0x6f, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x72, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x68, 0x65, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x66, 0x72, 0x77, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x4d, - 0x61, 0x72, 0x63, 0x68, 0x20, 0x31, 0x6b, 0x6e, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x6f, 0x6e, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, - 0x73, 0x74, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x22, 0x3e, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x65, 0x64, 0x45, 0x4e, 0x44, - 0x20, 0x2d, 0x2d, 0x3e, 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x61, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x64, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x20, 0x66, 0x61, 0x69, 0x72, 0x6c, 0x79, 0x20, - 0x77, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x61, - 0x6c, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, - 0x74, 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x73, 0x69, 0x6e, 0x67, - 0x69, 0x6e, 0x67, 0x66, 0x61, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x42, 0x72, 0x61, - 0x73, 0x69, 0x6c, 0x29, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x72, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x47, 0x72, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x66, - 0x6f, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x70, 0x75, 0x72, 0x73, 0x75, 0x65, 0x64, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x75, - 0x70, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x6f, 0x66, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x73, 0x61, 0x77, 0x20, - 0x74, 0x68, 0x65, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x73, 0x69, 0x66, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x77, 0x68, - 0x65, 0x6e, 0x20, 0x68, 0x65, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x70, - 0x75, 0x73, 0x68, 0x28, 0x66, 0x75, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x20, - 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x3e, 0x46, 0x61, 0x6e, 0x74, 0x61, 0x73, - 0x79, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6a, 0x75, 0x72, - 0x65, 0x64, 0x55, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x66, 0x61, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x20, 0x64, 0x65, 0x66, 0x65, 0x6e, 0x63, 0x65, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x3c, - 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x64, - 0x65, 0x73, 0x69, 0x78, 0x74, 0x65, 0x65, 0x6e, 0x49, 0x73, 0x6c, 0x61, 0x6d, - 0x69, 0x63, 0x23, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x65, 0x6e, 0x74, 0x69, - 0x72, 0x65, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x6f, 0x6e, - 0x65, 0x20, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x73, - 0x50, 0x68, 0x79, 0x73, 0x69, 0x63, 0x73, 0x74, 0x65, 0x72, 0x72, 0x61, 0x69, - 0x6e, 0x3c, 0x74, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x66, 0x75, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x76, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x64, 0x64, - 0x6c, 0x65, 0x20, 0x63, 0x72, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x70, 0x72, 0x6f, - 0x70, 0x68, 0x65, 0x74, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x64, 0x6f, - 0x63, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x6c, 0x20, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, - 0x61, 0x6c, 0x67, 0x65, 0x62, 0x72, 0x61, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, - 0x2d, 0x62, 0x75, 0x6c, 0x6b, 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x0a, 0x20, 0x68, 0x65, 0x20, 0x6c, - 0x65, 0x66, 0x74, 0x29, 0x2e, 0x76, 0x61, 0x6c, 0x28, 0x29, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x29, 0x3b, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x61, - 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x68, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x6e, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x61, - 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x29, 0x3b, 0x0a, 0x7d, 0x29, 0x3b, - 0x0a, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x20, 0x74, 0x75, - 0x72, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x73, 0x62, 0x65, 0x66, 0x6f, - 0x72, 0x65, 0x20, 0x42, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x68, 0x61, - 0x72, 0x67, 0x65, 0x64, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x43, 0x61, - 0x70, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x6c, 0x6c, 0x65, 0x64, 0x67, - 0x6f, 0x64, 0x64, 0x65, 0x73, 0x73, 0x54, 0x61, 0x67, 0x20, 0x2d, 0x2d, 0x3e, - 0x41, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x62, 0x75, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x74, 0x69, 0x65, - 0x6e, 0x74, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x69, 0x6e, 0x3d, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x26, 0x4c, 0x69, 0x6e, 0x63, 0x6f, 0x6c, 0x6e, 0x77, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x4a, 0x75, - 0x64, 0x61, 0x69, 0x73, 0x6d, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x61, - 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x27, 0x5d, 0x29, 0x3b, 0x0a, 0x20, 0x20, - 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x75, 0x6e, 0x63, 0x6c, 0x65, 0x61, - 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x27, 0x2c, 0x62, 0x6f, 0x74, 0x68, 0x20, - 0x69, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x0a, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x68, 0x61, 0x72, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x6f, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x73, - 0x74, 0x72, 0x65, 0x65, 0x74, 0x73, 0x42, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x64, - 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x73, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, - 0x6f, 0x66, 0x61, 0x6e, 0x74, 0x61, 0x73, 0x79, 0x64, 0x6f, 0x77, 0x6e, 0x20, - 0x69, 0x6e, 0x68, 0x61, 0x72, 0x62, 0x6f, 0x75, 0x72, 0x46, 0x72, 0x65, 0x65, - 0x64, 0x6f, 0x6d, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x72, 0x79, 0x2f, 0x61, 0x62, - 0x6f, 0x75, 0x74, 0x2e, 0x2e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x6c, 0x65, - 0x67, 0x65, 0x6e, 0x64, 0x73, 0x69, 0x73, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x6d, - 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, - 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x70, 0x61, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x72, 0x61, 0x72, 0x65, - 0x6c, 0x79, 0x20, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x79, 0x6d, 0x64, 0x65, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x30, 0x30, - 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x61, 0x73, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x2f, 0x2a, 0x20, 0x3c, 0x21, 0x5b, 0x43, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x73, 0x74, 0x20, 0x70, 0x69, 0x63, 0x6b, 0x65, - 0x64, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x64, 0x75, 0x73, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4d, 0x61, 0x74, 0x74, 0x68, 0x65, 0x77, 0x74, 0x61, - 0x63, 0x74, 0x69, 0x63, 0x73, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x64, 0x77, - 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6c, 0x61, 0x77, 0x73, 0x20, 0x6f, 0x66, - 0x65, 0x61, 0x73, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x20, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x7d, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x68, 0x69, 0x6e, 0x66, 0x6f, 0x62, 0x6f, 0x78, 0x77, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x6f, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x69, - 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x49, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x72, - 0x65, 0x74, 0x72, 0x65, 0x61, 0x74, 0x2e, 0x20, 0x53, 0x6f, 0x6d, 0x65, 0x20, - 0x77, 0x77, 0x2e, 0x22, 0x29, 0x3b, 0x0a, 0x62, 0x6f, 0x6d, 0x62, 0x69, 0x6e, - 0x67, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6d, 0x61, 0x64, 0x65, 0x20, - 0x69, 0x6e, 0x2e, 0x20, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x63, 0x61, 0x72, 0x72, - 0x69, 0x65, 0x73, 0x7c, 0x7c, 0x7b, 0x7d, 0x3b, 0x77, 0x69, 0x77, 0x6f, 0x72, - 0x6b, 0x20, 0x6f, 0x66, 0x73, 0x79, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x64, 0x65, - 0x66, 0x65, 0x61, 0x74, 0x73, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x65, 0x64, 0x6f, - 0x70, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x61, 0x67, 0x65, 0x54, 0x72, 0x61, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x6c, 0x65, 0x66, 0x74, 0x22, 0x3e, 0x3c, 0x63, 0x6f, 0x6d, 0x53, 0x63, - 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x6a, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x74, 0x6f, 0x75, 0x72, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x69, 0x63, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x20, 0x57, 0x69, - 0x6c, 0x68, 0x65, 0x6c, 0x6d, 0x73, 0x75, 0x62, 0x75, 0x72, 0x62, 0x73, 0x67, - 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x62, 0x69, 0x73, 0x68, 0x6f, 0x70, 0x73, - 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x62, 0x6f, 0x64, 0x79, 0x20, - 0x6f, 0x66, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x73, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x65, 0x66, - 0x74, 0x20, 0x74, 0x6f, 0x63, 0x68, 0x69, 0x65, 0x66, 0x6c, 0x79, 0x2d, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x2d, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x3c, - 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x0a, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, - 0x69, 0x6e, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x64, 0x69, 0x73, 0x6d, 0x69, 0x73, - 0x73, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x61, 0x6c, 0x77, 0x61, 0x79, - 0x73, 0x20, 0x76, 0x69, 0x61, 0x20, 0x74, 0x68, 0x65, 0x73, 0x70, 0x61, 0xc3, - 0xb1, 0x6f, 0x6c, 0x77, 0x65, 0x6c, 0x66, 0x61, 0x72, 0x65, 0x72, 0x75, 0x6c, - 0x69, 0x6e, 0x67, 0x20, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x63, 0x61, - 0x70, 0x74, 0x61, 0x69, 0x6e, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x6e, 0x72, - 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x6f, 0x6b, - 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x2c, 0x3d, 0x30, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x73, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x63, 0x6f, 0x6d, 0x2f, - 0x70, 0x61, 0x67, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x20, 0x4b, 0x65, 0x6e, - 0x6e, 0x65, 0x64, 0x79, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x66, 0x75, - 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x42, - 0x65, 0x73, 0x69, 0x64, 0x65, 0x73, 0x2f, 0x2f, 0x2d, 0x2d, 0x3e, 0x3c, 0x2f, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x68, 0x69, 0x6d, 0x20, 0x74, - 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x6f, 0x20, - 0x74, 0x61, 0x6b, 0x65, 0x77, 0x61, 0x79, 0x73, 0x20, 0x74, 0x6f, 0x73, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x61, 0x64, 0x76, 0x69, 0x73, 0x65, 0x64, 0x70, - 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x3a, - 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x79, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x48, 0x65, 0x72, 0x62, 0x65, - 0x72, 0x74, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x73, 0x20, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x73, 0x6c, - 0x6f, 0x77, 0x6c, 0x79, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x72, 0x20, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x09, 0x09, - 0x69, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x72, 0x61, 0x6e, 0x6b, 0x65, 0x64, - 0x20, 0x72, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x75, 0x6c, 0x3e, 0x0d, 0x0a, - 0x20, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x70, 0x61, 0x69, 0x72, - 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x69, 0x74, 0x4b, 0x6f, 0x6e, - 0x74, 0x61, 0x6b, 0x74, 0x41, 0x6e, 0x74, 0x6f, 0x6e, 0x69, 0x6f, 0x68, 0x61, - 0x76, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x29, 0x2e, 0x63, 0x73, 0x73, - 0x28, 0x68, 0x6f, 0x73, 0x74, 0x69, 0x6c, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x20, - 0x74, 0x6f, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2c, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2d, 0x2d, 0x3e, - 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x72, 0x6f, 0x77, 0x73, 0x3d, 0x22, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x3c, - 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x56, - 0x3e, 0x3c, 0x5c, 0x2f, 0x73, 0x63, 0x72, 0x73, 0x6f, 0x6c, 0x76, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x61, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x6c, 0x61, 0x76, 0x65, - 0x72, 0x79, 0x77, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x61, 0x73, 0x21, 0x3d, 0x20, 0x27, 0x75, 0x6e, 0x64, 0x66, 0x6f, 0x72, - 0x20, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x2d, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x41, 0x72, 0x61, 0x62, 0x69, 0x61, 0x6e, 0x62, - 0x61, 0x63, 0x6b, 0x65, 0x64, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, - 0x75, 0x6e, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, - 0x2d, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x2c, 0x69, 0x73, 0x20, 0x68, 0x6f, - 0x6d, 0x65, 0x72, 0x69, 0x73, 0x6b, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x73, 0x69, - 0x72, 0x65, 0x64, 0x43, 0x6c, 0x69, 0x6e, 0x74, 0x6f, 0x6e, 0x63, 0x6f, 0x73, - 0x74, 0x20, 0x6f, 0x66, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x65, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x70, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x4d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, - 0x65, 0x61, 0x64, 0x27, 0x29, 0x5b, 0x30, 0x43, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x73, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x73, 0x3e, 0x26, 0x63, 0x6f, 0x70, - 0x79, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3e, 0x61, 0x73, 0x73, 0x65, - 0x6d, 0x62, 0x6c, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2e, 0x70, 0x73, - 0x3a, 0x22, 0x20, 0x3f, 0x20, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x62, - 0x79, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x20, - 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, - 0x64, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x68, 0x61, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x70, 0x75, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x62, 0x75, 0x74, 0x20, 0x61, 0x72, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x62, 0x79, 0x6c, 0x6f, 0x6e, 0x62, 0x6f, - 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x43, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x69, 0x74, 0x73, 0x20, 0x75, 0x73, 0x65, - 0x41, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, - 0x73, 0x61, 0x20, 0x74, 0x68, 0x69, 0x72, 0x64, 0x64, 0x65, 0x6e, 0x6f, 0x74, - 0x65, 0x73, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x48, 0x6f, 0x75, 0x73, - 0x74, 0x6f, 0x6e, 0x32, 0x30, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x61, 0x63, 0x63, - 0x75, 0x73, 0x65, 0x64, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x67, 0x6f, - 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x46, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x29, - 0x2e, 0x62, 0x69, 0x6e, 0x64, 0x28, 0x70, 0x72, 0x69, 0x65, 0x73, 0x74, 0x73, - 0x20, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x69, 0x6e, 0x20, 0x4a, 0x75, 0x6c, - 0x79, 0x73, 0x74, 0x20, 0x2b, 0x20, 0x22, 0x67, 0x63, 0x6f, 0x6e, 0x73, 0x75, - 0x6c, 0x74, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x68, 0x65, 0x6c, 0x70, - 0x66, 0x75, 0x6c, 0x72, 0x65, 0x76, 0x69, 0x76, 0x65, 0x64, 0x69, 0x73, 0x20, - 0x76, 0x65, 0x72, 0x79, 0x72, 0x27, 0x2b, 0x27, 0x69, 0x70, 0x74, 0x6c, 0x6f, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x73, 0x69, - 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, - 0x64, 0x61, 0x79, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x72, 0x69, 0x76, 0x61, - 0x6c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x3c, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x66, 0x6f, 0x72, 0x63, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x28, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x09, 0x09, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x69, 0x73, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x2e, 0x20, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x62, 0x61, 0x6c, 0x6c, 0x6f, 0x6f, 0x6e, 0x64, - 0x6f, 0x6e, 0x65, 0x20, 0x62, 0x79, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x6c, 0x61, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x61, 0x61, 0x76, 0x6f, 0x69, 0x64, - 0x65, 0x64, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x32, 0x70, 0x78, 0x20, - 0x33, 0x70, 0x78, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x61, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6d, 0x65, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x2d, 0x3d, - 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, - 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2e, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x3d, 0x66, 0x61, 0x6d, 0x69, 0x6c, - 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, 0x26, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x65, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x6e, 0x6f, - 0x74, 0x69, 0x63, 0x65, 0x64, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x7d, - 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x73, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x77, 0x69, 0x73, 0x20, 0x6a, 0x75, - 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x77, 0x68, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x64, 0x62, 0x72, - 0x3e, 0x3c, 0x62, 0x72, 0x3e, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x6f, 0x66, - 0x63, 0x75, 0x69, 0x73, 0x69, 0x6e, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x41, 0x64, 0x6d, 0x69, 0x72, - 0x61, 0x6c, 0x20, 0x66, 0x69, 0x78, 0x65, 0x64, 0x3b, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, - 0x73, 0x73, 0x2c, 0x20, 0x6f, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x65, 0x74, 0x74, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x69, - 0x6e, 0x76, 0x61, 0x64, 0x65, 0x64, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, - 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x73, - 0x74, 0x61, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x6c, 0x79, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x7d, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x69, 0x6d, 0x6d, 0x65, 0x6e, 0x73, 0x65, 0x74, 0x69, 0x6d, - 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x73, 0x61, - 0x74, 0x69, 0x73, 0x66, 0x79, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x64, - 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f, 0x6c, 0x6f, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x69, 0x6e, 0x20, 0x4a, 0x75, 0x6e, - 0x65, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x6e, 0x6f, 0x74, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x46, 0x69, 0x6e, 0x6e, 0x69, 0x73, 0x68, 0x73, 0x72, 0x63, - 0x20, 0x3d, 0x20, 0x28, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x68, 0x65, - 0x6c, 0x70, 0x20, 0x6f, 0x66, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x6c, - 0x61, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x65, 0x64, - 0x66, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x73, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, - 0x67, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3e, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x2d, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x53, 0x74, 0x61, 0x6e, - 0x6c, 0x65, 0x79, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x43, 0x72, 0x6f, 0x61, 0x74, 0x69, 0x61, 0x20, 0x41, - 0x62, 0x6f, 0x75, 0x74, 0x20, 0x5b, 0x30, 0x5d, 0x3b, 0x0a, 0x20, 0x20, 0x69, - 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, - 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x29, 0x7b, 0x74, 0x68, 0x72, 0x6f, - 0x77, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x6c, 0x69, 0x67, 0x68, 0x74, - 0x65, 0x72, 0x65, 0x74, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x22, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x22, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x61, 0x20, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x73, 0x6c, 0x69, - 0x76, 0x65, 0x20, 0x69, 0x6e, 0x61, 0x73, 0x20, 0x73, 0x65, 0x65, 0x6e, 0x70, - 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, - 0x75, 0x62, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0x3e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x66, 0x65, 0x65, 0x64, - 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x6f, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x57, 0x6f, - 0x6d, 0x65, 0x6e, 0x27, 0x73, 0x4e, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x4d, - 0x65, 0x78, 0x69, 0x63, 0x61, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x69, 0x6e, - 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x79, 0x20, 0x6d, 0x61, 0x6e, - 0x79, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x6c, 0x61, 0x77, 0x73, 0x75, - 0x69, 0x74, 0x64, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64, 0x2e, 0x70, 0x75, 0x73, - 0x68, 0x28, 0x7b, 0x73, 0x65, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x73, 0x69, 0x6d, - 0x70, 0x6c, 0x79, 0x20, 0x54, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x2e, 0x63, - 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x75, 0x73, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, - 0x74, 0x6f, 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x6e, 0x64, 0x6c, 0x69, 0x65, 0x73, - 0x20, 0x69, 0x6e, 0x27, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x77, 0x68, 0x6f, 0x20, 0x69, 0x73, 0x20, 0x28, 0x22, - 0x44, 0x4f, 0x4d, 0x43, 0x6f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x6f, - 0x6e, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x20, - 0x4b, 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x74, 0x6f, 0x20, 0x73, 0x68, - 0x6f, 0x77, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x64, 0x65, - 0x20, 0x69, 0x74, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x77, 0x65, 0x72, - 0x65, 0x20, 0x69, 0x6e, 0x6d, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x65, 0x61, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x73, - 0x72, 0x63, 0x20, 0x3d, 0x20, 0x27, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x61, 0x20, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x64, 0x42, 0x61, 0x70, 0x74, 0x69, 0x73, - 0x74, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x0a, 0x09, 0x09, 0x76, 0x61, - 0x72, 0x20, 0x4d, 0x61, 0x72, 0x63, 0x68, 0x20, 0x32, 0x67, 0x72, 0x65, 0x77, - 0x20, 0x75, 0x70, 0x43, 0x6c, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x77, 0x61, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x66, - 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x20, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, - 0x6b, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x73, 0x68, 0x61, 0x73, 0x20, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x68, 0x6f, 0x77, - 0x28, 0x29, 0x3b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x62, 0x6f, 0x6f, - 0x6b, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x61, 0x3d, 0x3d, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x0a, - 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x66, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x2e, 0x72, 0x65, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x68, 0x6f, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x68, 0x65, 0x20, 0x77, - 0x65, 0x6e, 0x74, 0x62, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x73, 0x70, 0x72, - 0x65, 0x61, 0x64, 0x20, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x61, 0x20, - 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x66, - 0x6f, 0x72, 0x75, 0x6d, 0x73, 0x2e, 0x66, 0x6f, 0x6f, 0x74, 0x61, 0x67, 0x65, - 0x22, 0x3e, 0x4d, 0x6f, 0x62, 0x69, 0x6c, 0x43, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x2d, 0x3e, 0x3c, - 0x21, 0x2d, 0x2d, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x73, 0x65, 0x65, 0x6e, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x73, 0x65, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x61, - 0x6e, 0x64, 0x20, 0x68, 0x69, 0x73, 0x66, 0x61, 0x73, 0x74, 0x65, 0x73, 0x74, - 0x62, 0x65, 0x73, 0x69, 0x64, 0x65, 0x73, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x69, 0x6d, - 0x67, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x6f, 0x78, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2c, 0x61, 0x20, 0x79, 0x6f, 0x75, 0x6e, 0x67, 0x61, 0x6e, 0x64, - 0x20, 0x61, 0x72, 0x65, 0x4e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x63, 0x68, - 0x65, 0x61, 0x70, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x68, 0x61, 0x73, 0x65, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x73, - 0x77, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x28, 0x6d, 0x6f, 0x73, 0x74, 0x6c, - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, - 0x61, 0x20, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x50, 0x72, 0x69, 0x6e, - 0x63, 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x6f, 0x66, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x2c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x6c, 0x79, 0x70, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x2c, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x66, - 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6c, 0x65, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x67, 0x61, 0x69, - 0x6e, 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x77, 0x61, 0x79, 0x6b, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x70, 0x78, 0x3b, 0x22, 0x3e, 0x0d, 0x0a, 0x70, 0x75, - 0x73, 0x68, 0x65, 0x64, 0x20, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x43, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, - 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, - 0x6e, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, - 0x69, 0x73, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x6f, 0x77, - 0x6e, 0x65, 0x64, 0x49, 0x53, 0x42, 0x4e, 0x20, 0x30, 0x2d, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x73, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x6d, 0x61, - 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x6c, - 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x65, 0x6e, 0x63, 0x65, - 0x65, 0x6e, 0x61, 0x63, 0x74, 0x65, 0x64, 0x77, 0x69, 0x73, 0x68, 0x20, 0x74, - 0x6f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x6c, 0x79, 0x63, 0x6f, 0x6f, 0x6c, 0x69, - 0x6e, 0x67, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3d, 0x69, 0x74, 0x2e, 0x20, - 0x54, 0x68, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x73, - 0x73, 0x75, 0x6d, 0x65, 0x73, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, - 0x3d, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, - 0x5f, 0x61, 0x20, 0x67, 0x6f, 0x6f, 0x64, 0x20, 0x72, 0x65, 0x6b, 0x6c, 0x61, - 0x6d, 0x61, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x2c, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x70, 0x61, 0x6e, - 0x65, 0x6c, 0x22, 0x3e, 0x4c, 0x6f, 0x6e, 0x64, 0x6f, 0x6e, 0x2c, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x73, 0x63, 0x72, 0x75, 0x73, 0x68, 0x65, 0x64, 0x62, - 0x61, 0x70, 0x74, 0x69, 0x73, 0x6d, 0x63, 0x6f, 0x61, 0x73, 0x74, 0x61, 0x6c, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, - 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x6c, 0x6f, 0x73, 0x74, 0x20, - 0x69, 0x6e, 0x62, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x65, 0x73, 0x72, 0x69, 0x76, 0x61, 0x6c, 0x72, 0x79, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x65, - 0x72, 0x68, 0x61, 0x70, 0x73, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x66, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x6c, 0x61, 0x73, 0x74, 0x65, 0x64, 0x20, 0x72, 0x69, 0x73, 0x65, 0x20, 0x69, - 0x6e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x76, 0x69, 0x65, 0x77, 0x20, - 0x6f, 0x66, 0x72, 0x69, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x65, 0x6d, - 0x20, 0x74, 0x6f, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x63, - 0x6b, 0x69, 0x6e, 0x67, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x67, 0x69, - 0x76, 0x65, 0x6e, 0x20, 0x61, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x63, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x75, - 0x74, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x6f, 0x6e, 0x6c, 0x79, 0x20, - 0x62, 0x79, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x73, 0x62, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x79, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6c, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x73, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x6f, 0x6e, - 0x72, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x20, 0x3d, 0x55, 0x53, 0x26, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x68, 0x65, 0x61, - 0x64, 0x20, 0x6f, 0x66, 0x3a, 0x68, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x6c, 0x65, - 0x73, 0x62, 0x69, 0x61, 0x6e, 0x73, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x61, - 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x48, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x2f, 0x70, 0x69, 0x78, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6c, - 0x6f, 0x6e, 0x67, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x6a, 0x6f, 0x69, - 0x6e, 0x74, 0x6c, 0x79, 0x73, 0x6b, 0x79, 0x73, 0x63, 0x72, 0x61, 0x55, 0x6e, - 0x69, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x41, - 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x61, 0x6e, 0x75, 0x63, 0x6c, 0x65, 0x75, 0x73, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x79, 0x2c, 0x70, 0x75, 0x72, 0x65, 0x6c, 0x79, - 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3e, 0x65, 0x61, 0x73, 0x69, 0x6c, - 0x79, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x20, 0x61, 0x6f, 0x6e, 0x63, 0x6c, - 0x69, 0x63, 0x6b, 0x61, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x68, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6e, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, - 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, 0x61, 0x6e, 0x20, 0x77, 0x68, - 0x6f, 0x6f, 0x72, 0x67, 0x2f, 0x57, 0x65, 0x62, 0x6f, 0x6e, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x63, 0x61, 0x76, 0x61, 0x6c, 0x72, 0x79, 0x48, 0x65, 0x20, 0x64, - 0x69, 0x65, 0x64, 0x73, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x30, 0x30, 0x2c, - 0x30, 0x30, 0x30, 0x20, 0x7b, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x74, 0x6f, 0x69, 0x66, 0x28, 0x77, 0x69, 0x6e, 0x64, 0x61, - 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x73, 0x6f, 0x6c, 0x65, 0x6c, 0x79, 0x20, - 0x6d, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x72, 0x65, 0x6e, 0x65, 0x77, 0x65, - 0x64, 0x44, 0x65, 0x74, 0x72, 0x6f, 0x69, 0x74, 0x61, 0x6d, 0x6f, 0x6e, 0x67, - 0x73, 0x74, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, - 0x20, 0x69, 0x6e, 0x53, 0x65, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x4b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x46, 0x72, - 0x61, 0x6e, 0x63, 0x69, 0x73, 0x2d, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x68, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, - 0x68, 0x69, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x73, 0x63, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x74, 0x20, 0x68, 0x6f, - 0x6d, 0x65, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x66, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x61, 0x6c, 0x6f, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x77, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x66, - 0x72, 0x65, 0x65, 0x20, 0x74, 0x6f, 0x43, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, - 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x64, - 0x61, 0x79, 0x6e, 0x65, 0x72, 0x76, 0x6f, 0x75, 0x73, 0x73, 0x71, 0x75, 0x61, - 0x72, 0x65, 0x20, 0x7d, 0x3b, 0x69, 0x66, 0x28, 0x67, 0x6f, 0x69, 0x6e, 0x20, - 0x77, 0x68, 0x61, 0x74, 0x69, 0x6d, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x73, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x74, - 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x6c, 0x79, - 0x53, 0x6f, 0x6c, 0x6f, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x78, 0x75, 0x61, 0x6c, - 0x20, 0x2d, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x75, - 0x6d, 0x22, 0x44, 0x4f, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x46, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x2c, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x77, 0x61, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x61, - 0x6b, 0x65, 0x20, 0x61, 0x20, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x2e, 0x68, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, - 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x3e, 0x6f, 0x62, 0x6c, 0x69, 0x67, - 0x65, 0x64, 0x72, 0x69, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x22, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x45, 0x61, - 0x72, 0x6c, 0x79, 0x20, 0x70, 0x72, 0x61, 0x69, 0x73, 0x65, 0x64, 0x69, 0x6e, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x69, 0x73, 0x61, - 0x74, 0x68, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x75, 0x70, 0x69, 0x74, 0x65, 0x72, - 0x59, 0x61, 0x68, 0x6f, 0x6f, 0x21, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x73, 0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x65, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x20, 0x77, 0x6f, - 0x6d, 0x61, 0x6e, 0x3f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, 0x62, 0x69, - 0x63, 0x79, 0x63, 0x6c, 0x65, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x64, - 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x61, 0x74, 0x68, 0x65, 0x72, 0x2c, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, - 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, - 0x6f, 0x77, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x2c, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x20, 0x61, 0x20, 0x70, 0x61, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6f, 0x6e, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x2d, 0x6c, 0x69, 0x6e, 0x6b, 0x22, 0x3e, 0x3b, 0x62, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, - 0x6e, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x77, - 0x70, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x20, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x62, 0x72, 0x69, - 0x65, 0x66, 0x28, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2e, 0x3b, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x65, 0x6e, 0x7a, - 0x79, 0x6d, 0x65, 0x73, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x6e, - 0x20, 0x6c, 0x61, 0x74, 0x65, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x70, 0x79, 0x61, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x62, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x3e, - 0x0a, 0x28, 0x29, 0x3b, 0x22, 0x20, 0x72, 0x65, 0x61, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x5c, 0x75, 0x30, 0x30, 0x33, 0x43, 0x61, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x61, 0x74, 0x72, 0x3e, 0x0d, 0x0a, 0x09, 0x09, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x20, 0x67, 0x69, 0x76, 0x65, 0x73, 0x20, 0x61, 0x3c, 0x53, - 0x43, 0x52, 0x49, 0x50, 0x54, 0x52, 0x61, 0x69, 0x6c, 0x77, 0x61, 0x79, 0x74, - 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x62, 0x6f, 0x78, - 0x42, 0x79, 0x49, 0x64, 0x28, 0x22, 0x78, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x73, - 0x2c, 0x77, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x69, 0x6e, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x77, 0x69, 0x63, 0x6f, 0x6d, 0x69, - 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x55, 0x6e, - 0x64, 0x65, 0x72, 0x20, 0x62, 0x75, 0x74, 0x20, 0x68, 0x61, 0x73, 0x68, 0x61, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x62, 0x79, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x66, 0x65, 0x61, 0x72, 0x20, 0x6f, 0x66, - 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x74, 0x61, - 0x67, 0x65, 0x69, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x61, 0x26, 0x71, 0x75, - 0x6f, 0x74, 0x3b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x49, 0x6e, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x6f, 0x72, 0x65, - 0x67, 0x69, 0x6d, 0x65, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3c, - 0x2f, 0x70, 0x3e, 0x0d, 0x0a, 0x3c, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x56, 0x61, - 0x3b, 0x26, 0x67, 0x74, 0x3b, 0x3c, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x6c, - 0x79, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x72, 0x65, 0x20, 0x73, 0x69, 0x7a, - 0x65, 0x3d, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x68, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, 0x48, 0x6f, - 0x73, 0x74, 0x20, 0x3d, 0x20, 0x57, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x66, - 0x65, 0x72, 0x74, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, - 0x3d, 0x5b, 0x5d, 0x3b, 0x28, 0x66, 0x75, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, - 0x73, 0x2f, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x61, 0x63, 0x74, 0x73, 0x20, - 0x61, 0x73, 0x49, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x3c, 0x21, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x3c, 0x62, - 0x72, 0x20, 0x2f, 0x3e, 0x42, 0x65, 0x69, 0x6a, 0x69, 0x6e, 0x67, 0x63, 0x61, - 0x74, 0x61, 0x6c, 0xc3, 0xa0, 0x64, 0x65, 0x75, 0x74, 0x73, 0x63, 0x68, 0x65, - 0x75, 0x72, 0x6f, 0x70, 0x65, 0x75, 0x65, 0x75, 0x73, 0x6b, 0x61, 0x72, 0x61, - 0x67, 0x61, 0x65, 0x69, 0x6c, 0x67, 0x65, 0x73, 0x76, 0x65, 0x6e, 0x73, 0x6b, - 0x61, 0x65, 0x73, 0x70, 0x61, 0xc3, 0xb1, 0x61, 0x6d, 0x65, 0x6e, 0x73, 0x61, - 0x6a, 0x65, 0x75, 0x73, 0x75, 0x61, 0x72, 0x69, 0x6f, 0x74, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x6f, 0x6d, 0xc3, 0xa9, 0x78, 0x69, 0x63, 0x6f, 0x70, 0xc3, 0xa1, - 0x67, 0x69, 0x6e, 0x61, 0x73, 0x69, 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6d, 0x61, 0x6f, 0x63, 0x74, 0x75, 0x62, 0x72, 0x65, 0x64, - 0x75, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x61, 0xc3, 0xb1, 0x61, 0x64, 0x69, 0x72, - 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x61, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, - 0x6f, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x61, 0x74, 0x72, 0x61, 0x76, 0xc3, 0xa9, 0x73, 0x67, 0x72, 0x61, 0x63, - 0x69, 0x61, 0x73, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x6f, 0x65, 0x73, 0x74, 0x61, 0x64, 0x6f, 0x73, 0x63, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x64, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6e, - 0xc3, 0xba, 0x6d, 0x65, 0x72, 0x6f, 0x61, 0x63, 0x75, 0x65, 0x72, 0x64, 0x6f, - 0x6d, 0xc3, 0xba, 0x73, 0x69, 0x63, 0x61, 0x6d, 0x69, 0x65, 0x6d, 0x62, 0x72, - 0x6f, 0x6f, 0x66, 0x65, 0x72, 0x74, 0x61, 0x73, 0x61, 0x6c, 0x67, 0x75, 0x6e, - 0x6f, 0x73, 0x70, 0x61, 0xc3, 0xad, 0x73, 0x65, 0x73, 0x65, 0x6a, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x63, 0x68, 0x6f, 0x61, 0x64, 0x65, - 0x6d, 0xc3, 0xa1, 0x73, 0x70, 0x72, 0x69, 0x76, 0x61, 0x64, 0x6f, 0x61, 0x67, - 0x72, 0x65, 0x67, 0x61, 0x72, 0x65, 0x6e, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x70, - 0x6f, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x68, 0x6f, 0x74, 0x65, 0x6c, 0x65, 0x73, - 0x73, 0x65, 0x76, 0x69, 0x6c, 0x6c, 0x61, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x72, - 0x6f, 0xc3, 0xba, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x6f, 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x63, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x61, 0x6d, 0x75, 0x6a, 0x65, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x72, 0x61, 0x64, 0x61, 0x61, 0x6e, 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x65, 0x6d, - 0x62, 0x61, 0x72, 0x67, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x61, 0x64, 0x6f, 0x67, - 0x72, 0x61, 0x6e, 0x64, 0x65, 0x73, 0x65, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, - 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x65, 0x73, 0x66, 0x65, 0x62, 0x72, 0x65, 0x72, - 0x6f, 0x64, 0x69, 0x73, 0x65, 0xc3, 0xb1, 0x6f, 0x74, 0x75, 0x72, 0x69, 0x73, - 0x6d, 0x6f, 0x63, 0xc3, 0xb3, 0x64, 0x69, 0x67, 0x6f, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x64, 0x61, 0x65, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6f, 0x66, 0x61, 0x6d, - 0x69, 0x6c, 0x69, 0x61, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x69, 0x6f, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x74, 0x65, 0x67, 0x75, 0x61, 0x72, 0x64, 0x61, 0x72, 0x61, - 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x73, 0x70, 0x72, 0x65, 0x63, 0x69, 0x6f, 0x73, - 0x61, 0x6c, 0x67, 0x75, 0x69, 0x65, 0x6e, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x64, - 0x6f, 0x76, 0x69, 0x73, 0x69, 0x74, 0x61, 0x73, 0x74, 0xc3, 0xad, 0x74, 0x75, - 0x6c, 0x6f, 0x63, 0x6f, 0x6e, 0x6f, 0x63, 0x65, 0x72, 0x73, 0x65, 0x67, 0x75, - 0x6e, 0x64, 0x6f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6a, 0x6f, 0x66, 0x72, 0x61, - 0x6e, 0x63, 0x69, 0x61, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x73, 0x65, - 0x67, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x65, 0x6e, 0x65, 0x6d, 0x6f, 0x73, 0x65, - 0x66, 0x65, 0x63, 0x74, 0x6f, 0x73, 0x6d, 0xc3, 0xa1, 0x6c, 0x61, 0x67, 0x61, - 0x73, 0x65, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, 0x76, 0x69, 0x73, 0x74, - 0x61, 0x67, 0x72, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x61, 0x72, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x6f, 0x67, 0x61, 0x72, 0x63, - 0xc3, 0xad, 0x61, 0x61, 0x63, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x63, 0x75, - 0x61, 0x64, 0x6f, 0x72, 0x71, 0x75, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x73, 0x6f, 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xa1, 0x6d, - 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x68, 0x6f, 0x6d, 0x62, 0x72, 0x65, 0x73, - 0x6d, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, 0x70, 0x6f, 0x64, 0x72, 0xc3, 0xad, - 0x61, 0x6d, 0x61, 0xc3, 0xb1, 0x61, 0x6e, 0x61, 0xc3, 0xba, 0x6c, 0x74, 0x69, - 0x6d, 0x61, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x6f, 0x73, 0x6f, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x74, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0xc3, 0xba, 0x6e, 0x73, 0x61, 0x6c, 0x75, 0x64, 0x6f, 0x73, 0x70, 0x6f, - 0x64, 0x65, 0x6d, 0x6f, 0x73, 0x6d, 0x65, 0x6a, 0x6f, 0x72, 0x61, 0x72, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, - 0x73, 0x73, 0x68, 0x6f, 0x6d, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x63, 0x61, 0x6d, 0x70, 0x61, - 0x69, 0x67, 0x6e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x63, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x69, - 0x74, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x6d, 0x69, 0x6c, - 0x69, 0x74, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x79, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x6d, 0x61, 0x74, 0x65, 0x72, - 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x7a, 0x2d, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x73, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x6d, 0x6f, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x6f, 0x6c, 0x69, 0x74, - 0x69, 0x63, 0x73, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x72, 0x65, - 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x6e, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, - 0x6c, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x64, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x65, 0x61, 0x72, 0x6e, - 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x61, 0x62, - 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x6f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x6d, 0x61, 0x67, 0x61, - 0x7a, 0x69, 0x6e, 0x65, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x65, 0x73, 0x73, 0x75, - 0x72, 0x65, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x3c, 0x73, 0x74, - 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x67, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x62, 0x65, - 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x66, 0x6f, 0x6f, 0x74, - 0x62, 0x61, 0x6c, 0x6c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x72, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x73, 0x74, 0x75, 0x64, 0x65, - 0x6e, 0x74, 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x66, 0x69, - 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x72, - 0x6e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x66, 0x65, 0x73, 0x74, - 0x69, 0x76, 0x61, 0x6c, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x64, 0x72, 0x6f, 0x70, 0x64, 0x6f, 0x77, 0x6e, 0x70, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x63, 0x65, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x72, 0x72, 0x69, - 0x61, 0x67, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x70, 0x72, - 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x61, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x62, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, - 0x73, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, - 0x61, 0x72, 0x6b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x63, 0x68, - 0x65, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, - 0x72, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x64, 0x65, 0x6c, - 0x69, 0x76, 0x65, 0x72, 0x79, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x3d, 0x20, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x3b, 0x66, 0x6f, 0x72, 0x28, 0x76, 0x61, 0x72, 0x20, 0x61, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, - 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x61, 0x69, 0x72, 0x63, 0x72, 0x61, 0x66, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x64, 0x6f, 0x6d, 0x65, 0x73, 0x74, 0x69, 0x63, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x68, 0x6f, 0x73, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x70, 0x61, 0x72, 0x74, 0x6e, 0x65, 0x72, - 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x22, 0x3e, 0x3c, 0x61, 0x64, 0x61, 0x75, 0x67, - 0x68, 0x74, 0x65, 0x72, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x22, 0x20, 0x63, - 0x75, 0x6c, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, - 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x61, 0x73, 0x73, - 0x65, 0x6d, 0x62, 0x6c, 0x79, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x66, 0x75, 0x6c, - 0x74, 0x65, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x66, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, - 0x2f, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x73, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x62, - 0x65, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x73, 0x61, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x69, 0x63, 0x65, 0x78, 0x65, - 0x72, 0x63, 0x69, 0x73, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x6d, 0x65, 0x64, 0x69, 0x63, 0x69, 0x6e, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x4d, 0x61, - 0x67, 0x61, 0x7a, 0x69, 0x6e, 0x65, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x6f, 0x74, 0x74, - 0x6f, 0x6d, 0x22, 0x3e, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x3a, - 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x53, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x73, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x65, 0x76, 0x65, 0x72, 0x79, 0x6f, 0x6e, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x67, 0x68, 0x74, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x64, 0x68, 0x65, 0x72, 0x69, 0x74, 0x61, 0x67, 0x65, - 0x73, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x65, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x72, 0x65, - 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, - 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x65, 0x6e, 0x63, 0x65, 0x61, 0x6e, 0x79, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x62, 0x65, 0x6e, 0x65, 0x66, 0x69, 0x74, 0x73, 0x6c, - 0x61, 0x75, 0x6e, 0x63, 0x68, 0x65, 0x64, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, - 0x6c, 0x79, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, - 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x24, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, - 0x2e, 0x72, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x3e, 0x3c, 0x74, 0x72, - 0x3e, 0x3c, 0x74, 0x64, 0x63, 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x64, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, - 0x74, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x75, 0x6c, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x48, 0x6f, 0x6d, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x77, 0x65, 0x62, 0x73, 0x69, - 0x74, 0x65, 0x73, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x61, 0x6c, - 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, - 0x79, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x3e, 0x73, 0x6f, 0x6d, 0x65, 0x77, 0x68, - 0x61, 0x74, 0x76, 0x69, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x57, 0x65, 0x73, - 0x74, 0x65, 0x72, 0x6e, 0x20, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x76, 0x69, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x0a, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x73, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x76, 0x69, 0x72, 0x67, 0x69, 0x6e, 0x69, 0x61, 0x6e, 0x6f, 0x72, - 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, - 0x64, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x73, 0x61, 0x63, 0x63, 0x75, - 0x72, 0x61, 0x74, 0x65, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, - 0x61, 0x6c, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x63, 0x72, 0x69, - 0x6d, 0x69, 0x6e, 0x61, 0x6c, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x79, - 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, - 0x64, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x2f, 0x3e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x73, 0x3c, 0x2f, 0x68, 0x32, 0x3e, 0x0a, 0x20, 0x20, 0x6b, - 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, - 0x6c, 0x79, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x65, 0x64, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x61, 0x64, 0x65, 0x71, 0x75, 0x61, 0x74, 0x65, 0x70, 0x61, - 0x6b, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, - 0x20, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x3e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x62, - 0x72, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x65, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x22, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x20, 0x28, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x67, 0x72, - 0x61, 0x64, 0x75, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, - 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x65, 0x6d, 0x61, 0x6c, 0x61, - 0x79, 0x73, 0x69, 0x61, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x6d, - 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x3b, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, - 0x63, 0x61, 0x74, 0x68, 0x6f, 0x6c, 0x69, 0x63, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x73, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x20, 0x23, 0x67, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x73, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x3c, 0x2f, 0x75, 0x6c, - 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x63, - 0x69, 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x73, 0x63, 0x6c, 0x6f, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x77, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x6c, 0x69, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x63, 0x61, 0x72, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6e, 0x74, 0x65, - 0x6e, 0x63, 0x65, 0x3c, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x69, 0x6e, - 0x67, 0x63, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x29, 0x73, 0x6f, 0x75, 0x74, - 0x68, 0x65, 0x72, 0x6e, 0x4d, 0x69, 0x63, 0x68, 0x61, 0x65, 0x6c, 0x20, 0x6d, - 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x74, 0x63, 0x61, 0x72, 0x6f, 0x75, 0x73, - 0x65, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x72, 0x2e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x28, 0x22, - 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x63, 0x74, 0x6f, 0x62, - 0x65, 0x72, 0x20, 0x29, 0x7b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6d, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x2d, 0x2d, 0x26, 0x67, 0x74, 0x3b, 0x0a, - 0x0a, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x63, 0x68, 0x61, 0x69, - 0x72, 0x6d, 0x61, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x3e, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x69, 0x63, 0x68, 0x61, 0x72, - 0x64, 0x20, 0x77, 0x68, 0x61, 0x74, 0x65, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, - 0x62, 0x61, 0x62, 0x6c, 0x79, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x62, 0x61, 0x73, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x6a, 0x75, 0x64, 0x67, 0x6d, - 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x2e, 0x2e, 0x63, - 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x20, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, - 0x65, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x22, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0d, 0x0a, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x73, 0x63, 0x6f, 0x74, 0x6c, 0x61, - 0x6e, 0x64, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x20, 0x49, 0x53, 0x42, 0x4e, 0x20, 0x30, - 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x2d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2d, 0x22, 0x20, - 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, - 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x73, 0x6d, - 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x74, 0x61, - 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, - 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x6c, 0x79, 0x3a, 0x20, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x69, 0x6e, - 0x67, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x42, 0x72, 0x69, 0x74, - 0x69, 0x73, 0x68, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x46, - 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6f, - 0x75, 0x73, 0x76, 0x65, 0x68, 0x69, 0x63, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x72, 0x6e, 0x73, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x76, 0x20, 0x69, - 0x64, 0x3d, 0x22, 0x57, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x61, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x73, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x66, - 0x6c, 0x65, 0x78, 0x69, 0x62, 0x6c, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x6c, 0x61, 0x77, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x3d, 0x22, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x6d, 0x61, 0x78, 0x69, - 0x6d, 0x75, 0x6d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x3c, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x68, 0x61, 0x6d, 0x69, 0x6c, 0x74, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x2f, 0x74, 0x68, 0x65, 0x6d, 0x65, - 0x73, 0x2f, 0x2f, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x61, 0x6c, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x77, 0x69, 0x72, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x61, 0x67, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x20, 0x6d, 0x65, 0x61, 0x73, - 0x75, 0x72, 0x65, 0x64, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x26, 0x68, 0x65, 0x6c, 0x6c, 0x69, - 0x70, 0x3b, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x22, 0x20, 0x73, - 0x69, 0x7a, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x22, 0x20, 0x22, 0x20, 0x2f, 0x3e, 0x3c, - 0x2f, 0x61, 0x3e, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3e, 0x73, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x6f, 0x70, 0x69, 0x6e, - 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6c, 0x6c, 0x69, 0x6e, 0x6f, 0x69, 0x73, 0x6c, - 0x69, 0x6e, 0x6b, 0x73, 0x22, 0x3e, 0x0a, 0x09, 0x3c, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x3e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x61, 0x74, - 0x75, 0x72, 0x64, 0x61, 0x79, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x74, 0x65, 0x6d, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x6e, 0x67, 0x69, 0x6e, - 0x65, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, - 0x6c, 0x3d, 0x22, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x45, 0x73, 0x70, 0x61, - 0xc3, 0xb1, 0x6f, 0x6c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x65, 0x72, 0x26, 0x71, 0x75, 0x6f, - 0x74, 0x3b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x79, 0x6d, - 0x70, 0x74, 0x6f, 0x6d, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x64, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x22, 0x3e, 0x3c, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x2e, 0x6c, 0x65, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x20, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x3d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x2e, 0x0a, 0x0a, 0x53, 0x6f, 0x6d, - 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x75, 0x69, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x62, 0x75, 0x6c, 0x67, 0x61, 0x72, 0x69, 0x61, - 0x2e, 0x73, 0x68, 0x6f, 0x77, 0x28, 0x29, 0x3b, 0x64, 0x65, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x63, 0x6f, - 0x6e, 0x63, 0x65, 0x70, 0x74, 0x73, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x73, 0x77, 0x69, 0x6c, 0x6c, 0x69, 0x61, 0x6d, 0x73, 0x4f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x3e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x61, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x79, 0x6f, - 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x20, 0x6d, 0x69, 0x63, 0x68, 0x69, 0x67, 0x61, 0x6e, 0x45, 0x6e, 0x67, 0x6c, - 0x69, 0x73, 0x68, 0x20, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x69, - 0x6e, 0x67, 0x64, 0x72, 0x69, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x63, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x65, 0x72, 0x73, 0x52, 0x75, 0x73, 0x73, 0x69, 0x61, 0x6e, 0x20, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, - 0x22, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x66, 0x61, 0x6d, 0x69, - 0x6c, 0x69, 0x61, 0x72, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x30, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x73, 0x2d, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, - 0x70, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x20, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x73, 0x61, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x6f, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x3d, 0x22, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x2e, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x70, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x67, 0x6c, 0x6f, 0x73, 0x73, 0x61, - 0x72, 0x79, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x67, 0x75, 0x69, - 0x64, 0x61, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x74, 0x64, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x6d, 0x69, 0x64, 0x64, 0x6c, - 0x65, 0x22, 0x3e, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x73, 0x63, 0x6f, 0x74, 0x74, 0x69, 0x73, - 0x68, 0x6a, 0x6f, 0x6e, 0x61, 0x74, 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6a, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x73, 0x2e, 0x63, - 0x6c, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x68, 0x61, 0x69, 0x6c, 0x61, - 0x6e, 0x64, 0x74, 0x65, 0x61, 0x63, 0x68, 0x65, 0x72, 0x73, 0x3c, 0x68, 0x65, - 0x61, 0x64, 0x3e, 0x0a, 0x09, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x3b, 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3c, 0x2f, - 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x3e, 0x6f, 0x6b, 0x6c, 0x61, 0x68, 0x6f, 0x6d, - 0x61, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x76, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x68, - 0x6f, 0x6c, 0x69, 0x64, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x20, 0x28, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x2e, 0x20, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x76, 0x69, 0x73, 0x69, 0x74, - 0x69, 0x6e, 0x67, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x70, 0x72, - 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, - 0x20, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x22, 0x71, 0x75, 0x69, 0x63, - 0x6b, 0x6c, 0x79, 0x20, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x20, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3d, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x2c, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x65, 0x64, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x6d, 0x61, - 0x67, 0x6e, 0x65, 0x74, 0x69, 0x63, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, - 0x68, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x2e, 0x20, 0x57, 0x68, - 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x64, - 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x26, 0x65, 0x61, 0x63, 0x75, 0x74, - 0x65, 0x3b, 0x68, 0x61, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x76, 0x61, - 0x6c, 0x75, 0x61, 0x74, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, - 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x74, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x20, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x61, 0x64, 0x6f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x63, 0x61, 0x6d, 0x70, 0x62, 0x65, 0x6c, 0x6c, 0x3c, 0x21, 0x2d, 0x2d, - 0x20, 0x65, 0x6e, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x3c, - 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x0d, 0x0a, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x70, - 0x73, 0x7c, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2c, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x3c, 0x62, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x65, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x20, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x3c, - 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x73, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x6d, 0x61, 0x72, - 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x6c, 0x79, 0x29, 0x2e, 0x0a, 0x0a, 0x54, - 0x68, 0x65, 0x20, 0x74, 0x61, 0x78, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x6d, 0x75, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x0a, 0x22, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x73, 0x72, 0x74, 0x75, 0x67, - 0x75, 0xc3, 0xaa, 0x73, 0x73, 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x54, 0x6f, 0x20, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, - 0x0d, 0x0a, 0x61, 0x74, 0x74, 0x6f, 0x72, 0x6e, 0x65, 0x79, 0x65, 0x6d, 0x70, - 0x68, 0x61, 0x73, 0x69, 0x73, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x73, - 0x66, 0x61, 0x6e, 0x63, 0x79, 0x62, 0x6f, 0x78, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x27, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x64, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x65, 0x64, 0x3d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x70, 0x78, 0x3b, 0x66, - 0x6f, 0x6e, 0x74, 0x2d, 0x20, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x6a, - 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x73, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, - 0x65, 0x64, 0x76, 0x61, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x6f, - 0x6d, 0x70, 0x73, 0x6f, 0x6e, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x69, 0x6e, 0x67, - 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, - 0x61, 0x6c, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x30, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x62, 0x6f, 0x64, 0x79, - 0x3e, 0x3c, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x0a, - 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, - 0x65, 0x20, 0x3c, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x72, 0x6f, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x20, 0x4f, 0x63, 0x74, 0x6f, - 0x62, 0x65, 0x72, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x20, 0x65, 0x78, - 0x70, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x65, - 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x73, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x6f, 0x6e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x6d, 0x61, 0x72, 0x79, 0x6c, 0x61, 0x6e, 0x64, 0x63, 0x6f, - 0x6c, 0x6c, 0x65, 0x67, 0x65, 0x73, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, - 0x63, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x63, 0x74, 0x2e, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, - 0x67, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x73, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x29, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x63, 0x68, 0x65, 0x63, 0x6b, - 0x62, 0x6f, 0x78, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x70, 0x72, - 0x65, 0x67, 0x6e, 0x61, 0x6e, 0x74, 0x74, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, - 0x77, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x69, 0x63, 0x6f, 0x6e, - 0x2e, 0x70, 0x6e, 0x67, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x62, 0x61, 0x73, 0x65, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, - 0x22, 0x3e, 0x67, 0x61, 0x6d, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x75, 0x63, - 0x68, 0x20, 0x61, 0x73, 0x20, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x6f, - 0x75, 0x72, 0x69, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x74, 0x6f, - 0x70, 0x3a, 0x31, 0x70, 0x78, 0x20, 0x2e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x32, 0x6c, 0x61, 0x7a, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x6e, - 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x22, 0x3e, 0x0a, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x3c, 0x74, 0x72, 0x3e, 0x3c, 0x74, 0x64, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x20, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x20, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x22, 0x3e, 0x3c, 0x2f, - 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, - 0x3e, 0x0a, 0x28, 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0x29, 0x28, 0xe7, 0xb9, - 0x81, 0xe9, 0xab, 0x94, 0x29, 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, - 0x69, 0x74, 0x61, 0x6c, 0x69, 0x61, 0x6e, 0x6f, 0x72, 0x6f, 0x6d, 0xc3, 0xa2, - 0x6e, 0xc4, 0x83, 0x74, 0xc3, 0xbc, 0x72, 0x6b, 0xc3, 0xa7, 0x65, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0x74, 0x61, 0x6d, 0x62, 0x69, 0xc3, 0xa9, - 0x6e, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x69, 0x61, 0x73, 0x6d, 0x65, 0x6e, 0x73, - 0x61, 0x6a, 0x65, 0x73, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x73, 0x64, - 0x65, 0x72, 0x65, 0x63, 0x68, 0x6f, 0x73, 0x6e, 0x61, 0x63, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x69, 0x6f, 0x63, 0x6f, 0x6e, - 0x74, 0x61, 0x63, 0x74, 0x6f, 0x75, 0x73, 0x75, 0x61, 0x72, 0x69, 0x6f, 0x73, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x67, 0x6f, 0x62, 0x69, 0x65, - 0x72, 0x6e, 0x6f, 0x65, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x61, 0x73, 0x61, 0x6e, - 0x75, 0x6e, 0x63, 0x69, 0x6f, 0x73, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x63, 0x6f, 0x6c, 0x6f, 0x6d, 0x62, 0x69, 0x61, 0x64, 0x65, 0x73, 0x70, - 0x75, 0xc3, 0xa9, 0x73, 0x64, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x73, 0x70, - 0x72, 0x6f, 0x79, 0x65, 0x63, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x74, 0x6f, 0x70, 0xc3, 0xba, 0x62, 0x6c, 0x69, 0x63, 0x6f, 0x6e, 0x6f, 0x73, - 0x6f, 0x74, 0x72, 0x6f, 0x73, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x61, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x6d, 0x69, 0x6c, 0x6c, 0x6f, - 0x6e, 0x65, 0x73, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x65, 0x70, 0x72, - 0x65, 0x67, 0x75, 0x6e, 0x74, 0x61, 0x61, 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, - 0x72, 0x72, 0x65, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x62, - 0x6c, 0x65, 0x6d, 0x61, 0x73, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x67, 0x6f, 0x6e, - 0x75, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x73, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0xc3, - 0xb3, 0x6e, 0x69, 0x6d, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x72, 0x6d, 0x69, 0x65, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x61, 0x6d, 0xc3, 0xa9, 0x72, 0x69, 0x63, 0x61, - 0x76, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x6f, 0x72, 0x73, 0x6f, 0x63, 0x69, 0x65, - 0x64, 0x61, 0x64, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x65, - 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x72, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x6f, 0x70, 0x61, 0x6c, 0x61, 0x62, 0x72, 0x61, 0x73, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0xc3, 0xa9, 0x73, 0x65, 0x6e, 0x74, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x65, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6d, 0x69, 0x65, 0x6d, 0x62, 0x72, - 0x6f, 0x73, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x64, 0x63, 0xc3, 0xb3, - 0x72, 0x64, 0x6f, 0x62, 0x61, 0x7a, 0x61, 0x72, 0x61, 0x67, 0x6f, 0x7a, 0x61, - 0x70, 0xc3, 0xa1, 0x67, 0x69, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x6c, 0x65, 0x73, 0x62, 0x6c, 0x6f, 0x71, 0x75, 0x65, 0x61, 0x72, 0x67, 0x65, - 0x73, 0x74, 0x69, 0xc3, 0xb3, 0x6e, 0x61, 0x6c, 0x71, 0x75, 0x69, 0x6c, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6d, 0x61, 0x73, 0x63, 0x69, 0x65, 0x6e, - 0x63, 0x69, 0x61, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x6f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x61, 0x65, 0x73, 0x74, 0x75, 0x64, 0x69, 0x6f, 0x73, 0x70, 0xc3, 0xba, - 0x62, 0x6c, 0x69, 0x63, 0x61, 0x6f, 0x62, 0x6a, 0x65, 0x74, 0x69, 0x76, 0x6f, - 0x61, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x65, 0x62, 0x75, 0x73, 0x63, 0x61, - 0x64, 0x6f, 0x72, 0x63, 0x61, 0x6e, 0x74, 0x69, 0x64, 0x61, 0x64, 0x65, 0x6e, - 0x74, 0x72, 0x61, 0x64, 0x61, 0x73, 0x61, 0x63, 0x63, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x6f, 0x73, 0x73, 0x75, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x72, 0x6d, 0x61, 0x79, 0x6f, 0x72, 0xc3, 0xad, 0x61, 0x61, - 0x6c, 0x65, 0x6d, 0x61, 0x6e, 0x69, 0x61, 0x66, 0x75, 0x6e, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0xc3, 0xba, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x73, 0x68, 0x61, 0x63, - 0x69, 0x65, 0x6e, 0x64, 0x6f, 0x61, 0x71, 0x75, 0x65, 0x6c, 0x6c, 0x6f, 0x73, - 0x65, 0x64, 0x69, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x66, 0x65, 0x72, 0x6e, 0x61, - 0x6e, 0x64, 0x6f, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x66, 0x61, - 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6e, 0x75, 0x65, 0x73, 0x74, 0x72, 0x61, - 0x73, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x6f, 0x73, 0x62, 0x61, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x72, 0x63, 0x6f, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x6f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x61, 0x72, 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x6f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x6a, 0xc3, 0xb3, 0x76, 0x65, - 0x6e, 0x65, 0x73, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x74, 0x6f, 0x74, 0xc3, - 0xa9, 0x63, 0x6e, 0x69, 0x63, 0x61, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x74, - 0x6f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0xc3, 0xad, 0x61, 0x74, 0x72, 0x61, 0x62, - 0x61, 0x6a, 0x61, 0x72, 0x61, 0x73, 0x74, 0x75, 0x72, 0x69, 0x61, 0x73, 0x72, - 0x65, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, - 0x61, 0x72, 0x62, 0x6f, 0x6c, 0x65, 0x74, 0xc3, 0xad, 0x6e, 0x73, 0x61, 0x6c, - 0x76, 0x61, 0x64, 0x6f, 0x72, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x61, - 0x74, 0x72, 0x61, 0x62, 0x61, 0x6a, 0x6f, 0x73, 0x70, 0x72, 0x69, 0x6d, 0x65, - 0x72, 0x6f, 0x73, 0x6e, 0x65, 0x67, 0x6f, 0x63, 0x69, 0x6f, 0x73, 0x6c, 0x69, - 0x62, 0x65, 0x72, 0x74, 0x61, 0x64, 0x64, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x65, - 0x73, 0x70, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x72, 0xc3, 0xb3, - 0x78, 0x69, 0x6d, 0x6f, 0x61, 0x6c, 0x6d, 0x65, 0x72, 0xc3, 0xad, 0x61, 0x61, - 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x65, 0x73, 0x71, 0x75, 0x69, 0xc3, 0xa9, 0x6e, - 0x65, 0x73, 0x63, 0x6f, 0x72, 0x61, 0x7a, 0xc3, 0xb3, 0x6e, 0x73, 0x65, 0x63, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x62, 0x75, 0x73, 0x63, 0x61, 0x6e, 0x64, 0x6f, - 0x6f, 0x70, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x69, 0x6f, 0x72, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x6f, 0x74, 0x6f, - 0x64, 0x61, 0x76, 0xc3, 0xad, 0x61, 0x67, 0x61, 0x6c, 0x65, 0x72, 0xc3, 0xad, - 0x61, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x69, - 0x63, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x74, 0x61, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x6f, 0x73, 0x63, 0x72, 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x64, 0xc3, 0xb3, - 0x6c, 0x61, 0x72, 0x65, 0x73, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x63, 0x69, 0x61, - 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xa1, 0x6e, 0x70, 0x65, 0x72, 0xc3, 0xad, - 0x6f, 0x64, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x69, 0x74, 0x61, 0x6d, 0x61, - 0x6e, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x70, 0x65, 0x71, 0x75, 0x65, 0xc3, 0xb1, - 0x6f, 0x72, 0x65, 0x63, 0x69, 0x62, 0x69, 0x64, 0x61, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x6e, 0x61, 0x6c, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x66, 0x65, 0x63, - 0x61, 0x6e, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x61, 0x6e, 0x61, 0x72, 0x69, - 0x61, 0x73, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x64, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x6f, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x63, 0x61, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x65, 0x72, 0x65, 0x74, 0xc3, 0xa9, 0x63, 0x6e, - 0x69, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x65, 0x72, 0xc3, 0xad, 0x61, 0x76, 0x69, - 0x76, 0x69, 0x65, 0x6e, 0x64, 0x61, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x7a, 0x61, - 0x73, 0x61, 0x64, 0x65, 0x6c, 0x61, 0x6e, 0x74, 0x65, 0x66, 0x75, 0x6e, 0x63, - 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6a, 0x6f, 0x73, 0x64, - 0x69, 0x66, 0xc3, 0xad, 0x63, 0x69, 0x6c, 0x63, 0x69, 0x75, 0x64, 0x61, 0x64, - 0x65, 0x73, 0x61, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x61, 0x73, 0x61, 0x76, 0x61, - 0x6e, 0x7a, 0x61, 0x64, 0x61, 0x74, 0xc3, 0xa9, 0x72, 0x6d, 0x69, 0x6e, 0x6f, - 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x73, 0xc3, 0xa1, 0x6e, 0x63, - 0x68, 0x65, 0x7a, 0x63, 0x61, 0x6d, 0x70, 0x61, 0xc3, 0xb1, 0x61, 0x73, 0x6f, - 0x66, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x72, 0x65, 0x76, 0x69, 0x73, 0x74, 0x61, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x65, 0x6e, 0x65, 0x73, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x6d, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x66, - 0x61, 0x63, 0x75, 0x6c, 0x74, 0x61, 0x64, 0x63, 0x72, 0xc3, 0xa9, 0x64, 0x69, - 0x74, 0x6f, 0x64, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x73, 0x73, 0x75, 0x70, - 0x75, 0x65, 0x73, 0x74, 0x6f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x70, 0x65, 0x71, 0x75, 0x65, - 0xc3, 0xb1, 0x61, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb5, - 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0xd1, - 0x8c, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8b, - 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, - 0x95, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8f, 0xd0, 0xb2, 0xd1, - 0x81, 0xd0, 0xb5, 0xd1, 0x85, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, - 0xbb, 0xd0, 0xb8, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x83, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xb1, 0xd1, 0x8f, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, - 0x81, 0xd0, 0xb5, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb4, - 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd1, 0x84, 0xd0, - 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xb9, 0xd0, 0xb8, 0xd0, 0xb3, 0xd1, 0x80, 0xd1, 0x8b, 0xd1, 0x82, - 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, - 0xbc, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x8e, 0xd0, 0xbb, 0xd0, 0xb8, - 0xd1, 0x88, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb5, - 0xd0, 0xb9, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, - 0xb8, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd1, 0x85, 0xd0, 0xbe, 0xd1, - 0x82, 0xd1, 0x8f, 0xd0, 0xb4, 0xd0, 0xb2, 0xd1, 0x83, 0xd1, 0x85, 0xd1, 0x81, - 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb4, 0xd0, - 0xb8, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb8, - 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb1, 0xd1, 0x8f, 0xd1, - 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x8d, 0xd1, - 0x82, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x82, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd1, 0x86, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb2, - 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x8c, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xb5, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x8b, 0xd1, 0x82, 0xd0, 0xb5, - 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbf, - 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x86, 0xd0, 0xb0, - 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, - 0xb4, 0xd1, 0x8b, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x8e, 0xd0, 0xbc, - 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x83, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, - 0xb3, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, 0xb8, 0xd0, 0xb4, - 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd0, 0xb0, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x8e, 0xd0, 0xbd, 0xd1, 0x8f, - 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0x95, 0xd1, 0x81, 0xd1, - 0x82, 0xd1, 0x8c, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xb0, 0xd0, 0xbd, - 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb8, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x84, 0xd9, - 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xac, 0xd9, 0x85, - 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xae, 0xd8, 0xa7, 0xd8, 0xb5, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, - 0xd9, 0x87, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa2, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xaf, - 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xb5, 0xd9, 0x81, 0xd8, - 0xad, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x88, 0xd9, - 0x86, 0xd8, 0xb4, 0xd8, 0xa8, 0xd9, 0x83, 0xd8, 0xa9, 0xd9, 0x81, 0xd9, 0x8a, - 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xad, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa3, 0xd9, 0x83, 0xd8, 0xab, - 0xd8, 0xb1, 0xd8, 0xae, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xad, 0xd8, 0xa8, 0xd8, 0xaf, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x84, - 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, - 0xba, 0xd8, 0xb7, 0xd8, 0xaa, 0xd9, 0x83, 0xd9, 0x88, 0xd9, 0x86, 0xd9, 0x87, - 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xad, 0xd8, - 0xa9, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb7, 0xd8, 0xa8, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x83, 0xd8, - 0xb4, 0xd9, 0x83, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x8a, 0xd9, 0x85, 0xd9, 0x83, - 0xd9, 0x86, 0xd9, 0x85, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xb4, 0xd8, - 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xb3, - 0xd9, 0x86, 0xd8, 0xb4, 0xd9, 0x8a, 0xd8, 0xb7, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, - 0xb0, 0xd8, 0xa7, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x86, 0xd8, 0xb4, - 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, - 0xb1, 0xd8, 0xb1, 0xd8, 0xad, 0xd9, 0x85, 0xd8, 0xa9, 0xd9, 0x83, 0xd8, 0xa7, - 0xd9, 0x81, 0xd8, 0xa9, 0xd9, 0x8a, 0xd9, 0x82, 0xd9, 0x88, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xb2, 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x85, - 0xd8, 0xa9, 0xd8, 0xa3, 0xd8, 0xad, 0xd9, 0x85, 0xd8, 0xaf, 0xd9, 0x82, 0xd9, - 0x84, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x86, 0xd9, 0x8a, - 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xa9, 0xd8, 0xb7, 0xd8, 0xb1, 0xd9, - 0x8a, 0xd9, 0x82, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xac, - 0xd9, 0x88, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, 0xae, 0xd8, 0xb1, 0xd9, - 0x89, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd8, 0xad, 0xd8, 0xab, 0xd8, 0xb9, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb6, 0xd8, - 0xa8, 0xd8, 0xb4, 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xac, - 0xd9, 0x84, 0xd8, 0xa8, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xae, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa8, - 0xd9, 0x83, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa8, 0xd8, 0xaf, 0xd9, - 0x88, 0xd9, 0x86, 0xd8, 0xa3, 0xd9, 0x8a, 0xd8, 0xb6, 0xd8, 0xa7, 0xd9, 0x8a, - 0xd9, 0x88, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, 0x81, 0xd8, 0xb1, 0xd9, 0x8a, 0xd9, - 0x82, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xa3, 0xd9, 0x81, - 0xd8, 0xb6, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb7, 0xd8, 0xa8, 0xd8, 0xae, 0xd8, - 0xa7, 0xd9, 0x83, 0xd8, 0xab, 0xd8, 0xb1, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x81, 0xd8, 0xb6, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, - 0xad, 0xd9, 0x84, 0xd9, 0x89, 0xd9, 0x86, 0xd9, 0x81, 0xd8, 0xb3, 0xd9, 0x87, - 0xd8, 0xa3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, - 0x88, 0xd8, 0xaf, 0xd8, 0xa3, 0xd9, 0x86, 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xaf, - 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x86, 0xd9, 0x85, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xb6, 0xd8, 0xaa, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xae, 0xd9, 0x84, 0xd9, - 0x85, 0xd9, 0x85, 0xd9, 0x83, 0xd9, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, - 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x04, 0x03, - 0x02, 0x01, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0e, - 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, - 0x17, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x18, 0x19, 0x1a, 0x1b, - 0x1c, 0x1d, 0x1e, 0x1f, 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, - 0x07, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, - 0x54, 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x69, 0x6e, 0x67, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, - 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x61, 0x64, 0x76, - 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x3c, 0x2f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x3e, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, - 0x6c, 0x69, 0x61, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x61, 0x6e, 0x6f, - 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x73, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0d, 0x0a, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x7d, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x64, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x6f, 0x75, - 0x73, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x26, 0x72, 0x61, 0x71, 0x75, 0x6f, 0x3b, 0x3c, 0x2f, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x62, 0x65, 0x61, 0x75, 0x74, 0x69, 0x66, 0x75, 0x6c, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x6f, 0x72, 0x74, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, - 0x64, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x70, 0x72, 0x6f, - 0x6d, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x4e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x2e, 0x66, 0x6f, 0x63, 0x75, 0x73, - 0x28, 0x29, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x64, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x0a, - 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x72, 0x61, - 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x4e, - 0x61, 0x6d, 0x65, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x69, 0x73, 0x6d, 0x74, - 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6c, 0x73, 0x65, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x41, 0x6c, 0x65, 0x78, 0x61, 0x6e, 0x64, 0x65, 0x72, - 0x61, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x74, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x73, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x66, 0x66, - 0x69, 0x6c, 0x69, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x3e, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x69, - 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x6f, - 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x62, 0x69, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x79, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, - 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x46, 0x72, 0x61, 0x6e, - 0xc3, 0xa7, 0x61, 0x69, 0x73, 0x48, 0x6f, 0x6c, 0x6c, 0x79, 0x77, 0x6f, 0x6f, - 0x64, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x61, 0x72, 0x64, 0x73, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0a, 0x72, 0x65, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x72, 0x65, 0x64, 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x6f, - 0x70, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x3e, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x77, 0x6f, 0x72, - 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, - 0x63, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6e, 0x65, - 0x77, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x3e, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x6c, - 0x69, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x73, 0x73, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x61, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x65, - 0x64, 0x45, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x61, 0x72, - 0x73, 0x65, 0x49, 0x6e, 0x74, 0x28, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x75, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x3c, 0x2f, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x65, 0x72, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x64, 0x74, 0x77, 0x6f, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, - 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x22, - 0x3e, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x64, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x70, 0x65, 0x72, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x74, 0x72, - 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, - 0x61, 0x72, 0x79, 0x70, 0x6f, 0x72, 0x74, 0x72, 0x61, 0x79, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6c, 0x69, 0x7a, 0x61, - 0x62, 0x65, 0x74, 0x68, 0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3e, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x73, 0x75, - 0x72, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x3b, 0x6c, 0x65, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, 0x65, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x6f, - 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x65, 0x64, 0x3c, - 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x43, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x72, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x75, 0x73, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x6e, 0x6f, 0x20, - 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x69, - 0x6e, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x3b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x71, 0x75, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x69, 0x74, 0x20, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x63, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x68, - 0x6f, 0x6e, 0x65, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x70, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x73, 0x61, 0x64, 0x76, 0x61, 0x6e, - 0x74, 0x61, 0x67, 0x65, 0x29, 0x3b, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x46, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x6d, 0x6f, 0x63, 0x72, 0x61, 0x63, - 0x79, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x73, 0x75, 0x66, 0x66, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x73, - 0x61, 0x69, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x74, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x3c, 0x2f, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x64, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x3c, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x3e, 0x0a, 0x73, 0x75, 0x73, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, - 0x20, 0x30, 0x73, 0x70, 0x69, 0x72, 0x69, 0x74, 0x75, 0x61, 0x6c, 0x3c, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, - 0x6f, 0x66, 0x74, 0x67, 0x72, 0x61, 0x64, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x64, - 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x64, 0x68, 0x65, 0x20, 0x62, 0x65, - 0x63, 0x61, 0x6d, 0x65, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6a, 0x73, 0x68, 0x6f, 0x75, 0x73, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x64, 0x6c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, - 0x65, 0x64, 0x75, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, - 0x69, 0x6e, 0x67, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x63, - 0x65, 0x6e, 0x74, 0x75, 0x72, 0x69, 0x65, 0x73, 0x4a, 0x61, 0x70, 0x61, 0x6e, - 0x65, 0x73, 0x65, 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x61, 0x6c, 0x67, 0x6f, - 0x72, 0x69, 0x74, 0x68, 0x6d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x73, 0x72, 0x65, 0x62, 0x65, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x72, 0x61, - 0x67, 0x65, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x61, 0x62, 0x6c, 0x65, 0x69, 0x6e, - 0x76, 0x6f, 0x6c, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x6c, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x69, 0x6e, 0x67, - 0x63, 0x6f, 0x6e, 0x64, 0x75, 0x63, 0x74, 0x65, 0x64, 0x29, 0x2c, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x64, 0x2d, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x46, 0x65, 0x62, - 0x72, 0x75, 0x61, 0x72, 0x79, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x6f, 0x75, - 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x74, 0x65, 0x63, 0x68, 0x6e, - 0x69, 0x63, 0x61, 0x6c, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x48, 0x6f, 0x6e, 0x67, 0x20, 0x4b, 0x6f, 0x6e, 0x67, 0x20, 0x46, 0x61, - 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, - 0x65, 0x20, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x65, 0x6c, - 0x65, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x09, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x65, 0x64, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x6f, 0x72, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x74, 0x68, 0x6f, 0x73, - 0x65, 0x20, 0x77, 0x68, 0x6f, 0x6d, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x64, 0x69, 0x66, - 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x63, 0x6f, - 0x6e, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x2e, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x68, 0x69, 0x73, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x72, 0x22, 0x65, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x6f, 0x61, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x21, 0x2d, 0x2d, 0x41, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x3c, 0x66, 0x75, 0x72, 0x6e, - 0x69, 0x74, 0x75, 0x72, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x20, 0x20, 0x6f, 0x6e, 0x62, 0x6c, 0x75, 0x72, 0x3d, 0x22, 0x73, 0x75, 0x73, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, - 0x6e, 0x74, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, - 0x72, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x2c, 0x61, 0x62, 0x6f, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x77, - 0x65, 0x72, 0x65, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x65, 0x6d, 0x6f, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, - 0x6e, 0x61, 0x72, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x61, 0x64, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x70, 0x78, 0x3b, 0x62, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x64, 0x69, 0x72, - 0x3d, 0x22, 0x6c, 0x74, 0x72, 0x22, 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x65, - 0x65, 0x73, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x20, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x73, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x53, 0x65, 0x70, 0x74, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x61, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, - 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x20, 0x73, 0x75, 0x67, 0x67, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x65, 0x6c, 0x61, - 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x53, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, 0x63, 0x65, - 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6c, 0x79, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x73, 0x4a, - 0x65, 0x72, 0x75, 0x73, 0x61, 0x6c, 0x65, 0x6d, 0x74, 0x68, 0x65, 0x79, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x69, 0x6e, 0x67, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x65, 0x73, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, - 0x65, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x79, 0x72, 0x65, 0x63, - 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x70, 0x78, 0x3b, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x74, 0x68, - 0x65, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, - 0x6f, 0x75, 0x72, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x65, - 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x62, 0x65, 0x67, 0x61, 0x6e, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, - 0x6d, 0x61, 0x67, 0x6e, 0x69, 0x74, 0x75, 0x64, 0x65, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, - 0x6e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, - 0x72, 0x79, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x6f, 0x63, - 0x63, 0x75, 0x72, 0x72, 0x69, 0x6e, 0x67, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x3c, 0x2f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x3e, 0x3c, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x6b, 0x69, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x69, 0x65, - 0x73, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x69, 0x64, 0x65, 0x20, 0x2d, 0x2d, - 0x26, 0x67, 0x74, 0x3b, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x77, 0x65, - 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x73, - 0x70, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x62, 0x75, 0x72, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x20, 0x73, - 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, - 0x72, 0x65, 0x3c, 0x2f, 0x66, 0x6f, 0x6e, 0x74, 0x3e, 0x3c, 0x2f, 0x4e, 0x6f, - 0x72, 0x77, 0x65, 0x67, 0x69, 0x61, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x70, - 0x61, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x28, 0x6e, 0x65, 0x77, 0x20, - 0x44, 0x61, 0x74, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x79, - 0x66, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x66, 0x74, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x65, 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x72, 0x65, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x68, 0x65, 0x6e, 0x6f, 0x6d, - 0x65, 0x6e, 0x61, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x74, - 0x6f, 0x6f, 0x6c, 0x74, 0x69, 0x70, 0x22, 0x3e, 0x73, 0x75, 0x62, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x41, 0x6d, 0x6f, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, 0x41, 0x69, 0x72, - 0x20, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, - 0x6f, 0x66, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x69, 0x6d, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6d, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x74, 0x70, 0x61, 0x69, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x63, - 0x6f, 0x6e, 0x71, 0x75, 0x65, 0x72, 0x65, 0x64, 0x61, 0x72, 0x65, 0x20, 0x73, - 0x74, 0x69, 0x6c, 0x6c, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, - 0x67, 0x72, 0x6f, 0x77, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, - 0x20, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x6d, 0x6f, 0x6c, - 0x65, 0x63, 0x75, 0x6c, 0x65, 0x73, 0x66, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x69, - 0x73, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, - 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x68, - 0x6f, 0x6f, 0x64, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x64, 0x64, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x73, 0x69, 0x6e, 0x67, 0x61, - 0x70, 0x6f, 0x72, 0x65, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x66, - 0x66, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x70, 0x3e, - 0x0a, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x77, 0x65, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x73, - 0x64, 0x65, 0x6c, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0x70, 0x72, 0x69, 0x73, - 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x61, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x55, 0x54, 0x46, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x21, 0x5b, - 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x22, 0x3e, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x63, 0x74, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x20, 0x62, 0x67, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x69, - 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x6f, 0x66, 0x66, 0x69, - 0x63, 0x69, 0x61, 0x6c, 0x73, 0x73, 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x6c, - 0x79, 0x2d, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x2d, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3c, 0x2f, 0x62, 0x75, 0x74, - 0x74, 0x6f, 0x6e, 0x3e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x69, 0x6e, 0x63, 0x72, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x2d, 0x2d, 0x3e, 0x0a, 0x3c, 0x21, 0x2d, - 0x2d, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x57, 0x69, - 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x77, - 0x61, 0x73, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x56, 0x65, 0x6e, 0x65, 0x7a, - 0x75, 0x65, 0x6c, 0x61, 0x28, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x6c, 0x79, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, - 0x63, 0x66, 0x61, 0x76, 0x6f, 0x75, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x76, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, - 0x69, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x76, 0x69, - 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x77, 0x61, 0x73, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x61, 0x77, 0x61, 0x79, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x6f, 0x6c, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x72, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x65, 0x6c, 0x79, 0x64, 0x69, 0x73, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x55, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x3e, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x68, 0x61, 0x76, 0x65, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x73, 0x6d, 0x73, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x46, 0x72, 0x69, 0x65, 0x64, 0x72, 0x69, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x66, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x54, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x68, - 0x79, 0x73, 0x69, 0x63, 0x69, 0x73, 0x74, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, - 0x20, 0x69, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x73, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x6f, - 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x72, 0x76, - 0x69, 0x76, 0x69, 0x6e, 0x67, 0x7d, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x68, 0x69, 0x73, 0x20, 0x64, 0x65, 0x61, 0x74, 0x68, 0x61, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x65, 0x78, - 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x61, - 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x73, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x73, 0x6d, - 0x69, 0x73, 0x73, 0x65, 0x64, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x73, - 0x74, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x65, 0x73, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x73, 0x69, - 0x76, 0x65, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x61, 0x6c, - 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x67, 0x61, 0x6c, 0x6c, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x7b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x69, 0x6d, 0x67, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x72, - 0x6e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, - 0x6e, 0x67, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x6e, 0x65, - 0x65, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x47, 0x72, - 0x65, 0x61, 0x74, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x65, 0x65, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x76, 0x69, 0x65, 0x77, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x6e, - 0x69, 0x64, 0x65, 0x61, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6f, - 0x66, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x68, 0x65, - 0x73, 0x65, 0x20, 0x61, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x22, 0x3e, 0x63, 0x61, 0x72, 0x65, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x6d, 0x61, - 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, - 0x20, 0x6f, 0x66, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x74, 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, - 0x74, 0x22, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, - 0x65, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, - 0x65, 0x6e, 0x20, 0x20, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0d, 0x0a, 0x70, 0x72, - 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x50, 0x72, 0x6f, 0x66, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x2d, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x73, 0x61, 0x79, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x68, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x48, 0x75, 0x6e, 0x67, - 0x61, 0x72, 0x69, 0x61, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x6f, - 0x66, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x20, 0x61, 0x73, 0x55, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x66, 0x6f, - 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x69, 0x6e, 0x66, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x67, 0x72, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x68, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x72, 0x22, 0x3e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x61, 0x6c, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6f, - 0x66, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, - 0x63, 0x74, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, - 0x20, 0x69, 0x6e, 0x65, 0x61, 0x73, 0x69, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x70, - 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0a, 0x26, 0x6c, 0x74, 0x3b, - 0x21, 0x2d, 0x2d, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, - 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x77, 0x61, 0x73, 0x20, - 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x62, 0x65, 0x6c, - 0x69, 0x65, 0x66, 0x20, 0x69, 0x6e, 0x41, 0x66, 0x72, 0x69, 0x6b, 0x61, 0x61, - 0x6e, 0x73, 0x61, 0x73, 0x20, 0x66, 0x61, 0x72, 0x20, 0x61, 0x73, 0x70, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x3c, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x43, 0x68, 0x72, 0x69, 0x73, - 0x74, 0x6d, 0x61, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, - 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, - 0x74, 0x6d, 0x61, 0x67, 0x61, 0x7a, 0x69, 0x6e, 0x65, 0x73, 0x3e, 0x3c, 0x73, - 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x65, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x20, 0x6f, 0x66, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x61, - 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x73, 0x20, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6f, 0x77, 0x6e, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x61, 0x6e, 0x20, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x72, 0x69, 0x62, 0x62, 0x65, 0x61, - 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x63, 0x74, 0x73, 0x77, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x3b, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, - 0x74, 0x65, 0x64, 0x53, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x73, 0x74, 0x4a, - 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x31, 0x3c, 0x2f, 0x66, 0x6f, 0x6f, - 0x74, 0x65, 0x72, 0x3e, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x6c, 0x79, - 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x20, 0x62, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x2e, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x3b, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x65, - 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x75, 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x63, - 0x6f, 0x6e, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x70, 0x68, 0x70, 0x61, 0x73, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x65, 0x6e, 0x67, 0x61, 0x67, 0x65, 0x20, 0x69, 0x6e, 0x72, 0x65, 0x63, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x66, 0x65, 0x77, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x77, 0x65, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x0a, 0x3c, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x63, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6b, 0x65, 0x79, 0x63, 0x6f, 0x6e, 0x64, 0x65, 0x6d, 0x6e, 0x65, 0x64, 0x61, - 0x6c, 0x73, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2c, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x6f, 0x66, - 0x53, 0x63, 0x68, 0x6f, 0x6f, 0x6c, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x74, 0x65, 0x64, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3c, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x3e, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, - 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x61, 0x64, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x54, - 0x68, 0x65, 0x79, 0x20, 0x77, 0x65, 0x72, 0x65, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x75, 0x63, 0x68, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x77, 0x61, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x61, 0x20, 0x74, 0x79, 0x70, 0x69, 0x63, - 0x61, 0x6c, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x6e, 0x6f, 0x74, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x77, - 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, 0x61, 0x79, 0x74, 0x68, 0x65, 0x20, 0x74, - 0x68, 0x69, 0x72, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, - 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x77, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x61, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x68, - 0x69, 0x73, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x22, 0x3e, 0x0a, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x74, 0x65, 0x6e, 0x6e, 0x65, 0x73, 0x73, 0x65, - 0x65, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, 0x73, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x20, 0x3c, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x3e, 0x67, 0x69, - 0x76, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x69, 0x61, 0x6e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x3e, 0x70, - 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x30, 0x76, 0x69, 0x65, 0x77, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x2c, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x20, 0x6f, - 0x66, 0x61, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x2c, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x65, - 0x64, 0x6c, 0x79, 0x43, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x77, - 0x61, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x61, 0x72, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, - 0x77, 0x61, 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x73, 0x63, 0x72, 0x6f, - 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x20, 0x6f, - 0x66, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x75, 0x63, - 0x68, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, - 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x41, 0x66, 0x74, 0x65, 0x72, 0x20, 0x2c, 0x20, - 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x75, 0x73, 0x65, 0x75, 0x6d, - 0x20, 0x6f, 0x66, 0x6c, 0x6f, 0x75, 0x69, 0x73, 0x69, 0x61, 0x6e, 0x61, 0x28, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x69, 0x6e, 0x6e, 0x65, - 0x73, 0x6f, 0x74, 0x61, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x73, - 0x61, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x44, 0x6f, 0x6d, 0x69, - 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x66, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x30, 0x30, 0x70, 0x78, 0x7c, 0x72, 0x69, - 0x67, 0x68, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x6f, - 0x75, 0x73, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x28, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x73, 0x46, 0x72, 0x61, 0x6e, 0x63, 0x69, 0x73, 0x63, 0x6f, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x77, 0x69, 0x74, 0x68, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x77, 0x68, 0x6f, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x61, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, - 0x6f, 0x66, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x74, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x6d, 0x65, 0x61, 0x73, 0x75, - 0x72, 0x69, 0x6e, 0x67, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x70, 0x61, 0x70, 0x65, 0x72, 0x62, 0x61, 0x63, 0x6b, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x3c, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x3e, 0x3d, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x26, 0x71, 0x75, 0x6f, 0x74, - 0x3b, 0x20, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x6e, - 0x64, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x3e, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, - 0x3b, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x79, 0x20, 0x68, 0x69, - 0x67, 0x68, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x2d, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x3d, 0x22, 0x2f, 0x63, 0x67, 0x69, 0x2d, 0x62, 0x69, 0x6e, 0x2f, 0x74, - 0x6f, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x61, 0x66, 0x72, 0x69, 0x6b, - 0x61, 0x61, 0x6e, 0x73, 0x65, 0x73, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x74, 0x6f, - 0x66, 0x72, 0x61, 0x6e, 0xc3, 0xa7, 0x61, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x76, - 0x69, 0x65, 0xc5, 0xa1, 0x75, 0x6c, 0x69, 0x65, 0x74, 0x75, 0x76, 0x69, 0xc5, - 0xb3, 0xc4, 0x8c, 0x65, 0xc5, 0xa1, 0x74, 0x69, 0x6e, 0x61, 0xc4, 0x8d, 0x65, - 0xc5, 0xa1, 0x74, 0x69, 0x6e, 0x61, 0xe0, 0xb9, 0x84, 0xe0, 0xb8, 0x97, 0xe0, - 0xb8, 0xa2, 0xe6, 0x97, 0xa5, 0xe6, 0x9c, 0xac, 0xe8, 0xaa, 0x9e, 0xe7, 0xae, - 0x80, 0xe4, 0xbd, 0x93, 0xe5, 0xad, 0x97, 0xe7, 0xb9, 0x81, 0xe9, 0xab, 0x94, - 0xe5, 0xad, 0x97, 0xed, 0x95, 0x9c, 0xea, 0xb5, 0xad, 0xec, 0x96, 0xb4, 0xe4, - 0xb8, 0xba, 0xe4, 0xbb, 0x80, 0xe4, 0xb9, 0x88, 0xe8, 0xae, 0xa1, 0xe7, 0xae, - 0x97, 0xe6, 0x9c, 0xba, 0xe7, 0xac, 0x94, 0xe8, 0xae, 0xb0, 0xe6, 0x9c, 0xac, - 0xe8, 0xa8, 0x8e, 0xe8, 0xab, 0x96, 0xe5, 0x8d, 0x80, 0xe6, 0x9c, 0x8d, 0xe5, - 0x8a, 0xa1, 0xe5, 0x99, 0xa8, 0xe4, 0xba, 0x92, 0xe8, 0x81, 0x94, 0xe7, 0xbd, - 0x91, 0xe6, 0x88, 0xbf, 0xe5, 0x9c, 0xb0, 0xe4, 0xba, 0xa7, 0xe4, 0xbf, 0xb1, - 0xe4, 0xb9, 0x90, 0xe9, 0x83, 0xa8, 0xe5, 0x87, 0xba, 0xe7, 0x89, 0x88, 0xe7, - 0xa4, 0xbe, 0xe6, 0x8e, 0x92, 0xe8, 0xa1, 0x8c, 0xe6, 0xa6, 0x9c, 0xe9, 0x83, - 0xa8, 0xe8, 0x90, 0xbd, 0xe6, 0xa0, 0xbc, 0xe8, 0xbf, 0x9b, 0xe4, 0xb8, 0x80, - 0xe6, 0xad, 0xa5, 0xe6, 0x94, 0xaf, 0xe4, 0xbb, 0x98, 0xe5, 0xae, 0x9d, 0xe9, - 0xaa, 0x8c, 0xe8, 0xaf, 0x81, 0xe7, 0xa0, 0x81, 0xe5, 0xa7, 0x94, 0xe5, 0x91, - 0x98, 0xe4, 0xbc, 0x9a, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0xba, 0x93, - 0xe6, 0xb6, 0x88, 0xe8, 0xb4, 0xb9, 0xe8, 0x80, 0x85, 0xe5, 0x8a, 0x9e, 0xe5, - 0x85, 0xac, 0xe5, 0xae, 0xa4, 0xe8, 0xae, 0xa8, 0xe8, 0xae, 0xba, 0xe5, 0x8c, - 0xba, 0xe6, 0xb7, 0xb1, 0xe5, 0x9c, 0xb3, 0xe5, 0xb8, 0x82, 0xe6, 0x92, 0xad, - 0xe6, 0x94, 0xbe, 0xe5, 0x99, 0xa8, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, - 0xb8, 0x82, 0xe5, 0xa4, 0xa7, 0xe5, 0xad, 0xa6, 0xe7, 0x94, 0x9f, 0xe8, 0xb6, - 0x8a, 0xe6, 0x9d, 0xa5, 0xe8, 0xb6, 0x8a, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, - 0xe5, 0x91, 0x98, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0xe7, 0xbd, 0x91, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x69, 0x6f, 0x73, 0x61, 0x72, 0x74, 0xc3, 0xad, - 0x63, 0x75, 0x6c, 0x6f, 0x61, 0x72, 0x67, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x61, - 0x62, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x6f, 0x6e, 0x61, 0x63, 0x75, 0x61, 0x6c, - 0x71, 0x75, 0x69, 0x65, 0x72, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x64, - 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x6f, 0x73, 0x70, 0x6f, 0x6c, - 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x72, 0x65, 0x73, 0x70, 0x75, 0x65, 0x73, - 0x74, 0x61, 0x77, 0x69, 0x6b, 0x69, 0x70, 0x65, 0x64, 0x69, 0x61, 0x73, 0x69, - 0x67, 0x75, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x62, 0xc3, 0xba, 0x73, 0x71, 0x75, - 0x65, 0x64, 0x61, 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, 0x73, - 0x65, 0x67, 0x75, 0x72, 0x69, 0x64, 0x61, 0x64, 0x70, 0x72, 0x69, 0x6e, 0x63, - 0x69, 0x70, 0x61, 0x6c, 0x70, 0x72, 0x65, 0x67, 0x75, 0x6e, 0x74, 0x61, 0x73, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x69, 0x64, 0x6f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x76, 0x65, 0x6e, 0x65, 0x7a, 0x75, 0x65, 0x6c, - 0x61, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x61, 0x73, 0x64, 0x69, 0x63, - 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x61, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x6e, 0x6f, 0x76, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x73, 0x69, - 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x79, 0x65, 0x63, - 0x74, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x61, 0x73, 0x69, - 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x64, 0x61, 0x64, 0x65, 0x6e, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x72, 0x61, - 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0xc3, 0xad, 0x61, 0x69, 0x6d, 0xc3, 0xa1, - 0x67, 0x65, 0x6e, 0x65, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x61, - 0x72, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x72, 0x6e, 0x65, 0x63, - 0x65, 0x73, 0x61, 0x72, 0x69, 0x6f, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x74, 0x65, 0x6c, 0xc3, 0xa9, 0x66, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, - 0x6d, 0x69, 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x61, 0x6e, 0x63, 0x69, 0x6f, - 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x64, 0x61, 0x64, 0x65, - 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x72, 0x61, 0x6e, 0xc3, 0xa1, 0x6c, - 0x69, 0x73, 0x69, 0x73, 0x66, 0x61, 0x76, 0x6f, 0x72, 0x69, 0x74, 0x6f, 0x73, - 0x74, 0xc3, 0xa9, 0x72, 0x6d, 0x69, 0x6e, 0x6f, 0x73, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x74, 0x69, 0x71, 0x75, 0x65, 0x74, 0x61, - 0x73, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x66, 0x75, 0x6e, - 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x61, - 0x64, 0x6f, 0x63, 0x61, 0x72, 0xc3, 0xa1, 0x63, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x6f, 0x70, 0x69, 0x65, 0x64, 0x61, 0x64, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, - 0x70, 0x69, 0x6f, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x69, 0x64, 0x61, 0x64, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x63, 0x72, 0x65, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x64, 0x65, 0x73, 0x63, 0x61, 0x72, 0x67, 0x61, 0x73, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x63, 0x6f, 0x6d, 0x65, - 0x72, 0x63, 0x69, 0x61, 0x6c, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x65, 0x6a, 0x65, 0x72, 0x63, 0x69, 0x63, 0x69, 0x6f, 0x65, 0x64, 0x69, - 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x61, 0x6c, 0x61, 0x6d, 0x61, 0x6e, - 0x63, 0x61, 0x67, 0x6f, 0x6e, 0x7a, 0xc3, 0xa1, 0x6c, 0x65, 0x7a, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x70, 0x65, 0x6c, 0xc3, 0xad, 0x63, - 0x75, 0x6c, 0x61, 0x72, 0x65, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x61, 0x72, 0x72, 0x61, - 0x67, 0x6f, 0x6e, 0x61, 0x70, 0x72, 0xc3, 0xa1, 0x63, 0x74, 0x69, 0x63, 0x61, - 0x6e, 0x6f, 0x76, 0x65, 0x64, 0x61, 0x64, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x70, - 0x75, 0x65, 0x73, 0x74, 0x61, 0x70, 0x61, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x65, - 0x73, 0x74, 0xc3, 0xa9, 0x63, 0x6e, 0x69, 0x63, 0x61, 0x73, 0x6f, 0x62, 0x6a, - 0x65, 0x74, 0x69, 0x76, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, - 0x6f, 0x73, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x88, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, - 0xb5, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0x9b, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x88, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0x64, 0x69, 0x70, 0x6c, 0x6f, - 0x64, 0x6f, 0x63, 0x73, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x94, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xae, - 0xe0, 0xa5, 0x8c, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa5, 0x89, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0x97, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xae, 0xe0, - 0xa4, 0x96, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x9f, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, - 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x90, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x8a, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x90, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x96, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb2, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x89, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xad, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa0, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x86, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x95, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8c, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, - 0x81, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x80, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x20, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x79, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x3c, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x61, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x26, 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x20, 0x32, 0x30, 0x31, - 0x6a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x62, 0x72, 0x65, 0x61, 0x64, 0x63, - 0x72, 0x75, 0x6d, 0x62, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, - 0x73, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x6c, 0x69, 0x66, - 0x6f, 0x72, 0x6e, 0x69, 0x61, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x4e, - 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x3c, 0x2f, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x3c, 0x6d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, - 0x6f, 0x78, 0x22, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x73, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x70, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, 0x73, 0x20, 0x77, 0x65, - 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x75, 0x6e, 0x74, 0x27, 0x2c, 0x20, 0x27, 0x55, - 0x41, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, - 0x6e, 0x61, 0x76, 0x69, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x20, 0x3d, 0x20, - 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x69, 0x6d, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x26, 0x6c, 0x74, 0x3b, 0x62, 0x72, 0x26, 0x67, 0x74, - 0x3b, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x70, 0x6f, - 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x67, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x3d, 0x22, 0x23, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x77, 0x73, - 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x69, 0x65, 0x73, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x54, 0x65, 0x63, - 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x50, 0x61, 0x72, 0x6c, 0x69, 0x61, - 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, - 0x6e, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x2e, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x62, - 0x69, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x6f, 0x6f, 0x64, - 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, 0x6d, 0x6f, 0x73, 0x70, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x6f, 0x6e, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x3d, 0x22, 0x3c, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x75, 0x62, 0x73, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x77, 0x65, 0x6c, 0x6c, 0x2d, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x76, 0x61, 0x72, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x68, 0x65, - 0x6e, 0x6f, 0x6d, 0x65, 0x6e, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x69, 0x70, - 0x6c, 0x69, 0x6e, 0x65, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x6e, 0x67, 0x22, - 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x72, 0x69, 0x65, 0x73, 0x65, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6f, - 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x28, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x22, 0x20, 0x75, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x28, 0x22, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x20, 0x64, 0x65, 0x6d, - 0x6f, 0x63, 0x72, 0x61, 0x74, 0x69, 0x63, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x22, 0x3e, - 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x6c, 0x69, - 0x6e, 0x67, 0x75, 0x69, 0x73, 0x74, 0x69, 0x63, 0x70, 0x78, 0x3b, 0x70, 0x61, - 0x64, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x79, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x75, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x66, 0x61, 0x63, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, - 0x7a, 0x65, 0x64, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x69, 0x66, 0x20, 0x28, 0x74, 0x79, 0x70, 0x65, 0x6f, 0x66, 0x6d, 0x61, 0x69, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x76, 0x6f, 0x63, 0x61, 0x62, 0x75, - 0x6c, 0x61, 0x72, 0x79, 0x68, 0x79, 0x70, 0x6f, 0x74, 0x68, 0x65, 0x73, 0x69, - 0x73, 0x2e, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x28, 0x29, 0x3b, 0x26, 0x61, - 0x6d, 0x70, 0x3b, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x22, 0x61, 0x73, 0x73, 0x75, - 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x64, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x73, 0x74, 0x73, 0x65, 0x78, 0x70, - 0x6c, 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, - 0x64, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x64, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x6f, 0x6f, 0x6e, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x69, - 0x6e, 0x76, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x6e, - 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x67, 0x65, 0x6f, - 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3d, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x2e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x28, 0x2f, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x70, 0x75, 0x6e, 0x69, 0x73, 0x68, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x72, - 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x61, 0x64, 0x61, 0x70, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x77, 0x65, 0x6c, 0x6c, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x73, 0x75, 0x70, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x30, 0x70, 0x78, 0x3b, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x63, 0x65, 0x6c, 0x65, 0x62, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x0a, 0x0a, 0x44, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x64, - 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x73, 0x61, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, - 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x65, 0x72, - 0x65, 0x4e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x62, 0x65, - 0x79, 0x6f, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x6a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, - 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x61, 0x6e, 0x67, - 0x3d, 0x22, 0x65, 0x6e, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3e, 0x0d, 0x0a, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x20, - 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x65, 0x78, 0x74, - 0x72, 0x65, 0x6d, 0x65, 0x6c, 0x79, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, - 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x79, 0x65, 0x6d, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, - 0x3d, 0x22, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x62, 0x6f, 0x75, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x70, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x65, 0x6e, 0x50, 0x6f, 0x72, - 0x74, 0x75, 0x67, 0x75, 0x65, 0x73, 0x65, 0x73, 0x75, 0x62, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x65, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, - 0x6c, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x61, 0x6c, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, 0x64, - 0x20, 0x23, 0x61, 0x70, 0x61, 0x72, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x20, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x69, - 0x7a, 0x65, 0x64, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x66, 0x6f, 0x72, - 0x67, 0x75, 0x69, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x61, - 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x28, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x69, 0x6e, 0x67, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x70, 0x72, 0x6f, 0x68, 0x69, 0x62, 0x69, 0x74, 0x65, 0x64, 0x3d, - 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x64, 0x69, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x70, 0x65, 0x72, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x78, 0x3b, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x66, 0x75, 0x6c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x6d, 0x69, 0x6c, 0x6c, 0x65, 0x6e, 0x6e, 0x69, 0x75, 0x6d, 0x68, 0x69, - 0x73, 0x20, 0x66, 0x61, 0x74, 0x68, 0x65, 0x72, 0x74, 0x68, 0x65, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6e, 0x6f, 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, - 0x74, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x69, - 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x6e, 0x63, 0x6f, - 0x75, 0x72, 0x61, 0x67, 0x65, 0x64, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x75, 0x6e, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, - 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x69, 0x73, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, - 0x72, 0x65, 0x78, 0x70, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x6c, 0x63, 0x75, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x6c, 0x65, 0x67, 0x69, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x30, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x6c, 0x79, 0x69, 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x66, 0x69, 0x76, 0x65, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x69, 0x6e, 0x67, 0x31, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x70, 0x73, 0x79, 0x63, 0x68, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x6a, - 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x73, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x6c, 0x79, 0x3e, 0x3c, 0x2f, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x3e, - 0x6f, 0x6e, 0x63, 0x65, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x62, 0x75, 0x74, - 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x69, 0x6d, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, - 0x2c, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, 0x6f, 0x66, 0x4c, 0x69, - 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x55, 0x6e, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, - 0x70, 0x3b, 0x0a, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x6f, 0x62, - 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x61, 0x67, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x61, 0x66, 0x74, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x6d, 0x69, 0x6c, 0x61, - 0x72, 0x6c, 0x79, 0x2c, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x69, 0x73, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x20, - 0x6f, 0x66, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x65, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x6e, 0x65, 0x64, 0x2a, 0x3c, 0x21, 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, - 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x69, 0x6e, 0x20, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x3c, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x3c, - 0x2f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4f, 0x66, 0x28, 0x27, 0x69, 0x20, - 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x65, 0x76, 0x6f, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6c, 0x74, 0x69, - 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x73, 0x6f, 0x2d, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x7d, 0x0a, 0x3c, - 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3e, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6d, 0x70, 0x68, 0x61, 0x73, 0x69, 0x7a, 0x65, - 0x64, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x3c, 0x2f, - 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x4d, 0x65, 0x61, 0x6e, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x2c, 0x69, - 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x62, 0x72, 0x20, 0x2f, 0x3e, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x65, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x54, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, - 0x62, 0x61, 0x6c, 0x6c, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x73, 0x69, 0x64, 0x65, - 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69, 0x6e, 0x67, 0x61, 0x6e, - 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x61, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x63, - 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x22, 0x3e, 0x3c, 0x73, 0x74, 0x72, - 0x6f, 0x6e, 0x67, 0x3e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x73, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x64, 0x69, - 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x79, 0x66, 0x61, 0x63, 0x69, 0x6c, - 0x69, 0x74, 0x61, 0x74, 0x65, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x09, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x6e, 0x6f, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x62, 0x75, 0x73, - 0x69, 0x6e, 0x65, 0x73, 0x73, 0x65, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x72, 0x79, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x20, 0x4a, 0x61, - 0x6e, 0x75, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x69, 0x73, 0x69, - 0x6e, 0x67, 0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x09, 0x64, - 0x69, 0x70, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x69, 0x6e, 0x67, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x6d, 0x61, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6e, - 0x63, 0x65, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x3d, 0x22, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, - 0x6f, 0x66, 0x69, 0x6e, 0x61, 0x6e, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x6d, 0x61, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x4c, 0x75, 0x78, 0x65, 0x6d, - 0x62, 0x6f, 0x75, 0x72, 0x67, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x65, - 0x6e, 0x67, 0x61, 0x67, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x22, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x29, 0x3b, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, - 0x77, 0x61, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x3d, 0x22, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x20, 0x45, 0x6e, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, - 0x69, 0x63, 0x61, 0x6c, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x6f, - 0x70, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x75, 0x6e, 0x6c, 0x69, 0x6b, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x41, 0x75, 0x73, 0x74, 0x72, 0x61, 0x6c, 0x69, - 0x61, 0x6e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x0a, 0x3c, 0x2f, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, - 0x73, 0x65, 0x64, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x41, 0x6c, 0x65, - 0x78, 0x61, 0x6e, 0x64, 0x72, 0x69, 0x61, 0x72, 0x65, 0x74, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x0a, 0x0a, - 0x26, 0x6c, 0x74, 0x3b, 0x21, 0x2d, 0x2d, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x69, 0x6e, 0x67, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x68, 0x33, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x6f, 0x62, 0x6c, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x61, 0x64, 0x76, - 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x73, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6e, - 0x73, 0x3c, 0x62, 0x61, 0x73, 0x65, 0x20, 0x68, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x6c, 0x79, 0x77, 0x69, 0x6c, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x6e, - 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x76, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x72, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x61, 0x75, - 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x6f, 0x6d, 0x69, 0x73, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x74, - 0x77, 0x6f, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x46, 0x65, 0x62, 0x72, - 0x75, 0x61, 0x72, 0x79, 0x20, 0x32, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x20, 0x6f, 0x66, 0x73, 0x77, 0x66, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x6e, 0x65, 0x61, - 0x72, 0x6c, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x20, 0x62, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, - 0x73, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x77, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x69, 0x73, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, - 0x6c, 0x79, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74, 0x65, 0x73, 0x6e, - 0x65, 0x77, 0x73, 0x70, 0x61, 0x70, 0x65, 0x72, 0x73, 0x6d, 0x79, 0x73, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x70, 0x61, 0x72, 0x6c, 0x69, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x75, 0x70, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, - 0x69, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x65, - 0x64, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x68, 0x61, 0x73, 0x20, 0x6c, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x6e, - 0x64, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x69, - 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, 0x65, 0x72, 0x65, - 0x6d, 0x6f, 0x6e, 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x53, 0x63, 0x69, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x6e, 0x6f, 0x2d, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, 0x6b, - 0x73, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x77, 0x69, - 0x64, 0x65, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x4c, 0x69, 0x62, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x64, 0x61, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x69, 0x6d, 0x70, 0x72, - 0x69, 0x73, 0x6f, 0x6e, 0x65, 0x64, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, - 0x4c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x4e, 0x6f, 0x76, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x32, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x64, 0x75, 0x73, 0x74, 0x72, 0x69, 0x61, - 0x6c, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x3a, 0x20, 0x6c, 0x65, 0x66, 0x44, 0x75, 0x72, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, - 0x6e, 0x74, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, - 0x65, 0x61, 0x6c, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x2f, 0x75, 0x6c, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x22, 0x3e, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x79, - 0x65, 0x61, 0x72, 0x73, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x65, 0x72, - 0x65, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x73, 0x79, - 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x22, 0x3e, 0x0a, 0x70, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x61, 0x62, - 0x6c, 0x79, 0x68, 0x69, 0x73, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x75, - 0x73, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x75, 0x6e, 0x65, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x64, - 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x75, 0x6e, 0x64, - 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x22, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, - 0x73, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x69, 0x6e, 0x20, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x72, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x6f, 0x75, - 0x73, 0x20, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x72, 0x6f, 0x77, 0x73, 0x70, 0x61, 0x6e, 0x3d, 0x22, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x61, 0x20, 0x66, 0x65, 0x77, 0x6d, 0x65, 0x61, 0x6e, 0x74, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x3c, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x3e, 0x41, 0x72, 0x63, 0x68, 0x62, 0x69, - 0x73, 0x68, 0x6f, 0x70, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6e, - 0x6f, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x64, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x65, 0x73, 0x70, 0x72, 0x69, 0x76, 0x69, - 0x6c, 0x65, 0x67, 0x65, 0x73, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x6d, - 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x45, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x20, 0x65, 0x67, 0x67, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, - 0x73, 0x6d, 0x73, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x50, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x22, 0x3e, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0d, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x61, 0x72, - 0x72, 0x69, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x2d, 0x6a, 0x73, 0x73, 0x64, - 0x6b, 0x27, 0x29, 0x29, 0x3b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x63, - 0x61, 0x73, 0x75, 0x61, 0x6c, 0x74, 0x69, 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x73, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x61, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x70, 0x72, 0x6f, - 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x73, 0x6d, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x68, 0x61, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x74, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x50, 0x68, - 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, 0x68, 0x79, 0x66, 0x72, 0x69, 0x65, 0x6e, - 0x64, 0x73, 0x68, 0x69, 0x70, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x67, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x6f, 0x77, 0x61, 0x72, 0x64, 0x20, 0x74, 0x68, 0x65, 0x67, 0x75, 0x61, 0x72, - 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, 0x30, 0x30, - 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x73, 0x61, - 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x6f, 0x6e, 0x6b, 0x65, 0x79, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x3b, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x3a, 0x48, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x75, - 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x74, 0x79, 0x70, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x72, 0x63, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x62, 0x65, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x73, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x6f, 0x77, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x0a, 0x09, 0x09, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x61, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x6f, 0x6d, 0x65, 0x72, - 0x68, 0x65, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x64, 0x75, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x20, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, - 0x65, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x20, 0x74, 0x6f, 0x54, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72, - 0x65, 0x2c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x6e, 0x77, 0x61, 0x73, 0x20, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x45, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6e, 0x69, 0x63, 0x6b, 0x69, 0x6c, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x69, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x6f, 0x75, - 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, - 0x62, 0x73, 0x69, 0x64, 0x69, 0x61, 0x72, 0x79, 0x63, 0x6f, 0x6e, 0x73, 0x70, - 0x69, 0x72, 0x61, 0x63, 0x79, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, - 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x66, 0x66, 0x6f, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x75, 0x62, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x20, - 0x66, 0x6f, 0x72, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x74, 0x65, 0x6d, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x6c, 0x79, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x6c, 0x79, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x61, 0x61, 0x74, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x74, 0x72, - 0x61, 0x76, 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x65, 0x70, 0x61, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x73, 0x20, - 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x62, 0x6c, 0x65, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, - 0x65, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x75, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, - 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x28, 0x73, 0x6f, 0x6d, 0x65, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, - 0x6c, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x75, 0x6e, - 0x64, 0x65, 0x72, 0x74, 0x61, 0x6b, 0x65, 0x6e, 0x71, 0x75, 0x61, 0x72, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x3c, 0x2f, 0x62, 0x75, - 0x74, 0x74, 0x6f, 0x6e, 0x3e, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x62, 0x65, 0x73, 0x74, 0x2d, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x22, 0x20, 0x64, - 0x69, 0x72, 0x3d, 0x22, 0x6c, 0x74, 0x72, 0x4c, 0x69, 0x65, 0x75, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x74, 0x68, 0x65, 0x79, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x61, 0x64, 0x65, 0x20, - 0x75, 0x70, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, - 0x72, 0x67, 0x75, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x61, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, - 0x6e, 0x27, 0x73, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, - 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x62, 0x61, 0x73, - 0x65, 0x64, 0x20, 0x75, 0x70, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, - 0x66, 0x70, 0x61, 0x73, 0x73, 0x65, 0x6e, 0x67, 0x65, 0x72, 0x73, 0x70, 0x6f, - 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x63, 0x72, 0x6f, - 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2e, - 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x73, 0x6d, 0x69, 0x6e, 0x20, - 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2d, - 0x77, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x53, 0x6f, 0x63, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x70, 0x6f, - 0x6c, 0x69, 0x74, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x77, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, - 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x70, 0x61, 0x72, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x74, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x65, 0x6e, 0x74, 0x65, - 0x72, 0x20, 0x66, 0x6f, 0x72, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, - 0x63, 0x65, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x65, 0x73, 0x62, 0x75, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x65, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x6c, 0x61, 0x62, - 0x6f, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x67, 0x61, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x75, 0x73, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x2f, 0x22, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x6f, 0x66, - 0x64, 0x65, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x74, 0x6f, 0x70, 0x74, 0x68, - 0x65, 0x20, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x20, 0x6f, 0x66, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x72, 0x65, 0x65, 0x72, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x64, 0x3d, 0x22, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x77, 0x61, 0x73, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x74, 0x68, - 0x72, 0x65, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x63, 0x75, 0x72, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x77, 0x65, 0x72, 0x65, 0x20, 0x62, 0x75, 0x69, - 0x6c, 0x74, 0x77, 0x61, 0x73, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x61, - 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6d, 0x75, 0x63, 0x68, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x44, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x31, 0x30, 0x30, - 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4b, 0x69, 0x6e, - 0x67, 0x64, 0x6f, 0x6d, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, - 0x74, 0x69, 0x72, 0x65, 0x66, 0x61, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x46, - 0x72, 0x65, 0x6e, 0x63, 0x68, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x61, - 0x6e, 0x64, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x22, 0x3e, 0x69, - 0x73, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x64, 0x75, 0x6d, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, - 0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x20, 0x4f, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x77, 0x69, 0x64, 0x65, - 0x2e, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x69, - 0x74, 0x20, 0x77, 0x61, 0x73, 0x64, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3d, 0x22, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x62, - 0x65, 0x6e, 0x65, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x6c, 0x79, - 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x6e, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x6e, 0x6f, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x3c, 0x2f, - 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x6f, - 0x72, 0x6d, 0x74, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x6f, 0x70, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, - 0x74, 0x65, 0x64, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, - 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x61, 0x6e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x20, 0x76, 0x65, - 0x72, 0x79, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x61, 0x75, 0x74, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x76, 0x65, 0x62, 0x79, 0x20, 0x66, 0x61, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x70, - 0x75, 0x72, 0x73, 0x75, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, - 0x61, 0x67, 0x72, 0x65, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x63, 0x63, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6e, - 0x67, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x68, 0x69, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x68, 0x65, 0x72, 0x74, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x64, 0x6f, 0x75, 0x73, 0x66, 0x72, 0x65, 0x65, 0x64, 0x6f, 0x6d, 0x20, - 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x30, - 0x20, 0x31, 0x65, 0x6d, 0x20, 0x31, 0x65, 0x6d, 0x3b, 0x42, 0x61, 0x73, 0x6b, - 0x65, 0x74, 0x62, 0x61, 0x6c, 0x6c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x2e, - 0x63, 0x73, 0x73, 0x61, 0x6e, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x2f, 0x22, 0x20, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x69, 0x74, 0x74, 0x73, 0x62, 0x75, 0x72, 0x67, 0x68, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0d, 0x3c, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x28, 0x66, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x6f, - 0x75, 0x74, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x0d, 0x0a, 0x20, 0x6f, 0x63, 0x63, 0x61, - 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, - 0x20, 0x69, 0x74, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, - 0x2c, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x22, 0x74, 0x61, - 0x62, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x61, 0x73, - 0x74, 0x72, 0x6f, 0x75, 0x73, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, - 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x3e, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, - 0x66, 0x6f, 0x72, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, - 0x2e, 0x73, 0x72, 0x63, 0x20, 0x3d, 0x20, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x6f, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x6c, - 0x79, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x64, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x65, 0x64, 0x65, 0x72, 0x6c, 0x61, 0x6e, - 0x64, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, 0xaa, 0x73, 0xd7, - 0xa2, 0xd7, 0x91, 0xd7, 0xa8, 0xd7, 0x99, 0xd7, 0xaa, 0xd9, 0x81, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd8, 0xb3, 0xdb, 0x8c, 0x64, 0x65, 0x73, 0x61, 0x72, 0x72, 0x6f, - 0x6c, 0x6c, 0x6f, 0x63, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, - 0x65, 0x64, 0x75, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x73, 0x65, 0x70, - 0x74, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x64, 0x6f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x63, 0x69, 0xc3, 0xb3, - 0x6e, 0x75, 0x62, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x69, 0x64, 0x61, 0x64, 0x72, 0x65, 0x73, 0x70, 0x75, - 0x65, 0x73, 0x74, 0x61, 0x73, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x61, 0x64, - 0x6f, 0x73, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x64, 0x6f, 0x73, 0x61, 0x72, 0x74, 0xc3, - 0xad, 0x63, 0x75, 0x6c, 0x6f, 0x73, 0x64, 0x69, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x65, 0x73, 0x73, 0x69, 0x67, 0x75, 0x69, 0x65, 0x6e, 0x74, 0x65, 0x73, - 0x72, 0x65, 0x70, 0xc3, 0xba, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x69, 0x74, - 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x69, 0x6f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x69, 0x64, 0x61, - 0x64, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x6f, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x6f, 0x62, 0x6c, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x69, 0x64, 0x6f, 0x73, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x6f, 0x72, 0x69, 0x6f, 0x73, 0x74, 0x65, 0x63, 0x68, - 0x6e, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, - 0x6c, 0x65, 0x73, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0xc3, 0xad, 0x61, - 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x73, 0x64, 0x69, 0x73, - 0x70, 0x6f, 0x6e, 0x69, 0x62, 0x6c, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x64, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x76, 0x61, 0x6c, 0x6c, 0x61, 0x64, 0x6f, 0x6c, 0x69, 0x64, 0x62, 0x69, - 0x62, 0x6c, 0x69, 0x6f, 0x74, 0x65, 0x63, 0x61, 0x72, 0x65, 0x6c, 0x61, 0x63, - 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, - 0x69, 0x6f, 0x70, 0x6f, 0x6c, 0xc3, 0xad, 0x74, 0x69, 0x63, 0x61, 0x73, 0x61, - 0x6e, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x65, 0x73, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x73, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, - 0x65, 0x7a, 0x61, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x65, 0x73, - 0x64, 0x69, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x63, 0x6f, - 0x6e, 0xc3, 0xb3, 0x6d, 0x69, 0x63, 0x61, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x72, 0x74, 0x65, 0x72, 0x6f, 0x64, 0x72, 0xc3, 0xad, 0x67, 0x75, 0x65, - 0x7a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x63, 0x75, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x63, 0x75, - 0x73, 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, - 0x72, 0x61, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x66, - 0x72, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x70, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x65, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xb1, 0xd1, 0x83, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb2, 0xd1, 0x80, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd1, 0x8f, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb6, 0xd0, - 0xb5, 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8b, 0xd0, 0xb1, - 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, - 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, - 0xbf, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb2, 0xd1, 0x81, - 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, - 0x82, 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb7, - 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x83, 0xd1, 0x82, 0xd1, 0x81, 0xd0, - 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xb6, 0xd0, 0xb8, 0xd0, 0xb7, - 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xb6, 0xd0, 0xb4, 0xd1, - 0x83, 0xd0, 0xb1, 0xd1, 0x83, 0xd0, 0xb4, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0x9f, - 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb7, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb4, 0xd0, 0xb5, - 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, 0xd1, 0x8f, 0xd0, 0xb7, 0xd0, 0xb8, 0xd0, - 0xbd, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, - 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb9, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd0, 0xb9, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, - 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, - 0xb0, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, - 0xb5, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb6, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xbd, - 0xd1, 0x8c, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, - 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, - 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, - 0x82, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, - 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, - 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb5, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb5, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb0, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd0, 0xb4, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, - 0xbe, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x87, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0x9f, 0xd0, - 0xbe, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xba, - 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, - 0xb9, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x82, - 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x85, 0xd1, 0x81, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd1, 0x83, 0xd0, 0xa1, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xba, - 0xd1, 0x82, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, - 0x9a, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbd, - 0xd0, 0xb8, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, - 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xb9, - 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb9, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, - 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbc, 0xd1, 0x81, 0xd0, 0xb2, 0xd1, 0x8f, - 0xd0, 0xb7, 0xd1, 0x8c, 0xd0, 0xbb, 0xd1, 0x8e, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x81, - 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0x9a, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xa4, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, - 0xd0, 0xbc, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, 0xbd, 0xd0, 0xba, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xbf, 0xd0, 0xbe, - 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd1, 0x82, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, - 0x8f, 0xd1, 0x87, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8f, 0xd1, 0x86, - 0xd1, 0x86, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x82, 0xd1, 0x80, 0xd1, 0x82, 0xd1, - 0x80, 0xd1, 0x83, 0xd0, 0xb4, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd1, 0x8b, 0xd1, 0x85, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, 0xbd, 0xd0, 0xba, 0xd0, - 0xb0, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x8b, 0xd0, 0xb9, 0xd1, 0x87, - 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x84, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8c, - 0xd0, 0xbc, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, - 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbc, 0xd0, 0xb5, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x88, 0xd0, 0xb8, 0xd1, 0x85, - 0xd0, 0xbc, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x83, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, - 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, - 0xd1, 0x8e, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x80, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb4, 0xd1, 0x81, - 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd1, 0x86, - 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0x90, 0xd1, 0x80, - 0xd1, 0x85, 0xd0, 0xb8, 0xd0, 0xb2, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, - 0xaf, 0xd9, 0x89, 0xd8, 0xa5, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, - 0xd9, 0x87, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, - 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, 0xb1, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb6, - 0xd9, 0x88, 0xd8, 0xa5, 0xd8, 0xb6, 0xd8, 0xa7, 0xd9, 0x81, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd8, 0xb3, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x85, 0xd9, - 0x8a, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x81, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd9, 0x85, 0xd9, 0x84, 0xd8, 0xaa, 0xd9, 0x82, 0xd9, 0x89, 0xd8, 0xaa, 0xd8, - 0xb9, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, - 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa3, 0xd8, 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xaa, 0xd8, 0xb7, 0xd9, 0x88, 0xd9, 0x8a, 0xd8, 0xb1, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa5, 0xd8, 0xb1, 0xd9, - 0x81, 0xd8, 0xa7, 0xd9, 0x82, 0xd8, 0xb7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x84, 0xd8, 0xba, 0xd8, 0xa9, 0xd8, - 0xaa, 0xd8, 0xb1, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, 0xd9, - 0x8a, 0xd8, 0xae, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, - 0x84, 0xd9, 0x82, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x87, 0xd8, - 0xa7, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xab, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x84, 0xd9, 0x87, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb9, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, - 0xd8, 0xa9, 0xd9, 0x8a, 0xd9, 0x85, 0xd9, 0x83, 0xd9, 0x86, 0xd9, 0x83, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb7, 0xd9, 0x81, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x8a, - 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x88, 0xd8, 0xa5, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xa9, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xae, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd8, 0xad, 0xd8, 0xa9, 0xd8, 0xaa, 0xd8, - 0xb3, 0xd8, 0xac, 0xd9, 0x8a, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x88, - 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb9, 0xd9, 0x86, 0xd8, 0xaf, 0xd9, 0x85, 0xd8, - 0xa7, 0xd9, 0x85, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa9, 0xd8, 0xaa, - 0xd8, 0xb5, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa3, 0xd8, 0xb1, 0xd8, - 0xb4, 0xd9, 0x8a, 0xd9, 0x81, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x8a, - 0xd9, 0x86, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, - 0xa8, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa3, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, - 0x81, 0xd8, 0xb1, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd9, 0x83, 0xd9, 0x84, - 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa3, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, - 0xd9, 0x86, 0xd8, 0xa9, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xb9, 0xd8, - 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd8, 0xad, 0xd9, 0x81, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x86, 0xd9, 0x83, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd8, 0xa7, - 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x84, 0xd9, 0x81, 0xd8, - 0xa3, 0xd8, 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd9, 0x83, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd9, - 0x8a, 0xd8, 0xb1, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xa6, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa3, 0xd8, 0xaf, 0xd8, 0xa8, 0xd9, 0x85, 0xd9, 0x82, 0xd8, 0xa7, - 0xd8, 0xb7, 0xd8, 0xb9, 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, - 0x84, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xb7, 0xd9, 0x82, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb1, 0xd8, 0xac, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xb4, 0xd8, 0xaa, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x82, 0xd8, 0xaf, 0xd9, 0x85, 0xd9, - 0x8a, 0xd8, 0xb9, 0xd8, 0xb7, 0xd9, 0x8a, 0xd9, 0x83, 0x73, 0x42, 0x79, 0x54, - 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, - 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x31, 0x70, 0x78, 0x20, 0x73, 0x6f, 0x6c, 0x69, - 0x64, 0x20, 0x23, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, - 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x6f, 0x6e, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x3d, 0x22, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x69, - 0x6e, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, - 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, - 0x64, 0x61, 0x73, 0x68, 0x3b, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x6c, 0x79, 0x3c, 0x2f, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x3e, 0x3c, - 0x2f, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x74, - 0x65, 0x6d, 0x70, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, 0x65, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x65, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3a, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, - 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x65, 0x76, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, - 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, 0x75, 0x72, 0x6c, 0x28, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x73, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x6e, 0x6f, - 0x2d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x50, 0x47, 0x7c, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x7c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, - 0x65, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x3c, 0x6c, 0x69, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x75, 0x6e, 0x64, 0x72, - 0x65, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x0a, 0x0a, 0x48, 0x6f, 0x77, 0x65, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, - 0x63, 0x6f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x77, 0x69, - 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x4e, 0x65, 0x77, 0x20, 0x5a, 0x65, 0x61, 0x6c, - 0x61, 0x6e, 0x64, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x79, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x26, 0x6c, 0x74, - 0x3b, 0x73, 0x75, 0x70, 0x26, 0x67, 0x74, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x73, 0x79, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3d, 0x22, - 0x73, 0x77, 0x69, 0x74, 0x7a, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x64, 0x44, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x73, 0x73, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x0a, 0x0a, 0x41, 0x6c, 0x74, 0x68, - 0x6f, 0x75, 0x67, 0x68, 0x20, 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, - 0x65, 0x61, 0x3e, 0x74, 0x68, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x62, 0x69, 0x72, - 0x64, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x26, - 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x64, 0x61, 0x73, 0x68, 0x3b, 0x73, 0x70, 0x65, - 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x69, 0x65, 0x73, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, 0x6e, 0x69, - 0x63, 0x73, 0x0a, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, - 0x69, 0x6c, 0x6c, 0x75, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x65, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x74, 0x65, 0x72, 0x72, - 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x64, 0x36, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, - 0x22, 0x73, 0x61, 0x6e, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x3b, 0x63, - 0x61, 0x70, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x69, 0x73, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x6f, 0x6f, 0x6b, 0x69, 0x6e, 0x67, - 0x20, 0x66, 0x6f, 0x72, 0x69, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x41, 0x66, 0x67, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x77, 0x61, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x61, - 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x73, 0x75, 0x72, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x61, 0x6e, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, - 0x65, 0x65, 0x6e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x3c, - 0x68, 0x32, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x6f, 0x72, - 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x6e, 0x76, 0x61, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x28, 0x29, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x44, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x22, 0x3e, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x73, 0x70, - 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x78, 0x61, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x2e, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x65, 0x61, 0x63, 0x68, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x64, - 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x4d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, - 0x45, 0x61, 0x73, 0x74, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x3c, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x20, - 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, - 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x20, 0x44, - 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x61, 0x72, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x66, 0x61, 0x6d, - 0x6f, 0x75, 0x73, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x73, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x69, 0x67, 0x6e, 0x74, 0x79, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x64, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x20, 0x74, 0x6f, 0x64, 0x6f, - 0x63, 0x74, 0x72, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x6f, 0x63, 0x63, 0x75, - 0x70, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x65, 0x6e, 0x61, 0x69, 0x73, 0x73, 0x61, - 0x6e, 0x63, 0x65, 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x65, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x63, - 0x6f, 0x67, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x64, 0x65, - 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x2f, 0x3c, 0x68, 0x31, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x6d, 0x61, 0x79, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x3c, 0x2f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x3e, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x76, 0x65, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x6f, 0x66, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, - 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x61, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x73, - 0x74, 0x6f, 0x77, 0x61, 0x72, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x6f, - 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x28, 0x65, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x74, 0x64, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x3b, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x30, 0x30, - 0x25, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x3c, - 0x68, 0x33, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x20, 0x6f, 0x6e, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x3d, 0x22, 0x29, 0x2e, 0x61, 0x64, 0x64, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x64, 0x61, 0x75, 0x67, 0x68, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x62, 0x72, - 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x0d, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x73, 0x74, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x20, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x65, 0x61, - 0x64, 0x3e, 0x0a, 0x3c, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, - 0x22, 0x31, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, - 0x20, 0x73, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x61, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x65, - 0x20, 0x42, 0x72, 0x69, 0x74, 0x69, 0x73, 0x68, 0x77, 0x61, 0x73, 0x20, 0x77, - 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x21, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x61, 0x6e, 0x74, 0x3b, 0x70, 0x78, 0x3b, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x2d, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x64, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x6d, 0x69, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x3c, 0x68, 0x34, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x4e, 0x6f, 0x76, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x3c, 0x2f, 0x70, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x61, 0x63, 0x71, 0x75, 0x69, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x65, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x77, 0x69, 0x64, 0x65, 0x6c, - 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x49, 0x74, - 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x74, 0x20, 0x64, - 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x72, 0x79, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, - 0x6e, 0x74, 0x73, 0x69, 0x6d, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x63, 0x68, 0x6f, 0x6c, 0x61, 0x72, 0x73, 0x68, 0x69, 0x70, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x20, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x70, 0x78, 0x3b, 0x20, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x61, 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x6f, 0x6c, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x73, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x66, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x3d, 0x22, 0x68, 0x69, 0x67, 0x68, 0x20, 0x73, 0x63, 0x68, 0x6f, 0x6f, 0x6c, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x66, 0x6f, 0x72, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x61, 0x64, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, - 0x79, 0x65, 0x61, 0x72, 0x73, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x69, 0x6e, 0x20, 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, - 0x79, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x77, 0x68, 0x6f, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x3c, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x69, 0x6e, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, - 0x6f, 0x66, 0x61, 0x70, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x49, 0x53, 0x4f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, 0x31, 0x22, 0x77, 0x61, - 0x73, 0x20, 0x62, 0x6f, 0x72, 0x6e, 0x20, 0x69, 0x6e, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x69, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x3a, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x69, 0x67, - 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x63, 0x65, 0x6c, 0x65, 0x62, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x2f, 0x6a, 0x73, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x69, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, - 0x74, 0x68, 0x65, 0x6f, 0x72, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, - 0x61, 0x62, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x69, 0x74, 0x20, 0x63, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x68, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, - 0x3c, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x54, 0x68, 0x65, 0x20, 0x63, - 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, - 0x70, 0x68, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, 0x6f, 0x20, 0x73, - 0x61, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x62, - 0x65, 0x6c, 0x69, 0x65, 0x66, 0x20, 0x74, 0x68, 0x61, 0x74, 0x70, 0x68, 0x6f, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, - 0x6f, 0x66, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79, - 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x74, 0x65, - 0x63, 0x68, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x6c, 0x65, 0x61, 0x76, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x61, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x69, 0x63, 0x69, 0x74, - 0x79, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x70, 0x61, 0x72, - 0x74, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x65, 0x6d, 0x70, 0x68, 0x61, - 0x73, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x65, - 0x63, 0x65, 0x6e, 0x74, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x73, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x64, 0x65, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x22, 0x3e, 0x3c, 0x2f, 0x69, 0x66, - 0x72, 0x61, 0x6d, 0x65, 0x3e, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x73, 0x3a, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x6f, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x76, 0x69, 0x65, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x73, 0x65, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x59, - 0x6f, 0x72, 0x6b, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0a, - 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x6e, 0x63, - 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x3b, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, - 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x72, 0x22, 0x3e, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x70, 0x68, 0x65, 0x72, 0x4d, - 0x75, 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x3d, 0x22, 0x32, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x6d, 0x69, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x65, 0x64, 0x75, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x3d, 0x22, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2f, - 0x44, 0x54, 0x44, 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x74, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x63, 0x79, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x64, 0x65, 0x73, 0x70, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x20, 0x6c, 0x65, - 0x67, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x61, 0x6c, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, 0x74, - 0x75, 0x72, 0x65, 0x77, 0x61, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x61, 0x63, 0x68, 0x20, 0x74, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x79, 0x65, 0x61, - 0x72, 0x73, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x2c, 0x73, 0x61, 0x6e, 0x73, - 0x2d, 0x73, 0x65, 0x72, 0x69, 0x66, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, - 0x63, 0x65, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, - 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x64, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, 0x61, 0x6c, - 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x31, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, - 0x6f, 0x66, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x20, - 0x68, 0x69, 0x73, 0x20, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x61, 0x6e, 0x6e, 0x69, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x75, 0x6c, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x20, 0x69, 0x6e, 0x6e, 0x6f, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x63, 0x61, 0x6e, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x6f, 0x47, 0x4d, 0x54, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x41, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x69, 0x6d, 0x67, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x77, 0x61, - 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, - 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x68, 0x65, 0x20, 0x77, 0x61, - 0x73, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x4d, 0x61, 0x6e, - 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x72, 0x67, 0x75, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x61, 0x6e, 0x63, 0x6f, 0x6e, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, - 0x6f, 0x66, 0x77, 0x69, 0x64, 0x65, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x20, - 0x77, 0x65, 0x72, 0x65, 0x20, 0x6b, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x73, 0x63, - 0x72, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x6e, 0x20, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x61, - 0x6e, 0x74, 0x73, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x6c, 0x65, 0x67, 0x69, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x61, - 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, - 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x79, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x72, 0x67, 0x75, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x68, 0x6f, 0x77, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x70, 0x72, 0x65, 0x64, 0x6f, 0x6d, 0x69, 0x6e, - 0x61, 0x6e, 0x74, 0x74, 0x68, 0x65, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, - 0x6c, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x63, - 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x68, 0x6f, - 0x72, 0x74, 0x2d, 0x6c, 0x69, 0x76, 0x65, 0x64, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6c, 0x69, 0x74, 0x74, - 0x6c, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x68, 0x61, 0x64, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x63, 0x6f, 0x6d, 0x6d, - 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x2c, 0x3c, 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x22, - 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x33, 0x49, 0x6e, 0x64, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x2d, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x20, 0x41, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6f, - 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x77, 0x6f, 0x20, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x3c, 0x2f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x66, - 0x69, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x73, 0x69, - 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x73, 0x75, - 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x61, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x73, 0x73, 0x69, - 0x70, 0x70, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x62, - 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x77, 0x68, 0x61, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x77, 0x73, 0x69, 0x74, 0x75, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x22, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x61, 0x74, 0x6d, 0x6f, - 0x73, 0x70, 0x68, 0x65, 0x72, 0x69, 0x63, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x73, 0x65, 0x73, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x6d, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x70, 0x61, 0x67, 0x65, 0x2f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x70, 0x68, 0x70, 0x3f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x64, 0x48, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x66, - 0x61, 0x76, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x4d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x3c, - 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x54, 0x68, 0x69, - 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, - 0x69, 0x7a, 0x65, 0x64, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6d, 0x61, - 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x65, 0x6d, - 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x50, 0x61, 0x6c, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x69, 0x61, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, - 0x72, 0x69, 0x74, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x62, 0x75, 0x74, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x76, 0x65, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x49, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2c, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x73, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x75, 0x62, 0x64, - 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, - 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, - 0x79, 0x77, 0x61, 0x73, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x6c, 0x79, 0x6f, - 0x75, 0x74, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x73, 0x74, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, - 0x6f, 0x67, 0x3d, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, - 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x61, 0x6e, 0x75, - 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x62, 0x65, 0x69, 0x6e, 0x67, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, - 0x22, 0x3e, 0x0a, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x77, 0x61, 0x73, 0x20, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x74, - 0x6f, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x20, 0x61, 0x62, 0x65, 0x63, - 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, - 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, - 0x6c, 0x20, 0x61, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x61, 0x6d, - 0x6f, 0x6e, 0x67, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x6f, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, - 0x31, 0x30, 0x30, 0x25, 0x3b, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0x79, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, - 0x64, 0x74, 0x6f, 0x20, 0x6b, 0x65, 0x65, 0x70, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x65, 0x74, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6c, 0x69, 0x76, - 0x65, 0x20, 0x62, 0x69, 0x72, 0x74, 0x68, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x63, 0x75, 0x74, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x3b, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x22, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x71, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x20, 0x6f, 0x66, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x20, - 0x2f, 0x3e, 0x69, 0x73, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, - 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x0d, 0x0a, - 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x65, 0x6c, 0x79, 0x2c, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x69, 0x64, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3d, 0x22, 0x31, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, - 0x79, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x63, 0x69, 0x74, 0x69, 0x7a, - 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, - 0x69, 0x61, 0x6e, 0x73, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x73, 0x20, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x61, 0x73, - 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x3c, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x64, - 0x6f, 0x77, 0x6e, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, - 0x73, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, 0x73, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x64, 0x61, 0x74, 0x65, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, - 0x74, 0x65, 0x74, 0x68, 0x65, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, - 0x64, 0x65, 0x6c, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x3e, 0x74, 0x68, - 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x6e, 0x61, - 0x6c, 0x6c, 0x79, 0x61, 0x20, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x0d, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x66, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6a, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x69, 0x6d, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x65, 0x72, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, - 0x68, 0x65, 0x69, 0x72, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x44, 0x75, 0x72, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, - 0x65, 0x6e, 0x74, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x65, - 0x64, 0x65, 0x71, 0x75, 0x69, 0x6c, 0x69, 0x62, 0x72, 0x69, 0x75, 0x6d, 0x61, - 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x62, 0x79, 0x6e, 0x65, 0x65, 0x64, 0x73, - 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, - 0x75, 0x73, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, - 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x61, - 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x65, 0x64, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x2d, 0x64, 0x61, 0x79, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x62, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, - 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x73, 0x20, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6d, 0x61, 0x64, - 0x65, 0x77, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x77, - 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x62, 0x75, 0x74, - 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x4d, 0x6f, 0x75, - 0x73, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x61, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x20, - 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x61, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, - 0x20, 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, - 0x6f, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x6d, 0x75, 0x63, - 0x68, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x0a, 0x09, 0x3c, 0x2f, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x61, 0x64, 0x6f, 0x70, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x77, 0x61, - 0x73, 0x20, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x72, 0x65, 0x6e, 0x20, 0x6f, 0x66, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x6d, 0x61, 0x6e, 0x75, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x73, 0x77, 0x61, 0x72, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, 0x62, - 0x79, 0x20, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, - 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x6d, 0x69, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x65, - 0x74, 0x61, 0x72, 0x79, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x70, 0x72, 0x65, 0x73, 0x74, 0x69, 0x67, 0x69, 0x6f, 0x75, 0x73, - 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x6f, 0x20, 0x6d, - 0x61, 0x6b, 0x65, 0x20, 0x74, 0x68, 0x65, 0x49, 0x74, 0x20, 0x77, 0x61, 0x73, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x69, 0x74, 0x6f, 0x72, - 0x73, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x2e, 0x53, 0x2e, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x62, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, 0x6c, 0x63, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, - 0x69, 0x6e, 0x20, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x72, 0x65, 0x73, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x31, 0x73, 0x74, 0x20, 0x45, 0x61, 0x72, 0x6c, 0x20, 0x6f, 0x66, 0x63, - 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x2f, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x62, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, - 0x65, 0x78, 0x70, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x6f, 0x61, 0x72, - 0x65, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x64, 0x64, 0x46, 0x61, 0x76, - 0x6f, 0x72, 0x69, 0x74, 0x65, 0x63, 0x69, 0x74, 0x69, 0x7a, 0x65, 0x6e, 0x73, - 0x68, 0x69, 0x70, 0x70, 0x61, 0x72, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, - 0x6e, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x74, 0x6f, 0x20, - 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x26, 0x61, 0x6d, 0x70, 0x3b, - 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x3b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x66, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x70, 0x6c, 0x61, 0x79, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x69, 0x6e, 0x20, 0x68, 0x69, 0x73, 0x20, 0x62, 0x6f, 0x6f, - 0x6b, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x2f, 0x74, 0x64, 0x3e, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, - 0x73, 0x74, 0x74, 0x68, 0x65, 0x20, 0x69, 0x64, 0x65, 0x61, 0x20, 0x6f, 0x66, - 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x77, 0x65, - 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x62, 0x74, 0x6e, 0x64, 0x61, 0x79, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x73, 0x68, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x69, - 0x6e, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x4c, 0x6f, 0x72, 0x64, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x6c, 0x79, 0x68, 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, - 0x45, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x73, 0x6f, 0x6d, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x2c, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, - 0x65, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x62, 0x6c, 0x61, 0x63, 0x6b, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x27, 0x73, 0x63, 0x61, 0x6e, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x2c, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x63, 0x69, 0x74, - 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0d, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x72, 0x61, 0x64, 0x69, 0x6f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x72, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x68, 0x69, 0x73, 0x20, 0x66, 0x61, - 0x74, 0x68, 0x65, 0x72, 0x2c, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, - 0x75, 0x6c, 0x64, 0x63, 0x6f, 0x70, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x61, - 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x69, 0x74, 0x75, 0x74, 0x65, 0x73, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x65, 0x72, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, - 0x69, 0x3e, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x66, 0x65, - 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, 0x65, 0x64, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x57, 0x69, 0x64, 0x74, 0x68, 0x70, 0x72, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x4c, 0x65, 0x67, 0x69, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, - 0x6e, 0x68, 0x61, 0x73, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x66, - 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, - 0x6f, 0x72, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, - 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x77, 0x68, 0x65, 0x72, - 0x65, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, 0x73, - 0x2c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x68, 0x65, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x72, 0x61, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x72, 0x6f, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x77, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x53, 0x6f, - 0x6d, 0x65, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x65, 0x77, 0x73, 0x6c, 0x65, 0x74, 0x74, - 0x65, 0x72, 0x73, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, - 0x65, 0x64, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x6c, 0x69, 0x76, - 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x69, - 0x65, 0x73, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, - 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x69, 0x74, 0x77, 0x61, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, - 0x20, 0x6f, 0x66, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, - 0x73, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x74, - 0x68, 0x65, 0x20, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x65, 0x63, 0x6f, - 0x6e, 0x6f, 0x6d, 0x79, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, - 0x73, 0x74, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6e, - 0x64, 0x20, 0x70, 0x65, 0x72, 0x68, 0x61, 0x70, 0x73, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x77, 0x68, - 0x69, 0x63, 0x68, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x74, - 0x68, 0x65, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x68, 0x65, 0x73, 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x6d, 0x61, - 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x68, 0x69, 0x73, 0x61, 0x72, 0x65, 0x61, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x54, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x6f, 0x6c, 0x73, 0x70, 0x61, 0x6e, - 0x3d, 0x32, 0x20, 0x7c, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, - 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x43, 0x68, 0x72, 0x69, - 0x73, 0x74, 0x69, 0x61, 0x6e, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x74, 0x6f, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, - 0x6f, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x54, - 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x6d, 0x65, 0x72, - 0x63, 0x68, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x65, 0x66, 0x6f, 0x72, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x20, 0x65, 0x76, 0x69, 0x64, - 0x65, 0x6e, 0x63, 0x65, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x6f, 0x66, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, - 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x63, 0x6f, - 0x6d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x73, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x65, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x2c, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x74, 0x68, 0x65, - 0x20, 0x61, 0x6e, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x70, 0x72, 0x6f, 0x62, 0x6c, - 0x65, 0x6d, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x66, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x20, 0x66, 0x65, 0x77, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x6d, 0x75, - 0x63, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6f, 0x66, 0x43, 0x61, 0x6c, 0x69, 0x66, 0x6f, - 0x72, 0x6e, 0x69, 0x61, 0x2c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x61, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x6d, - 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x09, 0x09, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x69, 0x74, 0x22, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, - 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x69, 0x6e, - 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x09, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x2f, 0x77, 0x61, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x61, 0x73, 0x20, 0x73, - 0x65, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x73, 0x74, 0x65, 0x61, - 0x63, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x65, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x64, 0x69, 0x61, 0x6c, 0x65, 0x63, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x61, - 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x65, - 0x73, 0x74, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x61, 0x6e, 0x64, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x62, 0x65, - 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x61, 0x6e, 0x64, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2c, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x74, - 0x68, 0x65, 0x6d, 0x73, 0x65, 0x6c, 0x76, 0x65, 0x73, 0x2e, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, - 0x65, 0x20, 0x61, 0x73, 0x74, 0x6f, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x61, 0x6e, 0x64, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, - 0x69, 0x73, 0x20, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x61, 0x20, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x73, 0x74, 0x20, 0x74, 0x6f, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x4f, 0x66, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x68, 0x69, - 0x73, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x20, 0x69, 0x73, 0x69, 0x73, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x67, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x6c, 0x69, 0x3e, 0x54, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, - 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x57, 0x65, 0x73, 0x74, 0x74, 0x68, 0x65, 0x79, 0x20, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0xc4, 0x8d, - 0x69, 0x6e, 0x61, 0x63, 0x6f, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x69, 0x6f, - 0x73, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x64, 0x61, 0x64, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x65, 0x78, 0x70, 0x65, 0x72, - 0x69, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x74, 0x65, 0x63, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0xc3, 0xad, 0x61, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x63, 0x69, 0xc3, - 0xb3, 0x6e, 0x70, 0x75, 0x6e, 0x74, 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, - 0x61, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x73, 0x65, 0xc3, 0xb1, 0x61, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0xc3, 0xad, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x72, 0x73, 0x65, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x74, 0x72, 0x61, 0x74, 0x61, 0x6d, 0x69, 0x65, 0x6e, 0x74, - 0x6f, 0x72, 0x65, 0x67, 0xc3, 0xad, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, 0x72, 0xc3, 0xad, 0x61, 0x70, 0x72, 0x69, - 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x65, 0x73, 0x70, 0x72, 0x6f, 0x74, 0x65, - 0x63, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, - 0x6e, 0x74, 0x65, 0x73, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x63, - 0x69, 0x61, 0x70, 0x6f, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x64, 0x61, 0x64, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x61, 0x6e, 0x74, 0x65, 0x63, 0x72, - 0x65, 0x63, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, 0x6e, 0x65, 0x63, 0x65, - 0x73, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x73, 0x75, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x69, 0x72, 0x73, 0x65, 0x61, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x63, 0x69, - 0xc3, 0xb3, 0x6e, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x6e, 0x69, 0x62, 0x6c, 0x65, - 0x73, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x65, - 0x73, 0x74, 0x75, 0x64, 0x69, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x67, 0x75, 0x61, 0x64, 0x61, 0x6c, 0x61, - 0x6a, 0x61, 0x72, 0x61, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x64, - 0x6f, 0x73, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x69, 0x64, 0x61, 0x64, - 0x63, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x69, 0x61, 0x6c, 0x65, 0x73, 0x66, 0x6f, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x66, 0xc3, 0xad, 0x61, 0x61, 0x75, 0x74, 0x6f, - 0x72, 0x69, 0x64, 0x61, 0x64, 0x65, 0x73, 0x69, 0x6e, 0x67, 0x65, 0x6e, 0x69, - 0x65, 0x72, 0xc3, 0xad, 0x61, 0x74, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, - 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x65, 0x74, 0x65, 0x6e, 0x63, 0x69, - 0x61, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x65, - 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x63, 0x69, 0x64, 0x6f, 0x73, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x63, 0x74, 0x75, 0x61, - 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x76, 0x65, 0x67, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x64, - 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x3a, - 0x22, 0x20, 0x3a, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6c, 0x69, - 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x2f, 0x2f, 0x3c, 0x21, - 0x5b, 0x43, 0x44, 0x41, 0x54, 0x41, 0x5b, 0x0a, 0x4f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x30, 0x70, 0x78, 0x3b, 0x20, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x3c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x3d, - 0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x3c, 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x2f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x77, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x20, 0x21, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x3b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x69, 0x6e, 0x74, 0x65, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x75, 0x61, 0x6c, - 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x31, - 0x38, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x61, 0x6e, - 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x73, - 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x39, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, - 0x79, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, - 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x79, 0x2f, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x75, 0x6e, - 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x27, 0x29, 0x46, 0x75, 0x72, 0x74, - 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x62, 0x65, 0x6c, 0x69, 0x65, - 0x76, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x48, - 0x54, 0x4d, 0x4c, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x64, 0x72, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x6c, 0x79, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x6e, 0x65, 0x67, 0x6f, 0x74, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x68, 0x65, 0x61, 0x64, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, - 0x73, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, 0x72, 0x69, 0x63, 0x61, - 0x75, 0x6e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x50, - 0x65, 0x6e, 0x6e, 0x73, 0x79, 0x6c, 0x76, 0x61, 0x6e, 0x69, 0x61, 0x41, 0x73, - 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2c, 0x3c, 0x68, 0x74, - 0x6d, 0x6c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x26, 0x6c, 0x74, 0x3b, - 0x2f, 0x73, 0x75, 0x70, 0x26, 0x67, 0x74, 0x3b, 0x64, 0x65, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x70, 0x68, 0x69, 0x6c, 0x61, 0x64, - 0x65, 0x6c, 0x70, 0x68, 0x69, 0x61, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0a, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x74, - 0x6f, 0x70, 0x3a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x67, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x70, - 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3d, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x6c, 0x2e, 0x64, 0x74, - 0x64, 0x22, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x74, 0x67, 0x65, 0x6f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x69, - 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x61, 0x67, 0x72, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x75, - 0x72, 0x61, 0x6c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x31, - 0x61, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x45, 0x6e, - 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x61, 0x69, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x64, 0x65, 0x6d, 0x6f, - 0x6e, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x61, 0x63, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x65, 0x6d, 0x6f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x69, 0x63, 0x73, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x3c, 0x64, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x20, - 0x6f, 0x66, 0x73, 0x61, 0x74, 0x69, 0x73, 0x66, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x55, 0x53, 0x29, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x64, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x28, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x48, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6c, - 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x20, 0x74, 0x61, 0x62, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x3d, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x77, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x72, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x6e, - 0x65, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x65, 0x6e, 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x61, 0x3b, - 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x6a, 0x75, - 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x3e, 0x3c, 0x61, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x49, 0x6e, 0x20, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2b, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x6c, 0x6c, 0x79, 0x72, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x3d, 0x22, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, - 0x67, 0x26, 0x6c, 0x74, 0x3b, 0x6d, 0x61, 0x74, 0x68, 0x26, 0x67, 0x74, 0x3b, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, - 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x69, - 0x6d, 0x67, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x6e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x63, 0x6f, 0x6d, 0x70, - 0x65, 0x6e, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x6d, 0x70, - 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, - 0x22, 0x61, 0x6c, 0x6c, 0x22, 0x20, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x74, 0x6f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, - 0x75, 0x65, 0x3b, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2f, 0x2f, 0x45, 0x4e, - 0x22, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, - 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, 0x74, 0x69, 0x65, 0x73, 0x43, 0x68, 0x61, - 0x6d, 0x70, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x63, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3c, 0x21, 0x5b, 0x65, 0x6e, - 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x7d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, - 0x61, 0x6e, 0x69, 0x74, 0x79, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x50, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x77, 0x61, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x28, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x28, 0x75, 0x6e, - 0x65, 0x6d, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x68, 0x65, - 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x2f, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x47, - 0x75, 0x69, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x76, - 0x65, 0x72, 0x77, 0x68, 0x65, 0x6c, 0x6d, 0x69, 0x6e, 0x67, 0x61, 0x67, 0x61, - 0x69, 0x6e, 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x63, - 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2c, 0x0a, 0x2e, 0x6e, 0x6f, - 0x6e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x20, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x66, 0x20, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3a, 0x20, 0x31, - 0x70, 0x78, 0x20, 0x7b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, 0x7a, 0x65, - 0x3a, 0x31, 0x74, 0x72, 0x65, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x30, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, - 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x64, 0x69, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x67, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x61, 0x63, 0x68, 0x69, - 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x74, 0x68, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, 0x74, - 0x64, 0x3e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x22, 0x3e, - 0x0a, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x61, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x72, - 0x63, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x61, 0x76, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x61, 0x6c, 0x66, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, - 0x61, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x20, 0x6d, 0x65, 0x74, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x69, 0x74, - 0x61, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x65, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x6c, 0x61, 0x6e, 0x67, 0x3d, 0x22, - 0x64, 0x65, 0x6c, 0x69, 0x62, 0x65, 0x72, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x61, - 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x76, - 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6d, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x4a, 0x65, 0x73, 0x75, 0x73, 0x20, - 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x64, 0x69, 0x73, 0x61, 0x67, 0x72, 0x65, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x3a, 0x72, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, - 0x69, 0x73, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x73, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6d, 0x61, 0x6e, 0x79, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x77, 0x3a, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x09, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x68, 0x6f, 0x6f, 0x64, 0x61, - 0x72, 0x6d, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x73, 0x72, 0x65, - 0x64, 0x75, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x69, 0x6e, 0x75, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x4e, 0x6f, 0x6e, 0x65, - 0x74, 0x68, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x74, 0x65, 0x6d, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x0a, 0x09, 0x09, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x69, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x28, 0x73, 0x65, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, - 0x29, 0x2e, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x09, 0x09, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x09, 0x09, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x65, - 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x48, 0x61, 0x6c, 0x6c, 0x20, 0x6f, - 0x66, 0x20, 0x46, 0x61, 0x6d, 0x65, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, 0x78, - 0x74, 0x2f, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, - 0x73, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, - 0x76, 0x65, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x7b, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x65, 0x78, 0x70, 0x6c, 0x6f, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x6d, 0x65, 0x72, 0x67, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x69, 0x74, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x20, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x3e, 0x3c, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, - 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x62, - 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6e, 0x65, 0x69, - 0x67, 0x68, 0x62, 0x6f, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x09, 0x3c, 0x6c, 0x69, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x53, 0x6f, 0x76, 0x69, 0x65, 0x74, 0x20, 0x55, - 0x6e, 0x69, 0x6f, 0x6e, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, - 0x67, 0x65, 0x64, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x62, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, - 0x65, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64, - 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e, - 0x20, 0x66, 0x61, 0x63, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x6c, 0x69, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x61, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x69, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x42, 0x75, 0x62, - 0x62, 0x6c, 0x65, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x69, 0x6e, - 0x20, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x6c, 0x6c, 0x69, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x72, 0x63, 0x3d, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x78, 0x3b, 0x20, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x72, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x61, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x61, 0x6c, 0x68, - 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x73, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x61, 0x72, 0x65, 0x20, - 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x73, 0x6d, 0x61, 0x6c, 0x6c, - 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x61, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x20, 0x77, 0x68, 0x6f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x67, 0x75, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x6e, 0x6f, 0x77, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x61, 0x73, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x61, 0x72, - 0x6c, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, - 0x65, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, - 0x53, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x61, 0x76, 0x69, 0x61, 0x6e, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, - 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, - 0x4e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x69, 0x64, 0x3d, 0x22, 0x70, 0x61, 0x67, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x6e, 0x61, 0x6c, 0x6f, 0x67, 0x6f, 0x75, - 0x73, 0x20, 0x74, 0x6f, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x64, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0a, 0x77, 0x61, 0x73, 0x20, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, - 0x6e, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x61, - 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x74, - 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x22, 0x20, 0x77, 0x61, - 0x73, 0x20, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x64, 0x6e, 0x6f, 0x20, - 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x72, 0x65, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x3e, 0x0d, 0x0a, 0x3c, 0x68, 0x65, - 0x61, 0x64, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x65, 0x72, 0x65, 0x20, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, - 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x78, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6c, 0x79, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x3a, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, - 0x20, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x61, 0x6e, - 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x68, 0x6f, 0x77, - 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x79, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x72, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, - 0x69, 0x73, 0x6d, 0x20, 0x6f, 0x66, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x69, 0x73, 0x20, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x6c, 0x65, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x29, 0x7b, 0x49, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, - 0x65, 0x61, 0x6e, 0x20, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x63, 0x63, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x41, 0x72, - 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x62, 0x65, 0x74, - 0x74, 0x65, 0x72, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x61, 0x72, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x69, 0x6e, 0x66, 0x6c, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x73, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, - 0x75, 0x67, 0x68, 0x78, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x3d, 0x22, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, - 0x3b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x69, - 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x69, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x57, 0x6f, 0x72, 0x6c, - 0x64, 0x20, 0x57, 0x61, 0x72, 0x20, 0x49, 0x49, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6d, 0x6f, 0x6e, 0x69, 0x61, 0x6c, 0x73, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x79, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x74, - 0x68, 0x65, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x6f, 0x6e, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x20, 0x62, 0x65, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x77, 0x61, 0x73, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, - 0x73, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x69, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x61, 0x6e, - 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x75, 0x70, - 0x6c, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3a, 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62, - 0x65, 0x69, 0x6e, 0x67, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x62, 0x65, 0x63, - 0x61, 0x6d, 0x65, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x3e, - 0x3c, 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x65, 0x76, - 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x78, 0x70, - 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x76, 0x69, - 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x61, - 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x61, 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x20, - 0x6f, 0x66, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, - 0x22, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x3c, - 0x2f, 0x6e, 0x6f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x73, 0x61, - 0x69, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x77, 0x68, 0x69, 0x6c, - 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x68, 0x79, 0x70, 0x6f, 0x74, - 0x68, 0x65, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, - 0x6f, 0x70, 0x68, 0x65, 0x72, 0x73, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x69, 0x6e, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x69, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x74, 0x6f, 0x77, 0x65, 0x72, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, - 0x6e, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x74, - 0x68, 0x65, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x72, 0x65, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6d, 0x70, 0x6c, - 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x76, 0x65, 0x6e, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, - 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x77, 0x61, 0x73, 0x20, 0x70, 0x72, 0x6f, - 0x62, 0x61, 0x62, 0x6c, 0x79, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x62, 0x65, 0x74, - 0x77, 0x65, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x6f, 0x72, - 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x49, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x20, 0x4f, 0x63, 0x65, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x79, 0x65, 0x61, - 0x72, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x72, 0x65, - 0x6d, 0x65, 0x6c, 0x79, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, - 0x0a, 0x61, 0x6e, 0x20, 0x65, 0x66, 0x66, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, - 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x73, 0x70, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x74, 0x68, 0x65, 0x20, - 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x54, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, - 0x65, 0x78, 0x74, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x61, 0x6e, - 0x64, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x61, - 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, - 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x67, 0x69, 0x76, - 0x65, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x78, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x74, 0x75, 0x72, 0x65, 0x73, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, - 0x61, 0x73, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, - 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, - 0x73, 0x73, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x73, 0x22, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x6e, 0x6f, 0x72, 0x74, - 0x68, 0x77, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, - 0x62, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, 0x66, 0x74, - 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x74, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x73, 0x75, - 0x70, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x64, 0x65, 0x70, - 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x6e, 0x69, 0x73, 0x20, 0x6d, - 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, - 0x76, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x69, 0x6e, 0x67, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x20, 0x61, 0x74, 0x73, 0x74, 0x75, 0x64, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x20, 0x52, 0x69, 0x67, 0x68, 0x74, 0x73, 0x74, - 0x65, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x72, 0x65, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x61, 0x6e, 0x64, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x64, 0x65, 0x66, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x72, - 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, - 0x79, 0x20, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x75, 0x64, 0x79, 0x20, 0x6f, - 0x66, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x77, - 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x65, 0x20, 0x77, 0x61, 0x73, 0x3c, 0x6c, - 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x68, 0x65, 0x20, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3a, 0x74, 0x65, 0x72, 0x72, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x3e, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, 0x65, - 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x49, - 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74, 0x2c, 0x68, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x69, 0x73, 0x20, - 0x74, 0x79, 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x61, 0x6e, 0x64, 0x20, - 0x68, 0x69, 0x73, 0x20, 0x77, 0x69, 0x66, 0x65, 0x28, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x3e, 0x3c, 0x75, 0x6c, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x20, 0x65, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x20, - 0x69, 0x6e, 0x74, 0x6f, 0x73, 0x65, 0x65, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20, 0x6e, - 0x6f, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x6c, 0x6c, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x62, 0x79, 0x49, 0x6e, - 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x63, 0x65, 0x2c, 0x62, 0x72, 0x6f, - 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x63, 0x68, 0x61, 0x72, - 0x67, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x6d, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x72, - 0x79, 0x20, 0x61, 0x6e, 0x64, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x69, 0x63, 0x61, - 0x6c, 0x6c, 0x79, 0x73, 0x65, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, - 0x6e, 0x67, 0x61, 0x72, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x76, 0x69, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x76, 0x65, 0x72, - 0x28, 0x29, 0x3b, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x65, 0x76, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x61, 0x6e, 0x20, 0x65, - 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x6f, 0x72, 0x74, 0x68, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x77, 0x69, 0x73, 0x65, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x20, 0x6f, 0x66, 0x68, 0x61, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x20, 0x6f, 0x66, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, - 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x64, - 0x75, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x61, 0x72, - 0x65, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x63, 0x6f, 0x72, - 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x77, 0x61, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x6e, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, - 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x74, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x20, 0x6f, 0x66, - 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x79, 0x73, - 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x69, 0x7a, 0x65, 0x64, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x78, 0x74, 0x77, 0x61, 0x73, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x76, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x73, 0x75, 0x6d, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x72, 0x65, 0x61, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x69, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x69, - 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, - 0x6e, 0x73, 0x65, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x66, - 0x6f, 0x72, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x64, 0x63, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, - 0x65, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x6d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x31, 0x2f, 0x5e, 0x5c, 0x73, 0x2b, - 0x7c, 0x5c, 0x73, 0x2b, 0x24, 0x2f, 0x67, 0x65, 0x29, 0x7b, 0x74, 0x68, 0x72, - 0x6f, 0x77, 0x20, 0x65, 0x7d, 0x3b, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, - 0x61, 0x6e, 0x64, 0x77, 0x68, 0x6f, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x64, 0x65, 0x61, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x09, - 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x70, - 0x65, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x67, 0x6c, 0x69, - 0x73, 0x68, 0x20, 0x28, 0x55, 0x4b, 0x29, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, - 0x68, 0x20, 0x28, 0x55, 0x53, 0x29, 0xd0, 0x9c, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xb3, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xa1, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, - 0xd0, 0xba, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, 0xd0, - 0xba, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xbf, 0xd1, 0x81, 0xd0, 0xba, - 0xd0, 0xbe, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, - 0xa9, 0xe6, 0xad, 0xa3, 0xe9, 0xab, 0x94, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, - 0xe7, 0xae, 0x80, 0xe4, 0xbd, 0x93, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0xe7, - 0xb9, 0x81, 0xe4, 0xbd, 0x93, 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0xe6, 0x9c, - 0x89, 0xe9, 0x99, 0x90, 0xe5, 0x85, 0xac, 0xe5, 0x8f, 0xb8, 0xe4, 0xba, 0xba, - 0xe6, 0xb0, 0x91, 0xe6, 0x94, 0xbf, 0xe5, 0xba, 0x9c, 0xe9, 0x98, 0xbf, 0xe9, - 0x87, 0x8c, 0xe5, 0xb7, 0xb4, 0xe5, 0xb7, 0xb4, 0xe7, 0xa4, 0xbe, 0xe4, 0xbc, - 0x9a, 0xe4, 0xb8, 0xbb, 0xe4, 0xb9, 0x89, 0xe6, 0x93, 0x8d, 0xe4, 0xbd, 0x9c, - 0xe7, 0xb3, 0xbb, 0xe7, 0xbb, 0x9f, 0xe6, 0x94, 0xbf, 0xe7, 0xad, 0x96, 0xe6, - 0xb3, 0x95, 0xe8, 0xa7, 0x84, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x68, 0x65, 0x72, 0x72, 0x61, 0x6d, 0x69, 0x65, 0x6e, - 0x74, 0x61, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0xc3, 0xb3, 0x6e, 0x69, - 0x63, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x63, 0x69, 0xc3, 0xb3, - 0x6e, 0x63, 0x6c, 0x61, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x64, 0x6f, 0x73, - 0x63, 0x6f, 0x6e, 0x6f, 0x63, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, - 0x6c, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x64, 0x61, 0x73, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0xc3, 0xa1, 0x74, 0x69, 0x63, 0x61, 0x72, 0x65, 0x6c, 0x61, - 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x64, 0x6f, 0x73, 0x64, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x6f, 0x74, 0x72, 0x61, 0x62, 0x61, 0x6a, - 0x61, 0x64, 0x6f, 0x72, 0x65, 0x73, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x61, - 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x61, 0x79, 0x75, 0x6e, 0x74, 0x61, 0x6d, 0x69, - 0x65, 0x6e, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x63, 0x61, 0x64, 0x6f, 0x4c, 0x69, - 0x62, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0xc3, 0xa1, 0x63, 0x74, 0x65, 0x6e, - 0x6f, 0x73, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, - 0x73, 0x63, 0x75, 0x6d, 0x70, 0x6c, 0x69, 0x6d, 0x69, 0x65, 0x6e, 0x74, 0x6f, - 0x72, 0x65, 0x73, 0x74, 0x61, 0x75, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x64, - 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, - 0x6e, 0x73, 0x65, 0x63, 0x75, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x72, 0xc3, 0xb3, 0x6e, 0x69, 0x63, 0x61, 0x61, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x63, 0x69, 0x6f, 0x6e, 0x65, 0x73, 0x64, 0x65, 0x73, 0x63, 0x6f, - 0x6e, 0x65, 0x63, 0x74, 0x61, 0x64, 0x6f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x63, - 0x69, 0xc3, 0xb3, 0x6e, 0x65, 0x6e, 0x63, 0x69, 0x63, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x69, 0x61, 0x65, 0x6e, 0x66, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x61, 0x64, - 0x65, 0x73, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x6f, - 0x73, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x65, 0x6e, 0x63, 0x69, 0x61, 0x73, - 0x69, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x65, 0x73, 0x73, 0x75, - 0x62, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x61, 0xd1, 0x82, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xa0, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, - 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x8b, 0xd0, 0xb1, 0xd0, 0xbe, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xb5, - 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, - 0xb8, 0xd1, 0x85, 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd0, 0xb0, - 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, - 0x81, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xa0, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, - 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xb4, - 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, - 0xbd, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, - 0xd0, 0xb6, 0xd0, 0xbd, 0xd1, 0x8b, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, - 0xd0, 0xb2, 0xd1, 0x8b, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, - 0xb5, 0xd0, 0xb9, 0xd0, 0x9c, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb2, - 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd1, - 0x8b, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, - 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, - 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb6, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x83, - 0xd1, 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, - 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd1, 0x8c, 0xd0, 0x9e, 0xd0, 0xb4, - 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x83, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, - 0xd0, 0xbe, 0xd1, 0x82, 0xd1, 0x83, 0xd0, 0xb0, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, - 0xb5, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, - 0xd1, 0x89, 0xd0, 0xb5, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xb3, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xb3, - 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, - 0xb8, 0xd0, 0xb4, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x83, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x85, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x88, 0xd0, 0xbe, 0xd0, 0xbf, - 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb2, 0xd1, 0x81, 0xd1, - 0x81, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xba, 0xd0, 0xb0, - 0xd0, 0xb6, 0xd0, 0xb4, 0xd1, 0x8b, 0xd0, 0xb9, 0xd0, 0xb2, 0xd0, 0xbb, 0xd0, - 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb3, 0xd1, 0x80, 0xd1, 0x83, - 0xd0, 0xbf, 0xd0, 0xbf, 0xd1, 0x8b, 0xd0, 0xb2, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, - 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb2, 0xd1, 0x8b, - 0xd0, 0xb9, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, - 0x8c, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd0, 0xb3, 0xd0, 0xb8, - 0xd0, 0xbf, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, - 0xb1, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x82, 0xd0, 0xba, 0xd1, 0x83, - 0xd0, 0xbf, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, - 0xbb, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, - 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x85, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xa0, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xb0, 0xd0, 0xa2, 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xba, 0xd0, 0xbe, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xb2, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd0, 0xb2, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, - 0xb9, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd0, 0xbb, 0xd0, 0xb0, - 0xd1, 0x81, 0xd0, 0xbf, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xba, 0xd1, - 0x81, 0xd0, 0xbb, 0xd1, 0x83, 0xd0, 0xb6, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x81, - 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xbf, 0xd0, - 0xb5, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xbe, 0xd1, 0x89, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xb9, - 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd1, 0x83, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, - 0xd1, 0x89, 0xd1, 0x8c, 0xd0, 0xb4, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xb6, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x81, 0xd1, 0x8b, 0xd0, 0xbb, 0xd0, 0xba, - 0xd0, 0xb8, 0xd0, 0xb1, 0xd1, 0x8b, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbd, 0xd1, 0x8b, 0xd0, 0xb5, - 0xd0, 0xbc, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, - 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x82, 0xd0, 0xa1, - 0xd0, 0xb5, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbc, 0xd0, - 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb0, - 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xbb, 0xd0, 0xb0, 0xd0, 0xb9, 0xd0, 0xbd, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, 0x80, - 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x80, 0xd1, - 0x81, 0xd0, 0xb8, 0xd1, 0x8f, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, - 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x84, 0xd0, 0xb8, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xbc, 0xd1, 0x8b, 0xd1, 0x83, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbd, - 0xd1, 0x8f, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, - 0x85, 0xd0, 0xb8, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, - 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd1, 0x8e, 0xd1, - 0x8f, 0xd0, 0xbd, 0xd0, 0xb2, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x8f, 0xd0, 0xbc, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd1, 0x8c, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x85, 0xd0, 0xb4, 0xd0, 0xb0, - 0xd0, 0xbd, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb9, 0xd0, 0xb7, 0xd0, 0xbd, 0xd0, - 0xb0, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd0, 0xb7, 0xd1, 0x8f, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, - 0x83, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xa2, 0xd0, 0xb5, 0xd0, 0xbf, 0xd0, 0xb5, - 0xd1, 0x80, 0xd1, 0x8c, 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x8f, 0xd1, - 0x86, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x89, 0xd0, 0xb8, 0xd1, 0x82, - 0xd1, 0x8b, 0xd0, 0x9b, 0xd1, 0x83, 0xd1, 0x87, 0xd1, 0x88, 0xd0, 0xb8, 0xd0, - 0xb5, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x9f, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xad, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x81, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9f, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0x85, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x85, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0x9d, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9f, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x95, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, - 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x97, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xa0, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb7, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, - 0x9a, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, - 0xa4, 0x9a, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9c, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x9f, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x85, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa5, 0x80, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xac, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x9c, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xac, - 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x8c, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb9, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa5, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xd8, 0xaa, 0xd8, 0xb3, 0xd8, - 0xaa, 0xd8, 0xb7, 0xd9, 0x8a, 0xd8, 0xb9, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xa8, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, - 0xb3, 0xd8, 0xb7, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x81, - 0xd8, 0xad, 0xd8, 0xa9, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb6, 0xd9, - 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd8, 0xa7, 0xd8, 0xb5, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb2, 0xd9, 0x8a, 0xd8, - 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa9, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xaf, 0xd8, 0xa8, - 0xd8, 0xb1, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x84, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd9, 0x88, 0xd9, 0x82, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, - 0xd8, 0xb1, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, - 0xb1, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd9, 0x88, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb0, 0xd9, 0x87, 0xd8, - 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, 0x8a, 0xd8, 0xa7, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, 0x82, 0xd9, 0x88, 0xd9, - 0x82, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xb1, 0xd9, 0x8a, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x82, 0xd9, - 0x85, 0xd8, 0xad, 0xd9, 0x81, 0xd9, 0x88, 0xd8, 0xb8, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, - 0xb4, 0xd8, 0xa7, 0xd9, 0x87, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x85, 0xd8, 0xb1, 0xd8, 0xa3, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x82, 0xd8, 0xb1, 0xd8, 0xa2, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, - 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xad, 0xd9, - 0x88, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xaf, - 0xd9, 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, 0xb3, 0xd8, - 0xb1, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x88, - 0xd9, 0x85, 0xd9, 0x85, 0xd8, 0xac, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xb9, 0xd8, - 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xad, 0xd9, 0x85, 0xd9, 0x86, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x86, 0xd9, 0x82, 0xd8, 0xa7, 0xd8, 0xb7, 0xd9, - 0x81, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, 0xb7, 0xd9, 0x8a, 0xd9, 0x86, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x88, 0xd9, 0x8a, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb1, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, 0xaa, 0xd8, 0xad, 0xd9, 0x8a, - 0xd8, 0xa7, 0xd8, 0xaa, 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xaa, 0xd9, 0x88, 0xd9, - 0x82, 0xd9, 0x8a, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x88, - 0xd9, 0x84, 0xd9, 0x89, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xb1, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xb7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb4, 0xd8, 0xae, 0xd8, 0xb5, 0xd9, 0x8a, - 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xab, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xad, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xab, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xb2, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xae, 0xd9, 0x84, 0xd9, 0x8a, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, - 0xd9, 0x85, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, - 0xa7, 0xd9, 0x85, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, - 0xb9, 0xd8, 0xa9, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd9, 0x87, 0xd8, 0xaf, - 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, - 0xb3, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd8, 0xae, 0xd9, 0x88, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaf, 0xd8, 0xb1, 0xd9, 0x88, 0xd8, 0xb3, 0xd8, 0xa7, 0xd8, 0xb3, - 0xd8, 0xaa, 0xd8, 0xba, 0xd8, 0xb1, 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, - 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, - 0xd9, 0x86, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, - 0xb8, 0xd9, 0x8a, 0xd9, 0x85, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x2e, 0x6a, 0x70, 0x67, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6d, 0x70, 0x6f, - 0x72, 0x61, 0x72, 0x79, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x43, - 0x68, 0x69, 0x6c, 0x64, 0x28, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x22, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, - 0x69, 0x63, 0x6f, 0x22, 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x61, 0x73, 0x65, 0x64, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d, 0x61, 0x73, 0x73, 0x61, 0x63, 0x68, 0x75, - 0x73, 0x65, 0x74, 0x74, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x20, 0x61, 0x73, 0x70, 0x72, 0x6f, 0x6e, 0x75, 0x6e, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x3a, 0x23, 0x66, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, - 0x6c, 0x65, 0x66, 0x74, 0x3a, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x6d, 0x69, 0x73, 0x63, 0x65, 0x6c, 0x6c, 0x61, - 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x26, 0x6c, 0x74, 0x3b, 0x2f, 0x6d, 0x61, 0x74, - 0x68, 0x26, 0x67, 0x74, 0x3b, 0x70, 0x73, 0x79, 0x63, 0x68, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x6f, 0x70, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x53, 0x75, 0x70, 0x72, 0x65, 0x6d, 0x65, 0x20, - 0x43, 0x6f, 0x75, 0x72, 0x74, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x41, 0x6d, - 0x65, 0x72, 0x69, 0x63, 0x61, 0x70, 0x78, 0x3b, 0x62, 0x61, 0x63, 0x6b, 0x67, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x6f, 0x4c, 0x6f, 0x77, 0x65, 0x72, - 0x43, 0x61, 0x73, 0x65, 0x28, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, - 0x75, 0x72, 0x69, 0x6e, 0x67, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x46, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x3d, 0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x63, 0x6f, 0x6e, 0x73, 0x63, 0x69, 0x6f, 0x75, - 0x73, 0x6e, 0x65, 0x73, 0x73, 0x4d, 0x65, 0x64, 0x69, 0x74, 0x65, 0x72, 0x72, - 0x61, 0x6e, 0x65, 0x61, 0x6e, 0x65, 0x78, 0x74, 0x72, 0x61, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x61, 0x73, 0x73, 0x61, 0x73, 0x73, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, - 0x6e, 0x73, 0x69, 0x76, 0x65, 0x72, 0x65, 0x66, 0x65, 0x72, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x75, 0x6c, 0x3e, 0x0a, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x68, 0x72, 0x65, 0x66, 0x77, 0x61, 0x73, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x53, 0x61, 0x6e, 0x20, 0x46, 0x72, 0x61, 0x6e, - 0x63, 0x69, 0x73, 0x63, 0x6f, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x7b, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, - 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x6f, 0x70, 0x68, 0x69, 0x73, 0x74, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0d, 0x0a, - 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x68, 0x69, 0x70, 0x73, 0x6d, 0x61, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x54, 0x68, 0x69, 0x73, 0x20, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x73, 0x70, 0x61, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x47, 0x72, 0x65, 0x61, 0x74, 0x20, 0x42, 0x72, - 0x69, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x3d, 0x22, 0x3b, 0x20, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, - 0x69, 0x7a, 0x65, 0x3a, 0x20, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x75, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x61, 0x72, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x09, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x22, - 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x72, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x70, 0x6f, 0x70, - 0x75, 0x6c, 0x61, 0x72, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3a, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x3d, 0x22, 0x3c, 0x69, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x6f, 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x70, 0x61, 0x72, 0x6c, 0x69, 0x61, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x72, 0x79, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x70, 0x72, 0x65, 0x64, 0x6f, 0x6d, 0x69, 0x6e, - 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x7c, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, - 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6f, 0x72, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x61, 0x6c, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x3d, 0x22, 0x6f, 0x67, 0x3a, 0x2f, 0x78, 0x2d, 0x73, 0x68, 0x6f, 0x63, 0x6b, - 0x77, 0x61, 0x76, 0x65, 0x2d, 0x64, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x4e, 0x65, 0x76, 0x65, 0x72, 0x74, 0x68, 0x65, - 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x62, 0x6c, 0x65, 0x20, 0x41, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x62, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x72, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x2c, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x20, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, - 0x62, 0x6f, 0x64, 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x61, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, - 0x69, 0x64, 0x75, 0x61, 0x6c, 0x64, 0x69, 0x66, 0x66, 0x69, 0x63, 0x75, 0x6c, - 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x76, 0x69, 0x65, 0x77, 0x68, 0x6f, 0x6d, 0x6f, 0x73, 0x65, 0x78, 0x75, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x72, 0x73, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x3a, 0x20, 0x23, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x6e, 0x74, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x72, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x6c, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x6f, 0x2d, 0x45, 0x75, 0x72, - 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x72, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, - 0x20, 0x43, 0x69, 0x74, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x69, 0x61, 0x6e, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x3d, 0x22, 0x30, 0x22, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x28, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x76, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, - 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x77, 0x68, 0x69, 0x63, 0x68, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x64, - 0x61, 0x73, 0x68, 0x3b, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x65, 0x71, 0x75, 0x69, 0x70, 0x70, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, 0x65, 0x73, 0x65, 0x20, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, - 0x73, 0x73, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x20, 0x74, 0x6f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6a, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x74, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x69, 0x64, 0x65, 0x20, 0x72, 0x61, 0x6e, - 0x67, 0x65, 0x20, 0x6f, 0x66, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, 0x64, - 0x61, 0x73, 0x68, 0x3b, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x66, 0x61, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, - 0x74, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, 0x6f, - 0x76, 0x65, 0x72, 0x3d, 0x22, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x3d, 0x20, - 0x74, 0x72, 0x75, 0x65, 0x3b, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x73, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x73, 0x65, 0x65, 0x6d, 0x73, 0x20, 0x74, 0x6f, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x61, 0x72, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x28, 0x29, 0x20, 0x7b, 0x74, 0x6f, 0x6f, 0x6b, 0x20, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x20, 0x69, 0x6e, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, - 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x74, - 0x74, 0x65, 0x6d, 0x70, 0x74, 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x64, 0x65, - 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, - 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2c, 0x70, 0x72, 0x6f, 0x66, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x73, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, - 0x79, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, - 0x69, 0x74, 0x20, 0x69, 0x73, 0x44, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x61, 0x79, 0x20, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x20, 0x74, 0x6f, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x74, 0x6c, 0x79, 0x2c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x62, 0x65, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x27, 0x73, 0x20, - 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x28, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, - 0x65, 0x66, 0x74, 0x22, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x62, 0x61, 0x73, 0x69, 0x73, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x69, - 0x74, 0x79, 0x20, 0x6f, 0x66, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, - 0x65, 0x20, 0x74, 0x68, 0x65, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x6d, 0x6f, 0x75, 0x73, 0x65, - 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x54, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, - 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x66, 0x69, 0x6c, 0x6d, 0x20, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, - 0x64, 0x74, 0x64, 0x22, 0x3e, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, - 0x20, 0x75, 0x73, 0x65, 0x64, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x61, 0x72, 0x65, 0x75, 0x6e, 0x70, 0x72, 0x65, 0x63, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x69, 0x73, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, - 0x61, 0x72, 0x20, 0x74, 0x6f, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, - 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x09, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x72, 0x65, 0x20, 0x74, 0x79, 0x70, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x6f, 0x66, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x61, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73, 0x61, 0x72, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, - 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x20, 0x74, 0x6f, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, - 0x20, 0x79, 0x65, 0x61, 0x72, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, - 0x79, 0x65, 0x61, 0x72, 0x73, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x09, 0x09, 0x3c, 0x75, 0x6c, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x39, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2c, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x65, 0x72, 0x73, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x69, 0x6e, 0x75, 0x65, 0x64, 0x6f, 0x63, 0x63, 0x75, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x74, 0x65, 0x62, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x61, 0x62, 0x6f, 0x75, 0x74, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, - 0x65, 0x66, 0x74, 0x3a, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x73, 0x53, 0x6f, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x64, 0x75, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x72, 0x65, 0x70, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x61, 0x73, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x49, 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x2d, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x73, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x2c, 0x77, 0x61, 0x73, 0x20, 0x61, 0x70, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x64, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x69, 0x73, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, - 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x6f, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x61, 0x6c, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x61, 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x61, - 0x6c, 0x77, 0x61, 0x79, 0x73, 0x61, 0x72, 0x65, 0x20, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, 0x70, - 0x68, 0x79, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x61, 0x6e, 0x63, 0x69, 0x76, 0x69, 0x6c, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x73, 0x6c, 0x61, 0x6e, 0x64, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x63, 0x61, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, - 0x22, 0x22, 0x20, 0x2f, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, - 0x6e, 0x69, 0x74, 0x65, 0x64, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x64, 0x69, 0x73, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x69, 0x73, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x65, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x69, 0x73, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, - 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, - 0x6f, 0x72, 0x69, 0x65, 0x73, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x69, 0x74, 0x73, 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6e, - 0x63, 0x69, 0x70, 0x61, 0x6c, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, - 0x65, 0x64, 0x20, 0x61, 0x73, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x61, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x65, 0x64, 0x68, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x74, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x67, 0x72, 0x61, - 0x64, 0x75, 0x61, 0x74, 0x65, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x74, 0x77, 0x6f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x64, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20, 0x61, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x66, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x6c, 0x6c, 0x79, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x6c, 0x79, 0x2c, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x6c, 0x69, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x20, 0x6f, 0x66, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x69, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x32, 0x30, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x68, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x74, 0x6f, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x73, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x68, 0x61, - 0x6c, 0x66, 0x20, 0x6f, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x20, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, - 0x74, 0x75, 0x72, 0x61, 0x6c, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, - 0x72, 0x69, 0x7a, 0x65, 0x64, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x77, 0x61, 0x73, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x65, 0x64, 0x65, 0x64, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x20, 0x61, 0x72, 0x65, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x74, 0x68, 0x65, 0x20, 0x50, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x64, 0x66, 0x72, 0x65, 0x65, 0x20, 0x73, 0x6f, 0x66, - 0x74, 0x77, 0x61, 0x72, 0x65, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x74, - 0x72, 0x6f, 0x79, 0x65, 0x64, 0x61, 0x77, 0x61, 0x79, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x74, 0x68, 0x65, 0x79, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x61, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x77, - 0x65, 0x72, 0x66, 0x75, 0x6c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x20, 0x61, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x74, 0x79, 0x20, 0x6f, 0x66, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x69, 0x73, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x67, - 0x68, 0x74, 0x20, 0x74, 0x6f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x6e, 0x64, 0x77, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x6e, 0x6f, - 0x75, 0x6e, 0x63, 0x65, 0x64, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x61, 0x6e, 0x74, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x73, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x74, 0x68, 0x65, 0x20, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x4f, 0x20, 0x4e, 0x4f, 0x54, 0x20, - 0x41, 0x4c, 0x54, 0x45, 0x52, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x2f, 0x3f, - 0x73, 0x6f, 0x72, 0x74, 0x3d, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x64, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x62, 0x61, 0x73, 0x69, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x68, 0x61, 0x73, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, - 0x75, 0x6d, 0x6d, 0x65, 0x72, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x6c, 0x79, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x63, 0x68, 0x20, 0x61, 0x73, 0x20, - 0x74, 0x68, 0x6f, 0x73, 0x65, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x73, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x74, 0x68, 0x20, 0x41, 0x66, - 0x72, 0x69, 0x63, 0x61, 0x6e, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x61, 0x6d, 0x65, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x6e, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x63, 0x61, 0x73, 0x65, 0x3b, 0x20, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, - 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, - 0x65, 0x20, 0x61, 0x6e, 0x64, 0x3b, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x3a, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x74, 0x68, 0x65, 0x62, 0x61, 0x68, 0x61, 0x73, 0x61, 0x20, 0x4d, - 0x65, 0x6c, 0x61, 0x79, 0x75, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x62, 0x6f, - 0x6b, 0x6d, 0xc3, 0xa5, 0x6c, 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x20, 0x6e, 0x79, - 0x6e, 0x6f, 0x72, 0x73, 0x6b, 0x73, 0x6c, 0x6f, 0x76, 0x65, 0x6e, 0xc5, 0xa1, - 0xc4, 0x8d, 0x69, 0x6e, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x63, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x63, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x61, 0x6d, 0x62, 0x69, - 0x67, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x27, 0x2c, 0x20, 0x27, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x69, 0x6d, 0x75, - 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x6c, 0x79, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, - 0x0a, 0x3c, 0x2f, 0x3e, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, - 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3d, 0x68, 0x74, 0x74, 0x70, - 0x25, 0x33, 0x41, 0x25, 0x32, 0x46, 0x25, 0x32, 0x46, 0x3c, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x2f, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x7d, - 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, - 0x2e, 0x73, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x28, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x28, 0x29, 0x3b, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, - 0x2d, 0x3e, 0x0d, 0x0a, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x55, 0x6e, 0x66, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x22, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, - 0x3b, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x2f, 0x66, 0x61, 0x76, 0x69, 0x63, - 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x3e, 0x3d, 0x27, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x27, 0x20, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x66, - 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x3c, 0x6c, - 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x2f, 0x61, - 0x6e, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, - 0x66, 0x70, 0x74, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x22, 0x20, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x29, 0x20, 0x7b, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x41, 0x63, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x6c, - 0x6f, 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x62, 0x6f, 0x64, 0x79, 0x2e, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x6c, 0x79, - 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x2d, 0x2d, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, - 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x4d, 0x69, - 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x3c, - 0x61, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x74, 0x68, 0x65, 0x20, 0x68, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x6d, - 0x6f, 0x75, 0x73, 0x65, 0x6f, 0x76, 0x65, 0x72, 0x3d, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, - 0x61, 0x73, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, - 0x77, 0x61, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, - 0x64, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x61, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, - 0x65, 0x72, 0x65, 0x64, 0x3c, 0x21, 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, - 0x2d, 0x2d, 0x3e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x61, 0x73, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, - 0x3a, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, - 0x7b, 0x42, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x2e, 0x64, 0x74, 0x64, - 0x22, 0x3e, 0x0a, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x69, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x2f, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, - 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x73, 0x29, 0x3b, - 0x20, 0x6a, 0x73, 0x2e, 0x69, 0x64, 0x20, 0x3d, 0x20, 0x69, 0x64, 0x22, 0x20, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x72, - 0x65, 0x67, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x43, 0x61, 0x74, 0x68, 0x6f, 0x6c, 0x69, - 0x63, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, - 0x6e, 0x74, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x31, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x61, 0x65, 0x6f, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x70, 0x72, 0x69, 0x6d, 0x65, 0x20, - 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x63, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x77, - 0x2e, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x28, - 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, - 0x3e, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x61, 0x49, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, - 0x61, 0x72, 0x2c, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x6c, 0x65, - 0x66, 0x74, 0x22, 0x20, 0x43, 0x7a, 0x65, 0x63, 0x68, 0x20, 0x52, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, - 0x69, 0x6e, 0x67, 0x64, 0x6f, 0x6d, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x6f, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x2e, 0x68, 0x74, 0x6d, 0x6c, - 0x22, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x29, 0x20, 0x7b, 0x63, 0x6f, 0x6d, - 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, - 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x27, 0x3c, 0x2f, 0x61, 0x3e, 0x0a, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, - 0x3c, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x28, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x09, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x65, 0x70, 0x61, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x76, - 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, - 0x20, 0x63, 0x61, 0x72, 0x62, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x6f, 0x78, 0x69, - 0x64, 0x65, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x2d, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x6f, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3c, 0x2f, 0x68, 0x65, 0x61, 0x64, - 0x3e, 0x0d, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x54, 0x69, 0xe1, 0xba, - 0xbf, 0x6e, 0x67, 0x20, 0x56, 0x69, 0xe1, 0xbb, 0x87, 0x74, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x30, - 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x77, 0x61, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x65, 0x64, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x22, 0x20, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3e, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x63, 0x63, 0x6c, 0x65, 0x73, 0x69, 0x61, - 0x73, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x69, 0x6e, 0x67, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x3c, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x3e, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x68, 0x61, 0x73, 0x20, - 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, - 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x69, 0x6e, - 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x6f, 0x61, - 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x69, 0x77, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, - 0x65, 0x64, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x22, 0x20, 0x2f, 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x65, - 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x74, 0x6f, 0x20, 0x62, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x75, 0x73, 0x65, 0x64, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x6e, - 0x6f, 0x74, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, - 0x6c, 0x73, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, - 0x6d, 0x61, 0x6e, 0x79, 0x61, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x20, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x61, - 0x72, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x69, 0x6d, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x62, 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x20, 0x48, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x61, 0x6e, 0x64, - 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x41, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x62, - 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x73, - 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x3d, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, - 0x73, 0x74, 0x22, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, - 0x6c, 0x79, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x61, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6c, - 0x73, 0x6f, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x61, 0x6e, 0x6e, 0x6f, 0x75, - 0x6e, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x6c, 0x69, 0x67, - 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3e, 0x6d, 0x61, 0x6e, - 0x79, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x66, 0x6f, - 0x72, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x65, - 0x61, 0x72, 0x6c, 0x69, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x69, 0x74, 0x20, 0x77, 0x61, - 0x73, 0x70, 0x74, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0d, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, - 0x70, 0x22, 0x20, 0x69, 0x6e, 0x68, 0x61, 0x62, 0x69, 0x74, 0x61, 0x6e, 0x74, - 0x73, 0x20, 0x6f, 0x66, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x79, 0x65, 0x61, 0x72, 0x0d, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, - 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, - 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, 0x72, 0x67, 0x75, - 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x67, 0x6f, 0x76, - 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x61, 0x20, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x62, 0x65, 0x73, 0x74, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, - 0x20, 0x66, 0x6f, 0x72, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, - 0x61, 0x6e, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x63, - 0x69, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x20, 0x3c, - 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x45, 0x6e, - 0x74, 0x65, 0x72, 0x74, 0x61, 0x69, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, - 0x77, 0x61, 0x79, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x3b, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x3a, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, - 0x6f, 0x66, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x61, 0x6c, 0x74, 0x68, 0x6f, 0x75, 0x67, 0x68, - 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x3c, 0x73, 0x70, 0x61, 0x6e, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x64, 0x65, 0x73, 0x63, 0x65, - 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, - 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x20, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x72, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3c, 0x2f, - 0x68, 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x20, 0x61, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x68, 0x61, 0x73, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x20, 0x55, 0x6e, 0x69, - 0x6f, 0x6e, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x63, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x69, - 0x63, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x63, 0x65, 0x20, 0x50, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, - 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x66, 0x6f, 0x6e, 0x74, 0x2d, - 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x31, 0x70, 0x78, 0x65, 0x78, 0x70, 0x6c, - 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74, 0x20, 0x6f, 0x66, 0x77, 0x72, - 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x09, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x69, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x72, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x6f, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x73, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x73, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x65, 0x61, 0x6e, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x75, 0x74, 0x73, 0x69, - 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x73, - 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x28, - 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, - 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x6e, 0x65, 0x6e, - 0x74, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x69, 0x6e, 0x6f, - 0x70, 0x6c, 0x65, 0x77, 0x65, 0x72, 0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x73, 0x65, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x77, 0x68, 0x69, 0x63, - 0x68, 0x20, 0x68, 0x61, 0x64, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x73, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, - 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x6f, - 0x66, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x68, - 0x61, 0x76, 0x65, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x74, 0x6f, 0x20, 0x62, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, - 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x77, 0x61, 0x73, 0x20, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x69, 0x65, 0x77, 0x20, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x69, 0x64, - 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x63, 0x61, - 0x70, 0x69, 0x74, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0d, - 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x78, 0x4d, 0x4c, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x6c, 0x61, - 0x72, 0x67, 0x65, 0x73, 0x74, 0x76, 0x65, 0x72, 0x79, 0x20, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x75, 0x72, 0x66, 0x61, 0x63, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x69, 0x67, 0x6e, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x73, 0x65, - 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x65, 0x73, - 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x69, - 0x73, 0x20, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x6d, 0x65, 0x61, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x69, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x66, - 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x70, 0x65, - 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x28, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0d, - 0x69, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x69, - 0x66, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, - 0x77, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, - 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x41, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x3c, 0x2f, 0x68, - 0x65, 0x61, 0x64, 0x3e, 0x0a, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, - 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x28, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x76, 0x69, 0x64, 0x75, - 0x61, 0x6c, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75, 0x72, - 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x74, 0x6f, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x3a, 0x23, 0x66, 0x66, 0x66, 0x7d, 0x0a, 0x2e, 0x0a, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x68, 0x65, - 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x3e, - 0x0d, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, - 0x65, 0x64, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x3d, 0x22, 0x63, 0x65, 0x6c, 0x65, 0x62, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x62, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x6f, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x3e, 0x3c, 0x21, - 0x5b, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x5d, 0x2d, 0x2d, 0x3e, 0x0a, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x69, - 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x6f, 0x66, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x20, 0x69, 0x6e, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, - 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x77, 0x61, 0x73, 0x20, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x68, 0x69, 0x73, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x6f, 0x6d, - 0x65, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x70, - 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x2f, 0x73, - 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x6c, 0x79, 0x20, - 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x0d, - 0x0a, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x65, 0x73, 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x66, 0x6f, 0x72, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x65, 0x73, 0x73, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x65, 0x72, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x69, 0x73, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x73, 0x74, 0x68, 0x61, 0x76, 0x65, - 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x61, 0x64, 0x65, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x73, - 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x6f, 0x66, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, - 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, - 0x6f, 0x66, 0x49, 0x49, 0x2c, 0x20, 0x48, 0x6f, 0x6c, 0x79, 0x20, 0x52, 0x6f, - 0x6d, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x69, - 0x72, 0x20, 0x6f, 0x77, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, - 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x74, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x64, - 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x20, 0x6f, - 0x66, 0x74, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x64, 0x74, 0x6f, 0x20, 0x65, - 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x67, 0x72, - 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x61, - 0x72, 0x65, 0x20, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x6e, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, - 0x6e, 0x20, 0x61, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, - 0x2f, 0x75, 0x6c, 0x3e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, - 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x62, - 0x75, 0x74, 0x74, 0x6f, 0x6e, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x77, 0x68, 0x69, 0x63, 0x68, - 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x3e, 0x0a, 0x3c, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x63, 0x61, - 0x72, 0x72, 0x69, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x62, 0x79, 0x48, - 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, - 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, - 0x66, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61, 0x70, 0x69, 0x74, 0x61, - 0x6c, 0x20, 0x6f, 0x66, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x68, 0x61, - 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x74, 0x68, 0x65, 0x20, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x74, 0x6f, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x74, 0x6f, 0x20, 0x73, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, - 0x20, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x62, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x68, - 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x79, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x20, 0x6f, 0x66, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x70, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x71, 0x22, 0x09, 0x09, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x72, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x6d, 0x61, - 0x74, 0x68, 0x65, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x69, 0x61, 0x6e, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x22, 0x63, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, - 0x6c, 0x61, 0x72, 0x2c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x29, 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x70, 0x68, 0x69, 0x6c, 0x6f, 0x73, 0x6f, - 0x70, 0x68, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x72, 0x70, 0x73, 0x6b, 0x6f, - 0x68, 0x72, 0x76, 0x61, 0x74, 0x73, 0x6b, 0x69, 0x74, 0x69, 0xe1, 0xba, 0xbf, - 0x6e, 0x67, 0x20, 0x56, 0x69, 0xe1, 0xbb, 0x87, 0x74, 0xd0, 0xa0, 0xd1, 0x83, - 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb9, 0xd1, 0x80, 0xd1, - 0x83, 0xd1, 0x81, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb9, 0x69, 0x6e, - 0x76, 0x65, 0x73, 0x74, 0x69, 0x67, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, - 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, 0x8b, 0xd0, - 0xb5, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd1, - 0x8b, 0xd0, 0xb9, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb2, - 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd0, 0x9d, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, - 0xbe, 0xd1, 0x80, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, - 0xd0, 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb2, 0xd1, 0x80, 0xd0, - 0xb5, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x8f, 0xd1, 0x81, 0xd0, - 0xb5, 0xd0, 0xb3, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xbd, 0xd1, 0x8f, 0xd1, 0x81, - 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, - 0xd0, 0xa3, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, - 0x8b, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, - 0xd1, 0x8b, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xb4, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xb0, - 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xbe, 0xd1, - 0x89, 0xd1, 0x8c, 0xd1, 0x8e, 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xbc, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x83, 0xd1, 0x87, 0xd0, - 0xb0, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb5, - 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0x93, 0xd0, - 0xbb, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x8f, 0xd0, 0xb8, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbc, 0xd0, 0xb0, - 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x88, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, - 0x8f, 0xd0, 0xa1, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb0, 0xd1, 0x82, - 0xd1, 0x8c, 0xd0, 0xbf, 0xd0, 0xbe, 0xd1, 0x8d, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x83, - 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, - 0xb0, 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, - 0xb5, 0xd1, 0x87, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb5, 0xd1, 0x88, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbe, 0xd1, - 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbe, 0xd1, 0x80, - 0xd0, 0xb3, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xba, 0xd0, - 0xbe, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xbc, 0xd0, 0xa0, - 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbb, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xb0, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x89, - 0xd9, 0x85, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xb6, 0xd9, 0x88, - 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa8, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, - 0x85, 0xd8, 0xac, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, - 0xd9, 0x82, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, 0xb3, 0xd8, - 0xa7, 0xd8, 0xa6, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, - 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, - 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xb6, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xaa, 0xd8, 0xb5, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd8, 0xb9, 0xd8, 0xb6, 0xd8, 0xa7, 0xd8, 0xa1, 0xd8, 0xa7, 0xd9, - 0x84, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xa6, 0xd8, 0xac, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb3, 0xd8, 0xac, 0xd9, 0x8a, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd9, 0x82, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, - 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb6, 0xd8, 0xba, 0xd8, 0xb7, 0xd8, 0xa7, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x8a, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd9, 0x88, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xad, - 0xd9, 0x8a, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xaf, 0xd9, - 0x8a, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb9, - 0xd9, 0x84, 0xd9, 0x8a, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x81, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xa3, 0xd9, 0x81, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xaa, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x8a, 0xd8, 0xae, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaa, 0xd9, 0x82, 0xd9, 0x86, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xae, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xb7, 0xd8, 0xb1, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xac, 0xd8, 0xaa, 0xd9, 0x85, 0xd8, - 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaf, 0xd9, 0x8a, 0xd9, 0x83, 0xd9, 0x88, - 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xad, 0xd8, 0xa9, 0xd8, 0xb9, 0xd8, 0xa8, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, - 0xd9, 0x84, 0xd9, 0x87, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, - 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd9, 0x88, - 0xd8, 0xa7, 0xd8, 0xa8, 0xd8, 0xb7, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa3, 0xd8, - 0xaf, 0xd8, 0xa8, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd8, 0xae, 0xd8, 0xa8, 0xd8, 0xa7, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xaa, 0xd8, 0xad, 0xd8, 0xaf, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd8, 0xba, 0xd8, 0xa7, 0xd9, 0x86, 0xd9, 0x8a, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x3a, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x3c, - 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, - 0x20, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x22, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x2f, 0x61, - 0x3e, 0x20, 0x7c, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x3c, 0x21, 0x64, 0x6f, 0x63, 0x74, 0x79, 0x70, 0x65, 0x20, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x22, 0x20, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, - 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, - 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, - 0x20, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, - 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x2d, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x3a, 0x72, 0x65, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x73, 0x73, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x22, - 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, - 0x22, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6f, 0x75, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x3c, 0x64, 0x69, 0x76, - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x22, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6f, 0x6e, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x76, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x74, 0x6f, 0x70, 0x22, 0x3e, - 0x3c, 0x77, 0x61, 0x73, 0x20, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x22, 0x3e, 0x29, 0x2e, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x62, 0x65, 0x63, 0x61, - 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x3c, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, - 0x22, 0x2f, 0x7d, 0x62, 0x6f, 0x64, 0x79, 0x7b, 0x6d, 0x61, 0x72, 0x67, 0x69, - 0x6e, 0x3a, 0x30, 0x3b, 0x45, 0x6e, 0x63, 0x79, 0x63, 0x6c, 0x6f, 0x70, 0x65, - 0x64, 0x69, 0x61, 0x20, 0x6f, 0x66, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x28, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x0a, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x3e, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x70, 0x6f, 0x72, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, - 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x49, 0x6e, 0x20, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x2f, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x61, 0x73, 0x20, 0x77, 0x65, 0x6c, 0x6c, 0x20, - 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x72, 0x65, 0x63, - 0x65, 0x6e, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x0d, 0x0a, 0x09, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x2e, 0x6a, 0x73, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x20, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, - 0x65, 0x65, 0x6e, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x20, 0x6c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x43, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x62, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, - 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3d, 0x22, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x22, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, - 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x4f, 0x72, 0x74, - 0x68, 0x6f, 0x64, 0x6f, 0x78, 0x20, 0x43, 0x68, 0x75, 0x72, 0x63, 0x68, 0x73, - 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, - 0x3d, 0x22, 0x73, 0x77, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20, 0x68, 0x69, - 0x73, 0x20, 0x64, 0x65, 0x61, 0x74, 0x68, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x6c, - 0x61, 0x6e, 0x64, 0x73, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x3a, 0x75, 0x72, 0x6c, 0x28, 0x61, 0x72, 0x67, 0x75, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x63, 0x72, - 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, 0x20, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, - 0x65, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x74, 0x68, 0x65, 0x20, 0x74, 0x72, - 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x66, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x76, 0x65, 0x72, 0x79, 0x20, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, - 0x72, 0x20, 0x74, 0x6f, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x61, 0x6c, 0x69, 0x67, 0x6e, - 0x3d, 0x22, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x77, 0x6f, 0x75, - 0x6c, 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x3d, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x69, 0x73, 0x20, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x49, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x6d, 0x6f, 0x73, - 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x69, - 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, - 0x64, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x61, - 0x6e, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x77, 0x61, 0x73, 0x20, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x62, 0x79, 0x61, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, - 0x69, 0x6e, 0x73, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, - 0x6f, 0x72, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x64, 0x20, 0x61, 0x73, - 0x20, 0x74, 0x68, 0x65, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x61, - 0x73, 0x20, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x61, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, - 0x65, 0x72, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, - 0x64, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x55, 0x6e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x64, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3e, 0x0a, 0x09, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, - 0x6f, 0x70, 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x73, 0x20, 0x74, - 0x6f, 0x20, 0x68, 0x61, 0x76, 0x65, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x72, 0x6f, - 0x6d, 0x61, 0x67, 0x6e, 0x65, 0x74, 0x69, 0x63, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x49, - 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, - 0x74, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, - 0x7b, 0x76, 0x61, 0x72, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x61, 0x73, 0x20, 0x61, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x46, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x6e, - 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, - 0x22, 0x20, 0x77, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x20, 0x62, 0x79, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6d, 0x64, 0x61, 0x73, - 0x68, 0x3b, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x75, 0x6c, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, - 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x61, 0x74, - 0x68, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x20, 0x74, 0x6f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x3a, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x75, 0x6c, 0x61, 0x72, 0x6c, 0x79, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x3b, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x69, 0x73, - 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87, 0x20, 0x28, 0xe7, 0xae, 0x80, 0xe4, 0xbd, - 0x93, 0x29, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x64, 0x61, 0x64, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x63, 0x69, 0xc3, 0xb3, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x63, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x65, 0xe0, 0xa4, 0x89, - 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb5, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x8f, 0xe0, 0xa4, 0xad, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, - 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, - 0xa4, 0xac, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, - 0xa5, 0x89, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb9, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa5, 0x83, 0xe0, 0xa4, 0xb7, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0xa2, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, - 0x8c, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xae, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9b, - 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x89, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xa2, 0xe0, 0xa4, - 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xab, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, - 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9b, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x9b, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x8f, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0x98, - 0xe0, 0xa4, 0xa3, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb5, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb7, 0xe0, - 0xa4, 0xb9, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, - 0x80, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, - 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x83, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0x98, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xb5, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x96, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, - 0xa5, 0x88, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xa4, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, - 0xa5, 0x87, 0x72, 0x73, 0x73, 0x2b, 0x78, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x3d, 0x22, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x61, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3e, 0x0a, 0x3c, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, - 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, - 0x3e, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x76, 0x65, 0x72, - 0x74, 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x74, - 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, - 0x73, 0x22, 0x3e, 0x2e, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, - 0x22, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x2d, 0x7d, 0x29, 0x28, 0x29, - 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, - 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x29, 0x3b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, - 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x73, - 0x63, 0x72, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x6e, 0x6f, 0x22, - 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x2d, 0x63, 0x6f, 0x6c, 0x6c, 0x61, - 0x70, 0x73, 0x65, 0x3a, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x42, 0x61, 0x68, 0x61, 0x73, 0x61, - 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x45, 0x6e, 0x67, - 0x6c, 0x69, 0x73, 0x68, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x3c, 0x74, 0x65, 0x78, 0x74, 0x20, 0x78, 0x6d, 0x6c, 0x3a, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x3d, 0x2e, 0x67, 0x69, 0x66, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, - 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x6f, 0x76, 0x65, 0x72, - 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3b, 0x69, - 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x2e, 0x6a, 0x73, 0x22, - 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x2f, 0x66, - 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x2e, 0x69, 0x63, 0x6f, 0x22, 0x20, 0x2f, - 0x3e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x6c, 0x65, - 0x66, 0x74, 0x3b, 0x0a, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x29, - 0x3b, 0x0d, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, - 0x0a, 0x3c, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x3a, 0x3b, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, - 0x77, 0x3a, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x6d, 0x6f, 0x72, 0x65, 0x20, - 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6e, - 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x61, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, - 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, - 0x3b, 0x22, 0x3e, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x0a, 0x20, 0x20, 0x28, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x74, 0x68, 0x65, 0x20, - 0x31, 0x35, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x2e, - 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x28, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x79, 0x7a, 0x61, 0x6e, 0x74, 0x69, 0x6e, - 0x65, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x6a, 0x70, 0x67, 0x7c, - 0x74, 0x68, 0x75, 0x6d, 0x62, 0x7c, 0x6c, 0x65, 0x66, 0x74, 0x7c, 0x76, 0x61, - 0x73, 0x74, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, - 0x66, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x22, 0x63, - 0x65, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x3e, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x74, 0x79, 0x20, 0x50, 0x72, 0x65, 0x73, 0x73, 0x64, 0x6f, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, - 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, - 0x57, 0x61, 0x72, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x74, 0x68, 0x65, 0x20, - 0x72, 0x65, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, - 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x22, 0x3e, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x73, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x72, 0x61, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x20, - 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, - 0x66, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, - 0x3a, 0x31, 0x30, 0x30, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x2d, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x20, 0x73, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x62, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, - 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, - 0x20, 0x6f, 0x66, 0x44, 0x65, 0x6d, 0x6f, 0x63, 0x72, 0x61, 0x74, 0x69, 0x63, - 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x46, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2c, 0x2e, - 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0a, 0x09, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, - 0x73, 0x29, 0x5b, 0x30, 0x5d, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x2e, 0x6a, 0x73, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x6c, 0x69, - 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x69, 0x63, 0x6f, 0x6e, 0x22, - 0x20, 0x27, 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x27, 0x27, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x27, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x61, - 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x2f, 0x70, 0x61, 0x67, 0x65, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x67, - 0x65, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x62, 0x61, 0x68, 0x61, - 0x73, 0x61, 0x20, 0x49, 0x6e, 0x64, 0x6f, 0x6e, 0x65, 0x73, 0x69, 0x61, 0x65, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x73, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x29, 0xce, 0x95, 0xce, 0xbb, 0xce, 0xbb, 0xce, 0xb7, 0xce, 0xbd, 0xce, - 0xb9, 0xce, 0xba, 0xce, 0xac, 0xd1, 0x85, 0xd1, 0x80, 0xd0, 0xb2, 0xd0, 0xb0, - 0xd1, 0x82, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xbf, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb8, 0xd1, 0x8f, - 0xd0, 0xb2, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x81, 0xd1, - 0x8f, 0xd0, 0x94, 0xd0, 0xbe, 0xd0, 0xb1, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xb8, - 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x87, 0xd0, 0xb5, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, - 0xb2, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, - 0xd0, 0xb2, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0x98, 0xd0, - 0xbd, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x82, - 0xd0, 0x9e, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, - 0x82, 0xd1, 0x8c, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb8, - 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x82, 0xd0, - 0xb5, 0xd1, 0x80, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd0, 0xbe, 0xd1, - 0x81, 0xd1, 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x86, - 0xd1, 0x8b, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, - 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x83, 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xbe, - 0xd0, 0xb2, 0xd0, 0xb8, 0xd1, 0x8f, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, - 0xbe, 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbc, 0xd1, 0x8b, 0xd0, 0xbf, - 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x83, 0xd1, 0x87, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, - 0x8c, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, 0xbb, 0xd1, 0x8f, 0xd1, 0x8e, 0xd1, 0x82, - 0xd1, 0x81, 0xd1, 0x8f, 0xd0, 0xbd, 0xd0, 0xb0, 0xd0, 0xb8, 0xd0, 0xb1, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb5, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbc, - 0xd0, 0xbf, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xb2, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd0, 0xbc, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, - 0xd1, 0x81, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb4, 0xd1, 0x81, 0xd1, 0x82, 0xd0, - 0xb2, 0xd0, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x88, 0xd8, 0xa7, - 0xd8, 0xb6, 0xd9, 0x8a, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, 0xd8, - 0xa6, 0xd9, 0x8a, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, - 0xd8, 0xa7, 0xd9, 0x86, 0xd8, 0xaa, 0xd9, 0x82, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd9, 0x83, - 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xa8, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, - 0xb3, 0xd8, 0xb9, 0xd9, 0x88, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd8, 0xad, 0xd8, 0xb5, 0xd8, 0xa7, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, - 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, - 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb5, 0xd9, 0x88, 0xd8, - 0xaa, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, - 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xb1, 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd9, 0x85, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, - 0x85, 0xd9, 0x8a, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, - 0xd8, 0xb1, 0xd9, 0x83, 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, - 0xb1, 0xd8, 0xa6, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, - 0x65, 0x72, 0x22, 0x3e, 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, - 0x64, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x2e, - 0x6a, 0x70, 0x67, 0x7c, 0x72, 0x69, 0x67, 0x68, 0x74, 0x7c, 0x74, 0x68, 0x75, - 0x6d, 0x62, 0x7c, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, - 0x20, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x62, 0x6f, 0x6c, 0x64, - 0x3b, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x26, - 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x72, 0x67, - 0x69, 0x6e, 0x3a, 0x30, 0x3b, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3a, - 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, - 0x6f, 0x77, 0x22, 0x20, 0x50, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x77, 0x65, 0x6e, 0x74, - 0x69, 0x65, 0x74, 0x68, 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x70, - 0x61, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x45, - 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x61, 0x2e, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x0d, 0x0a, 0x69, 0x6e, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, - 0x75, 0x74, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x22, 0x3e, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, 0x65, 0x72, 0x69, - 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x27, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, - 0x64, 0x79, 0x3e, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x73, 0x69, - 0x7a, 0x65, 0x3a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x6c, 0x61, 0x6e, - 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x2c, - 0x20, 0x48, 0x65, 0x6c, 0x76, 0x65, 0x74, 0x69, 0x63, 0x61, 0x2c, 0x3c, 0x2f, - 0x61, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x3d, 0x22, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x3c, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x20, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x74, 0x64, 0x3e, - 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, - 0x3c, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, - 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, - 0x65, 0x28, 0x27, 0x3c, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x0a, 0x62, 0x65, 0x67, 0x69, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, - 0x74, 0x68, 0x65, 0x74, 0x65, 0x6c, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, 0x3e, 0x20, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, - 0x22, 0x3e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x68, 0x74, 0x74, 0x70, 0x25, 0x33, 0x41, - 0x25, 0x32, 0x46, 0x25, 0x32, 0x46, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x50, 0x72, 0x69, 0x6d, 0x65, 0x20, 0x4d, 0x69, 0x6e, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, 0x69, 0x78, 0x22, 0x3e, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x0d, 0x0a, 0x0d, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2d, 0x64, 0x69, 0x6d, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x43, 0x68, 0x75, 0x72, 0x63, - 0x68, 0x20, 0x6f, 0x66, 0x20, 0x45, 0x6e, 0x67, 0x6c, 0x61, 0x6e, 0x64, 0x6f, - 0x66, 0x20, 0x4e, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x43, 0x61, 0x72, 0x6f, 0x6c, - 0x69, 0x6e, 0x61, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x6b, 0x69, 0x6c, - 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x65, 0x73, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x64, 0x69, - 0x73, 0x74, 0x69, 0x6e, 0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x61, 0x73, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x69, - 0x63, 0x20, 0x41, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x64, 0x65, 0x63, - 0x6c, 0x61, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x62, - 0x79, 0x20, 0x74, 0x68, 0x65, 0x42, 0x65, 0x6e, 0x6a, 0x61, 0x6d, 0x69, 0x6e, - 0x20, 0x46, 0x72, 0x61, 0x6e, 0x6b, 0x6c, 0x69, 0x6e, 0x72, 0x6f, 0x6c, 0x65, - 0x2d, 0x70, 0x6c, 0x61, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x61, 0x6d, 0x65, - 0x74, 0x68, 0x65, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, - 0x79, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x57, 0x65, 0x73, 0x74, 0x65, 0x72, - 0x6e, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x70, 0x65, 0x72, 0x73, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x47, 0x75, 0x74, 0x65, 0x6e, 0x62, - 0x65, 0x72, 0x67, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, - 0x65, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x74, 0x6f, - 0x67, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x6d, 0x65, - 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x6d, 0x69, 0x6e, - 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, - 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x63, 0x6c, 0x61, 0x73, 0x73, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x63, - 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, - 0x72, 0x65, 0x64, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x20, 0x6d, 0x65, - 0x63, 0x68, 0x61, 0x6e, 0x69, 0x63, 0x73, 0x4e, 0x65, 0x76, 0x65, 0x72, 0x74, - 0x68, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x69, - 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, - 0x67, 0x6f, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0xce, 0x95, 0xce, 0xbb, 0xce, 0xbb, 0xce, - 0xb7, 0xce, 0xbd, 0xce, 0xb9, 0xce, 0xba, 0xce, 0xac, 0x0a, 0x74, 0x61, 0x6b, - 0x65, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, - 0x66, 0x61, 0x6e, 0x64, 0x2c, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x4d, 0x69, 0x63, 0x72, - 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, - 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x63, 0x65, 0x6e, - 0x74, 0x75, 0x72, 0x79, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x64, 0x69, 0x76, 0x20, 0x63, - 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x6e, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, - 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x73, 0x65, - 0x76, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x74, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x67, 0x20, 0x6d, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x72, 0x79, 0x69, 0x73, 0x6f, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x6f, 0x70, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, - 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x6c, 0x64, 0x20, - 0x54, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x66, 0x72, 0x69, - 0x63, 0x61, 0x6e, 0x20, 0x41, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6e, 0x73, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, - 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x6f, - 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x61, 0x6d, - 0x61, 0x6b, 0x65, 0x73, 0x20, 0x69, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x61, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x72, 0x67, 0x75, 0x61, 0x62, - 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, - 0x3e, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, - 0x0a, 0x63, 0x6f, 0x69, 0x6e, 0x63, 0x69, 0x64, 0x65, 0x20, 0x77, 0x69, 0x74, - 0x68, 0x20, 0x74, 0x68, 0x65, 0x74, 0x77, 0x6f, 0x2d, 0x74, 0x68, 0x69, 0x72, - 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x44, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, - 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x61, 0x6e, 0x6e, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x64, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x61, - 0x6e, 0x64, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x6e, - 0x74, 0x6c, 0x79, 0x62, 0x65, 0x6c, 0x69, 0x65, 0x76, 0x65, 0x64, 0x20, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x73, 0x63, 0x69, - 0x6f, 0x75, 0x73, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x6c, 0x79, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, - 0x61, 0x73, 0x73, 0x75, 0x72, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6f, 0x63, 0x63, - 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x61, 0x62, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, - 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x6a, 0x61, 0x78, 0x2f, 0x6c, - 0x69, 0x62, 0x73, 0x2f, 0x6a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x31, 0x2e, - 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, - 0x6c, 0x6f, 0x72, 0x3a, 0x23, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x3d, 0x22, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, - 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, - 0x79, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3c, 0x2f, 0x61, 0x3e, 0x65, - 0x28, 0x22, 0x25, 0x33, 0x43, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x27, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, - 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x4f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x61, 0x6e, 0x64, - 0x2c, 0x2e, 0x6a, 0x70, 0x67, 0x7c, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x7c, 0x72, - 0x69, 0x67, 0x68, 0x74, 0x7c, 0x32, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x3a, 0x6e, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x65, 0x6e, 0x74, 0x68, - 0x20, 0x63, 0x65, 0x6e, 0x74, 0x75, 0x72, 0x79, 0x3c, 0x2f, 0x62, 0x6f, 0x64, - 0x79, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, - 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x73, 0x3b, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, - 0x69, 0x67, 0x6e, 0x3a, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, 0x20, 0x62, 0x6f, 0x6c, - 0x64, 0x3b, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x22, - 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, - 0x22, 0x30, 0x22, 0x20, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x6c, 0x69, 0x6e, 0x6b, - 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x34, 0x2f, 0x6c, 0x6f, 0x6f, 0x73, 0x65, 0x2e, - 0x64, 0x74, 0x64, 0x22, 0x3e, 0x0a, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, - 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x3c, 0x2f, - 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x3e, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, - 0x3b, 0x66, 0x6f, 0x6e, 0x74, 0x2d, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3a, - 0x62, 0x6f, 0x6c, 0x64, 0x3b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x3c, 0x73, 0x70, - 0x61, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, - 0x74, 0x2d, 0x6f, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x09, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x64, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x20, 0x77, 0x69, - 0x64, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x65, 0x74, 0x79, 0x20, 0x6f, 0x66, - 0x20, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, - 0x6d, 0x6c, 0x3e, 0x0d, 0x0a, 0x3c, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, - 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x22, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6e, 0x63, 0x65, - 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x3d, 0x68, 0x74, 0x74, 0x70, 0x25, 0x33, 0x41, 0x25, 0x32, 0x46, 0x25, 0x32, - 0x46, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x20, 0x70, 0x6f, 0x70, 0x75, 0x6c, - 0x61, 0x72, 0x20, 0x63, 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x2f, 0x3e, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x48, 0x61, 0x72, 0x76, 0x61, 0x72, - 0x64, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4f, 0x78, 0x66, 0x6f, - 0x72, 0x64, 0x20, 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, - 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6b, 0x65, 0x79, 0x77, 0x6f, - 0x72, 0x64, 0x73, 0x22, 0x20, 0x63, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x74, 0x68, - 0x65, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64, 0x20, 0x4b, 0x69, 0x6e, 0x67, - 0x64, 0x6f, 0x6d, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x6c, 0x20, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, - 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, - 0x61, 0x6e, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x74, 0x65, 0x6c, 0x65, - 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68, - 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, - 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x45, 0x75, 0x72, 0x6f, 0x70, 0x65, 0x61, 0x6e, 0x20, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x48, 0x6f, 0x77, 0x65, 0x76, - 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x63, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x22, 0x20, 0x73, - 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2e, 0x61, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x54, 0x65, 0x6c, 0x65, 0x63, 0x6f, - 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x6e, 0x6f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, - 0x77, 0x22, 0x20, 0x74, 0x48, 0x6f, 0x6c, 0x79, 0x20, 0x52, 0x6f, 0x6d, 0x61, - 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x65, 0x72, 0x6f, 0x72, 0x61, 0x6c, 0x6d, 0x6f, - 0x73, 0x74, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x6c, - 0x79, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x3d, 0x22, 0x30, 0x22, - 0x20, 0x61, 0x6c, 0x74, 0x3d, 0x22, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x61, - 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x63, 0x75, - 0x6c, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x43, 0x49, 0x41, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x20, - 0x46, 0x61, 0x63, 0x74, 0x62, 0x6f, 0x6f, 0x6b, 0x74, 0x68, 0x65, 0x20, 0x6d, - 0x6f, 0x73, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, - 0x61, 0x6e, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x61, 0x72, 0x79, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x3c, 0x6c, 0x69, - 0x3e, 0x3c, 0x65, 0x6d, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x2f, 0x74, 0x68, 0x65, 0x20, 0x41, 0x74, 0x6c, 0x61, 0x6e, 0x74, 0x69, - 0x63, 0x20, 0x4f, 0x63, 0x65, 0x61, 0x6e, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, - 0x6c, 0x79, 0x20, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2c, 0x73, - 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x20, 0x74, 0x68, 0x65, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x68, 0x65, 0x20, - 0x4f, 0x74, 0x74, 0x6f, 0x6d, 0x61, 0x6e, 0x20, 0x45, 0x6d, 0x70, 0x69, 0x72, - 0x65, 0x3e, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x41, 0x6e, 0x20, 0x49, 0x6e, 0x74, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x63, 0x6f, - 0x6e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x75, 0x72, 0x65, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x65, - 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, - 0x69, 0x6e, 0x64, 0x69, 0x67, 0x65, 0x6e, 0x6f, 0x75, 0x73, 0x20, 0x70, 0x65, - 0x6f, 0x70, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6e, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x20, 0x68, 0x61, - 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x64, - 0x69, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x72, 0x65, 0x65, 0x61, 0x64, 0x6a, 0x61, 0x63, 0x65, 0x6e, 0x74, 0x20, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x69, 0x73, 0x20, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, - 0x72, 0x64, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x77, 0x69, - 0x64, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x65, 0x64, - 0x20, 0x61, 0x73, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6d, - 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x65, 0x73, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, - 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x63, 0x61, 0x6e, 0x20, 0x52, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, - 0x79, 0x20, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x74, 0x68, 0x65, - 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x20, - 0x6f, 0x66, 0x61, 0x72, 0x65, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x72, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x6c, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x69, 0x73, 0x20, 0x61, - 0x6c, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x6c, - 0x79, 0x70, 0x61, 0x73, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, - 0x6e, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x69, - 0x64, 0x65, 0x6f, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x69, 0x63, 0x20, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x20, 0x61, 0x63, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, - 0x6d, 0x20, 0x74, 0x68, 0x65, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x6c, 0x79, 0x20, - 0x61, 0x66, 0x74, 0x65, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2e, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x20, - 0x6f, 0x66, 0x20, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x7c, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x49, 0x6e, 0x20, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x2c, 0x20, 0x74, 0x68, - 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x6f, - 0x74, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x73, 0x75, 0x62, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x74, 0x68, - 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x65, - 0x61, 0x72, 0x73, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x3c, 0x2f, 0x64, 0x69, 0x76, - 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x0d, 0x0a, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x2e, 0x70, 0x68, 0x70, 0x77, 0x61, 0x73, 0x20, 0x65, 0x73, 0x74, 0x61, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x6d, 0x69, 0x6e, - 0x2e, 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x3e, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x65, - 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x61, 0x20, 0x73, 0x74, 0x72, 0x6f, - 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, - 0x74, 0x6f, 0x70, 0x3a, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x67, 0x72, 0x61, 0x64, - 0x75, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, - 0x65, 0x54, 0x72, 0x61, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, - 0x79, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x28, 0x22, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x29, 0x3b, 0x48, 0x6f, - 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, - 0x74, 0x68, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x3b, - 0x20, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x2d, 0x6c, 0x65, 0x66, 0x74, 0x3a, - 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x67, - 0x61, 0x69, 0x6e, 0x73, 0x74, 0x30, 0x3b, 0x20, 0x76, 0x65, 0x72, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x55, 0x6e, 0x66, - 0x6f, 0x72, 0x74, 0x75, 0x6e, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, - 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x66, - 0x69, 0x78, 0x22, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x09, 0x09, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x09, 0x09, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0xd0, 0x91, 0xd1, 0x8a, 0xd0, 0xbb, 0xd0, - 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xb1, - 0xd1, 0x8a, 0xd0, 0xbb, 0xd0, 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, - 0xba, 0xd0, 0xb8, 0xd0, 0xa4, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x80, - 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, - 0x81, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x89, 0xd0, 0xb5, 0xd0, - 0xbd, 0xd0, 0xb8, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd0, 0xb1, - 0xd1, 0x89, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, 0xbc, - 0xd1, 0x8b, 0xd0, 0x9e, 0xd1, 0x82, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, - 0xb2, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xb1, 0xd0, 0xb5, 0xd1, 0x81, - 0xd0, 0xbf, 0xd0, 0xbb, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbd, 0xd0, 0xbe, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb0, - 0xd0, 0xbb, 0xd1, 0x8b, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xb7, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd1, 0x8f, 0xd0, 0xb5, 0xd1, 0x82, 0xd0, 0xbf, 0xd0, 0xbe, - 0xd1, 0x81, 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xb4, 0xd0, 0xbd, 0xd0, 0xb8, 0xd0, - 0xb5, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb7, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x87, - 0xd0, 0xbd, 0xd1, 0x8b, 0xd1, 0x85, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd0, - 0xb4, 0xd1, 0x83, 0xd0, 0xba, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbf, - 0xd1, 0x80, 0xd0, 0xbe, 0xd0, 0xb3, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbc, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd0, 0xbf, 0xd0, 0xbe, 0xd0, 0xbb, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd1, 0x8e, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, - 0x85, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd1, 0x82, 0xd1, 0x81, 0xd1, 0x8f, - 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, - 0xbd, 0xd0, 0xbe, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xb5, - 0xd0, 0xbb, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xb8, 0xd0, - 0xb7, 0xd0, 0xbc, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd1, 0x8f, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, - 0xbe, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0x90, 0xd0, 0xbb, 0xd0, 0xb5, - 0xd0, 0xba, 0xd1, 0x81, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb4, 0xd1, 0x80, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xaa, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, - 0xbf, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x9a, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x9a, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xa6, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0x91, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8b, - 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, - 0xbc, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x88, 0xe0, 0xa4, 0xb6, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, - 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xaf, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0x89, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x9a, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xa1, 0xe0, - 0xa4, 0xbc, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, - 0xa8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa6, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xa3, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb9, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, - 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x9a, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x89, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xa7, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, - 0x89, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x80, - 0xe0, 0xa4, 0xa6, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa7, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xac, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa6, 0xe0, - 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, - 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x86, - 0xe0, 0xa4, 0x88, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x8f, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0x87, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x96, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x86, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, - 0xb6, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x85, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x81, - 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xac, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbc, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa4, 0xae, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x96, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb6, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, - 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xa5, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x86, 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, - 0x8b, 0xe0, 0xa4, 0x9c, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, - 0xd9, 0x86, 0xd8, 0xaa, 0xd8, 0xaf, 0xd9, 0x8a, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x83, 0xd9, 0x85, 0xd8, 0xa8, 0xd9, 0x8a, 0xd9, 0x88, - 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb4, 0xd8, - 0xa7, 0xd9, 0x87, 0xd8, 0xaf, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xb9, 0xd8, 0xaf, - 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb2, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, - 0xb1, 0xd8, 0xb9, 0xd8, 0xaf, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xb1, - 0xd8, 0xaf, 0xd9, 0x88, 0xd8, 0xaf, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa5, 0xd8, - 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, 0xd8, 0xa9, 0xd8, 0xa7, - 0xd9, 0x84, 0xd9, 0x81, 0xd9, 0x88, 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xb4, 0xd9, - 0x88, 0xd8, 0xa8, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd8, 0xa7, - 0xd8, 0xa8, 0xd9, 0x82, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd9, - 0x85, 0xd8, 0xb9, 0xd9, 0x84, 0xd9, 0x88, 0xd9, 0x85, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xb3, 0xd9, - 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xac, 0xd8, 0xb1, - 0xd8, 0xa7, 0xd9, 0x81, 0xd9, 0x8a, 0xd9, 0x83, 0xd8, 0xb3, 0xd8, 0xa7, 0xd9, - 0x84, 0xd8, 0xa7, 0xd8, 0xb3, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x85, 0xd9, 0x8a, - 0xd8, 0xa9, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0xd8, 0xb5, 0xd8, - 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, 0xaa, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, - 0x64, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, - 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x3d, 0x22, 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, 0x20, 0x63, 0x65, 0x6e, 0x74, - 0x65, 0x72, 0x3b, 0x74, 0x6f, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x62, 0x61, 0x63, 0x6b, - 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, - 0x20, 0x23, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x2f, 0x64, 0x69, 0x76, 0x3e, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69, 0x64, - 0x3d, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x23, 0x22, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x2f, - 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x77, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x52, - 0x49, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x28, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, - 0x73, 0x3d, 0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x27, - 0x3c, 0x73, 0x63, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, - 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x3b, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x6d, 0x61, 0x72, - 0x67, 0x69, 0x6e, 0x2d, 0x74, 0x6f, 0x70, 0x3a, 0x2e, 0x6d, 0x69, 0x6e, 0x2e, - 0x6a, 0x73, 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, - 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x31, 0x39, 0x39, 0x39, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, - 0x0a, 0x0d, 0x0a, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x0d, 0x0a, 0x3c, - 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x2f, - 0x22, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, 0x5f, 0x62, 0x6c, - 0x61, 0x6e, 0x6b, 0x22, 0x3e, 0x3c, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x68, 0x72, - 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, - 0x22, 0x3f, 0x3e, 0x0a, 0x77, 0x2e, 0x61, 0x64, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x3f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, - 0x64, 0x3a, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x63, 0x73, 0x73, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3d, 0x22, 0x6f, 0x67, 0x3a, - 0x74, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3a, - 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, - 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x68, - 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, - 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, - 0x30, 0x25, 0x22, 0x20, 0x49, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x76, 0x65, - 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x66, 0x6f, 0x6e, 0x74, - 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x3a, 0x31, 0x3e, 0x3c, 0x2f, 0x73, 0x70, 0x61, - 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x69, 0x64, 0x3d, 0x67, 0x62, - 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6f, 0x66, 0x20, 0x43, 0x6f, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x3c, 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x69, 0x6d, 0x45, - 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x61, 0x64, 0x65, 0x6d, 0x79, 0x20, - 0x6f, 0x66, 0x20, 0x53, 0x63, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x64, 0x69, - 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x3a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x2e, 0x67, 0x65, - 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x49, 0x64, 0x28, - 0x69, 0x64, 0x29, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x6a, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, 0x29, - 0x3b, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x79, 0x3d, 0x22, 0x6f, 0x67, 0x3a, 0xd0, 0x91, 0xd1, 0x8a, 0xd0, - 0xbb, 0xd0, 0xb3, 0xd0, 0xb0, 0xd1, 0x80, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xb8, - 0x0a, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x3e, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x63, 0x79, 0x20, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3c, 0x2f, 0x61, 0x3e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, 0x71, 0x75, 0x6f, 0x74, 0x3b, 0x6d, 0x61, - 0x72, 0x67, 0x69, 0x6e, 0x3a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x3e, 0x3c, - 0x69, 0x6d, 0x67, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x69, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x26, 0x71, - 0x75, 0x6f, 0x74, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x20, 0x70, 0x6f, 0x70, 0x75, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x6e, 0x20, 0x57, - 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x2c, 0x20, 0x44, 0x2e, - 0x43, 0x2e, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, 0x61, 0x63, - 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x61, 0x6d, 0x6f, 0x6e, 0x67, - 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x2c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x66, - 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x4f, 0x78, 0x66, 0x6f, 0x72, 0x64, 0x20, - 0x55, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x69, - 0x73, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x66, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, - 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x2f, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x20, 0x55, - 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x65, 0x78, 0x70, 0x61, - 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x75, 0x73, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x69, 0x6e, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x61, 0x66, 0x66, 0x69, 0x6c, 0x69, - 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, - 0x63, 0x6f, 0x72, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, - 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, - 0x6f, 0x66, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x3e, - 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x20, 0x6f, 0x66, 0x20, 0x49, 0x72, 0x65, 0x6c, 0x61, 0x6e, 0x64, 0x0a, 0x3c, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x69, 0x6e, 0x66, 0x6c, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x77, - 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x20, 0x6f, 0x66, 0x68, 0x65, 0x61, 0x64, - 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, - 0x68, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x61, 0x72, - 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x69, 0x6d, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x68, 0x61, 0x76, 0x65, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x64, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, - 0x6c, 0x20, 0x52, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x6f, 0x66, - 0x62, 0x65, 0x63, 0x61, 0x6d, 0x65, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x4e, - 0x6f, 0x74, 0x65, 0x2c, 0x20, 0x68, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, - 0x20, 0x74, 0x68, 0x61, 0x74, 0x73, 0x69, 0x6d, 0x69, 0x6c, 0x61, 0x72, 0x20, - 0x74, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64, 0x61, 0x6e, 0x63, - 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, - 0x74, 0x68, 0x65, 0x66, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72, 0x20, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x69, 0x73, 0x20, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x68, 0x69, 0x73, 0x20, 0x79, - 0x6f, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x62, 0x72, 0x6f, 0x74, 0x68, 0x65, - 0x72, 0x3c, 0x2f, 0x74, 0x64, 0x3e, 0x3c, 0x2f, 0x74, 0x72, 0x3e, 0x3c, 0x2f, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x58, 0x2d, 0x55, 0x41, 0x2d, - 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x6f, 0x66, 0x20, 0x42, 0x72, 0x69, 0x74, - 0x69, 0x73, 0x68, 0x20, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x62, 0x69, 0x61, 0x68, - 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x63, 0x72, 0x69, 0x74, 0x69, - 0x63, 0x69, 0x7a, 0x65, 0x64, 0x28, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, - 0x20, 0x74, 0x68, 0x65, 0x70, 0x61, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x30, 0x22, 0x20, - 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x3d, 0x22, - 0x30, 0x22, 0x20, 0x74, 0x68, 0x6f, 0x75, 0x73, 0x61, 0x6e, 0x64, 0x73, 0x20, - 0x6f, 0x66, 0x20, 0x70, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x72, 0x65, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x73, 0x20, 0x68, 0x65, 0x72, 0x65, 0x2e, 0x20, 0x46, - 0x6f, 0x72, 0x68, 0x61, 0x76, 0x65, 0x20, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x25, 0x33, 0x45, 0x25, 0x33, - 0x43, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x25, 0x33, 0x45, 0x22, 0x29, - 0x29, 0x3b, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x3c, 0x6c, 0x69, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, - 0x74, 0x2d, 0x64, 0x65, 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x3c, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, - 0x76, 0x3d, 0x22, 0x58, 0x2d, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, - 0x28, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, - 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, - 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, - 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x68, 0x72, 0x65, - 0x66, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x6a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3a, 0x2d, 0x2d, 0x3e, 0x0d, 0x0a, - 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x27, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x68, 0x6f, 0x72, 0x74, - 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x72, 0x65, - 0x66, 0x3d, 0x22, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0d, 0x0a, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x3c, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x2f, 0x61, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x20, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x58, 0x2d, 0x55, 0x41, 0x2d, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, - 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x20, - 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x2f, 0x75, - 0x6c, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, - 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, - 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x22, 0x71, 0x22, 0x3c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x77, - 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x25, 0x22, 0x20, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x22, 0x20, 0x62, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, - 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, - 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, 0x68, 0x36, 0x3e, 0x3c, 0x75, 0x6c, - 0x3e, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, - 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x63, 0x73, 0x73, 0x22, 0x20, - 0x6d, 0x65, 0x64, 0x69, 0x61, 0x3d, 0x22, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x22, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x22, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x62, - 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2d, 0x68, 0x74, 0x6d, - 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, - 0x66, 0x2d, 0x38, 0x22, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x3d, 0x22, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x0d, 0x0a, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x3e, - 0x3c, 0x2f, 0x73, 0x70, 0x61, 0x6e, 0x3e, 0x3c, 0x73, 0x70, 0x61, 0x6e, 0x20, - 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, - 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x3e, - 0x3b, 0x0a, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6e, 0x65, 0x63, - 0x65, 0x73, 0x73, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x46, 0x6f, 0x72, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x3c, 0x21, 0x44, 0x4f, - 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x3c, 0x68, - 0x74, 0x6d, 0x6c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, - 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x3a, 0x76, 0x6f, 0x69, 0x64, 0x28, 0x30, 0x29, 0x3b, 0x22, 0x65, 0x66, - 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, 0x20, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x3e, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x22, 0x3e, 0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0d, 0x0a, - 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, - 0x68, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x6f, 0x72, 0x6c, - 0x64, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6d, 0x69, 0x73, 0x63, 0x6f, - 0x6e, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, - 0x68, 0x65, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x64, 0x75, 0x72, 0x69, - 0x6e, 0x67, 0x20, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x2c, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, - 0x6f, 0x6e, 0x22, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x64, 0x69, - 0x70, 0x6c, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x20, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x74, 0x65, - 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x6d, - 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, - 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x20, 0x74, 0x68, 0x65, 0x22, 0x3e, 0x3c, 0x69, 0x6d, 0x67, - 0x20, 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x69, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x74, 0x68, 0x65, 0x20, 0x65, - 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x20, - 0x6f, 0x66, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x64, 0x69, - 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x26, 0x61, 0x6d, 0x70, - 0x3b, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x26, 0x61, 0x6d, 0x70, 0x3b, 0x6e, 0x62, - 0x73, 0x70, 0x3b, 0x74, 0x6f, 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x71, 0x75, 0x69, - 0x74, 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x66, 0x72, 0x6f, 0x6d, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x64, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x64, 0x69, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x63, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, - 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x77, 0x69, 0x64, 0x65, 0x6c, 0x79, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, - 0x77, 0x61, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, - 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x77, 0x69, 0x74, 0x68, 0x20, 0x76, - 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, - 0x73, 0x68, 0x61, 0x76, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x28, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, - 0x70, 0x65, 0x64, 0x65, 0x74, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x3d, 0x22, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x20, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, - 0x20, 0x2f, 0x3e, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x61, 0x62, 0x6c, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6d, 0x6f, - 0x72, 0x65, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x6c, 0x79, 0x20, 0x72, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x74, - 0x68, 0x61, 0x74, 0x20, 0x77, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x77, 0x69, 0x73, 0x65, 0x70, 0x65, 0x72, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x72, 0x65, 0x73, - 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x76, 0x65, 0x6c, - 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x6d, 0x69, 0x6e, 0x67, 0x65, 0x63, 0x6f, 0x6e, - 0x6f, 0x6d, 0x69, 0x63, 0x20, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, - 0x65, 0x6e, 0x74, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x66, 0x6f, 0x72, - 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x76, 0x65, 0x72, 0x61, - 0x6c, 0x20, 0x6f, 0x63, 0x63, 0x61, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, 0xaa, 0x73, 0x20, 0x28, 0x45, 0x75, 0x72, - 0x6f, 0x70, 0x65, 0x75, 0x29, 0xd0, 0xa3, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, - 0xd1, 0x97, 0xd0, 0xbd, 0xd1, 0x81, 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xb0, 0xd1, - 0x83, 0xd0, 0xba, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x97, 0xd0, 0xbd, 0xd1, 0x81, - 0xd1, 0x8c, 0xd0, 0xba, 0xd0, 0xb0, 0xd0, 0xa0, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, - 0x81, 0xd0, 0xb8, 0xd0, 0xb9, 0xd1, 0x81, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xb9, - 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x80, 0xd0, 0xb8, 0xd0, - 0xb0, 0xd0, 0xbb, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, - 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, - 0xb8, 0xd1, 0x83, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xb0, 0xd0, 0xb2, 0xd0, 0xbb, - 0xd0, 0xb5, 0xd0, 0xbd, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0xbd, 0xd0, 0xb5, 0xd0, - 0xbe, 0xd0, 0xb1, 0xd1, 0x85, 0xd0, 0xbe, 0xd0, 0xb4, 0xd0, 0xb8, 0xd0, 0xbc, - 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, - 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd1, 0x8f, 0xd0, 0x98, 0xd0, 0xbd, - 0xd1, 0x84, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, - 0xb8, 0xd1, 0x8f, 0xd0, 0xa0, 0xd0, 0xb5, 0xd1, 0x81, 0xd0, 0xbf, 0xd1, 0x83, - 0xd0, 0xb1, 0xd0, 0xbb, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, 0xb8, 0xd0, 0xba, 0xd0, - 0xbe, 0xd0, 0xbb, 0xd0, 0xb8, 0xd1, 0x87, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xbd, 0xd1, 0x84, 0xd0, 0xbe, 0xd1, - 0x80, 0xd0, 0xbc, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd1, 0x8e, 0xd1, 0x82, - 0xd0, 0xb5, 0xd1, 0x80, 0xd1, 0x80, 0xd0, 0xb8, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, - 0x80, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb4, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, - 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xbe, 0xd1, 0x87, 0xd0, 0xbd, 0xd0, 0xbe, 0xd8, - 0xa7, 0xd9, 0x84, 0xd9, 0x85, 0xd8, 0xaa, 0xd9, 0x88, 0xd8, 0xa7, 0xd8, 0xac, - 0xd8, 0xaf, 0xd9, 0x88, 0xd9, 0x86, 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd8, - 0xb4, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0xd8, 0xaa, - 0xd8, 0xa7, 0xd9, 0x84, 0xd8, 0xa7, 0xd9, 0x82, 0xd8, 0xaa, 0xd8, 0xb1, 0xd8, - 0xa7, 0xd8, 0xad, 0xd8, 0xa7, 0xd8, 0xaa, 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, - 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x55, 0x54, 0x46, 0x2d, 0x38, - 0x22, 0x20, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x28, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x2d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x3b, 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x22, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x3c, 0x69, 0x6d, 0x67, 0x20, - 0x73, 0x72, 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x22, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x3d, 0x22, 0x6f, 0x66, 0x66, 0x22, - 0x20, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, - 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x0a, 0x3c, 0x6c, 0x69, 0x20, 0x63, 0x6c, 0x61, - 0x73, 0x73, 0x3d, 0x22, 0x63, 0x73, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x3c, - 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, - 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x61, - 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0d, 0x0a, 0x3c, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x20, 0x6f, 0x6e, 0x63, 0x6c, 0x69, 0x63, 0x6b, - 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3a, - 0x28, 0x6e, 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x67, 0x65, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x7d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, - 0x31, 0x22, 0x20, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x27, 0x73, 0x20, 0x52, - 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x6f, 0x66, 0x20, 0x20, 0x3c, - 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, - 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x2d, 0x64, 0x65, - 0x63, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x75, 0x6e, 0x64, 0x65, - 0x72, 0x74, 0x68, 0x65, 0x20, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x0a, 0x3c, 0x2f, 0x64, - 0x69, 0x76, 0x3e, 0x0a, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x3c, - 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, - 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x23, 0x76, 0x69, 0x65, 0x77, 0x70, - 0x6f, 0x72, 0x74, 0x7b, 0x6d, 0x69, 0x6e, 0x2d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x3a, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x73, 0x72, - 0x63, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x3e, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3d, 0x6f, 0x66, 0x74, 0x65, 0x6e, 0x20, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x73, 0x20, - 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x3c, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x3c, 0x21, 0x44, 0x4f, 0x43, - 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0x0a, 0x3c, 0x21, - 0x2d, 0x2d, 0x5b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x20, 0x41, 0x69, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x3e, 0x0a, - 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x3c, 0x2f, 0x61, 0x3e, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0xe0, 0xb8, 0xa0, 0xe0, 0xb8, 0xb2, 0xe0, 0xb8, 0xa9, 0xe0, 0xb8, 0xb2, - 0xe0, 0xb9, 0x84, 0xe0, 0xb8, 0x97, 0xe0, 0xb8, 0xa2, 0xe1, 0x83, 0xa5, 0xe1, - 0x83, 0x90, 0xe1, 0x83, 0xa0, 0xe1, 0x83, 0x97, 0xe1, 0x83, 0xa3, 0xe1, 0x83, - 0x9a, 0xe1, 0x83, 0x98, 0xe6, 0xad, 0xa3, 0xe9, 0xab, 0x94, 0xe4, 0xb8, 0xad, - 0xe6, 0x96, 0x87, 0x20, 0x28, 0xe7, 0xb9, 0x81, 0xe9, 0xab, 0x94, 0x29, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xa6, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb6, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xb2, 0xe0, 0xa5, 0x8b, 0xe0, - 0xa4, 0xa1, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa5, - 0x87, 0xe0, 0xa4, 0xa4, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x9c, - 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, - 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, - 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa5, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb5, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, - 0xb8, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x9a, 0xe0, 0xa4, 0xbf, 0xe0, - 0xa4, 0x9f, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa0, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9c, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0x9e, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x85, 0xe0, - 0xa4, 0xae, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xad, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0x97, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xa1, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0xaf, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xaf, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x95, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb8, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, - 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb7, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa4, 0xb9, 0xe0, 0xa5, 0x81, 0xe0, 0xa4, 0x81, 0xe0, 0xa4, 0x9a, 0xe0, - 0xa4, 0xa4, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb0, 0xe0, 0xa4, 0xac, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xa8, - 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, - 0xa4, 0xaa, 0xe0, 0xa4, 0xa3, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, - 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, - 0xaa, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, - 0x82, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xab, 0xe0, 0xa4, 0xbc, 0xe0, 0xa5, 0x8d, - 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xa8, 0xe0, - 0xa4, 0xbf, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xae, 0xe0, 0xa4, - 0xbe, 0xe0, 0xa4, 0xa3, 0xe0, 0xa4, 0xb2, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xae, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x9f, 0xe0, 0xa5, 0x87, 0xe0, 0xa4, 0xa1, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, - 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, 0x68, 0x74, 0x6d, - 0x6c, 0x3e, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x3c, 0x6d, 0x65, 0x74, - 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x22, 0x75, 0x74, - 0x66, 0x2d, 0x38, 0x22, 0x3e, 0x3a, 0x75, 0x72, 0x6c, 0x22, 0x20, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, - 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, - 0x2f, 0x63, 0x73, 0x73, 0x22, 0x3e, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, - 0x3d, 0x22, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, 0x39, 0x39, - 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x74, 0x79, - 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x3d, 0x22, 0x67, 0x65, 0x74, 0x22, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x3d, 0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, - 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x20, - 0x3d, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, - 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, 0x2d, 0x69, 0x63, 0x6f, 0x6e, - 0x22, 0x20, 0x2f, 0x3e, 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, - 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x3c, 0x2f, 0x61, 0x3e, - 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, - 0x22, 0x31, 0x22, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x3d, 0x22, 0x31, - 0x22, 0x22, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x79, - 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, - 0x6f, 0x6e, 0x65, 0x3b, 0x22, 0x3e, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x74, 0x65, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, - 0x20, 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x65, 0x6c, - 0x6c, 0x73, 0x70, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, - 0x63, 0x65, 0x6c, 0x6c, 0x70, 0x61, 0x64, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3d, 0x22, 0x2f, 0x61, 0x3e, 0x26, 0x6e, 0x62, 0x73, 0x70, 0x3b, 0x3c, - 0x73, 0x70, 0x61, 0x6e, 0x20, 0x72, 0x6f, 0x6c, 0x65, 0x3d, 0x22, 0x73, 0x0a, - 0x3c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x3d, 0x22, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x22, 0x20, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, 0x61, - 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x3d, 0x22, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x63, - 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x79, 0x70, 0x65, - 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, - 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x20, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x3d, 0x22, 0x31, 0x22, 0x20, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3d, 0x22, 0x31, - 0x22, 0x20, 0x3d, 0x27, 0x2b, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x55, 0x52, - 0x49, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x28, 0x3c, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x61, 0x6c, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x62, 0x6f, 0x64, 0x79, 0x2c, - 0x20, 0x74, 0x72, 0x2c, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2c, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x73, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x3d, 0x22, 0x70, 0x6f, 0x73, 0x74, 0x22, 0x20, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x22, 0x3e, 0x0a, 0x3c, 0x61, 0x20, - 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x63, 0x73, 0x73, 0x22, 0x20, 0x72, 0x65, 0x6c, 0x3d, - 0x22, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, - 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, - 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x22, 0x3e, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x3d, 0x22, 0x74, 0x72, 0x75, 0x65, 0x22, 0x3e, 0xc2, 0xb7, - 0x3c, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x6c, 0x3d, 0x30, - 0x3b, 0x7d, 0x29, 0x28, 0x29, 0x3b, 0x0a, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x7b, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x2d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x75, 0x72, - 0x6c, 0x28, 0x2f, 0x61, 0x3e, 0x3c, 0x2f, 0x6c, 0x69, 0x3e, 0x3c, 0x6c, 0x69, - 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x09, 0x09, - 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x20, - 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3d, 0x22, - 0x74, 0x72, 0x75, 0x3e, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3d, 0x22, 0x6a, 0x61, 0x76, 0x61, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x20, 0x2f, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x3e, 0x0a, 0x3c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x2f, 0x64, 0x69, - 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x20, 0x61, 0x72, 0x69, 0x61, 0x2d, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x3d, 0x22, 0x74, 0x72, 0x65, 0x3d, 0x28, 0x6e, - 0x65, 0x77, 0x20, 0x44, 0x61, 0x74, 0x65, 0x29, 0x2e, 0x67, 0x65, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x28, 0x29, 0x70, 0x6f, 0x72, 0x74, 0x75, 0x67, 0x75, 0xc3, - 0xaa, 0x73, 0x20, 0x28, 0x64, 0x6f, 0x20, 0x42, 0x72, 0x61, 0x73, 0x69, 0x6c, - 0x29, 0xd0, 0xbe, 0xd1, 0x80, 0xd0, 0xb3, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb2, 0xd0, - 0xbe, 0xd0, 0xb7, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd1, 0x8c, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x80, 0xd0, - 0xb0, 0xd0, 0xb7, 0xd0, 0xbe, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xbd, 0xd0, 0xb8, - 0xd1, 0x8f, 0xd1, 0x80, 0xd0, 0xb5, 0xd0, 0xb3, 0xd0, 0xb8, 0xd1, 0x81, 0xd1, - 0x82, 0xd1, 0x80, 0xd0, 0xb0, 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xb2, - 0xd0, 0xbe, 0xd0, 0xb7, 0xd0, 0xbc, 0xd0, 0xbe, 0xd0, 0xb6, 0xd0, 0xbd, 0xd0, - 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd0, 0xbe, 0xd0, 0xb1, 0xd1, 0x8f, - 0xd0, 0xb7, 0xd0, 0xb0, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbb, 0xd1, 0x8c, 0xd0, - 0xbd, 0xd0, 0xb0, 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45, 0x20, - 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x22, - 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x3c, 0x6d, 0x65, - 0x74, 0x61, 0x20, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, - 0x3d, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x45, 0x4e, 0x22, 0x20, 0x22, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, - 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, - 0x77, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, - 0x58, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x54, 0x44, 0x54, - 0x44, 0x2f, 0x78, 0x68, 0x74, 0x6d, 0x6c, 0x31, 0x2d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x54, 0x52, 0x2f, 0x78, 0x68, - 0x74, 0x6d, 0x6c, 0x31, 0x2f, 0x70, 0x65, 0x20, 0x3d, 0x20, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x3b, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x22, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x69, 0x6e, 0x73, - 0x65, 0x72, 0x74, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x3c, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x68, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6a, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, - 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x28, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x29, - 0x2e, 0x72, 0x65, 0x61, 0x64, 0x79, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x3d, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x55, 0x41, 0x2d, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x22, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x3d, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, - 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, - 0x0a, 0x6c, 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x68, - 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x20, 0x69, 0x63, 0x6f, 0x6e, 0x3c, 0x6c, - 0x69, 0x6e, 0x6b, 0x20, 0x72, 0x65, 0x6c, 0x3d, 0x22, 0x73, 0x74, 0x79, 0x6c, - 0x65, 0x73, 0x68, 0x65, 0x65, 0x74, 0x22, 0x20, 0x3c, 0x2f, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x3d, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x3c, 0x61, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x3d, 0x22, - 0x5f, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, - 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, - 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x61, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x20, - 0x3d, 0x20, 0x27, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, - 0x22, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, - 0x68, 0x74, 0x6d, 0x6c, 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, - 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x64, 0x74, 0x64, - 0x22, 0x3e, 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, - 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x2f, 0x2f, 0x57, 0x33, 0x43, - 0x2f, 0x2f, 0x44, 0x54, 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, 0x2e, - 0x30, 0x31, 0x20, 0x54, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x61, 0x67, - 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x27, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, - 0x29, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x3c, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, - 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x22, 0x20, 0x73, 0x74, - 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, - 0x6e, 0x6f, 0x6e, 0x65, 0x3b, 0x22, 0x3e, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x42, 0x79, 0x49, 0x64, 0x28, 0x3d, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x28, 0x27, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, - 0x78, 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x27, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, - 0x2e, 0x67, 0x65, 0x74, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, - 0x79, 0x54, 0x61, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x28, 0x73, 0x6e, 0x69, 0x63, - 0x61, 0x6c, 0x22, 0x20, 0x68, 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x43, 0x2f, 0x2f, 0x44, 0x54, - 0x44, 0x20, 0x48, 0x54, 0x4d, 0x4c, 0x20, 0x34, 0x2e, 0x30, 0x31, 0x20, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, - 0x74, 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, - 0x73, 0x22, 0x3e, 0x0a, 0x0a, 0x3c, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x20, 0x74, - 0x79, 0x70, 0x65, 0x3d, 0x22, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x63, 0x73, 0x73, - 0x22, 0x3e, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2e, 0x64, 0x74, 0x64, 0x22, 0x3e, - 0x0a, 0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, - 0x68, 0x74, 0x74, 0x70, 0x2d, 0x65, 0x71, 0x75, 0x69, 0x76, 0x3d, 0x22, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x64, 0x69, - 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x70, - 0x61, 0x63, 0x69, 0x6e, 0x67, 0x3d, 0x22, 0x30, 0x22, 0x68, 0x74, 0x6d, 0x6c, - 0x3b, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, - 0x2d, 0x38, 0x22, 0x20, 0x2f, 0x3e, 0x0a, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, - 0x3d, 0x22, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3a, 0x6e, 0x6f, 0x6e, - 0x65, 0x3b, 0x22, 0x3e, 0x3c, 0x3c, 0x6c, 0x69, 0x3e, 0x3c, 0x61, 0x20, 0x68, - 0x72, 0x65, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, - 0x77, 0x77, 0x2e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x27, 0x74, 0x65, 0x78, - 0x74, 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x27, - 0x3e, 0xd0, 0xb4, 0xd0, 0xb5, 0xd1, 0x8f, 0xd1, 0x82, 0xd0, 0xb5, 0xd0, 0xbb, - 0xd1, 0x8c, 0xd0, 0xbd, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xd1, - 0x81, 0xd0, 0xbe, 0xd0, 0xbe, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, 0x82, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb8, 0xd0, 0xb8, 0xd0, 0xbf, 0xd1, - 0x80, 0xd0, 0xbe, 0xd0, 0xb8, 0xd0, 0xb7, 0xd0, 0xb2, 0xd0, 0xbe, 0xd0, 0xb4, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb2, 0xd0, 0xb0, 0xd0, 0xb1, 0xd0, 0xb5, 0xd0, - 0xb7, 0xd0, 0xbe, 0xd0, 0xbf, 0xd0, 0xb0, 0xd1, 0x81, 0xd0, 0xbd, 0xd0, 0xbe, - 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xb8, 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x81, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0x82, - 0xe0, 0xa4, 0x97, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa5, 0x87, 0xe0, - 0xa4, 0xb8, 0xe0, 0xa4, 0x89, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb9, 0xe0, 0xa5, 0x8b, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0xa8, 0xe0, 0xa5, 0x87, - 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa7, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0xa8, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0xad, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0xab, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb8, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0x82, 0xe0, 0xa4, 0x97, 0xe0, 0xa4, 0xb8, 0xe0, - 0xa5, 0x81, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, - 0xb7, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x89, - 0xe0, 0xa4, 0xaa, 0xe0, 0xa5, 0x80, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xbe, 0xe0, - 0xa4, 0x87, 0xe0, 0xa4, 0x9f, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, - 0x9c, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0x9e, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xaa, - 0xe0, 0xa4, 0xa8, 0xe0, 0xa4, 0x95, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, 0xb0, 0xe0, - 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, 0xe0, 0xa4, 0xb5, 0xe0, 0xa4, 0xbe, 0xe0, 0xa4, - 0x88, 0xe0, 0xa4, 0xb8, 0xe0, 0xa4, 0x95, 0xe0, 0xa5, 0x8d, 0xe0, 0xa4, 0xb0, - 0xe0, 0xa4, 0xbf, 0xe0, 0xa4, 0xaf, 0xe0, 0xa4, 0xa4, 0xe0, 0xa4, 0xbe, -}; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif
diff --git a/third_party/brotli/enc/dictionary.h b/third_party/brotli/enc/dictionary.h deleted file mode 100644 index c9c6362..0000000 --- a/third_party/brotli/enc/dictionary.h +++ /dev/null
@@ -1,41 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Collection of static dictionary words. - -#ifndef BROTLI_ENC_DICTIONARY_H_ -#define BROTLI_ENC_DICTIONARY_H_ - -#include "./types.h" - -// No namespace, use same identifier as for the C decoder. - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -extern const uint8_t kBrotliDictionary[122784]; - -static const uint32_t kBrotliDictionaryOffsetsByLength[] = { - 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, - 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, - 115968, 118528, 119872, 121280, 122016, -}; - -static const uint8_t kBrotliDictionarySizeBitsByLength[] = { - 0, 0, 0, 0, 10, 10, 11, 11, 10, 10, - 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, - 7, 6, 6, 5, 5, -}; - -static const int kBrotliMinDictionaryWordLength = 4; -static const int kBrotliMaxDictionaryWordLength = 24; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif // BROTLI_ENC_DICTIONARY_H_
diff --git a/third_party/brotli/enc/dictionary_hash.h b/third_party/brotli/enc/dictionary_hash.h index afbb1f1..f4f47aa0 100644 --- a/third_party/brotli/enc/dictionary_hash.h +++ b/third_party/brotli/enc/dictionary_hash.h
@@ -4,14 +4,16 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Hash table on the 4-byte prefixes of static dictionary words. +/* Hash table on the 4-byte prefixes of static dictionary words. */ #ifndef BROTLI_ENC_DICTIONARY_HASH_H_ #define BROTLI_ENC_DICTIONARY_HASH_H_ -#include "./types.h" +#include <brotli/types.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif static const uint16_t kStaticDictionaryHash[] = { 0x7d48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, @@ -4112,6 +4114,8 @@ 0x0000, 0x0000, 0x0d88, 0x4ac5, 0x0000, 0x0000, 0x0000, 0x0000, }; -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_DICTIONARY_HASH_H_ +#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */
diff --git a/third_party/brotli/enc/encode.c b/third_party/brotli/enc/encode.c new file mode 100644 index 0000000..d846513a --- /dev/null +++ b/third_party/brotli/enc/encode.c
@@ -0,0 +1,1701 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Implementation of Brotli compressor. */ + +#include <brotli/encode.h> + +#include <stdlib.h> /* free, malloc */ +#include <string.h> /* memcpy, memset */ + +#include "../common/version.h" +#include "./backward_references.h" +#include "./bit_cost.h" +#include "./brotli_bit_stream.h" +#include "./compress_fragment.h" +#include "./compress_fragment_two_pass.h" +#include "./context.h" +#include "./entropy_encode.h" +#include "./fast_log.h" +#include "./hash.h" +#include "./histogram.h" +#include "./memory.h" +#include "./metablock.h" +#include "./port.h" +#include "./prefix.h" +#include "./quality.h" +#include "./ringbuffer.h" +#include "./utf8_util.h" +#include "./write_bits.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src)); + +typedef enum BrotliEncoderStreamState { + /* Default state. */ + BROTLI_STREAM_PROCESSING = 0, + /* Intermediate state; after next block is emitted, byte-padding should be + performed before getting back to default state. */ + BROTLI_STREAM_FLUSH_REQUESTED = 1, + /* Last metablock was produced; no more input is acceptable. */ + BROTLI_STREAM_FINISHED = 2, + /* Flushing compressed block and writing meta-data block header. */ + BROTLI_STREAM_METADATA_HEAD = 3, + /* Writing metadata block body. */ + BROTLI_STREAM_METADATA_BODY = 4 +} BrotliEncoderStreamState; + +typedef struct BrotliEncoderStateStruct { + BrotliEncoderParams params; + + MemoryManager memory_manager_; + + Hashers hashers_; + uint64_t input_pos_; + RingBuffer ringbuffer_; + size_t cmd_alloc_size_; + Command* commands_; + size_t num_commands_; + size_t num_literals_; + size_t last_insert_len_; + uint64_t last_flush_pos_; + uint64_t last_processed_pos_; + int dist_cache_[4]; + int saved_dist_cache_[4]; + uint8_t last_byte_; + uint8_t last_byte_bits_; + uint8_t prev_byte_; + uint8_t prev_byte2_; + size_t storage_size_; + uint8_t* storage_; + /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */ + int small_table_[1 << 10]; /* 4KiB */ + int* large_table_; /* Allocated only when needed */ + size_t large_table_size_; + /* Command and distance prefix codes (each 64 symbols, stored back-to-back) + used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The command + prefix code is over a smaller alphabet with the following 64 symbols: + 0 - 15: insert length code 0, copy length code 0 - 15, same distance + 16 - 39: insert length code 0, copy length code 0 - 23 + 40 - 63: insert length code 0 - 23, copy length code 0 + Note that symbols 16 and 40 represent the same code in the full alphabet, + but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALITY. */ + uint8_t cmd_depths_[128]; + uint16_t cmd_bits_[128]; + /* The compressed form of the command and distance prefix codes for the next + block in FAST_ONE_PASS_COMPRESSION_QUALITY. */ + uint8_t cmd_code_[512]; + size_t cmd_code_numbits_; + /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */ + uint32_t* command_buf_; + uint8_t* literal_buf_; + + uint8_t* next_out_; + size_t available_out_; + size_t total_out_; + /* Temporary buffer for padding flush bits or metadata block header / body. */ + union { + uint64_t u64[2]; + uint8_t u8[16]; + } tiny_buf_; + uint32_t remaining_metadata_bytes_; + BrotliEncoderStreamState stream_state_; + + BROTLI_BOOL is_last_block_emitted_; + BROTLI_BOOL is_initialized_; +} BrotliEncoderStateStruct; + +static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s); + +static size_t InputBlockSize(BrotliEncoderState* s) { + if (!EnsureInitialized(s)) return 0; + return (size_t)1 << s->params.lgblock; +} + +static uint64_t UnprocessedInputSize(BrotliEncoderState* s) { + return s->input_pos_ - s->last_processed_pos_; +} + +static size_t RemainingInputBlockSize(BrotliEncoderState* s) { + const uint64_t delta = UnprocessedInputSize(s); + size_t block_size = InputBlockSize(s); + if (delta >= block_size) return 0; + return block_size - (size_t)delta; +} + +BROTLI_BOOL BrotliEncoderSetParameter( + BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) { + /* Changing parameters on the fly is not implemented yet. */ + if (state->is_initialized_) return BROTLI_FALSE; + /* TODO: Validate/clamp parameters here. */ + switch (p) { + case BROTLI_PARAM_MODE: + state->params.mode = (BrotliEncoderMode)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_QUALITY: + state->params.quality = (int)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_LGWIN: + state->params.lgwin = (int)value; + return BROTLI_TRUE; + + case BROTLI_PARAM_LGBLOCK: + state->params.lgblock = (int)value; + return BROTLI_TRUE; + + default: return BROTLI_FALSE; + } +} + +static void RecomputeDistancePrefixes(Command* cmds, + size_t num_commands, + uint32_t num_direct_distance_codes, + uint32_t distance_postfix_bits) { + size_t i; + if (num_direct_distance_codes == 0 && distance_postfix_bits == 0) { + return; + } + for (i = 0; i < num_commands; ++i) { + Command* cmd = &cmds[i]; + if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) { + PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd), + num_direct_distance_codes, + distance_postfix_bits, + &cmd->dist_prefix_, + &cmd->dist_extra_); + } + } +} + +/* Wraps 64-bit input position to 32-bit ring-buffer position preserving + "not-a-first-lap" feature. */ +static uint32_t WrapPosition(uint64_t position) { + uint32_t result = (uint32_t)position; + uint64_t gb = position >> 30; + if (gb > 2) { + /* Wrap every 2GiB; The first 3GB are continuous. */ + result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30; + } + return result; +} + +static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) { + MemoryManager* m = &s->memory_manager_; + if (s->storage_size_ < size) { + BROTLI_FREE(m, s->storage_); + s->storage_ = BROTLI_ALLOC(m, uint8_t, size); + if (BROTLI_IS_OOM(m)) return NULL; + s->storage_size_ = size; + } + return s->storage_; +} + +static size_t HashTableSize(size_t max_table_size, size_t input_size) { + size_t htsize = 256; + while (htsize < max_table_size && htsize < input_size) { + htsize <<= 1; + } + return htsize; +} + +static int* GetHashTable(BrotliEncoderState* s, int quality, + size_t input_size, size_t* table_size) { + /* Use smaller hash table when input.size() is smaller, since we + fill the table, incurring O(hash table size) overhead for + compression, and if the input is short, we won't need that + many hash table entries anyway. */ + MemoryManager* m = &s->memory_manager_; + const size_t max_table_size = MaxHashTableSize(quality); + size_t htsize = HashTableSize(max_table_size, input_size); + int* table; + assert(max_table_size >= 256); + if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + /* Only odd shifts are supported by fast-one-pass. */ + if ((htsize & 0xAAAAA) == 0) { + htsize <<= 1; + } + } + + if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) { + table = s->small_table_; + } else { + if (htsize > s->large_table_size_) { + s->large_table_size_ = htsize; + BROTLI_FREE(m, s->large_table_); + s->large_table_ = BROTLI_ALLOC(m, int, htsize); + if (BROTLI_IS_OOM(m)) return 0; + } + table = s->large_table_; + } + + *table_size = htsize; + memset(table, 0, htsize * sizeof(*table)); + return table; +} + +static void EncodeWindowBits(int lgwin, uint8_t* last_byte, + uint8_t* last_byte_bits) { + if (lgwin == 16) { + *last_byte = 0; + *last_byte_bits = 1; + } else if (lgwin == 17) { + *last_byte = 1; + *last_byte_bits = 7; + } else if (lgwin > 17) { + *last_byte = (uint8_t)(((lgwin - 17) << 1) | 1); + *last_byte_bits = 4; + } else { + *last_byte = (uint8_t)(((lgwin - 8) << 4) | 1); + *last_byte_bits = 7; + } +} + +/* Initializes the command and distance prefix codes for the first block. */ +static void InitCommandPrefixCodes(uint8_t cmd_depths[128], + uint16_t cmd_bits[128], + uint8_t cmd_code[512], + size_t* cmd_code_numbits) { + static const uint8_t kDefaultCommandDepths[128] = { + 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, + 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, + 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6, + 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, + 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + }; + static const uint16_t kDefaultCommandBits[128] = { + 0, 0, 8, 9, 3, 35, 7, 71, + 39, 103, 23, 47, 175, 111, 239, 31, + 0, 0, 0, 4, 12, 2, 10, 6, + 13, 29, 11, 43, 27, 59, 87, 55, + 15, 79, 319, 831, 191, 703, 447, 959, + 0, 14, 1, 25, 5, 21, 19, 51, + 119, 159, 95, 223, 479, 991, 63, 575, + 127, 639, 383, 895, 255, 767, 511, 1023, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12, + 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255, + 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095, + }; + static const uint8_t kDefaultCommandCode[] = { + 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6, + 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c, + 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa, + 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94, + 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00, + }; + static const size_t kDefaultCommandCodeNumBits = 448; + COPY_ARRAY(cmd_depths, kDefaultCommandDepths); + COPY_ARRAY(cmd_bits, kDefaultCommandBits); + + /* Initialize the pre-compressed form of the command and distance prefix + codes. */ + COPY_ARRAY(cmd_code, kDefaultCommandCode); + *cmd_code_numbits = kDefaultCommandCodeNumBits; +} + +/* Decide about the context map based on the ability of the prediction + ability of the previous byte UTF8-prefix on the next byte. The + prediction ability is calculated as Shannon entropy. Here we need + Shannon entropy instead of 'BitsEntropy' since the prefix will be + encoded with the remaining 6 bits of the following byte, and + BitsEntropy will assume that symbol to be stored alone using Huffman + coding. */ +static void ChooseContextMap(int quality, + uint32_t* bigram_histo, + size_t* num_literal_contexts, + const uint32_t** literal_context_map) { + static const uint32_t kStaticContextMapContinuation[64] = { + 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + static const uint32_t kStaticContextMapSimpleUTF8[64] = { + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + uint32_t monogram_histo[3] = { 0 }; + uint32_t two_prefix_histo[6] = { 0 }; + size_t total = 0; + size_t i; + size_t dummy; + double entropy[4]; + for (i = 0; i < 9; ++i) { + size_t j = i; + total += bigram_histo[i]; + monogram_histo[i % 3] += bigram_histo[i]; + if (j >= 6) { + j -= 6; + } + two_prefix_histo[j] += bigram_histo[i]; + } + entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy); + entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) + + ShannonEntropy(two_prefix_histo + 3, 3, &dummy)); + entropy[3] = 0; + for (i = 0; i < 3; ++i) { + entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy); + } + + assert(total != 0); + entropy[0] = 1.0 / (double)total; + entropy[1] *= entropy[0]; + entropy[2] *= entropy[0]; + entropy[3] *= entropy[0]; + + if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) { + /* 3 context models is a bit slower, don't use it at lower qualities. */ + entropy[3] = entropy[1] * 10; + } + /* If expected savings by symbol are less than 0.2 bits, skip the + context modeling -- in exchange for faster decoding speed. */ + if (entropy[1] - entropy[2] < 0.2 && + entropy[1] - entropy[3] < 0.2) { + *num_literal_contexts = 1; + } else if (entropy[2] - entropy[3] < 0.02) { + *num_literal_contexts = 2; + *literal_context_map = kStaticContextMapSimpleUTF8; + } else { + *num_literal_contexts = 3; + *literal_context_map = kStaticContextMapContinuation; + } +} + +static void DecideOverLiteralContextModeling(const uint8_t* input, + size_t start_pos, size_t length, size_t mask, int quality, + ContextType* literal_context_mode, size_t* num_literal_contexts, + const uint32_t** literal_context_map) { + if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) { + return; + } else { + /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of + UTF8 data faster we only examine 64 byte long strides at every 4kB + intervals. */ + const size_t end_pos = start_pos + length; + uint32_t bigram_prefix_histo[9] = { 0 }; + for (; start_pos + 64 <= end_pos; start_pos += 4096) { + static const int lut[4] = { 0, 0, 1, 2 }; + const size_t stride_end_pos = start_pos + 64; + int prev = lut[input[start_pos & mask] >> 6] * 3; + size_t pos; + for (pos = start_pos + 1; pos < stride_end_pos; ++pos) { + const uint8_t literal = input[pos & mask]; + ++bigram_prefix_histo[prev + lut[literal >> 6]]; + prev = lut[literal >> 6] * 3; + } + } + *literal_context_mode = CONTEXT_UTF8; + ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts, + literal_context_map); + } +} + +static BROTLI_BOOL ShouldCompress( + const uint8_t* data, const size_t mask, const uint64_t last_flush_pos, + const size_t bytes, const size_t num_literals, const size_t num_commands) { + if (num_commands < (bytes >> 8) + 2) { + if (num_literals > 0.99 * (double)bytes) { + uint32_t literal_histo[256] = { 0 }; + static const uint32_t kSampleRate = 13; + static const double kMinEntropy = 7.92; + const double bit_cost_threshold = + (double)bytes * kMinEntropy / kSampleRate; + size_t t = (bytes + kSampleRate - 1) / kSampleRate; + uint32_t pos = (uint32_t)last_flush_pos; + size_t i; + for (i = 0; i < t; i++) { + ++literal_histo[data[pos & mask]]; + pos += kSampleRate; + } + if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) { + return BROTLI_FALSE; + } + } + } + return BROTLI_TRUE; +} + +static void WriteMetaBlockInternal(MemoryManager* m, + const uint8_t* data, + const size_t mask, + const uint64_t last_flush_pos, + const size_t bytes, + const BROTLI_BOOL is_last, + const BrotliEncoderParams* params, + const uint8_t prev_byte, + const uint8_t prev_byte2, + const size_t num_literals, + const size_t num_commands, + Command* commands, + const int* saved_dist_cache, + int* dist_cache, + size_t* storage_ix, + uint8_t* storage) { + const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos); + uint8_t last_byte; + uint8_t last_byte_bits; + uint32_t num_direct_distance_codes = 0; + uint32_t distance_postfix_bits = 0; + + if (bytes == 0) { + /* Write the ISLAST and ISEMPTY bits. */ + BrotliWriteBits(2, 3, storage_ix, storage); + *storage_ix = (*storage_ix + 7u) & ~7u; + return; + } + + if (!ShouldCompress(data, mask, last_flush_pos, bytes, + num_literals, num_commands)) { + /* Restore the distance cache, as its last update by + CreateBackwardReferences is now unused. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + BrotliStoreUncompressedMetaBlock(is_last, data, + wrapped_last_flush_pos, mask, bytes, + storage_ix, storage); + return; + } + + last_byte = storage[0]; + last_byte_bits = (uint8_t)(*storage_ix & 0xff); + if (params->quality >= MIN_QUALITY_FOR_RECOMPUTE_DISTANCE_PREFIXES && + params->mode == BROTLI_MODE_FONT) { + num_direct_distance_codes = 12; + distance_postfix_bits = 1; + RecomputeDistancePrefixes(commands, + num_commands, + num_direct_distance_codes, + distance_postfix_bits); + } + if (params->quality <= MAX_QUALITY_FOR_STATIC_ENRTOPY_CODES) { + BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos, + bytes, mask, is_last, + commands, num_commands, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) { + BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos, + bytes, mask, is_last, + commands, num_commands, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + } else { + ContextType literal_context_mode = CONTEXT_UTF8; + MetaBlockSplit mb; + InitMetaBlockSplit(&mb); + if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) { + size_t num_literal_contexts = 1; + const uint32_t* literal_context_map = NULL; + DecideOverLiteralContextModeling(data, wrapped_last_flush_pos, + bytes, mask, + params->quality, + &literal_context_mode, + &num_literal_contexts, + &literal_context_map); + if (literal_context_map == NULL) { + BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask, + commands, num_commands, &mb); + if (BROTLI_IS_OOM(m)) return; + } else { + BrotliBuildMetaBlockGreedyWithContexts(m, data, + wrapped_last_flush_pos, + mask, + prev_byte, prev_byte2, + literal_context_mode, + num_literal_contexts, + literal_context_map, + commands, num_commands, + &mb); + if (BROTLI_IS_OOM(m)) return; + } + } else { + if (!BrotliIsMostlyUTF8(data, wrapped_last_flush_pos, mask, bytes, + kMinUTF8Ratio)) { + literal_context_mode = CONTEXT_SIGNED; + } + BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, params, + prev_byte, prev_byte2, + commands, num_commands, + literal_context_mode, + &mb); + if (BROTLI_IS_OOM(m)) return; + } + if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) { + BrotliOptimizeHistograms(num_direct_distance_codes, + distance_postfix_bits, + &mb); + } + BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask, + prev_byte, prev_byte2, + is_last, + num_direct_distance_codes, + distance_postfix_bits, + literal_context_mode, + commands, num_commands, + &mb, + storage_ix, storage); + if (BROTLI_IS_OOM(m)) return; + DestroyMetaBlockSplit(m, &mb); + } + if (bytes + 4 < (*storage_ix >> 3)) { + /* Restore the distance cache and last byte. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + storage[0] = last_byte; + *storage_ix = last_byte_bits; + BrotliStoreUncompressedMetaBlock(is_last, data, + wrapped_last_flush_pos, mask, + bytes, storage_ix, storage); + } +} + +static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) { + if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE; + if (s->is_initialized_) return BROTLI_TRUE; + + SanitizeParams(&s->params); + s->params.lgblock = ComputeLgBlock(&s->params); + + s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX; + + RingBufferSetup(&s->params, &s->ringbuffer_); + + /* Initialize last byte with stream header. */ + { + int lgwin = s->params.lgwin; + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + lgwin = BROTLI_MAX(int, lgwin, 18); + } + EncodeWindowBits(lgwin, &s->last_byte_, &s->last_byte_bits_); + } + + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_, + s->cmd_code_, &s->cmd_code_numbits_); + } + + /* Initialize hashers. */ + HashersSetup(&s->memory_manager_, &s->hashers_, ChooseHasher(&s->params)); + if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE; + + s->is_initialized_ = BROTLI_TRUE; + return BROTLI_TRUE; +} + +static void BrotliEncoderInitState(BrotliEncoderState* s) { + s->params.mode = BROTLI_DEFAULT_MODE; + s->params.quality = BROTLI_DEFAULT_QUALITY; + s->params.lgwin = BROTLI_DEFAULT_WINDOW; + s->params.lgblock = 0; + + s->input_pos_ = 0; + s->num_commands_ = 0; + s->num_literals_ = 0; + s->last_insert_len_ = 0; + s->last_flush_pos_ = 0; + s->last_processed_pos_ = 0; + s->prev_byte_ = 0; + s->prev_byte2_ = 0; + s->storage_size_ = 0; + s->storage_ = 0; + s->large_table_ = NULL; + s->large_table_size_ = 0; + s->cmd_code_numbits_ = 0; + s->command_buf_ = NULL; + s->literal_buf_ = NULL; + s->next_out_ = NULL; + s->available_out_ = 0; + s->total_out_ = 0; + s->stream_state_ = BROTLI_STREAM_PROCESSING; + s->is_last_block_emitted_ = BROTLI_FALSE; + s->is_initialized_ = BROTLI_FALSE; + + InitHashers(&s->hashers_); + + RingBufferInit(&s->ringbuffer_); + + s->commands_ = 0; + s->cmd_alloc_size_ = 0; + + /* Initialize distance cache. */ + s->dist_cache_[0] = 4; + s->dist_cache_[1] = 11; + s->dist_cache_[2] = 15; + s->dist_cache_[3] = 16; + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->dist_cache_)); +} + +BrotliEncoderState* BrotliEncoderCreateInstance(brotli_alloc_func alloc_func, + brotli_free_func free_func, + void* opaque) { + BrotliEncoderState* state = 0; + if (!alloc_func && !free_func) { + state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState)); + } else if (alloc_func && free_func) { + state = (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncoderState)); + } + if (state == 0) { + /* BROTLI_DUMP(); */ + return 0; + } + BrotliInitMemoryManager( + &state->memory_manager_, alloc_func, free_func, opaque); + BrotliEncoderInitState(state); + return state; +} + +static void BrotliEncoderCleanupState(BrotliEncoderState* s) { + MemoryManager* m = &s->memory_manager_; + if (BROTLI_IS_OOM(m)) { + BrotliWipeOutMemoryManager(m); + return; + } + BROTLI_FREE(m, s->storage_); + BROTLI_FREE(m, s->commands_); + RingBufferFree(m, &s->ringbuffer_); + DestroyHashers(m, &s->hashers_); + BROTLI_FREE(m, s->large_table_); + BROTLI_FREE(m, s->command_buf_); + BROTLI_FREE(m, s->literal_buf_); +} + +/* Deinitializes and frees BrotliEncoderState instance. */ +void BrotliEncoderDestroyInstance(BrotliEncoderState* state) { + if (!state) { + return; + } else { + MemoryManager* m = &state->memory_manager_; + brotli_free_func free_func = m->free_func; + void* opaque = m->opaque; + BrotliEncoderCleanupState(state); + free_func(opaque, state); + } +} + +/* + Copies the given input data to the internal ring buffer of the compressor. + No processing of the data occurs at this time and this function can be + called multiple times before calling WriteBrotliData() to process the + accumulated input. At most input_block_size() bytes of input data can be + copied to the ring buffer, otherwise the next WriteBrotliData() will fail. + */ +static void CopyInputToRingBuffer(BrotliEncoderState* s, + const size_t input_size, + const uint8_t* input_buffer) { + RingBuffer* ringbuffer_ = &s->ringbuffer_; + MemoryManager* m = &s->memory_manager_; + if (!EnsureInitialized(s)) return; + RingBufferWrite(m, input_buffer, input_size, ringbuffer_); + if (BROTLI_IS_OOM(m)) return; + s->input_pos_ += input_size; + + /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the + hashing not depend on uninitialized data. This makes compression + deterministic and it prevents uninitialized memory warnings in Valgrind. + Even without erasing, the output would be valid (but nondeterministic). + + Background information: The compressor stores short (at most 8 bytes) + substrings of the input already read in a hash table, and detects + repetitions by looking up such substrings in the hash table. If it + can find a substring, it checks whether the substring is really there + in the ring buffer (or it's just a hash collision). Should the hash + table become corrupt, this check makes sure that the output is + still valid, albeit the compression ratio would be bad. + + The compressor populates the hash table from the ring buffer as it's + reading new bytes from the input. However, at the last few indexes of + the ring buffer, there are not enough bytes to build full-length + substrings from. Since the hash table always contains full-length + substrings, we erase with dummy zeros here to make sure that those + substrings will contain zeros at the end instead of uninitialized + data. + + Please note that erasing is not necessary (because the + memory region is already initialized since he ring buffer + has a `tail' that holds a copy of the beginning,) so we + skip erasing if we have already gone around at least once in + the ring buffer. + + Only clear during the first round of ring-buffer writes. On + subsequent rounds data in the ring-buffer would be affected. */ + if (ringbuffer_->pos_ <= ringbuffer_->mask_) { + /* This is the first time when the ring buffer is being written. + We clear 7 bytes just after the bytes that have been copied from + the input buffer. + + The ring-buffer has a "tail" that holds a copy of the beginning, + but only once the ring buffer has been fully written once, i.e., + pos <= mask. For the first time, we need to write values + in this tail (where index may be larger than mask), so that + we have exactly defined behavior and don't read uninitialized + memory. Due to performance reasons, hashing reads data using a + LOAD64, which can go 7 bytes beyond the bytes written in the + ring-buffer. */ + memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7); + } +} + +void BrotliEncoderSetCustomDictionary(BrotliEncoderState* s, size_t size, + const uint8_t* dict) { + size_t max_dict_size = MaxBackwardLimit(s->params.lgwin); + size_t dict_size = size; + MemoryManager* m = &s->memory_manager_; + + if (!EnsureInitialized(s)) return; + + if (dict_size == 0 || + s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + return; + } + if (size > max_dict_size) { + dict += size - max_dict_size; + dict_size = max_dict_size; + } + CopyInputToRingBuffer(s, dict_size, dict); + s->last_flush_pos_ = dict_size; + s->last_processed_pos_ = dict_size; + if (dict_size > 0) { + s->prev_byte_ = dict[dict_size - 1]; + } + if (dict_size > 1) { + s->prev_byte2_ = dict[dict_size - 2]; + } + HashersPrependCustomDictionary(m, &s->hashers_, &s->params, dict_size, dict); + if (BROTLI_IS_OOM(m)) return; +} + +/* Marks all input as processed. + Returns true if position wrapping occurs. */ +static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) { + uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_); + uint32_t wrapped_input_pos = WrapPosition(s->input_pos_); + s->last_processed_pos_ = s->input_pos_; + return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos); +} + +/* + Processes the accumulated input data and sets |*out_size| to the length of + the new output meta-block, or to zero if no new output meta-block has been + created (in this case the processed input data is buffered internally). + If |*out_size| is positive, |*output| points to the start of the output + data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is + always created. However, until |is_last| is BROTLI_TRUE encoder may retain up + to 7 bits of the last byte of output. To force encoder to dump the remaining + bits use WriteMetadata() to append an empty meta-data block. + Returns BROTLI_FALSE if the size of the input data is larger than + input_block_size(). + */ +static BROTLI_BOOL EncodeData( + BrotliEncoderState* s, const BROTLI_BOOL is_last, + const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) { + const uint64_t delta = UnprocessedInputSize(s); + const uint32_t bytes = (uint32_t)delta; + const uint32_t wrapped_last_processed_pos = + WrapPosition(s->last_processed_pos_); + uint8_t* data; + uint32_t mask; + MemoryManager* m = &s->memory_manager_; + + if (!EnsureInitialized(s)) return BROTLI_FALSE; + data = s->ringbuffer_.buffer_; + mask = s->ringbuffer_.mask_; + + /* Adding more blocks after "last" block is forbidden. */ + if (s->is_last_block_emitted_) return BROTLI_FALSE; + if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE; + + if (delta > InputBlockSize(s)) { + return BROTLI_FALSE; + } + if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY && + !s->command_buf_) { + s->command_buf_ = + BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); + s->literal_buf_ = + BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + uint8_t* storage; + size_t storage_ix = s->last_byte_bits_; + size_t table_size; + int* table; + + if (delta == 0 && !is_last) { + /* We have no new input data and we don't have to finish the stream, so + nothing to do. */ + *out_size = 0; + return BROTLI_TRUE; + } + storage = GetBrotliStorage(s, 2 * bytes + 502); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + storage[0] = s->last_byte_; + table = GetHashTable(s, s->params.quality, bytes, &table_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + BrotliCompressFragmentFast( + m, &data[wrapped_last_processed_pos & mask], + bytes, is_last, + table, table_size, + s->cmd_depths_, s->cmd_bits_, + &s->cmd_code_numbits_, s->cmd_code_, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } else { + BrotliCompressFragmentTwoPass( + m, &data[wrapped_last_processed_pos & mask], + bytes, is_last, + s->command_buf_, s->literal_buf_, + table, table_size, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + s->last_byte_ = storage[storage_ix >> 3]; + s->last_byte_bits_ = storage_ix & 7u; + UpdateLastProcessedPos(s); + *output = &storage[0]; + *out_size = storage_ix >> 3; + return BROTLI_TRUE; + } + + { + /* Theoretical max number of commands is 1 per 2 bytes. */ + size_t newsize = s->num_commands_ + bytes / 2 + 1; + if (newsize > s->cmd_alloc_size_) { + Command* new_commands; + /* Reserve a bit more memory to allow merging with a next block + without reallocation: that would impact speed. */ + newsize += (bytes / 4) + 16; + s->cmd_alloc_size_ = newsize; + new_commands = BROTLI_ALLOC(m, Command, newsize); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (s->commands_) { + memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_); + BROTLI_FREE(m, s->commands_); + } + s->commands_ = new_commands; + } + } + + BrotliCreateBackwardReferences(m, bytes, wrapped_last_processed_pos, + is_last, data, mask, + &s->params, + &s->hashers_, + s->dist_cache_, + &s->last_insert_len_, + &s->commands_[s->num_commands_], + &s->num_commands_, + &s->num_literals_); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + + { + const size_t max_length = MaxMetablockSize(&s->params); + const size_t max_literals = max_length / 8; + const size_t max_commands = max_length / 8; + const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_); + /* If maximal possible additional block doesn't fit metablock, flush now. */ + /* TODO: Postpone decision until next block arrives? */ + const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL( + processed_bytes + InputBlockSize(s) <= max_length); + /* If block splitting is not used, then flush as soon as there is some + amount of commands / literals produced. */ + const BROTLI_BOOL should_flush = TO_BROTLI_BOOL( + s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT && + s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS); + if (!is_last && !force_flush && !should_flush && + next_input_fits_metablock && + s->num_literals_ < max_literals && + s->num_commands_ < max_commands) { + /* Merge with next input block. Everything will happen later. */ + if (UpdateLastProcessedPos(s)) { + HashersReset(&s->hashers_, ChooseHasher(&s->params)); + } + *out_size = 0; + return BROTLI_TRUE; + } + } + + /* Create the last insert-only command. */ + if (s->last_insert_len_ > 0) { + InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_); + s->num_literals_ += s->last_insert_len_; + s->last_insert_len_ = 0; + } + + if (!is_last && s->input_pos_ == s->last_flush_pos_) { + /* We have no new input data and we don't have to finish the stream, so + nothing to do. */ + *out_size = 0; + return BROTLI_TRUE; + } + assert(s->input_pos_ >= s->last_flush_pos_); + assert(s->input_pos_ > s->last_flush_pos_ || is_last); + assert(s->input_pos_ - s->last_flush_pos_ <= 1u << 24); + { + const uint32_t metablock_size = + (uint32_t)(s->input_pos_ - s->last_flush_pos_); + uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 502); + size_t storage_ix = s->last_byte_bits_; + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + storage[0] = s->last_byte_; + WriteMetaBlockInternal( + m, data, mask, s->last_flush_pos_, metablock_size, is_last, + &s->params, s->prev_byte_, s->prev_byte2_, + s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_, + s->dist_cache_, &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + s->last_byte_ = storage[storage_ix >> 3]; + s->last_byte_bits_ = storage_ix & 7u; + s->last_flush_pos_ = s->input_pos_; + if (UpdateLastProcessedPos(s)) { + HashersReset(&s->hashers_, ChooseHasher(&s->params)); + } + if (s->last_flush_pos_ > 0) { + s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask]; + } + if (s->last_flush_pos_ > 1) { + s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask]; + } + s->num_commands_ = 0; + s->num_literals_ = 0; + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->dist_cache_)); + *output = &storage[0]; + *out_size = storage_ix >> 3; + return BROTLI_TRUE; + } +} + +/* Dumps remaining output bits and metadata header to |header|. + Returns number of produced bytes. + REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long. + REQUIRED: |block_size| <= (1 << 24). */ +static size_t WriteMetadataHeader( + BrotliEncoderState* s, const size_t block_size, uint8_t* header) { + size_t storage_ix; + storage_ix = s->last_byte_bits_; + header[0] = s->last_byte_; + s->last_byte_ = 0; + s->last_byte_bits_ = 0; + + BrotliWriteBits(1, 0, &storage_ix, header); + BrotliWriteBits(2, 3, &storage_ix, header); + BrotliWriteBits(1, 0, &storage_ix, header); + if (block_size == 0) { + BrotliWriteBits(2, 0, &storage_ix, header); + } else { + uint32_t nbits = (block_size == 1) ? 0 : + (Log2FloorNonZero((uint32_t)block_size - 1) + 1); + uint32_t nbytes = (nbits + 7) / 8; + BrotliWriteBits(2, nbytes, &storage_ix, header); + BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header); + } + return (storage_ix + 7u) >> 3; +} + +static BROTLI_BOOL BrotliCompressBufferQuality10( + int lgwin, size_t input_size, const uint8_t* input_buffer, + size_t* encoded_size, uint8_t* encoded_buffer) { + MemoryManager memory_manager; + MemoryManager* m = &memory_manager; + + const size_t mask = BROTLI_SIZE_MAX >> 1; + const size_t max_backward_limit = MaxBackwardLimit(lgwin); + int dist_cache[4] = { 4, 11, 15, 16 }; + int saved_dist_cache[4] = { 4, 11, 15, 16 }; + BROTLI_BOOL ok = BROTLI_TRUE; + const size_t max_out_size = *encoded_size; + size_t total_out_size = 0; + uint8_t last_byte; + uint8_t last_byte_bits; + H10* hasher; + + const size_t hasher_eff_size = + BROTLI_MIN(size_t, input_size, max_backward_limit + BROTLI_WINDOW_GAP); + + BrotliEncoderParams params; + + const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1); + size_t max_block_size; + const size_t max_metablock_size = (size_t)1 << lgmetablock; + const size_t max_literals_per_metablock = max_metablock_size / 8; + const size_t max_commands_per_metablock = max_metablock_size / 8; + size_t metablock_start = 0; + uint8_t prev_byte = 0; + uint8_t prev_byte2 = 0; + + params.mode = BROTLI_DEFAULT_MODE; + params.quality = 10; + params.lgwin = lgwin; + params.lgblock = 0; + SanitizeParams(¶ms); + params.lgblock = ComputeLgBlock(¶ms); + max_block_size = (size_t)1 << params.lgblock; + + BrotliInitMemoryManager(m, 0, 0, 0); + + assert(input_size <= mask + 1); + EncodeWindowBits(lgwin, &last_byte, &last_byte_bits); + hasher = BROTLI_ALLOC(m, H10, 1); + if (BROTLI_IS_OOM(m)) goto oom; + InitializeH10(hasher); + InitH10(m, hasher, input_buffer, ¶ms, 0, hasher_eff_size, 1); + if (BROTLI_IS_OOM(m)) goto oom; + + while (ok && metablock_start < input_size) { + const size_t metablock_end = + BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_size); + const size_t expected_num_commands = + (metablock_end - metablock_start) / 12 + 16; + Command* commands = 0; + size_t num_commands = 0; + size_t last_insert_len = 0; + size_t num_literals = 0; + size_t metablock_size = 0; + size_t cmd_alloc_size = 0; + BROTLI_BOOL is_last; + uint8_t* storage; + size_t storage_ix; + + size_t block_start; + for (block_start = metablock_start; block_start < metablock_end; ) { + size_t block_size = + BROTLI_MIN(size_t, metablock_end - block_start, max_block_size); + ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1); + size_t path_size; + size_t new_cmd_alloc_size; + if (BROTLI_IS_OOM(m)) goto oom; + BrotliInitZopfliNodes(nodes, block_size + 1); + StitchToPreviousBlockH10(hasher, block_size, block_start, + input_buffer, mask); + path_size = BrotliZopfliComputeShortestPath( + m, block_size, block_start, input_buffer, mask, ¶ms, + max_backward_limit, dist_cache, hasher, nodes); + if (BROTLI_IS_OOM(m)) goto oom; + /* We allocate a command buffer in the first iteration of this loop that + will be likely big enough for the whole metablock, so that for most + inputs we will not have to reallocate in later iterations. We do the + allocation here and not before the loop, because if the input is small, + this will be allocated after the Zopfli cost model is freed, so this + will not increase peak memory usage. + TODO: If the first allocation is too small, increase command + buffer size exponentially. */ + new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands, + num_commands + path_size + 1); + if (cmd_alloc_size != new_cmd_alloc_size) { + Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size); + if (BROTLI_IS_OOM(m)) goto oom; + cmd_alloc_size = new_cmd_alloc_size; + if (commands) { + memcpy(new_commands, commands, sizeof(Command) * num_commands); + BROTLI_FREE(m, commands); + } + commands = new_commands; + } + BrotliZopfliCreateCommands(block_size, block_start, max_backward_limit, + &nodes[0], dist_cache, &last_insert_len, + &commands[num_commands], &num_literals); + num_commands += path_size; + block_start += block_size; + metablock_size += block_size; + BROTLI_FREE(m, nodes); + if (num_literals > max_literals_per_metablock || + num_commands > max_commands_per_metablock) { + break; + } + } + + if (last_insert_len > 0) { + InitInsertCommand(&commands[num_commands++], last_insert_len); + num_literals += last_insert_len; + } + + is_last = TO_BROTLI_BOOL(metablock_start + metablock_size == input_size); + storage = NULL; + storage_ix = last_byte_bits; + + if (metablock_size == 0) { + /* Write the ISLAST and ISEMPTY bits. */ + storage = BROTLI_ALLOC(m, uint8_t, 16); + if (BROTLI_IS_OOM(m)) goto oom; + storage[0] = last_byte; + BrotliWriteBits(2, 3, &storage_ix, storage); + storage_ix = (storage_ix + 7u) & ~7u; + } else if (!ShouldCompress(input_buffer, mask, metablock_start, + metablock_size, num_literals, num_commands)) { + /* Restore the distance cache, as its last update by + CreateBackwardReferences is now unused. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16); + if (BROTLI_IS_OOM(m)) goto oom; + storage[0] = last_byte; + BrotliStoreUncompressedMetaBlock(is_last, input_buffer, + metablock_start, mask, metablock_size, + &storage_ix, storage); + } else { + uint32_t num_direct_distance_codes = 0; + uint32_t distance_postfix_bits = 0; + ContextType literal_context_mode = CONTEXT_UTF8; + MetaBlockSplit mb; + InitMetaBlockSplit(&mb); + if (!BrotliIsMostlyUTF8(input_buffer, metablock_start, mask, + metablock_size, kMinUTF8Ratio)) { + literal_context_mode = CONTEXT_SIGNED; + } + BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask, ¶ms, + prev_byte, prev_byte2, + commands, num_commands, + literal_context_mode, + &mb); + if (BROTLI_IS_OOM(m)) goto oom; + BrotliOptimizeHistograms(num_direct_distance_codes, + distance_postfix_bits, + &mb); + storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 502); + if (BROTLI_IS_OOM(m)) goto oom; + storage[0] = last_byte; + BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size, + mask, prev_byte, prev_byte2, + is_last, + num_direct_distance_codes, + distance_postfix_bits, + literal_context_mode, + commands, num_commands, + &mb, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) goto oom; + if (metablock_size + 4 < (storage_ix >> 3)) { + /* Restore the distance cache and last byte. */ + memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); + storage[0] = last_byte; + storage_ix = last_byte_bits; + BrotliStoreUncompressedMetaBlock(is_last, input_buffer, + metablock_start, mask, + metablock_size, &storage_ix, storage); + } + DestroyMetaBlockSplit(m, &mb); + } + last_byte = storage[storage_ix >> 3]; + last_byte_bits = storage_ix & 7u; + metablock_start += metablock_size; + prev_byte = input_buffer[metablock_start - 1]; + prev_byte2 = input_buffer[metablock_start - 2]; + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); + + { + const size_t out_size = storage_ix >> 3; + total_out_size += out_size; + if (total_out_size <= max_out_size) { + memcpy(encoded_buffer, storage, out_size); + encoded_buffer += out_size; + } else { + ok = BROTLI_FALSE; + } + } + BROTLI_FREE(m, storage); + BROTLI_FREE(m, commands); + } + + *encoded_size = total_out_size; + CleanupH10(m, hasher); + BROTLI_FREE(m, hasher); + return ok; + +oom: + BrotliWipeOutMemoryManager(m); + return BROTLI_FALSE; +} + +size_t BrotliEncoderMaxCompressedSize(size_t input_size) { + /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */ + size_t num_large_blocks = input_size >> 24; + size_t tail = input_size - (num_large_blocks << 24); + size_t tail_overhead = (tail > (1 << 20)) ? 4 : 3; + size_t overhead = 2 + (4 * num_large_blocks) + tail_overhead + 1; + size_t result = input_size + overhead; + if (input_size == 0) return 1; + return (result < input_size) ? 0 : result; +} + +/* Wraps data to uncompressed brotli stream with minimal window size. + |output| should point at region with at least BrotliEncoderMaxCompressedSize + addressable bytes. + Returns the length of stream. */ +static size_t MakeUncompressedStream( + const uint8_t* input, size_t input_size, uint8_t* output) { + size_t size = input_size; + size_t result = 0; + size_t offset = 0; + if (input_size == 0) { + output[0] = 6; + return 1; + } + output[result++] = 0x21; /* window bits = 10, is_last = false */ + output[result++] = 0x03; /* empty metadata, padding */ + while (size > 0) { + uint32_t nibbles = 0; + uint32_t chunk_size; + uint32_t bits; + chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size; + if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1; + bits = + (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles)); + output[result++] = (uint8_t)bits; + output[result++] = (uint8_t)(bits >> 8); + output[result++] = (uint8_t)(bits >> 16); + if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24); + memcpy(&output[result], &input[offset], chunk_size); + result += chunk_size; + offset += chunk_size; + size -= chunk_size; + } + output[result++] = 3; + return result; +} + +BROTLI_BOOL BrotliEncoderCompress( + int quality, int lgwin, BrotliEncoderMode mode, size_t input_size, + const uint8_t* input_buffer, size_t* encoded_size, + uint8_t* encoded_buffer) { + BrotliEncoderState* s; + size_t out_size = *encoded_size; + const uint8_t* input_start = input_buffer; + uint8_t* output_start = encoded_buffer; + size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size); + if (out_size == 0) { + /* Output buffer needs at least one byte. */ + return BROTLI_FALSE; + } + if (input_size == 0) { + /* Handle the special case of empty input. */ + *encoded_size = 1; + *encoded_buffer = 6; + return BROTLI_TRUE; + } + if (quality == 10) { + /* TODO: Implement this direct path for all quality levels. */ + const int lg_win = BROTLI_MIN(int, BROTLI_MAX_WINDOW_BITS, + BROTLI_MAX(int, 16, lgwin)); + int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer, + encoded_size, encoded_buffer); + if (!ok || (max_out_size && *encoded_size > max_out_size)) { + goto fallback; + } + return BROTLI_TRUE; + } + + s = BrotliEncoderCreateInstance(0, 0, 0); + if (!s) { + return BROTLI_FALSE; + } else { + size_t available_in = input_size; + const uint8_t* next_in = input_buffer; + size_t available_out = *encoded_size; + uint8_t* next_out = encoded_buffer; + size_t total_out = 0; + BROTLI_BOOL result = BROTLI_FALSE; + BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality); + BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin); + BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode); + result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH, + &available_in, &next_in, &available_out, &next_out, &total_out); + if (!BrotliEncoderIsFinished(s)) result = 0; + *encoded_size = total_out; + BrotliEncoderDestroyInstance(s); + if (!result || (max_out_size && *encoded_size > max_out_size)) { + goto fallback; + } + return BROTLI_TRUE; + } +fallback: + *encoded_size = 0; + if (!max_out_size) return BROTLI_FALSE; + if (out_size >= max_out_size) { + *encoded_size = + MakeUncompressedStream(input_start, input_size, output_start); + return BROTLI_TRUE; + } + return BROTLI_FALSE; +} + +static void InjectBytePaddingBlock(BrotliEncoderState* s) { + uint32_t seal = s->last_byte_; + size_t seal_bits = s->last_byte_bits_; + uint8_t* destination; + s->last_byte_ = 0; + s->last_byte_bits_ = 0; + /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */ + seal |= 0x6u << seal_bits; + seal_bits += 6; + /* If we have already created storage, then append to it. + Storage is valid until next block is being compressed. */ + if (s->next_out_) { + destination = s->next_out_ + s->available_out_; + } else { + destination = s->tiny_buf_.u8; + s->next_out_ = destination; + } + destination[0] = (uint8_t)seal; + if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8); + s->available_out_ += (seal_bits + 7) >> 3; +} + +/* Injects padding bits or pushes compressed data to output. + Returns false if nothing is done. */ +static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s, + size_t* available_out, uint8_t** next_out, size_t* total_out) { + if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED && + s->last_byte_bits_ != 0) { + InjectBytePaddingBlock(s); + return BROTLI_TRUE; + } + + if (s->available_out_ != 0 && *available_out != 0) { + size_t copy_output_size = + BROTLI_MIN(size_t, s->available_out_, *available_out); + memcpy(*next_out, s->next_out_, copy_output_size); + *next_out += copy_output_size; + *available_out -= copy_output_size; + s->next_out_ += copy_output_size; + s->available_out_ -= copy_output_size; + s->total_out_ += copy_output_size; + if (total_out) *total_out = s->total_out_; + return BROTLI_TRUE; + } + + return BROTLI_FALSE; +} + +static void CheckFlushComplete(BrotliEncoderState* s) { + if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED && + s->available_out_ == 0) { + s->stream_state_ = BROTLI_STREAM_PROCESSING; + s->next_out_ = 0; + } +} + +static BROTLI_BOOL BrotliEncoderCompressStreamFast( + BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in, + const uint8_t** next_in, size_t* available_out, uint8_t** next_out, + size_t* total_out) { + const size_t block_size_limit = (size_t)1 << s->params.lgwin; + const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize, + BROTLI_MIN(size_t, *available_in, block_size_limit)); + uint32_t* tmp_command_buf = NULL; + uint32_t* command_buf = NULL; + uint8_t* tmp_literal_buf = NULL; + uint8_t* literal_buf = NULL; + MemoryManager* m = &s->memory_manager_; + if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY && + s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) { + return BROTLI_FALSE; + } + if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) { + s->command_buf_ = + BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); + s->literal_buf_ = + BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + if (s->command_buf_) { + command_buf = s->command_buf_; + literal_buf = s->literal_buf_; + } else { + tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size); + tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + command_buf = tmp_command_buf; + literal_buf = tmp_literal_buf; + } + } + + while (BROTLI_TRUE) { + if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + continue; + } + + /* Compress block only when internal output buffer is empty, stream is not + finished, there is no pending flush request, and there is either + additional input or pending operation. */ + if (s->available_out_ == 0 && + s->stream_state_ == BROTLI_STREAM_PROCESSING && + (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) { + size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in); + BROTLI_BOOL is_last = + (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH); + BROTLI_BOOL force_flush = + (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH); + size_t max_out_size = 2 * block_size + 502; + BROTLI_BOOL inplace = BROTLI_TRUE; + uint8_t* storage = NULL; + size_t storage_ix = s->last_byte_bits_; + size_t table_size; + int* table; + + if (force_flush && block_size == 0) { + s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED; + continue; + } + if (max_out_size <= *available_out) { + storage = *next_out; + } else { + inplace = BROTLI_FALSE; + storage = GetBrotliStorage(s, max_out_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + storage[0] = s->last_byte_; + table = GetHashTable(s, s->params.quality, block_size, &table_size); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { + BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table, + table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_, + s->cmd_code_, &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } else { + BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last, + command_buf, literal_buf, table, table_size, + &storage_ix, storage); + if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + } + *next_in += block_size; + *available_in -= block_size; + if (inplace) { + size_t out_bytes = storage_ix >> 3; + assert(out_bytes <= *available_out); + assert((storage_ix & 7) == 0 || out_bytes < *available_out); + *next_out += out_bytes; + *available_out -= out_bytes; + s->total_out_ += out_bytes; + if (total_out) *total_out = s->total_out_; + } else { + size_t out_bytes = storage_ix >> 3; + s->next_out_ = storage; + s->available_out_ = out_bytes; + } + s->last_byte_ = storage[storage_ix >> 3]; + s->last_byte_bits_ = storage_ix & 7u; + + if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED; + if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED; + continue; + } + break; + } + BROTLI_FREE(m, tmp_command_buf); + BROTLI_FREE(m, tmp_literal_buf); + CheckFlushComplete(s); + return BROTLI_TRUE; +} + +static BROTLI_BOOL ProcessMetadata( + BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in, + size_t* available_out, uint8_t** next_out, size_t* total_out) { + if (*available_in > (1u << 24)) return BROTLI_FALSE; + /* Switch to metadata block workflow, if required. */ + if (s->stream_state_ == BROTLI_STREAM_PROCESSING) { + s->remaining_metadata_bytes_ = (uint32_t)*available_in; + s->stream_state_ = BROTLI_STREAM_METADATA_HEAD; + } + if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD && + s->stream_state_ != BROTLI_STREAM_METADATA_BODY) { + return BROTLI_FALSE; + } + + while (BROTLI_TRUE) { + if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + continue; + } + if (s->available_out_ != 0) break; + + if (s->input_pos_ != s->last_flush_pos_) { + BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE, + &s->available_out_, &s->next_out_); + if (!result) return BROTLI_FALSE; + continue; + } + + if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) { + s->next_out_ = s->tiny_buf_.u8; + s->available_out_ = + WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_); + s->stream_state_ = BROTLI_STREAM_METADATA_BODY; + continue; + } else { + /* Exit workflow only when there is no more input and no more output. + Otherwise client may continue producing empty metadata blocks. */ + if (s->remaining_metadata_bytes_ == 0) { + s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX; + s->stream_state_ = BROTLI_STREAM_PROCESSING; + break; + } + if (*available_out) { + /* Directly copy input to output. */ + uint32_t copy = (uint32_t)BROTLI_MIN( + size_t, s->remaining_metadata_bytes_, *available_out); + memcpy(*next_out, *next_in, copy); + *next_in += copy; + *available_in -= copy; + s->remaining_metadata_bytes_ -= copy; + *next_out += copy; + *available_out -= copy; + } else { + /* This guarantees progress in "TakeOutput" workflow. */ + uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16); + s->next_out_ = s->tiny_buf_.u8; + memcpy(s->next_out_, *next_in, copy); + *next_in += copy; + *available_in -= copy; + s->remaining_metadata_bytes_ -= copy; + s->available_out_ = copy; + } + continue; + } + } + + return BROTLI_TRUE; +} + +BROTLI_BOOL BrotliEncoderCompressStream( + BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in, + const uint8_t** next_in, size_t* available_out,uint8_t** next_out, + size_t* total_out) { + if (!EnsureInitialized(s)) return BROTLI_FALSE; + + /* Unfinished metadata block; check requirements. */ + if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) { + if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE; + if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE; + } + + if (op == BROTLI_OPERATION_EMIT_METADATA) { + return ProcessMetadata( + s, available_in, next_in, available_out, next_out, total_out); + } + + if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD || + s->stream_state_ == BROTLI_STREAM_METADATA_BODY) { + return BROTLI_FALSE; + } + + if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) { + return BROTLI_FALSE; + } + if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + return BrotliEncoderCompressStreamFast(s, op, available_in, next_in, + available_out, next_out, total_out); + } + while (BROTLI_TRUE) { + size_t remaining_block_size = RemainingInputBlockSize(s); + + if (remaining_block_size != 0 && *available_in != 0) { + size_t copy_input_size = + BROTLI_MIN(size_t, remaining_block_size, *available_in); + CopyInputToRingBuffer(s, copy_input_size, *next_in); + *next_in += copy_input_size; + *available_in -= copy_input_size; + continue; + } + + if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + continue; + } + + /* Compress data only when internal output buffer is empty, stream is not + finished and there is no pending flush request. */ + if (s->available_out_ == 0 && + s->stream_state_ == BROTLI_STREAM_PROCESSING) { + if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) { + BROTLI_BOOL is_last = TO_BROTLI_BOOL( + (*available_in == 0) && op == BROTLI_OPERATION_FINISH); + BROTLI_BOOL force_flush = TO_BROTLI_BOOL( + (*available_in == 0) && op == BROTLI_OPERATION_FLUSH); + BROTLI_BOOL result = EncodeData(s, is_last, force_flush, + &s->available_out_, &s->next_out_); + if (!result) return BROTLI_FALSE; + if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED; + if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED; + continue; + } + } + break; + } + CheckFlushComplete(s); + return BROTLI_TRUE; +} + +BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) { + return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED && + !BrotliEncoderHasMoreOutput(s)); +} + +BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) { + return TO_BROTLI_BOOL(s->available_out_ != 0); +} + +const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) { + size_t consumed_size = s->available_out_; + uint8_t* result = s->next_out_; + if (*size) { + consumed_size = BROTLI_MIN(size_t, *size, s->available_out_); + } + if (consumed_size) { + s->next_out_ += consumed_size; + s->available_out_ -= consumed_size; + s->total_out_ += consumed_size; + CheckFlushComplete(s); + *size = consumed_size; + } else { + *size = 0; + result = 0; + } + return result; +} + +uint32_t BrotliEncoderVersion(void) { + return BROTLI_VERSION; +} + + +/* DEPRECATED >>> */ +size_t BrotliEncoderInputBlockSize(BrotliEncoderState* s) { + return InputBlockSize(s); +} +void BrotliEncoderCopyInputToRingBuffer(BrotliEncoderState* s, + const size_t input_size, + const uint8_t* input_buffer) { + CopyInputToRingBuffer(s, input_size, input_buffer); +} +BROTLI_BOOL BrotliEncoderWriteData( + BrotliEncoderState* s, const BROTLI_BOOL is_last, + const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) { + return EncodeData(s, is_last, force_flush, out_size, output); +} +/* <<< DEPRECATED */ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/encode.cc b/third_party/brotli/enc/encode.cc deleted file mode 100644 index b92768e9..0000000 --- a/third_party/brotli/enc/encode.cc +++ /dev/null
@@ -1,1180 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Implementation of Brotli compressor. - -#include "./encode.h" - -#include <algorithm> -#include <cstdlib> /* free, malloc */ -#include <cstring> /* memset */ -#include <limits> - -#include "./backward_references.h" -#include "./bit_cost.h" -#include "./block_splitter.h" -#include "./brotli_bit_stream.h" -#include "./cluster.h" -#include "./context.h" -#include "./metablock.h" -#include "./transform.h" -#include "./compress_fragment.h" -#include "./compress_fragment_two_pass.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./hash.h" -#include "./histogram.h" -#include "./prefix.h" -#include "./utf8_util.h" -#include "./write_bits.h" - -namespace brotli { - -static const int kMinQualityForBlockSplit = 4; -static const int kMinQualityForContextModeling = 5; -static const int kMinQualityForOptimizeHistograms = 4; -// For quality 2 there is no block splitting, so we buffer at most this much -// literals and commands. -static const size_t kMaxNumDelayedSymbols = 0x2fff; - -#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src)); - -static void RecomputeDistancePrefixes(Command* cmds, - size_t num_commands, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits) { - if (num_direct_distance_codes == 0 && distance_postfix_bits == 0) { - return; - } - for (size_t i = 0; i < num_commands; ++i) { - Command* cmd = &cmds[i]; - if (cmd->copy_len() && cmd->cmd_prefix_ >= 128) { - PrefixEncodeCopyDistance(cmd->DistanceCode(), - num_direct_distance_codes, - distance_postfix_bits, - &cmd->dist_prefix_, - &cmd->dist_extra_); - } - } -} - -/* Wraps 64-bit input position to 32-bit ringbuffer position preserving - "not-a-first-lap" feature. */ -static uint32_t WrapPosition(uint64_t position) { - uint32_t result = static_cast<uint32_t>(position); - if (position > (1u << 30)) { - result = (result & ((1u << 30) - 1)) | (1u << 30); - } - return result; -} - -uint8_t* BrotliCompressor::GetBrotliStorage(size_t size) { - if (storage_size_ < size) { - delete[] storage_; - storage_ = new uint8_t[size]; - storage_size_ = size; - } - return storage_; -} - -static size_t MaxHashTableSize(int quality) { - return quality == 0 ? 1 << 15 : 1 << 17; -} - -static size_t HashTableSize(size_t max_table_size, size_t input_size) { - size_t htsize = 256; - while (htsize < max_table_size && htsize < input_size) { - htsize <<= 1; - } - return htsize; -} - -int* BrotliCompressor::GetHashTable(int quality, - size_t input_size, - size_t* table_size) { - // Use smaller hash table when input.size() is smaller, since we - // fill the table, incurring O(hash table size) overhead for - // compression, and if the input is short, we won't need that - // many hash table entries anyway. - const size_t max_table_size = MaxHashTableSize(quality); - assert(max_table_size >= 256); - size_t htsize = HashTableSize(max_table_size, input_size); - - int* table; - if (htsize <= sizeof(small_table_) / sizeof(small_table_[0])) { - table = small_table_; - } else { - if (large_table_ == NULL) { - large_table_ = new int[max_table_size]; - } - table = large_table_; - } - - *table_size = htsize; - memset(table, 0, htsize * sizeof(*table)); - return table; -} - -static void EncodeWindowBits(int lgwin, uint8_t* last_byte, - uint8_t* last_byte_bits) { - if (lgwin == 16) { - *last_byte = 0; - *last_byte_bits = 1; - } else if (lgwin == 17) { - *last_byte = 1; - *last_byte_bits = 7; - } else if (lgwin > 17) { - *last_byte = static_cast<uint8_t>(((lgwin - 17) << 1) | 1); - *last_byte_bits = 4; - } else { - *last_byte = static_cast<uint8_t>(((lgwin - 8) << 4) | 1); - *last_byte_bits = 7; - } -} - -// Initializes the command and distance prefix codes for the first block. -static void InitCommandPrefixCodes(uint8_t cmd_depths[128], - uint16_t cmd_bits[128], - uint8_t cmd_code[512], - size_t* cmd_code_numbits) { - static const uint8_t kDefaultCommandDepths[128] = { - 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, - 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, - 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6, - 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - }; - static const uint16_t kDefaultCommandBits[128] = { - 0, 0, 8, 9, 3, 35, 7, 71, - 39, 103, 23, 47, 175, 111, 239, 31, - 0, 0, 0, 4, 12, 2, 10, 6, - 13, 29, 11, 43, 27, 59, 87, 55, - 15, 79, 319, 831, 191, 703, 447, 959, - 0, 14, 1, 25, 5, 21, 19, 51, - 119, 159, 95, 223, 479, 991, 63, 575, - 127, 639, 383, 895, 255, 767, 511, 1023, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12, - 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255, - 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095, - }; - COPY_ARRAY(cmd_depths, kDefaultCommandDepths); - COPY_ARRAY(cmd_bits, kDefaultCommandBits); - - // Initialize the pre-compressed form of the command and distance prefix - // codes. - static const uint8_t kDefaultCommandCode[] = { - 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6, - 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c, - 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa, - 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94, - 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00, - }; - static const int kDefaultCommandCodeNumBits = 448; - COPY_ARRAY(cmd_code, kDefaultCommandCode); - *cmd_code_numbits = kDefaultCommandCodeNumBits; -} - -// Decide about the context map based on the ability of the prediction -// ability of the previous byte UTF8-prefix on the next byte. The -// prediction ability is calculated as shannon entropy. Here we need -// shannon entropy instead of 'BitsEntropy' since the prefix will be -// encoded with the remaining 6 bits of the following byte, and -// BitsEntropy will assume that symbol to be stored alone using Huffman -// coding. -static void ChooseContextMap(int quality, - uint32_t* bigram_histo, - size_t* num_literal_contexts, - const uint32_t** literal_context_map) { - uint32_t monogram_histo[3] = { 0 }; - uint32_t two_prefix_histo[6] = { 0 }; - size_t total = 0; - for (size_t i = 0; i < 9; ++i) { - total += bigram_histo[i]; - monogram_histo[i % 3] += bigram_histo[i]; - size_t j = i; - if (j >= 6) { - j -= 6; - } - two_prefix_histo[j] += bigram_histo[i]; - } - size_t dummy; - double entropy1 = ShannonEntropy(monogram_histo, 3, &dummy); - double entropy2 = (ShannonEntropy(two_prefix_histo, 3, &dummy) + - ShannonEntropy(two_prefix_histo + 3, 3, &dummy)); - double entropy3 = 0; - for (size_t k = 0; k < 3; ++k) { - entropy3 += ShannonEntropy(bigram_histo + 3 * k, 3, &dummy); - } - - assert(total != 0); - double scale = 1.0 / static_cast<double>(total); - entropy1 *= scale; - entropy2 *= scale; - entropy3 *= scale; - - static const uint32_t kStaticContextMapContinuation[64] = { - 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - static const uint32_t kStaticContextMapSimpleUTF8[64] = { - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - if (quality < 7) { - // 3 context models is a bit slower, don't use it at lower qualities. - entropy3 = entropy1 * 10; - } - // If expected savings by symbol are less than 0.2 bits, skip the - // context modeling -- in exchange for faster decoding speed. - if (entropy1 - entropy2 < 0.2 && - entropy1 - entropy3 < 0.2) { - *num_literal_contexts = 1; - } else if (entropy2 - entropy3 < 0.02) { - *num_literal_contexts = 2; - *literal_context_map = kStaticContextMapSimpleUTF8; - } else { - *num_literal_contexts = 3; - *literal_context_map = kStaticContextMapContinuation; - } -} - -static void DecideOverLiteralContextModeling( - const uint8_t* input, - size_t start_pos, - size_t length, - size_t mask, - int quality, - ContextType* literal_context_mode, - size_t* num_literal_contexts, - const uint32_t** literal_context_map) { - if (quality < kMinQualityForContextModeling || length < 64) { - return; - } - // Gather bigram data of the UTF8 byte prefixes. To make the analysis of - // UTF8 data faster we only examine 64 byte long strides at every 4kB - // intervals. - const size_t end_pos = start_pos + length; - uint32_t bigram_prefix_histo[9] = { 0 }; - for (; start_pos + 64 <= end_pos; start_pos += 4096) { - static const int lut[4] = { 0, 0, 1, 2 }; - const size_t stride_end_pos = start_pos + 64; - int prev = lut[input[start_pos & mask] >> 6] * 3; - for (size_t pos = start_pos + 1; pos < stride_end_pos; ++pos) { - const uint8_t literal = input[pos & mask]; - ++bigram_prefix_histo[prev + lut[literal >> 6]]; - prev = lut[literal >> 6] * 3; - } - } - *literal_context_mode = CONTEXT_UTF8; - ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts, - literal_context_map); -} - -static bool ShouldCompress(const uint8_t* data, - const size_t mask, - const uint64_t last_flush_pos, - const size_t bytes, - const size_t num_literals, - const size_t num_commands) { - if (num_commands < (bytes >> 8) + 2) { - if (num_literals > 0.99 * static_cast<double>(bytes)) { - uint32_t literal_histo[256] = { 0 }; - static const uint32_t kSampleRate = 13; - static const double kMinEntropy = 7.92; - const double bit_cost_threshold = - static_cast<double>(bytes) * kMinEntropy / kSampleRate; - size_t t = (bytes + kSampleRate - 1) / kSampleRate; - uint32_t pos = static_cast<uint32_t>(last_flush_pos); - for (size_t i = 0; i < t; i++) { - ++literal_histo[data[pos & mask]]; - pos += kSampleRate; - } - if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) { - return false; - } - } - } - return true; -} - -static void WriteMetaBlockInternal(const uint8_t* data, - const size_t mask, - const uint64_t last_flush_pos, - const size_t bytes, - const bool is_last, - const int quality, - const bool font_mode, - const uint8_t prev_byte, - const uint8_t prev_byte2, - const size_t num_literals, - const size_t num_commands, - Command* commands, - const int* saved_dist_cache, - int* dist_cache, - size_t* storage_ix, - uint8_t* storage) { - if (bytes == 0) { - // Write the ISLAST and ISEMPTY bits. - WriteBits(2, 3, storage_ix, storage); - *storage_ix = (*storage_ix + 7u) & ~7u; - return; - } - - if (!ShouldCompress(data, mask, last_flush_pos, bytes, - num_literals, num_commands)) { - // Restore the distance cache, as its last update by - // CreateBackwardReferences is now unused. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - StoreUncompressedMetaBlock(is_last, data, - WrapPosition(last_flush_pos), mask, bytes, - storage_ix, storage); - return; - } - - const uint8_t last_byte = storage[0]; - const uint8_t last_byte_bits = static_cast<uint8_t>(*storage_ix & 0xff); - uint32_t num_direct_distance_codes = 0; - uint32_t distance_postfix_bits = 0; - if (quality > 9 && font_mode) { - num_direct_distance_codes = 12; - distance_postfix_bits = 1; - RecomputeDistancePrefixes(commands, - num_commands, - num_direct_distance_codes, - distance_postfix_bits); - } - if (quality == 2) { - StoreMetaBlockFast(data, WrapPosition(last_flush_pos), - bytes, mask, is_last, - commands, num_commands, - storage_ix, storage); - } else if (quality < kMinQualityForBlockSplit) { - StoreMetaBlockTrivial(data, WrapPosition(last_flush_pos), - bytes, mask, is_last, - commands, num_commands, - storage_ix, storage); - } else { - MetaBlockSplit mb; - ContextType literal_context_mode = CONTEXT_UTF8; - if (quality <= 9) { - size_t num_literal_contexts = 1; - const uint32_t* literal_context_map = NULL; - DecideOverLiteralContextModeling(data, WrapPosition(last_flush_pos), - bytes, mask, - quality, - &literal_context_mode, - &num_literal_contexts, - &literal_context_map); - if (literal_context_map == NULL) { - BuildMetaBlockGreedy(data, WrapPosition(last_flush_pos), mask, - commands, num_commands, &mb); - } else { - BuildMetaBlockGreedyWithContexts(data, WrapPosition(last_flush_pos), - mask, - prev_byte, prev_byte2, - literal_context_mode, - num_literal_contexts, - literal_context_map, - commands, num_commands, - &mb); - } - } else { - if (!IsMostlyUTF8(data, WrapPosition(last_flush_pos), mask, bytes, - kMinUTF8Ratio)) { - literal_context_mode = CONTEXT_SIGNED; - } - BuildMetaBlock(data, WrapPosition(last_flush_pos), mask, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - } - if (quality >= kMinQualityForOptimizeHistograms) { - OptimizeHistograms(num_direct_distance_codes, - distance_postfix_bits, - &mb); - } - StoreMetaBlock(data, WrapPosition(last_flush_pos), bytes, mask, - prev_byte, prev_byte2, - is_last, - num_direct_distance_codes, - distance_postfix_bits, - literal_context_mode, - commands, num_commands, - mb, - storage_ix, storage); - } - if (bytes + 4 < (*storage_ix >> 3)) { - // Restore the distance cache and last byte. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage[0] = last_byte; - *storage_ix = last_byte_bits; - StoreUncompressedMetaBlock(is_last, data, - WrapPosition(last_flush_pos), mask, - bytes, storage_ix, storage); - } -} - -BrotliCompressor::BrotliCompressor(BrotliParams params) - : params_(params), - hashers_(new Hashers()), - input_pos_(0), - num_commands_(0), - num_literals_(0), - last_insert_len_(0), - last_flush_pos_(0), - last_processed_pos_(0), - prev_byte_(0), - prev_byte2_(0), - storage_size_(0), - storage_(0), - large_table_(NULL), - cmd_code_numbits_(0), - command_buf_(NULL), - literal_buf_(NULL), - is_last_block_emitted_(0) { - // Sanitize params. - params_.quality = std::max(0, params_.quality); - if (params_.lgwin < kMinWindowBits) { - params_.lgwin = kMinWindowBits; - } else if (params_.lgwin > kMaxWindowBits) { - params_.lgwin = kMaxWindowBits; - } - if (params_.quality <= 1) { - params_.lgblock = params_.lgwin; - } else if (params_.quality < kMinQualityForBlockSplit) { - params_.lgblock = 14; - } else if (params_.lgblock == 0) { - params_.lgblock = 16; - if (params_.quality >= 9 && params_.lgwin > params_.lgblock) { - params_.lgblock = std::min(18, params_.lgwin); - } - } else { - params_.lgblock = std::min(kMaxInputBlockBits, - std::max(kMinInputBlockBits, params_.lgblock)); - } - - // Initialize input and literal cost ring buffers. - // We allocate at least lgwin + 1 bits for the ring buffer so that the newly - // added block fits there completely and we still get lgwin bits and at least - // read_block_size_bits + 1 bits because the copy tail length needs to be - // smaller than ringbuffer size. - int ringbuffer_bits = std::max(params_.lgwin + 1, params_.lgblock + 1); - ringbuffer_ = new RingBuffer(ringbuffer_bits, params_.lgblock); - - commands_ = 0; - cmd_alloc_size_ = 0; - - // Initialize last byte with stream header. - EncodeWindowBits(params_.lgwin, &last_byte_, &last_byte_bits_); - - // Initialize distance cache. - dist_cache_[0] = 4; - dist_cache_[1] = 11; - dist_cache_[2] = 15; - dist_cache_[3] = 16; - // Save the state of the distance cache in case we need to restore it for - // emitting an uncompressed block. - memcpy(saved_dist_cache_, dist_cache_, sizeof(dist_cache_)); - - if (params_.quality == 0) { - InitCommandPrefixCodes(cmd_depths_, cmd_bits_, - cmd_code_, &cmd_code_numbits_); - } else if (params_.quality == 1) { - command_buf_ = new uint32_t[kCompressFragmentTwoPassBlockSize]; - literal_buf_ = new uint8_t[kCompressFragmentTwoPassBlockSize]; - } - - // Initialize hashers. - hash_type_ = std::min(10, params_.quality); - hashers_->Init(hash_type_); -} - -BrotliCompressor::~BrotliCompressor(void) { - delete[] storage_; - free(commands_); - delete ringbuffer_; - delete hashers_; - delete[] large_table_; - delete[] command_buf_; - delete[] literal_buf_; -} - -void BrotliCompressor::CopyInputToRingBuffer(const size_t input_size, - const uint8_t* input_buffer) { - ringbuffer_->Write(input_buffer, input_size); - input_pos_ += input_size; - - // TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the - // hashing not depend on uninitialized data. This makes compression - // deterministic and it prevents uninitialized memory warnings in Valgrind. - // Even without erasing, the output would be valid (but nondeterministic). - // - // Background information: The compressor stores short (at most 8 bytes) - // substrings of the input already read in a hash table, and detects - // repetitions by looking up such substrings in the hash table. If it - // can find a substring, it checks whether the substring is really there - // in the ring buffer (or it's just a hash collision). Should the hash - // table become corrupt, this check makes sure that the output is - // still valid, albeit the compression ratio would be bad. - // - // The compressor populates the hash table from the ring buffer as it's - // reading new bytes from the input. However, at the last few indexes of - // the ring buffer, there are not enough bytes to build full-length - // substrings from. Since the hash table always contains full-length - // substrings, we erase with dummy 0s here to make sure that those - // substrings will contain 0s at the end instead of uninitialized - // data. - // - // Please note that erasing is not necessary (because the - // memory region is already initialized since he ring buffer - // has a `tail' that holds a copy of the beginning,) so we - // skip erasing if we have already gone around at least once in - // the ring buffer. - size_t pos = ringbuffer_->position(); - // Only clear during the first round of ringbuffer writes. On - // subsequent rounds data in the ringbuffer would be affected. - if (pos <= ringbuffer_->mask()) { - // This is the first time when the ring buffer is being written. - // We clear 7 bytes just after the bytes that have been copied from - // the input buffer. - // - // The ringbuffer has a "tail" that holds a copy of the beginning, - // but only once the ring buffer has been fully written once, i.e., - // pos <= mask. For the first time, we need to write values - // in this tail (where index may be larger than mask), so that - // we have exactly defined behavior and don't read un-initialized - // memory. Due to performance reasons, hashing reads data using a - // LOAD64, which can go 7 bytes beyond the bytes written in the - // ringbuffer. - memset(ringbuffer_->start() + pos, 0, 7); - } -} - -void BrotliCompressor::BrotliSetCustomDictionary( - const size_t size, const uint8_t* dict) { - CopyInputToRingBuffer(size, dict); - last_flush_pos_ = size; - last_processed_pos_ = size; - if (size > 0) { - prev_byte_ = dict[size - 1]; - } - if (size > 1) { - prev_byte2_ = dict[size - 2]; - } - hashers_->PrependCustomDictionary(hash_type_, params_.lgwin, size, dict); -} - -bool BrotliCompressor::WriteBrotliData(const bool is_last, - const bool force_flush, - size_t* out_size, - uint8_t** output) { - const uint64_t delta = input_pos_ - last_processed_pos_; - const uint8_t* data = ringbuffer_->start(); - const uint32_t mask = ringbuffer_->mask(); - - /* Adding more blocks after "last" block is forbidden. */ - if (is_last_block_emitted_) return false; - if (is_last) is_last_block_emitted_ = 1; - - if (delta > input_block_size()) { - return false; - } - const uint32_t bytes = static_cast<uint32_t>(delta); - - if (params_.quality <= 1) { - if (delta == 0 && !is_last) { - // We have no new input data and we don't have to finish the stream, so - // nothing to do. - *out_size = 0; - return true; - } - const size_t max_out_size = 2 * bytes + 500; - uint8_t* storage = GetBrotliStorage(max_out_size); - storage[0] = last_byte_; - size_t storage_ix = last_byte_bits_; - size_t table_size; - int* table = GetHashTable(params_.quality, bytes, &table_size); - if (params_.quality == 0) { - BrotliCompressFragmentFast( - &data[WrapPosition(last_processed_pos_) & mask], - bytes, is_last, - table, table_size, - cmd_depths_, cmd_bits_, - &cmd_code_numbits_, cmd_code_, - &storage_ix, storage); - } else { - BrotliCompressFragmentTwoPass( - &data[WrapPosition(last_processed_pos_) & mask], - bytes, is_last, - command_buf_, literal_buf_, - table, table_size, - &storage_ix, storage); - } - last_byte_ = storage[storage_ix >> 3]; - last_byte_bits_ = storage_ix & 7u; - last_processed_pos_ = input_pos_; - *output = &storage[0]; - *out_size = storage_ix >> 3; - return true; - } - - // Theoretical max number of commands is 1 per 2 bytes. - size_t newsize = num_commands_ + bytes / 2 + 1; - if (newsize > cmd_alloc_size_) { - // Reserve a bit more memory to allow merging with a next block - // without realloc: that would impact speed. - newsize += (bytes / 4) + 16; - cmd_alloc_size_ = newsize; - commands_ = - static_cast<Command*>(realloc(commands_, sizeof(Command) * newsize)); - } - - CreateBackwardReferences(bytes, WrapPosition(last_processed_pos_), - is_last, data, mask, - params_.quality, - params_.lgwin, - hashers_, - hash_type_, - dist_cache_, - &last_insert_len_, - &commands_[num_commands_], - &num_commands_, - &num_literals_); - - size_t max_length = std::min<size_t>(mask + 1, 1u << kMaxInputBlockBits); - const size_t max_literals = max_length / 8; - const size_t max_commands = max_length / 8; - if (!is_last && !force_flush && - (params_.quality >= kMinQualityForBlockSplit || - (num_literals_ + num_commands_ < kMaxNumDelayedSymbols)) && - num_literals_ < max_literals && - num_commands_ < max_commands && - input_pos_ + input_block_size() <= last_flush_pos_ + max_length) { - // Merge with next input block. Everything will happen later. - last_processed_pos_ = input_pos_; - *out_size = 0; - return true; - } - - // Create the last insert-only command. - if (last_insert_len_ > 0) { - brotli::Command cmd(last_insert_len_); - commands_[num_commands_++] = cmd; - num_literals_ += last_insert_len_; - last_insert_len_ = 0; - } - - if (!is_last && input_pos_ == last_flush_pos_) { - // We have no new input data and we don't have to finish the stream, so - // nothing to do. - *out_size = 0; - return true; - } - assert(input_pos_ >= last_flush_pos_); - assert(input_pos_ > last_flush_pos_ || is_last); - assert(input_pos_ - last_flush_pos_ <= 1u << 24); - const uint32_t metablock_size = - static_cast<uint32_t>(input_pos_ - last_flush_pos_); - const size_t max_out_size = 2 * metablock_size + 500; - uint8_t* storage = GetBrotliStorage(max_out_size); - storage[0] = last_byte_; - size_t storage_ix = last_byte_bits_; - bool font_mode = params_.mode == BrotliParams::MODE_FONT; - WriteMetaBlockInternal( - data, mask, last_flush_pos_, metablock_size, is_last, params_.quality, - font_mode, prev_byte_, prev_byte2_, num_literals_, num_commands_, - commands_, saved_dist_cache_, dist_cache_, &storage_ix, storage); - last_byte_ = storage[storage_ix >> 3]; - last_byte_bits_ = storage_ix & 7u; - last_flush_pos_ = input_pos_; - last_processed_pos_ = input_pos_; - if (last_flush_pos_ > 0) { - prev_byte_ = data[(static_cast<uint32_t>(last_flush_pos_) - 1) & mask]; - } - if (last_flush_pos_ > 1) { - prev_byte2_ = data[(static_cast<uint32_t>(last_flush_pos_) - 2) & mask]; - } - num_commands_ = 0; - num_literals_ = 0; - // Save the state of the distance cache in case we need to restore it for - // emitting an uncompressed block. - memcpy(saved_dist_cache_, dist_cache_, sizeof(dist_cache_)); - *output = &storage[0]; - *out_size = storage_ix >> 3; - return true; -} - -bool BrotliCompressor::WriteMetaBlock(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer) { - CopyInputToRingBuffer(input_size, input_buffer); - size_t out_size = 0; - uint8_t* output; - if (!WriteBrotliData(is_last, /* force_flush = */ true, &out_size, &output) || - out_size > *encoded_size) { - return false; - } - if (out_size > 0) { - memcpy(encoded_buffer, output, out_size); - } - *encoded_size = out_size; - return true; -} - -bool BrotliCompressor::WriteMetadata(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (input_size > (1 << 24) || input_size + 6 > *encoded_size) { - return false; - } - uint64_t hdr_buffer_data[2]; - uint8_t* hdr_buffer = reinterpret_cast<uint8_t*>(&hdr_buffer_data[0]); - size_t storage_ix = last_byte_bits_; - hdr_buffer[0] = last_byte_; - WriteBits(1, 0, &storage_ix, hdr_buffer); - WriteBits(2, 3, &storage_ix, hdr_buffer); - WriteBits(1, 0, &storage_ix, hdr_buffer); - if (input_size == 0) { - WriteBits(2, 0, &storage_ix, hdr_buffer); - *encoded_size = (storage_ix + 7u) >> 3; - memcpy(encoded_buffer, hdr_buffer, *encoded_size); - } else { - uint32_t nbits = (input_size == 1) ? 0 : (Log2FloorNonZero( - static_cast<uint32_t>(input_size) - 1) + 1); - uint32_t nbytes = (nbits + 7) / 8; - WriteBits(2, nbytes, &storage_ix, hdr_buffer); - WriteBits(8 * nbytes, input_size - 1, &storage_ix, hdr_buffer); - size_t hdr_size = (storage_ix + 7u) >> 3; - memcpy(encoded_buffer, hdr_buffer, hdr_size); - memcpy(&encoded_buffer[hdr_size], input_buffer, input_size); - *encoded_size = hdr_size + input_size; - } - if (is_last) { - encoded_buffer[(*encoded_size)++] = 3; - } - last_byte_ = 0; - last_byte_bits_ = 0; - return true; -} - -bool BrotliCompressor::FinishStream( - size_t* encoded_size, uint8_t* encoded_buffer) { - return WriteMetaBlock(0, NULL, true, encoded_size, encoded_buffer); -} - -static int BrotliCompressBufferQuality10(int lgwin, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer) { - const size_t mask = std::numeric_limits<size_t>::max() >> 1; - assert(input_size <= mask + 1); - const size_t max_backward_limit = (1 << lgwin) - 16; - int dist_cache[4] = { 4, 11, 15, 16 }; - int saved_dist_cache[4] = { 4, 11, 15, 16 }; - int ok = 1; - const size_t max_out_size = *encoded_size; - size_t total_out_size = 0; - uint8_t last_byte; - uint8_t last_byte_bits; - EncodeWindowBits(lgwin, &last_byte, &last_byte_bits); - - Hashers::H10* hasher = new Hashers::H10; - const size_t hasher_eff_size = std::min(input_size, max_backward_limit + 16); - hasher->Init(lgwin, 0, hasher_eff_size, true); - - const int lgblock = std::min(18, lgwin); - const int lgmetablock = std::min(24, lgwin + 1); - const size_t max_block_size = static_cast<size_t>(1) << lgblock; - const size_t max_metablock_size = static_cast<size_t>(1) << lgmetablock; - const size_t max_literals_per_metablock = max_metablock_size / 8; - const size_t max_commands_per_metablock = max_metablock_size / 8; - size_t metablock_start = 0; - uint8_t prev_byte = 0; - uint8_t prev_byte2 = 0; - while (ok && metablock_start < input_size) { - const size_t metablock_end = - std::min(input_size, metablock_start + max_metablock_size); - const size_t expected_num_commands = - (metablock_end - metablock_start) / 12 + 16; - Command* commands = 0; - size_t num_commands = 0; - size_t last_insert_len = 0; - size_t num_literals = 0; - size_t metablock_size = 0; - size_t cmd_alloc_size = 0; - - for (size_t block_start = metablock_start; block_start < metablock_end; ) { - size_t block_size = std::min(metablock_end - block_start, max_block_size); - ZopfliNode* nodes = new ZopfliNode[block_size + 1]; - std::vector<uint32_t> path; - hasher->StitchToPreviousBlock(block_size, block_start, - input_buffer, mask); - ZopfliComputeShortestPath(block_size, block_start, input_buffer, mask, - max_backward_limit, dist_cache, - hasher, nodes, &path); - // We allocate a command buffer in the first iteration of this loop that - // will be likely big enough for the whole metablock, so that for most - // inputs we will not have to reallocate in later iterations. We do the - // allocation here and not before the loop, because if the input is small, - // this will be allocated after the zopfli cost model is freed, so this - // will not increase peak memory usage. - // TODO: If the first allocation is too small, increase command - // buffer size exponentially. - size_t new_cmd_alloc_size = std::max(expected_num_commands, - num_commands + path.size() + 1); - if (cmd_alloc_size != new_cmd_alloc_size) { - cmd_alloc_size = new_cmd_alloc_size; - commands = static_cast<Command*>( - realloc(commands, cmd_alloc_size * sizeof(Command))); - } - ZopfliCreateCommands(block_size, block_start, max_backward_limit, path, - &nodes[0], dist_cache, &last_insert_len, - &commands[num_commands], &num_literals); - num_commands += path.size(); - block_start += block_size; - metablock_size += block_size; - delete[] nodes; - if (num_literals > max_literals_per_metablock || - num_commands > max_commands_per_metablock) { - break; - } - } - - if (last_insert_len > 0) { - Command cmd(last_insert_len); - commands[num_commands++] = cmd; - num_literals += last_insert_len; - } - - const bool is_last = (metablock_start + metablock_size == input_size); - uint8_t* storage = NULL; - size_t storage_ix = last_byte_bits; - - if (metablock_size == 0) { - // Write the ISLAST and ISEMPTY bits. - storage = new uint8_t[16]; - storage[0] = last_byte; - WriteBits(2, 3, &storage_ix, storage); - storage_ix = (storage_ix + 7u) & ~7u; - } else if (!ShouldCompress(input_buffer, mask, metablock_start, - metablock_size, num_literals, num_commands)) { - // Restore the distance cache, as its last update by - // CreateBackwardReferences is now unused. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage = new uint8_t[metablock_size + 16]; - storage[0] = last_byte; - StoreUncompressedMetaBlock(is_last, input_buffer, - metablock_start, mask, metablock_size, - &storage_ix, storage); - } else { - uint32_t num_direct_distance_codes = 0; - uint32_t distance_postfix_bits = 0; - MetaBlockSplit mb; - ContextType literal_context_mode = CONTEXT_UTF8; - if (!IsMostlyUTF8( - input_buffer, metablock_start, mask, metablock_size, - kMinUTF8Ratio)) { - literal_context_mode = CONTEXT_SIGNED; - } - BuildMetaBlock(input_buffer, metablock_start, mask, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - OptimizeHistograms(num_direct_distance_codes, - distance_postfix_bits, - &mb); - const size_t max_out_metablock_size = 2 * metablock_size + 500; - storage = new uint8_t[max_out_metablock_size]; - storage[0] = last_byte; - StoreMetaBlock(input_buffer, metablock_start, metablock_size, mask, - prev_byte, prev_byte2, - is_last, - num_direct_distance_codes, - distance_postfix_bits, - literal_context_mode, - commands, num_commands, - mb, - &storage_ix, storage); - if (metablock_size + 4 < (storage_ix >> 3)) { - // Restore the distance cache and last byte. - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage[0] = last_byte; - storage_ix = last_byte_bits; - StoreUncompressedMetaBlock(is_last, input_buffer, - metablock_start, mask, - metablock_size, &storage_ix, storage); - } - } - last_byte = storage[storage_ix >> 3]; - last_byte_bits = storage_ix & 7u; - metablock_start += metablock_size; - prev_byte = input_buffer[metablock_start - 1]; - prev_byte2 = input_buffer[metablock_start - 2]; - // Save the state of the distance cache in case we need to restore it for - // emitting an uncompressed block. - memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); - - const size_t out_size = storage_ix >> 3; - total_out_size += out_size; - if (total_out_size <= max_out_size) { - memcpy(encoded_buffer, storage, out_size); - encoded_buffer += out_size; - } else { - ok = 0; - } - delete[] storage; - free(commands); - } - - *encoded_size = total_out_size; - delete hasher; - return ok; -} - -int BrotliCompressBuffer(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (*encoded_size == 0) { - // Output buffer needs at least one byte. - return 0; - } - if (input_size == 0) { - // Handle the special case of empty input. - *encoded_size = 1; - *encoded_buffer = 6; - return 1; - } - if (params.quality == 10) { - // TODO: Implement this direct path for all quality levels. - const int lgwin = std::min(24, std::max(16, params.lgwin)); - return BrotliCompressBufferQuality10(lgwin, input_size, input_buffer, - encoded_size, encoded_buffer); - } - BrotliMemIn in(input_buffer, input_size); - BrotliMemOut out(encoded_buffer, *encoded_size); - if (!BrotliCompress(params, &in, &out)) { - return 0; - } - *encoded_size = out.position(); - return 1; -} - -static bool BrotliInIsFinished(BrotliIn* r) { - size_t read_bytes; - return r->Read(0, &read_bytes) == NULL; -} - -static const uint8_t* BrotliInReadAndCheckEnd(const size_t block_size, - BrotliIn* r, - size_t* bytes_read, - bool* is_last) { - *bytes_read = 0; - const uint8_t* data = reinterpret_cast<const uint8_t*>( - r->Read(block_size, bytes_read)); - assert((data == NULL) == (*bytes_read == 0)); - *is_last = BrotliInIsFinished(r); - return data; -} - -static bool CopyOneBlockToRingBuffer(BrotliIn* r, - BrotliCompressor* compressor, - size_t* bytes_read, - bool* is_last) { - const size_t block_size = compressor->input_block_size(); - const uint8_t* data = BrotliInReadAndCheckEnd(block_size, r, - bytes_read, is_last); - if (data == NULL) { - return *is_last; - } - compressor->CopyInputToRingBuffer(*bytes_read, data); - - // Read more bytes until block_size is filled or an EOF (data == NULL) is - // received. This is useful to get deterministic compressed output for the - // same input no matter how r->Read splits the input to chunks. - for (size_t remaining = block_size - *bytes_read; remaining > 0; ) { - size_t more_bytes_read = 0; - data = BrotliInReadAndCheckEnd(remaining, r, &more_bytes_read, is_last); - if (data == NULL) { - return *is_last; - } - compressor->CopyInputToRingBuffer(more_bytes_read, data); - *bytes_read += more_bytes_read; - remaining -= more_bytes_read; - } - return true; -} - - -int BrotliCompress(BrotliParams params, BrotliIn* in, BrotliOut* out) { - return BrotliCompressWithCustomDictionary(0, 0, params, in, out); -} - -// Reads the provided input in 'block_size' blocks. Only the last read can be -// smaller than 'block_size'. -class BrotliBlockReader { - public: - explicit BrotliBlockReader(size_t block_size) - : block_size_(block_size), buf_(NULL) {} - ~BrotliBlockReader(void) { delete[] buf_; } - - const uint8_t* Read(BrotliIn* in, size_t* bytes_read, bool* is_last) { - *bytes_read = 0; - const uint8_t* data = BrotliInReadAndCheckEnd(block_size_, in, - bytes_read, is_last); - if (data == NULL || *bytes_read == block_size_ || *is_last) { - // If we could get the whole block in one read, or it is the last block, - // we just return the pointer to the data without copying. - return data; - } - // If the data comes in smaller chunks, we need to copy it into an internal - // buffer until we get a whole block or reach the last chunk. - if (buf_ == NULL) { - buf_ = new uint8_t[block_size_]; - } - memcpy(buf_, data, *bytes_read); - do { - size_t cur_bytes_read = 0; - data = BrotliInReadAndCheckEnd(block_size_ - *bytes_read, in, - &cur_bytes_read, is_last); - if (data == NULL) { - return *is_last ? buf_ : NULL; - } - memcpy(&buf_[*bytes_read], data, cur_bytes_read); - *bytes_read += cur_bytes_read; - } while (*bytes_read < block_size_ && !*is_last); - return buf_; - } - - private: - const size_t block_size_; - uint8_t* buf_; -}; - -int BrotliCompressWithCustomDictionary(size_t dictsize, const uint8_t* dict, - BrotliParams params, - BrotliIn* in, BrotliOut* out) { - if (params.quality <= 1) { - const int quality = std::max(0, params.quality); - const int lgwin = std::min(kMaxWindowBits, - std::max(kMinWindowBits, params.lgwin)); - uint8_t* storage = NULL; - int* table = NULL; - uint32_t* command_buf = NULL; - uint8_t* literal_buf = NULL; - uint8_t cmd_depths[128]; - uint16_t cmd_bits[128]; - uint8_t cmd_code[512]; - size_t cmd_code_numbits; - if (quality == 0) { - InitCommandPrefixCodes(cmd_depths, cmd_bits, cmd_code, &cmd_code_numbits); - } - uint8_t last_byte; - uint8_t last_byte_bits; - EncodeWindowBits(lgwin, &last_byte, &last_byte_bits); - BrotliBlockReader r(1u << lgwin); - int ok = 1; - bool is_last = false; - while (ok && !is_last) { - // Read next block of input. - size_t bytes; - const uint8_t* data = r.Read(in, &bytes, &is_last); - if (data == NULL) { - if (!is_last) { - ok = 0; - break; - } - assert(bytes == 0); - } - // Set up output storage. - const size_t max_out_size = 2 * bytes + 500; - if (storage == NULL) { - storage = new uint8_t[max_out_size]; - } - storage[0] = last_byte; - size_t storage_ix = last_byte_bits; - // Set up hash table. - size_t htsize = HashTableSize(MaxHashTableSize(quality), bytes); - if (table == NULL) { - table = new int[htsize]; - } - memset(table, 0, htsize * sizeof(table[0])); - // Set up command and literal buffers for two pass mode. - if (quality == 1 && command_buf == NULL) { - size_t buf_size = std::min(bytes, kCompressFragmentTwoPassBlockSize); - command_buf = new uint32_t[buf_size]; - literal_buf = new uint8_t[buf_size]; - } - // Do the actual compression. - if (quality == 0) { - BrotliCompressFragmentFast(data, bytes, is_last, table, htsize, - cmd_depths, cmd_bits, - &cmd_code_numbits, cmd_code, - &storage_ix, storage); - } else { - BrotliCompressFragmentTwoPass(data, bytes, is_last, - command_buf, literal_buf, - table, htsize, - &storage_ix, storage); - } - // Save last bytes to stitch it together with the next output block. - last_byte = storage[storage_ix >> 3]; - last_byte_bits = storage_ix & 7u; - // Write output block. - size_t out_bytes = storage_ix >> 3; - if (out_bytes > 0 && !out->Write(storage, out_bytes)) { - ok = 0; - break; - } - } - delete[] storage; - delete[] table; - delete[] command_buf; - delete[] literal_buf; - return ok; - } - - size_t in_bytes = 0; - size_t out_bytes = 0; - uint8_t* output = NULL; - bool final_block = false; - BrotliCompressor compressor(params); - if (dictsize != 0) compressor.BrotliSetCustomDictionary(dictsize, dict); - while (!final_block) { - if (!CopyOneBlockToRingBuffer(in, &compressor, &in_bytes, &final_block)) { - return false; - } - out_bytes = 0; - if (!compressor.WriteBrotliData(final_block, - /* force_flush = */ false, - &out_bytes, &output)) { - return false; - } - if (out_bytes > 0 && !out->Write(output, out_bytes)) { - return false; - } - } - return true; -} - - -} // namespace brotli
diff --git a/third_party/brotli/enc/encode.h b/third_party/brotli/enc/encode.h deleted file mode 100644 index 5b35e218..0000000 --- a/third_party/brotli/enc/encode.h +++ /dev/null
@@ -1,209 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// API for Brotli compression - -#ifndef BROTLI_ENC_ENCODE_H_ -#define BROTLI_ENC_ENCODE_H_ - -#include <string> -#include <vector> -#include "./command.h" -#include "./hash.h" -#include "./ringbuffer.h" -#include "./static_dict.h" -#include "./streams.h" -#include "./types.h" - -namespace brotli { - -static const int kMaxWindowBits = 24; -static const int kMinWindowBits = 10; -static const int kMinInputBlockBits = 16; -static const int kMaxInputBlockBits = 24; - -struct BrotliParams { - BrotliParams(void) - : mode(MODE_GENERIC), - quality(11), - lgwin(22), - lgblock(0), - enable_dictionary(true), - enable_transforms(false), - greedy_block_split(false), - enable_context_modeling(true) {} - - enum Mode { - // Default compression mode. The compressor does not know anything in - // advance about the properties of the input. - MODE_GENERIC = 0, - // Compression mode for UTF-8 format text input. - MODE_TEXT = 1, - // Compression mode used in WOFF 2.0. - MODE_FONT = 2 - }; - Mode mode; - - // Controls the compression-speed vs compression-density tradeoffs. The higher - // the quality, the slower the compression. Range is 0 to 11. - int quality; - // Base 2 logarithm of the sliding window size. Range is 10 to 24. - int lgwin; - // Base 2 logarithm of the maximum input block size. Range is 16 to 24. - // If set to 0, the value will be set based on the quality. - int lgblock; - - // These settings are deprecated and will be ignored. - // All speed vs. size compromises are controlled by the quality param. - bool enable_dictionary; - bool enable_transforms; - bool greedy_block_split; - bool enable_context_modeling; -}; - -// An instance can not be reused for multiple brotli streams. -class BrotliCompressor { - public: - explicit BrotliCompressor(BrotliParams params); - ~BrotliCompressor(void); - - // The maximum input size that can be processed at once. - size_t input_block_size(void) const { return size_t(1) << params_.lgblock; } - - // Encodes the data in input_buffer as a meta-block and writes it to - // encoded_buffer (*encoded_size should be set to the size of - // encoded_buffer) and sets *encoded_size to the number of bytes that - // was written. The input_size must be <= input_block_size(). - // Returns 0 if there was an error and 1 otherwise. - bool WriteMetaBlock(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer); - - // Writes a metadata meta-block containing the given input to encoded_buffer. - // *encoded_size should be set to the size of the encoded_buffer. - // Sets *encoded_size to the number of bytes that was written. - // Note that the given input data will not be part of the sliding window and - // thus no backward references can be made to this data from subsequent - // metablocks. - bool WriteMetadata(const size_t input_size, - const uint8_t* input_buffer, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer); - - // Writes a zero-length meta-block with end-of-input bit set to the - // internal output buffer and copies the output buffer to encoded_buffer - // (*encoded_size should be set to the size of encoded_buffer) and sets - // *encoded_size to the number of bytes written. Returns false if there was - // an error and true otherwise. - bool FinishStream(size_t* encoded_size, uint8_t* encoded_buffer); - - // Copies the given input data to the internal ring buffer of the compressor. - // No processing of the data occurs at this time and this function can be - // called multiple times before calling WriteBrotliData() to process the - // accumulated input. At most input_block_size() bytes of input data can be - // copied to the ring buffer, otherwise the next WriteBrotliData() will fail. - void CopyInputToRingBuffer(const size_t input_size, - const uint8_t* input_buffer); - - // Processes the accumulated input data and sets *out_size to the length of - // the new output meta-block, or to zero if no new output meta-block was - // created (in this case the processed input data is buffered internally). - // If *out_size is positive, *output points to the start of the output data. - // If is_last or force_flush is true, an output meta-block is always created. - // Returns false if the size of the input data is larger than - // input_block_size(). - bool WriteBrotliData(const bool is_last, const bool force_flush, - size_t* out_size, uint8_t** output); - - // Fills the new state with a dictionary for LZ77, warming up the ringbuffer, - // e.g. for custom static dictionaries for data formats. - // Not to be confused with the built-in transformable dictionary of Brotli. - // To decode, use BrotliSetCustomDictionary of the decoder with the same - // dictionary. - void BrotliSetCustomDictionary(size_t size, const uint8_t* dict); - - // No-op, but we keep it here for API backward-compatibility. - void WriteStreamHeader(void) {} - - private: - uint8_t* GetBrotliStorage(size_t size); - - // Allocates and clears a hash table using memory in "*this", - // stores the number of buckets in "*table_size" and returns a pointer to - // the base of the hash table. - int* GetHashTable(int quality, - size_t input_size, size_t* table_size); - - BrotliParams params_; - Hashers* hashers_; - int hash_type_; - uint64_t input_pos_; - RingBuffer* ringbuffer_; - size_t cmd_alloc_size_; - Command* commands_; - size_t num_commands_; - size_t num_literals_; - size_t last_insert_len_; - uint64_t last_flush_pos_; - uint64_t last_processed_pos_; - int dist_cache_[4]; - int saved_dist_cache_[4]; - uint8_t last_byte_; - uint8_t last_byte_bits_; - uint8_t prev_byte_; - uint8_t prev_byte2_; - size_t storage_size_; - uint8_t* storage_; - // Hash table for quality 0 mode. - int small_table_[1 << 10]; // 2KB - int* large_table_; // Allocated only when needed - // Command and distance prefix codes (each 64 symbols, stored back-to-back) - // used for the next block in quality 0. The command prefix code is over a - // smaller alphabet with the following 64 symbols: - // 0 - 15: insert length code 0, copy length code 0 - 15, same distance - // 16 - 39: insert length code 0, copy length code 0 - 23 - // 40 - 63: insert length code 0 - 23, copy length code 0 - // Note that symbols 16 and 40 represent the same code in the full alphabet, - // but we do not use either of them in quality 0. - uint8_t cmd_depths_[128]; - uint16_t cmd_bits_[128]; - // The compressed form of the command and distance prefix codes for the next - // block in quality 0. - uint8_t cmd_code_[512]; - size_t cmd_code_numbits_; - // Command and literal buffers for quality 1. - uint32_t* command_buf_; - uint8_t* literal_buf_; - - int is_last_block_emitted_; -}; - -// Compresses the data in input_buffer into encoded_buffer, and sets -// *encoded_size to the compressed length. -// Returns 0 if there was an error and 1 otherwise. -int BrotliCompressBuffer(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer); - -// Same as above, but uses the specified input and output classes instead -// of reading from and writing to pre-allocated memory buffers. -int BrotliCompress(BrotliParams params, BrotliIn* in, BrotliOut* out); - -// Before compressing the data, sets a custom LZ77 dictionary with -// BrotliCompressor::BrotliSetCustomDictionary. -int BrotliCompressWithCustomDictionary(size_t dictsize, const uint8_t* dict, - BrotliParams params, - BrotliIn* in, BrotliOut* out); - - -} // namespace brotli - -#endif // BROTLI_ENC_ENCODE_H_
diff --git a/third_party/brotli/enc/encode_parallel.cc b/third_party/brotli/enc/encode_parallel.cc deleted file mode 100644 index cbad9754..0000000 --- a/third_party/brotli/enc/encode_parallel.cc +++ /dev/null
@@ -1,279 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Implementation of parallel Brotli compressor. - -#include "./encode_parallel.h" - -#include <algorithm> -#include <limits> - -#include "./backward_references.h" -#include "./bit_cost.h" -#include "./block_splitter.h" -#include "./brotli_bit_stream.h" -#include "./cluster.h" -#include "./context.h" -#include "./metablock.h" -#include "./transform.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./hash.h" -#include "./histogram.h" -#include "./prefix.h" -#include "./utf8_util.h" -#include "./write_bits.h" - -namespace brotli { - -namespace { - -void RecomputeDistancePrefixes(Command* cmds, size_t num_commands, - uint32_t num_direct_distance_codes, - uint32_t distance_postfix_bits) { - if (num_direct_distance_codes == 0 && - distance_postfix_bits == 0) { - return; - } - for (size_t i = 0; i < num_commands; ++i) { - Command* cmd = &cmds[i]; - if (cmd->copy_len() && cmd->cmd_prefix_ >= 128) { - PrefixEncodeCopyDistance(cmd->DistanceCode(), - num_direct_distance_codes, - distance_postfix_bits, - &cmd->dist_prefix_, - &cmd->dist_extra_); - } - } -} - -bool WriteMetaBlockParallel(const BrotliParams& params, - const uint32_t input_size, - const uint8_t* input_buffer, - const uint32_t prefix_size, - const uint8_t* prefix_buffer, - const bool is_first, - const bool is_last, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (input_size == 0) { - return false; - } - - // Copy prefix + next input block into a continuous area. - uint32_t input_pos = prefix_size; - // CreateBackwardReferences reads up to 3 bytes past the end of input if the - // mask points past the end of input. - // FindMatchLengthWithLimit could do another 8 bytes look-forward. - std::vector<uint8_t> input(prefix_size + input_size + 4 + 8); - memcpy(&input[0], prefix_buffer, prefix_size); - memcpy(&input[input_pos], input_buffer, input_size); - // Since we don't have a ringbuffer, masking is a no-op. - // We use one less bit than the full range because some of the code uses - // mask + 1 as the size of the ringbuffer. - const uint32_t mask = std::numeric_limits<uint32_t>::max() >> 1; - - uint8_t prev_byte = input_pos > 0 ? input[(input_pos - 1) & mask] : 0; - uint8_t prev_byte2 = input_pos > 1 ? input[(input_pos - 2) & mask] : 0; - - // Decide about UTF8 mode. - static const double kMinUTF8Ratio = 0.75; - bool utf8_mode = IsMostlyUTF8(&input[0], input_pos, mask, input_size, - kMinUTF8Ratio); - - // Initialize hashers. - int hash_type = std::min(10, params.quality); - Hashers* hashers = new Hashers(); - hashers->Init(hash_type); - - // Compute backward references. - size_t last_insert_len = 0; - size_t num_commands = 0; - size_t num_literals = 0; - int dist_cache[4] = { -4, -4, -4, -4 }; - Command* commands = static_cast<Command*>( - malloc(sizeof(Command) * ((input_size + 1) >> 1))); - if (commands == 0) { - delete hashers; - return false; - } - CreateBackwardReferences( - input_size, input_pos, is_last, - &input[0], mask, - params.quality, - params.lgwin, - hashers, - hash_type, - dist_cache, - &last_insert_len, - commands, - &num_commands, - &num_literals); - delete hashers; - if (last_insert_len > 0) { - commands[num_commands++] = Command(last_insert_len); - num_literals += last_insert_len; - } - assert(num_commands != 0); - - // Build the meta-block. - MetaBlockSplit mb; - uint32_t num_direct_distance_codes = - params.mode == BrotliParams::MODE_FONT ? 12 : 0; - uint32_t distance_postfix_bits = - params.mode == BrotliParams::MODE_FONT ? 1 : 0; - ContextType literal_context_mode = utf8_mode ? CONTEXT_UTF8 : CONTEXT_SIGNED; - RecomputeDistancePrefixes(commands, num_commands, - num_direct_distance_codes, - distance_postfix_bits); - if (params.quality <= 9) { - BuildMetaBlockGreedy(&input[0], input_pos, mask, - commands, num_commands, - &mb); - } else { - BuildMetaBlock(&input[0], input_pos, mask, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - } - - // Set up the temporary output storage. - const size_t max_out_size = 2 * input_size + 500; - std::vector<uint8_t> storage(max_out_size); - uint8_t first_byte = 0; - size_t first_byte_bits = 0; - if (is_first) { - if (params.lgwin == 16) { - first_byte = 0; - first_byte_bits = 1; - } else if (params.lgwin == 17) { - first_byte = 1; - first_byte_bits = 7; - } else { - first_byte = static_cast<uint8_t>(((params.lgwin - 17) << 1) | 1); - first_byte_bits = 4; - } - } - storage[0] = static_cast<uint8_t>(first_byte); - size_t storage_ix = first_byte_bits; - - // Store the meta-block to the temporary output. - StoreMetaBlock(&input[0], input_pos, input_size, mask, - prev_byte, prev_byte2, - is_last, - num_direct_distance_codes, - distance_postfix_bits, - literal_context_mode, - commands, num_commands, - mb, - &storage_ix, &storage[0]); - free(commands); - - // If this is not the last meta-block, store an empty metadata - // meta-block so that the meta-block will end at a byte boundary. - if (!is_last) { - StoreSyncMetaBlock(&storage_ix, &storage[0]); - } - - // If the compressed data is too large, fall back to an uncompressed - // meta-block. - size_t output_size = storage_ix >> 3; - if (input_size + 4 < output_size) { - storage[0] = static_cast<uint8_t>(first_byte); - storage_ix = first_byte_bits; - StoreUncompressedMetaBlock(is_last, &input[0], input_pos, mask, - input_size, - &storage_ix, &storage[0]); - output_size = storage_ix >> 3; - } - - // Copy the temporary output with size-check to the output. - if (output_size > *encoded_size) { - return false; - } - memcpy(encoded_buffer, &storage[0], output_size); - *encoded_size = output_size; - return true; -} - -} // namespace - -int BrotliCompressBufferParallel(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer) { - if (*encoded_size == 0) { - // Output buffer needs at least one byte. - return 0; - } else if (input_size == 0) { - encoded_buffer[0] = 6; - *encoded_size = 1; - return 1; - } - - // Sanitize params. - if (params.lgwin < kMinWindowBits) { - params.lgwin = kMinWindowBits; - } else if (params.lgwin > kMaxWindowBits) { - params.lgwin = kMaxWindowBits; - } - if (params.lgblock == 0) { - params.lgblock = 16; - if (params.quality >= 9 && params.lgwin > params.lgblock) { - params.lgblock = std::min(21, params.lgwin); - } - } else if (params.lgblock < kMinInputBlockBits) { - params.lgblock = kMinInputBlockBits; - } else if (params.lgblock > kMaxInputBlockBits) { - params.lgblock = kMaxInputBlockBits; - } - size_t max_input_block_size = 1 << params.lgblock; - size_t max_prefix_size = 1u << params.lgwin; - - std::vector<std::vector<uint8_t> > compressed_pieces; - - // Compress block-by-block independently. - for (size_t pos = 0; pos < input_size; ) { - uint32_t input_block_size = - static_cast<uint32_t>(std::min(max_input_block_size, input_size - pos)); - uint32_t prefix_size = - static_cast<uint32_t>(std::min(max_prefix_size, pos)); - size_t out_size = input_block_size + (input_block_size >> 3) + 1024; - std::vector<uint8_t> out(out_size); - if (!WriteMetaBlockParallel(params, - input_block_size, - &input_buffer[pos], - prefix_size, - &input_buffer[pos - prefix_size], - pos == 0, - pos + input_block_size == input_size, - &out_size, - &out[0])) { - return false; - } - out.resize(out_size); - compressed_pieces.push_back(out); - pos += input_block_size; - } - - // Piece together the output. - size_t out_pos = 0; - for (size_t i = 0; i < compressed_pieces.size(); ++i) { - const std::vector<uint8_t>& out = compressed_pieces[i]; - if (out_pos + out.size() > *encoded_size) { - return false; - } - memcpy(&encoded_buffer[out_pos], &out[0], out.size()); - out_pos += out.size(); - } - *encoded_size = out_pos; - - return true; -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/encode_parallel.h b/third_party/brotli/enc/encode_parallel.h deleted file mode 100644 index 8d637b7..0000000 --- a/third_party/brotli/enc/encode_parallel.h +++ /dev/null
@@ -1,28 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// API for parallel Brotli compression -// Note that this is only a proof of concept currently and not part of the -// final API yet. - -#ifndef BROTLI_ENC_ENCODE_PARALLEL_H_ -#define BROTLI_ENC_ENCODE_PARALLEL_H_ - - -#include "./encode.h" -#include "./types.h" - -namespace brotli { - -int BrotliCompressBufferParallel(BrotliParams params, - size_t input_size, - const uint8_t* input_buffer, - size_t* encoded_size, - uint8_t* encoded_buffer); - -} // namespace brotli - -#endif // BROTLI_ENC_ENCODE_PARALLEL_H_
diff --git a/third_party/brotli/enc/entropy_encode.c b/third_party/brotli/enc/entropy_encode.c new file mode 100644 index 0000000..41ea948 --- /dev/null +++ b/third_party/brotli/enc/entropy_encode.c
@@ -0,0 +1,501 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Entropy encoding (Huffman) utilities. */ + +#include "./entropy_encode.h" + +#include <string.h> /* memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +BROTLI_BOOL BrotliSetDepth( + int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) { + int stack[16]; + int level = 0; + int p = p0; + assert(max_depth <= 15); + stack[0] = -1; + while (BROTLI_TRUE) { + if (pool[p].index_left_ >= 0) { + level++; + if (level > max_depth) return BROTLI_FALSE; + stack[level] = pool[p].index_right_or_value_; + p = pool[p].index_left_; + continue; + } else { + depth[pool[p].index_right_or_value_] = (uint8_t)level; + } + while (level >= 0 && stack[level] == -1) level--; + if (level < 0) return BROTLI_TRUE; + p = stack[level]; + stack[level] = -1; + } +} + +/* Sort the root nodes, least popular first. */ +static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree( + const HuffmanTree* v0, const HuffmanTree* v1) { + if (v0->total_count_ != v1->total_count_) { + return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_); + } + return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_); +} + +/* This function will create a Huffman tree. + + The catch here is that the tree cannot be arbitrarily deep. + Brotli specifies a maximum depth of 15 bits for "code trees" + and 7 bits for "code length code trees." + + count_limit is the value that is to be faked as the minimum value + and this minimum value is raised until the tree matches the + maximum length requirement. + + This algorithm is not of excellent performance for very long data blocks, + especially when population counts are longer than 2**tree_limit, but + we are not planning to use this with extremely long blocks. + + See http://en.wikipedia.org/wiki/Huffman_coding */ +void BrotliCreateHuffmanTree(const uint32_t *data, + const size_t length, + const int tree_limit, + HuffmanTree* tree, + uint8_t *depth) { + uint32_t count_limit; + HuffmanTree sentinel; + InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1); + /* For block sizes below 64 kB, we never need to do a second iteration + of this loop. Probably all of our block sizes will be smaller than + that, so this loop is mostly of academic interest. If we actually + would need this, we would be better off with the Katajainen algorithm. */ + for (count_limit = 1; ; count_limit *= 2) { + size_t n = 0; + size_t i; + size_t j; + size_t k; + for (i = length; i != 0;) { + --i; + if (data[i]) { + const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit); + InitHuffmanTree(&tree[n++], count, -1, (int16_t)i); + } + } + + if (n == 1) { + depth[tree[0].index_right_or_value_] = 1; /* Only one element. */ + break; + } + + SortHuffmanTreeItems(tree, n, SortHuffmanTree); + + /* The nodes are: + [0, n): the sorted leaf nodes that we start with. + [n]: we add a sentinel here. + [n + 1, 2n): new parent nodes are added here, starting from + (n+1). These are naturally in ascending order. + [2n]: we add a sentinel at the end as well. + There will be (2n+1) elements at the end. */ + tree[n] = sentinel; + tree[n + 1] = sentinel; + + i = 0; /* Points to the next leaf node. */ + j = n + 1; /* Points to the next non-leaf node. */ + for (k = n - 1; k != 0; --k) { + size_t left, right; + if (tree[i].total_count_ <= tree[j].total_count_) { + left = i; + ++i; + } else { + left = j; + ++j; + } + if (tree[i].total_count_ <= tree[j].total_count_) { + right = i; + ++i; + } else { + right = j; + ++j; + } + + { + /* The sentinel node becomes the parent node. */ + size_t j_end = 2 * n - k; + tree[j_end].total_count_ = + tree[left].total_count_ + tree[right].total_count_; + tree[j_end].index_left_ = (int16_t)left; + tree[j_end].index_right_or_value_ = (int16_t)right; + + /* Add back the last sentinel node. */ + tree[j_end + 1] = sentinel; + } + } + if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) { + /* We need to pack the Huffman tree in tree_limit bits. If this was not + successful, add fake entities to the lowest values and retry. */ + break; + } + } +} + +static void Reverse(uint8_t* v, size_t start, size_t end) { + --end; + while (start < end) { + uint8_t tmp = v[start]; + v[start] = v[end]; + v[end] = tmp; + ++start; + --end; + } +} + +static void BrotliWriteHuffmanTreeRepetitions( + const uint8_t previous_value, + const uint8_t value, + size_t repetitions, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data) { + assert(repetitions > 0); + if (previous_value != value) { + tree[*tree_size] = value; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + --repetitions; + } + if (repetitions == 7) { + tree[*tree_size] = value; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + --repetitions; + } + if (repetitions < 3) { + size_t i; + for (i = 0; i < repetitions; ++i) { + tree[*tree_size] = value; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + } + } else { + size_t start = *tree_size; + repetitions -= 3; + while (BROTLI_TRUE) { + tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH; + extra_bits_data[*tree_size] = repetitions & 0x3; + ++(*tree_size); + repetitions >>= 2; + if (repetitions == 0) { + break; + } + --repetitions; + } + Reverse(tree, start, *tree_size); + Reverse(extra_bits_data, start, *tree_size); + } +} + +static void BrotliWriteHuffmanTreeRepetitionsZeros( + size_t repetitions, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data) { + if (repetitions == 11) { + tree[*tree_size] = 0; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + --repetitions; + } + if (repetitions < 3) { + size_t i; + for (i = 0; i < repetitions; ++i) { + tree[*tree_size] = 0; + extra_bits_data[*tree_size] = 0; + ++(*tree_size); + } + } else { + size_t start = *tree_size; + repetitions -= 3; + while (BROTLI_TRUE) { + tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH; + extra_bits_data[*tree_size] = repetitions & 0x7; + ++(*tree_size); + repetitions >>= 3; + if (repetitions == 0) { + break; + } + --repetitions; + } + Reverse(tree, start, *tree_size); + Reverse(extra_bits_data, start, *tree_size); + } +} + +void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, + uint8_t* good_for_rle) { + size_t nonzero_count = 0; + size_t stride; + size_t limit; + size_t sum; + const size_t streak_limit = 1240; + /* Let's make the Huffman code more compatible with RLE encoding. */ + size_t i; + for (i = 0; i < length; i++) { + if (counts[i]) { + ++nonzero_count; + } + } + if (nonzero_count < 16) { + return; + } + while (length != 0 && counts[length - 1] == 0) { + --length; + } + if (length == 0) { + return; /* All zeros. */ + } + /* Now counts[0..length - 1] does not have trailing zeros. */ + { + size_t nonzeros = 0; + uint32_t smallest_nonzero = 1 << 30; + for (i = 0; i < length; ++i) { + if (counts[i] != 0) { + ++nonzeros; + if (smallest_nonzero > counts[i]) { + smallest_nonzero = counts[i]; + } + } + } + if (nonzeros < 5) { + /* Small histogram will model it well. */ + return; + } + if (smallest_nonzero < 4) { + size_t zeros = length - nonzeros; + if (zeros < 6) { + for (i = 1; i < length - 1; ++i) { + if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) { + counts[i] = 1; + } + } + } + } + if (nonzeros < 28) { + return; + } + } + /* 2) Let's mark all population counts that already can be encoded + with an RLE code. */ + memset(good_for_rle, 0, length); + { + /* Let's not spoil any of the existing good RLE codes. + Mark any seq of 0's that is longer as 5 as a good_for_rle. + Mark any seq of non-0's that is longer as 7 as a good_for_rle. */ + uint32_t symbol = counts[0]; + size_t step = 0; + for (i = 0; i <= length; ++i) { + if (i == length || counts[i] != symbol) { + if ((symbol == 0 && step >= 5) || + (symbol != 0 && step >= 7)) { + size_t k; + for (k = 0; k < step; ++k) { + good_for_rle[i - k - 1] = 1; + } + } + step = 1; + if (i != length) { + symbol = counts[i]; + } + } else { + ++step; + } + } + } + /* 3) Let's replace those population counts that lead to more RLE codes. + Math here is in 24.8 fixed point representation. */ + stride = 0; + limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420; + sum = 0; + for (i = 0; i <= length; ++i) { + if (i == length || good_for_rle[i] || + (i != 0 && good_for_rle[i - 1]) || + (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) { + if (stride >= 4 || (stride >= 3 && sum == 0)) { + size_t k; + /* The stride must end, collapse what we have, if we have enough (4). */ + size_t count = (sum + stride / 2) / stride; + if (count == 0) { + count = 1; + } + if (sum == 0) { + /* Don't make an all zeros stride to be upgraded to ones. */ + count = 0; + } + for (k = 0; k < stride; ++k) { + /* We don't want to change value at counts[i], + that is already belonging to the next stride. Thus - 1. */ + counts[i - k - 1] = (uint32_t)count; + } + } + stride = 0; + sum = 0; + if (i < length - 2) { + /* All interesting strides have a count of at least 4, */ + /* at least when non-zeros. */ + limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420; + } else if (i < length) { + limit = 256 * counts[i]; + } else { + limit = 0; + } + } + ++stride; + if (i != length) { + sum += counts[i]; + if (stride >= 4) { + limit = (256 * sum + stride / 2) / stride; + } + if (stride == 4) { + limit += 120; + } + } + } +} + +static void DecideOverRleUse(const uint8_t* depth, const size_t length, + BROTLI_BOOL *use_rle_for_non_zero, + BROTLI_BOOL *use_rle_for_zero) { + size_t total_reps_zero = 0; + size_t total_reps_non_zero = 0; + size_t count_reps_zero = 1; + size_t count_reps_non_zero = 1; + size_t i; + for (i = 0; i < length;) { + const uint8_t value = depth[i]; + size_t reps = 1; + size_t k; + for (k = i + 1; k < length && depth[k] == value; ++k) { + ++reps; + } + if (reps >= 3 && value == 0) { + total_reps_zero += reps; + ++count_reps_zero; + } + if (reps >= 4 && value != 0) { + total_reps_non_zero += reps; + ++count_reps_non_zero; + } + i += reps; + } + *use_rle_for_non_zero = + TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2); + *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2); +} + +void BrotliWriteHuffmanTree(const uint8_t* depth, + size_t length, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data) { + uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH; + size_t i; + BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE; + BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE; + + /* Throw away trailing zeros. */ + size_t new_length = length; + for (i = 0; i < length; ++i) { + if (depth[length - i - 1] == 0) { + --new_length; + } else { + break; + } + } + + /* First gather statistics on if it is a good idea to do RLE. */ + if (length > 50) { + /* Find RLE coding for longer codes. + Shorter codes seem not to benefit from RLE. */ + DecideOverRleUse(depth, new_length, + &use_rle_for_non_zero, &use_rle_for_zero); + } + + /* Actual RLE coding. */ + for (i = 0; i < new_length;) { + const uint8_t value = depth[i]; + size_t reps = 1; + if ((value != 0 && use_rle_for_non_zero) || + (value == 0 && use_rle_for_zero)) { + size_t k; + for (k = i + 1; k < new_length && depth[k] == value; ++k) { + ++reps; + } + } + if (value == 0) { + BrotliWriteHuffmanTreeRepetitionsZeros( + reps, tree_size, tree, extra_bits_data); + } else { + BrotliWriteHuffmanTreeRepetitions(previous_value, + value, reps, tree_size, + tree, extra_bits_data); + previous_value = value; + } + i += reps; + } +} + +static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) { + static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */ + 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, + 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf + }; + size_t retval = kLut[bits & 0xf]; + size_t i; + for (i = 4; i < num_bits; i += 4) { + retval <<= 4; + bits = (uint16_t)(bits >> 4); + retval |= kLut[bits & 0xf]; + } + retval >>= ((0 - num_bits) & 0x3); + return (uint16_t)retval; +} + +/* 0..15 are values for bits */ +#define MAX_HUFFMAN_BITS 16 + +void BrotliConvertBitDepthsToSymbols(const uint8_t *depth, + size_t len, + uint16_t *bits) { + /* In Brotli, all bit depths are [1..15] + 0 bit depth means that the symbol does not exist. */ + uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 }; + uint16_t next_code[MAX_HUFFMAN_BITS]; + size_t i; + int code = 0; + for (i = 0; i < len; ++i) { + ++bl_count[depth[i]]; + } + bl_count[0] = 0; + next_code[0] = 0; + for (i = 1; i < MAX_HUFFMAN_BITS; ++i) { + code = (code + bl_count[i - 1]) << 1; + next_code[i] = (uint16_t)code; + } + for (i = 0; i < len; ++i) { + if (depth[i]) { + bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++); + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/entropy_encode.cc b/third_party/brotli/enc/entropy_encode.cc deleted file mode 100644 index f18355d8..0000000 --- a/third_party/brotli/enc/entropy_encode.cc +++ /dev/null
@@ -1,480 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Entropy encoding (Huffman) utilities. - -#include "./entropy_encode.h" - -#include <algorithm> -#include <limits> -#include <cstdlib> - -#include "./histogram.h" -#include "./port.h" -#include "./types.h" - -namespace brotli { - -void SetDepth(const HuffmanTree &p, - HuffmanTree *pool, - uint8_t *depth, - uint8_t level) { - if (p.index_left_ >= 0) { - ++level; - SetDepth(pool[p.index_left_], pool, depth, level); - SetDepth(pool[p.index_right_or_value_], pool, depth, level); - } else { - depth[p.index_right_or_value_] = level; - } -} - -// Sort the root nodes, least popular first. -static inline bool SortHuffmanTree(const HuffmanTree& v0, - const HuffmanTree& v1) { - if (v0.total_count_ != v1.total_count_) { - return v0.total_count_ < v1.total_count_; - } - return v0.index_right_or_value_ > v1.index_right_or_value_; -} - -// This function will create a Huffman tree. -// -// The catch here is that the tree cannot be arbitrarily deep. -// Brotli specifies a maximum depth of 15 bits for "code trees" -// and 7 bits for "code length code trees." -// -// count_limit is the value that is to be faked as the minimum value -// and this minimum value is raised until the tree matches the -// maximum length requirement. -// -// This algorithm is not of excellent performance for very long data blocks, -// especially when population counts are longer than 2**tree_limit, but -// we are not planning to use this with extremely long blocks. -// -// See http://en.wikipedia.org/wiki/Huffman_coding -void CreateHuffmanTree(const uint32_t *data, - const size_t length, - const int tree_limit, - HuffmanTree* tree, - uint8_t *depth) { - // For block sizes below 64 kB, we never need to do a second iteration - // of this loop. Probably all of our block sizes will be smaller than - // that, so this loop is mostly of academic interest. If we actually - // would need this, we would be better off with the Katajainen algorithm. - for (uint32_t count_limit = 1; ; count_limit *= 2) { - size_t n = 0; - for (size_t i = length; i != 0;) { - --i; - if (data[i]) { - const uint32_t count = std::max(data[i], count_limit); - tree[n++] = HuffmanTree(count, -1, static_cast<int16_t>(i)); - } - } - - if (n == 1) { - depth[tree[0].index_right_or_value_] = 1; // Only one element. - break; - } - - std::sort(tree, tree + n, SortHuffmanTree); - - // The nodes are: - // [0, n): the sorted leaf nodes that we start with. - // [n]: we add a sentinel here. - // [n + 1, 2n): new parent nodes are added here, starting from - // (n+1). These are naturally in ascending order. - // [2n]: we add a sentinel at the end as well. - // There will be (2n+1) elements at the end. - const HuffmanTree sentinel(std::numeric_limits<uint32_t>::max(), -1, -1); - tree[n] = sentinel; - tree[n + 1] = sentinel; - - size_t i = 0; // Points to the next leaf node. - size_t j = n + 1; // Points to the next non-leaf node. - for (size_t k = n - 1; k != 0; --k) { - size_t left, right; - if (tree[i].total_count_ <= tree[j].total_count_) { - left = i; - ++i; - } else { - left = j; - ++j; - } - if (tree[i].total_count_ <= tree[j].total_count_) { - right = i; - ++i; - } else { - right = j; - ++j; - } - - // The sentinel node becomes the parent node. - size_t j_end = 2 * n - k; - tree[j_end].total_count_ = - tree[left].total_count_ + tree[right].total_count_; - tree[j_end].index_left_ = static_cast<int16_t>(left); - tree[j_end].index_right_or_value_ = static_cast<int16_t>(right); - - // Add back the last sentinel node. - tree[j_end + 1] = sentinel; - } - SetDepth(tree[2 * n - 1], &tree[0], depth, 0); - - // We need to pack the Huffman tree in tree_limit bits. - // If this was not successful, add fake entities to the lowest values - // and retry. - if (*std::max_element(&depth[0], &depth[length]) <= tree_limit) { - break; - } - } -} - -static void Reverse(uint8_t* v, size_t start, size_t end) { - --end; - while (start < end) { - uint8_t tmp = v[start]; - v[start] = v[end]; - v[end] = tmp; - ++start; - --end; - } -} - -static void WriteHuffmanTreeRepetitions( - const uint8_t previous_value, - const uint8_t value, - size_t repetitions, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - assert(repetitions > 0); - if (previous_value != value) { - tree[*tree_size] = value; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - --repetitions; - } - if (repetitions == 7) { - tree[*tree_size] = value; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - --repetitions; - } - if (repetitions < 3) { - for (size_t i = 0; i < repetitions; ++i) { - tree[*tree_size] = value; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - } - } else { - repetitions -= 3; - size_t start = *tree_size; - while (true) { - tree[*tree_size] = 16; - extra_bits_data[*tree_size] = repetitions & 0x3; - ++(*tree_size); - repetitions >>= 2; - if (repetitions == 0) { - break; - } - --repetitions; - } - Reverse(tree, start, *tree_size); - Reverse(extra_bits_data, start, *tree_size); - } -} - -static void WriteHuffmanTreeRepetitionsZeros( - size_t repetitions, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - if (repetitions == 11) { - tree[*tree_size] = 0; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - --repetitions; - } - if (repetitions < 3) { - for (size_t i = 0; i < repetitions; ++i) { - tree[*tree_size] = 0; - extra_bits_data[*tree_size] = 0; - ++(*tree_size); - } - } else { - repetitions -= 3; - size_t start = *tree_size; - while (true) { - tree[*tree_size] = 17; - extra_bits_data[*tree_size] = repetitions & 0x7; - ++(*tree_size); - repetitions >>= 3; - if (repetitions == 0) { - break; - } - --repetitions; - } - Reverse(tree, start, *tree_size); - Reverse(extra_bits_data, start, *tree_size); - } -} - -void OptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, - uint8_t* good_for_rle) { - size_t nonzero_count = 0; - size_t stride; - size_t limit; - size_t sum; - const size_t streak_limit = 1240; - // Let's make the Huffman code more compatible with rle encoding. - size_t i; - for (i = 0; i < length; i++) { - if (counts[i]) { - ++nonzero_count; - } - } - if (nonzero_count < 16) { - return; - } - while (length != 0 && counts[length - 1] == 0) { - --length; - } - if (length == 0) { - return; // All zeros. - } - // Now counts[0..length - 1] does not have trailing zeros. - { - size_t nonzeros = 0; - uint32_t smallest_nonzero = 1 << 30; - for (i = 0; i < length; ++i) { - if (counts[i] != 0) { - ++nonzeros; - if (smallest_nonzero > counts[i]) { - smallest_nonzero = counts[i]; - } - } - } - if (nonzeros < 5) { - // Small histogram will model it well. - return; - } - size_t zeros = length - nonzeros; - if (smallest_nonzero < 4) { - if (zeros < 6) { - for (i = 1; i < length - 1; ++i) { - if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) { - counts[i] = 1; - } - } - } - } - if (nonzeros < 28) { - return; - } - } - // 2) Let's mark all population counts that already can be encoded - // with an rle code. - memset(good_for_rle, 0, length); - { - // Let's not spoil any of the existing good rle codes. - // Mark any seq of 0's that is longer as 5 as a good_for_rle. - // Mark any seq of non-0's that is longer as 7 as a good_for_rle. - uint32_t symbol = counts[0]; - size_t step = 0; - for (i = 0; i <= length; ++i) { - if (i == length || counts[i] != symbol) { - if ((symbol == 0 && step >= 5) || - (symbol != 0 && step >= 7)) { - size_t k; - for (k = 0; k < step; ++k) { - good_for_rle[i - k - 1] = 1; - } - } - step = 1; - if (i != length) { - symbol = counts[i]; - } - } else { - ++step; - } - } - } - // 3) Let's replace those population counts that lead to more rle codes. - // Math here is in 24.8 fixed point representation. - stride = 0; - limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420; - sum = 0; - for (i = 0; i <= length; ++i) { - if (i == length || good_for_rle[i] || - (i != 0 && good_for_rle[i - 1]) || - (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) { - if (stride >= 4 || (stride >= 3 && sum == 0)) { - size_t k; - // The stride must end, collapse what we have, if we have enough (4). - size_t count = (sum + stride / 2) / stride; - if (count == 0) { - count = 1; - } - if (sum == 0) { - // Don't make an all zeros stride to be upgraded to ones. - count = 0; - } - for (k = 0; k < stride; ++k) { - // We don't want to change value at counts[i], - // that is already belonging to the next stride. Thus - 1. - counts[i - k - 1] = static_cast<uint32_t>(count); - } - } - stride = 0; - sum = 0; - if (i < length - 2) { - // All interesting strides have a count of at least 4, - // at least when non-zeros. - limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420; - } else if (i < length) { - limit = 256 * counts[i]; - } else { - limit = 0; - } - } - ++stride; - if (i != length) { - sum += counts[i]; - if (stride >= 4) { - limit = (256 * sum + stride / 2) / stride; - } - if (stride == 4) { - limit += 120; - } - } - } -} - -static void DecideOverRleUse(const uint8_t* depth, const size_t length, - bool *use_rle_for_non_zero, - bool *use_rle_for_zero) { - size_t total_reps_zero = 0; - size_t total_reps_non_zero = 0; - size_t count_reps_zero = 1; - size_t count_reps_non_zero = 1; - for (size_t i = 0; i < length;) { - const uint8_t value = depth[i]; - size_t reps = 1; - for (size_t k = i + 1; k < length && depth[k] == value; ++k) { - ++reps; - } - if (reps >= 3 && value == 0) { - total_reps_zero += reps; - ++count_reps_zero; - } - if (reps >= 4 && value != 0) { - total_reps_non_zero += reps; - ++count_reps_non_zero; - } - i += reps; - } - *use_rle_for_non_zero = total_reps_non_zero > count_reps_non_zero * 2; - *use_rle_for_zero = total_reps_zero > count_reps_zero * 2; -} - -void WriteHuffmanTree(const uint8_t* depth, - size_t length, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - uint8_t previous_value = 8; - - // Throw away trailing zeros. - size_t new_length = length; - for (size_t i = 0; i < length; ++i) { - if (depth[length - i - 1] == 0) { - --new_length; - } else { - break; - } - } - - // First gather statistics on if it is a good idea to do rle. - bool use_rle_for_non_zero = false; - bool use_rle_for_zero = false; - if (length > 50) { - // Find rle coding for longer codes. - // Shorter codes seem not to benefit from rle. - DecideOverRleUse(depth, new_length, - &use_rle_for_non_zero, &use_rle_for_zero); - } - - // Actual rle coding. - for (size_t i = 0; i < new_length;) { - const uint8_t value = depth[i]; - size_t reps = 1; - if ((value != 0 && use_rle_for_non_zero) || - (value == 0 && use_rle_for_zero)) { - for (size_t k = i + 1; k < new_length && depth[k] == value; ++k) { - ++reps; - } - } - if (value == 0) { - WriteHuffmanTreeRepetitionsZeros(reps, tree_size, tree, extra_bits_data); - } else { - WriteHuffmanTreeRepetitions(previous_value, - value, reps, tree_size, - tree, extra_bits_data); - previous_value = value; - } - i += reps; - } -} - -namespace { - -uint16_t ReverseBits(int num_bits, uint16_t bits) { - static const size_t kLut[16] = { // Pre-reversed 4-bit values. - 0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe, - 0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf - }; - size_t retval = kLut[bits & 0xf]; - for (int i = 4; i < num_bits; i += 4) { - retval <<= 4; - bits = static_cast<uint16_t>(bits >> 4); - retval |= kLut[bits & 0xf]; - } - retval >>= (-num_bits & 0x3); - return static_cast<uint16_t>(retval); -} - -} // namespace - -void ConvertBitDepthsToSymbols(const uint8_t *depth, - size_t len, - uint16_t *bits) { - // In Brotli, all bit depths are [1..15] - // 0 bit depth means that the symbol does not exist. - const int kMaxBits = 16; // 0..15 are values for bits - uint16_t bl_count[kMaxBits] = { 0 }; - { - for (size_t i = 0; i < len; ++i) { - ++bl_count[depth[i]]; - } - bl_count[0] = 0; - } - uint16_t next_code[kMaxBits]; - next_code[0] = 0; - { - int code = 0; - for (int bits = 1; bits < kMaxBits; ++bits) { - code = (code + bl_count[bits - 1]) << 1; - next_code[bits] = static_cast<uint16_t>(code); - } - } - for (size_t i = 0; i < len; ++i) { - if (depth[i]) { - bits[i] = ReverseBits(depth[i], next_code[depth[i]]++); - } - } -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/entropy_encode.h b/third_party/brotli/enc/entropy_encode.h index 090f954..812d0094 100644 --- a/third_party/brotli/enc/entropy_encode.h +++ b/third_party/brotli/enc/entropy_encode.h
@@ -4,101 +4,119 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Entropy encoding (Huffman) utilities. +/* Entropy encoding (Huffman) utilities. */ #ifndef BROTLI_ENC_ENTROPY_ENCODE_H_ #define BROTLI_ENC_ENTROPY_ENCODE_H_ -#include <string.h> -#include "./histogram.h" -#include "./prefix.h" -#include "./types.h" +#include <brotli/types.h> +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// A node of a Huffman tree. -struct HuffmanTree { - HuffmanTree() {} - HuffmanTree(uint32_t count, int16_t left, int16_t right) - : total_count_(count), - index_left_(left), - index_right_or_value_(right) { - } +/* A node of a Huffman tree. */ +typedef struct HuffmanTree { uint32_t total_count_; int16_t index_left_; int16_t index_right_or_value_; -}; +} HuffmanTree; -void SetDepth(const HuffmanTree &p, HuffmanTree *pool, - uint8_t *depth, uint8_t level); +static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count, + int16_t left, int16_t right) { + self->total_count_ = count; + self->index_left_ = left; + self->index_right_or_value_ = right; +} -// This function will create a Huffman tree. -// -// The (data,length) contains the population counts. -// The tree_limit is the maximum bit depth of the Huffman codes. -// -// The depth contains the tree, i.e., how many bits are used for -// the symbol. -// -// The actual Huffman tree is constructed in the tree[] array, which has to -// be at least 2 * length + 1 long. -// -// See http://en.wikipedia.org/wiki/Huffman_coding -void CreateHuffmanTree(const uint32_t *data, - const size_t length, - const int tree_limit, - HuffmanTree* tree, - uint8_t *depth); +/* Returns 1 is assignment of depths succeeded, otherwise 0. */ +BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth( + int p, HuffmanTree* pool, uint8_t* depth, int max_depth); -// Change the population counts in a way that the consequent -// Huffman tree compression, especially its rle-part will be more -// likely to compress this data more efficiently. -// -// length contains the size of the histogram. -// counts contains the population counts. -// good_for_rle is a buffer of at least length size -void OptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, - uint8_t* good_for_rle); +/* This function will create a Huffman tree. -// Write a Huffman tree from bit depths into the bitstream representation -// of a Huffman tree. The generated Huffman tree is to be compressed once -// more using a Huffman tree -void WriteHuffmanTree(const uint8_t* depth, - size_t num, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data); + The (data,length) contains the population counts. + The tree_limit is the maximum bit depth of the Huffman codes. -// Get the actual bit values for a tree of bit depths. -void ConvertBitDepthsToSymbols(const uint8_t *depth, - size_t len, - uint16_t *bits); + The depth contains the tree, i.e., how many bits are used for + the symbol. -template<int kSize> -struct EntropyCode { - // How many bits for symbol. - uint8_t depth_[kSize]; - // Actual bits used to represent the symbol. - uint16_t bits_[kSize]; - // How many non-zero depth. - int count_; - // First four symbols with non-zero depth. - int symbols_[4]; -}; + The actual Huffman tree is constructed in the tree[] array, which has to + be at least 2 * length + 1 long. -static const int kCodeLengthCodes = 18; + See http://en.wikipedia.org/wiki/Huffman_coding */ +BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t *data, + const size_t length, + const int tree_limit, + HuffmanTree* tree, + uint8_t *depth); -// Literal entropy code. -typedef EntropyCode<256> EntropyCodeLiteral; -// Prefix entropy codes. -typedef EntropyCode<kNumCommandPrefixes> EntropyCodeCommand; -typedef EntropyCode<kNumDistancePrefixes> EntropyCodeDistance; -typedef EntropyCode<kNumBlockLenPrefixes> EntropyCodeBlockLength; -// Context map entropy code, 256 Huffman tree indexes + 16 run length codes. -typedef EntropyCode<272> EntropyCodeContextMap; -// Block type entropy code, 256 block types + 2 special symbols. -typedef EntropyCode<258> EntropyCodeBlockType; +/* Change the population counts in a way that the consequent + Huffman tree compression, especially its RLE-part will be more + likely to compress this data more efficiently. -} // namespace brotli + length contains the size of the histogram. + counts contains the population counts. + good_for_rle is a buffer of at least length size */ +BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle( + size_t length, uint32_t* counts, uint8_t* good_for_rle); -#endif // BROTLI_ENC_ENTROPY_ENCODE_H_ +/* Write a Huffman tree from bit depths into the bit-stream representation + of a Huffman tree. The generated Huffman tree is to be compressed once + more using a Huffman tree */ +BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth, + size_t num, + size_t* tree_size, + uint8_t* tree, + uint8_t* extra_bits_data); + +/* Get the actual bit values for a tree of bit depths. */ +BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t *depth, + size_t len, + uint16_t *bits); + +/* Input size optimized Shell sort. */ +typedef BROTLI_BOOL (*HuffmanTreeComparator)( + const HuffmanTree*, const HuffmanTree*); +static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items, + const size_t n, HuffmanTreeComparator comparator) { + static const size_t gaps[] = {132, 57, 23, 10, 4, 1}; + if (n < 13) { + /* Insertion sort. */ + size_t i; + for (i = 1; i < n; ++i) { + HuffmanTree tmp = items[i]; + size_t k = i; + size_t j = i - 1; + while (comparator(&tmp, &items[j])) { + items[k] = items[j]; + k = j; + if (!j--) break; + } + items[k] = tmp; + } + return; + } else { + /* Shell sort. */ + int g = n < 57 ? 2 : 0; + for (; g < 6; ++g) { + size_t gap = gaps[g]; + size_t i; + for (i = gap; i < n; ++i) { + size_t j = i; + HuffmanTree tmp = items[i]; + for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) { + items[j] = items[j - gap]; + } + items[j] = tmp; + } + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */
diff --git a/third_party/brotli/enc/entropy_encode_static.h b/third_party/brotli/enc/entropy_encode_static.h index d21f3b5..bc0ee53c 100644 --- a/third_party/brotli/enc/entropy_encode_static.h +++ b/third_party/brotli/enc/entropy_encode_static.h
@@ -4,22 +4,25 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Static entropy codes used for faster meta-block encoding. +/* Static entropy codes used for faster meta-block encoding. */ #ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ #define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ -#include "./prefix.h" -#include "./types.h" +#include "../common/constants.h" +#include <brotli/port.h> +#include <brotli/types.h> #include "./write_bits.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif static const uint8_t kCodeLengthDepth[18] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4, }; -static const uint8_t kStaticCommandCodeDepth[kNumCommandPrefixes] = { +static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -77,11 +80,13 @@ 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7, }; -inline void StoreStaticCodeLengthCode(size_t* storage_ix, uint8_t* storage) { - WriteBits(40, MAKE_UINT64_T(0xff, 0x55555554), storage_ix, storage); +static BROTLI_INLINE void StoreStaticCodeLengthCode( + size_t* storage_ix, uint8_t* storage) { + BrotliWriteBits( + 40, BROTLI_MAKE_UINT64_T(0x0000ffU, 0x55555554U), storage_ix, storage); } -static const uint64_t kZeroRepsBits[704] = { +static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = { 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027, 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770, 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387, @@ -202,7 +207,7 @@ 0x06f9cb87, 0x08f9cb87, }; -static const uint32_t kZeroRepsDepth[704] = { +static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, @@ -249,7 +254,7 @@ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, }; -static const uint64_t kNonZeroRepsBits[704] = { +static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = { 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb, 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb, 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb, @@ -370,7 +375,7 @@ 0x2baeb6db, 0x3baeb6db, }; -static const uint32_t kNonZeroRepsDepth[704] = { +static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = { 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, @@ -417,47 +422,7 @@ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, }; -static const uint16_t kStaticLiteralCodeBits[256] = { - 0, 128, 64, 192, 32, 160, 96, 224, - 16, 144, 80, 208, 48, 176, 112, 240, - 8, 136, 72, 200, 40, 168, 104, 232, - 24, 152, 88, 216, 56, 184, 120, 248, - 4, 132, 68, 196, 36, 164, 100, 228, - 20, 148, 84, 212, 52, 180, 116, 244, - 12, 140, 76, 204, 44, 172, 108, 236, - 28, 156, 92, 220, 60, 188, 124, 252, - 2, 130, 66, 194, 34, 162, 98, 226, - 18, 146, 82, 210, 50, 178, 114, 242, - 10, 138, 74, 202, 42, 170, 106, 234, - 26, 154, 90, 218, 58, 186, 122, 250, - 6, 134, 70, 198, 38, 166, 102, 230, - 22, 150, 86, 214, 54, 182, 118, 246, - 14, 142, 78, 206, 46, 174, 110, 238, - 30, 158, 94, 222, 62, 190, 126, 254, - 1, 129, 65, 193, 33, 161, 97, 225, - 17, 145, 81, 209, 49, 177, 113, 241, - 9, 137, 73, 201, 41, 169, 105, 233, - 25, 153, 89, 217, 57, 185, 121, 249, - 5, 133, 69, 197, 37, 165, 101, 229, - 21, 149, 85, 213, 53, 181, 117, 245, - 13, 141, 77, 205, 45, 173, 109, 237, - 29, 157, 93, 221, 61, 189, 125, 253, - 3, 131, 67, 195, 35, 163, 99, 227, - 19, 147, 83, 211, 51, 179, 115, 243, - 11, 139, 75, 203, 43, 171, 107, 235, - 27, 155, 91, 219, 59, 187, 123, 251, - 7, 135, 71, 199, 39, 167, 103, 231, - 23, 151, 87, 215, 55, 183, 119, 247, - 15, 143, 79, 207, 47, 175, 111, 239, - 31, 159, 95, 223, 63, 191, 127, 255, -}; - -inline void StoreStaticLiteralHuffmanTree(size_t* storage_ix, - uint8_t* storage) { - WriteBits(32, 0x00010003U, storage_ix, storage); -} - -static const uint16_t kStaticCommandCodeBits[kNumCommandPrefixes] = { +static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = { 0, 256, 128, 384, 64, 320, 192, 448, 32, 288, 160, 416, 96, 352, 224, 480, 16, 272, 144, 400, 80, 336, 208, 464, @@ -548,10 +513,11 @@ 255, 1279, 767, 1791, 511, 1535, 1023, 2047, }; -inline void StoreStaticCommandHuffmanTree(size_t* storage_ix, - uint8_t* storage) { - WriteBits(28, 0x0000000006307003U, storage_ix, storage); - WriteBits(31, 0x0000000009262441U, storage_ix, storage); +static BROTLI_INLINE void StoreStaticCommandHuffmanTree( + size_t* storage_ix, uint8_t* storage) { + BrotliWriteBits( + 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage); + BrotliWriteBits(3, 0x00000000U, storage_ix, storage); } static const uint16_t kStaticDistanceCodeBits[64] = { @@ -561,12 +527,13 @@ 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63, }; -inline void StoreStaticDistanceHuffmanTree(size_t* storage_ix, - uint8_t* storage) { - WriteBits(18, 0x000000000001dc03U, storage_ix, storage); - WriteBits(10, 0x00000000000000daU, storage_ix, storage); +static BROTLI_INLINE void StoreStaticDistanceHuffmanTree( + size_t* storage_ix, uint8_t* storage) { + BrotliWriteBits(28, 0x0369dc03U, storage_ix, storage); } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ +#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */
diff --git a/third_party/brotli/enc/fast_log.h b/third_party/brotli/enc/fast_log.h index e750e56..b980175 100644 --- a/third_party/brotli/enc/fast_log.h +++ b/third_party/brotli/enc/fast_log.h
@@ -4,21 +4,23 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Utilities for fast computation of logarithms. +/* Utilities for fast computation of logarithms. */ #ifndef BROTLI_ENC_FAST_LOG_H_ #define BROTLI_ENC_FAST_LOG_H_ -#include <assert.h> #include <math.h> -#include "./types.h" +#include <brotli/types.h> +#include <brotli/port.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static inline uint32_t Log2FloorNonZero(size_t n) { +static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) { #ifdef __GNUC__ - return 31u ^ static_cast<uint32_t>(__builtin_clz(static_cast<uint32_t>(n))); + return 31u ^ (uint32_t)__builtin_clz((uint32_t)n); #else uint32_t result = 0; while (n >>= 1) result++; @@ -26,10 +28,10 @@ #endif } -// A lookup table for small values of log2(int) to be used in entropy -// computation. -// -// ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) +/* A lookup table for small values of log2(int) to be used in entropy + computation. + + ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */ static const float kLog2Table[] = { 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f, 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f, @@ -119,21 +121,25 @@ 7.9943534368588578f }; -// Faster logarithm for small integers, with the property of log2(0) == 0. -static inline double FastLog2(size_t v) { +#define LOG_2_INV 1.4426950408889634 + +/* Faster logarithm for small integers, with the property of log2(0) == 0. */ +static BROTLI_INLINE double FastLog2(size_t v) { if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) { return kLog2Table[v]; } -#if defined(_MSC_VER) && _MSC_VER <= 1700 - // Visual Studio 2012 does not have the log2() function defined, so we use - // log() and a multiplication instead. - static const double kLog2Inv = 1.4426950408889634f; - return log(static_cast<double>(v)) * kLog2Inv; +#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \ + (defined(__ANDROID_API__) && __ANDROID_API__ < 18) + /* Visual Studio 2012 and Android API levels < 18 do not have the log2() + * function defined, so we use log() and a multiplication instead. */ + return log((double)v) * LOG_2_INV; #else - return log2(static_cast<double>(v)); + return log2((double)v); #endif } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_FAST_LOG_H_ +#endif /* BROTLI_ENC_FAST_LOG_H_ */
diff --git a/third_party/brotli/enc/find_match_length.h b/third_party/brotli/enc/find_match_length.h index 1337ec3..b3e3d80 100644 --- a/third_party/brotli/enc/find_match_length.h +++ b/third_party/brotli/enc/find_match_length.h
@@ -4,41 +4,42 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Function to find maximal matching prefixes of strings. +/* Function to find maximal matching prefixes of strings. */ #ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_ #define BROTLI_ENC_FIND_MATCH_LENGTH_H_ - +#include <brotli/types.h> #include "./port.h" -#include "./types.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// Separate implementation for little-endian 64-bit targets, for speed. +/* Separate implementation for little-endian 64-bit targets, for speed. */ #if defined(__GNUC__) && defined(_LP64) && defined(IS_LITTLE_ENDIAN) -static inline size_t FindMatchLengthWithLimit(const uint8_t* s1, - const uint8_t* s2, - size_t limit) { +static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, + const uint8_t* s2, + size_t limit) { size_t matched = 0; - size_t limit2 = (limit >> 3) + 1; // + 1 is for pre-decrement in while - while (PREDICT_TRUE(--limit2)) { - if (PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64(s2) == + size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */ + while (BROTLI_PREDICT_TRUE(--limit2)) { + if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64(s2) == BROTLI_UNALIGNED_LOAD64(s1 + matched))) { s2 += 8; matched += 8; } else { uint64_t x = BROTLI_UNALIGNED_LOAD64(s2) ^ BROTLI_UNALIGNED_LOAD64(s1 + matched); - size_t matching_bits = static_cast<size_t>(__builtin_ctzll(x)); + size_t matching_bits = (size_t)__builtin_ctzll(x); matched += matching_bits >> 3; return matched; } } - limit = (limit & 7) + 1; // + 1 is for pre-decrement in while + limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */ while (--limit) { - if (PREDICT_TRUE(s1[matched] == *s2)) { + if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) { ++s2; ++matched; } else { @@ -48,16 +49,16 @@ return matched; } #else -static inline size_t FindMatchLengthWithLimit(const uint8_t* s1, - const uint8_t* s2, - size_t limit) { +static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, + const uint8_t* s2, + size_t limit) { size_t matched = 0; const uint8_t* s2_limit = s2 + limit; const uint8_t* s2_ptr = s2; - // Find out how long the match is. We loop over the data 32 bits at a - // time until we find a 32-bit block that doesn't match; then we find - // the first non-matching bit and use that to calculate the total - // length of the match. + /* Find out how long the match is. We loop over the data 32 bits at a + time until we find a 32-bit block that doesn't match; then we find + the first non-matching bit and use that to calculate the total + length of the match. */ while (s2_ptr <= s2_limit - 4 && BROTLI_UNALIGNED_LOAD32(s2_ptr) == BROTLI_UNALIGNED_LOAD32(s1 + matched)) { @@ -72,6 +73,8 @@ } #endif -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_FIND_MATCH_LENGTH_H_ +#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */
diff --git a/third_party/brotli/enc/hash.h b/third_party/brotli/enc/hash.h index 227be1d..0d8e61c 100644 --- a/third_party/brotli/enc/hash.h +++ b/third_party/brotli/enc/hash.h
@@ -4,30 +4,32 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// A (forgetful) hash table to the data seen by the compressor, to -// help create backward references to previous data. +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. */ #ifndef BROTLI_ENC_HASH_H_ #define BROTLI_ENC_HASH_H_ -#include <sys/types.h> -#include <algorithm> -#include <cstring> -#include <limits> +#include <string.h> /* memcmp, memset */ +#include "../common/constants.h" +#include "../common/dictionary.h" +#include <brotli/types.h> #include "./dictionary_hash.h" #include "./fast_log.h" #include "./find_match_length.h" +#include "./memory.h" #include "./port.h" -#include "./prefix.h" +#include "./quality.h" #include "./static_dict.h" -#include "./transform.h" -#include "./types.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static const size_t kMaxTreeSearchDepth = 64; -static const size_t kMaxTreeCompLength = 128; +#define MAX_TREE_SEARCH_DEPTH 64 +#define MAX_TREE_COMP_LENGTH 128 +#define score_t size_t static const uint32_t kDistanceCacheIndex[] = { 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, @@ -41,934 +43,686 @@ 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 }; -// kHashMul32 multiplier has these properties: -// * The multiplier must be odd. Otherwise we may lose the highest bit. -// * No long streaks of 1s or 0s. -// * There is no effort to ensure that it is a prime, the oddity is enough -// for this use. -// * The number has been tuned heuristically against compression benchmarks. +typedef struct HasherSearchResult { + size_t len; + size_t len_x_code; /* == len ^ len_code */ + size_t distance; + score_t score; +} HasherSearchResult; + +typedef struct DictionarySearchStatictics { + size_t num_lookups; + size_t num_matches; +} DictionarySearchStatictics; + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ static const uint32_t kHashMul32 = 0x1e35a7bd; -template<int kShiftBits> -inline uint32_t Hash(const uint8_t *data) { +static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) { uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kShiftBits); + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - 14); } -// Usually, we always choose the longest backward reference. This function -// allows for the exception of that rule. -// -// If we choose a backward reference that is further away, it will -// usually be coded with more bits. We approximate this by assuming -// log2(distance). If the distance can be expressed in terms of the -// last four distances, we use some heuristic constants to estimate -// the bits cost. For the first up to four literals we use the bit -// cost of the literals from the literal cost model, after that we -// use the average bit cost of the cost model. -// -// This function is used to sometimes discard a longer backward reference -// when it is not much longer and the bit cost for encoding it is more -// than the saved literals. -// -// backward_reference_offset MUST be positive. -inline double BackwardReferenceScore(size_t copy_length, - size_t backward_reference_offset) { - return 5.4 * static_cast<double>(copy_length) - - 1.20 * Log2FloorNonZero(backward_reference_offset); +#define BROTLI_LITERAL_BYTE_SCORE 540 +#define BROTLI_DISTANCE_BIT_PENALTY 120 +/* Score must be positive after applying maximal penalty. */ +#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t)) + +/* Usually, we always choose the longest backward reference. This function + allows for the exception of that rule. + + If we choose a backward reference that is further away, it will + usually be coded with more bits. We approximate this by assuming + log2(distance). If the distance can be expressed in terms of the + last four distances, we use some heuristic constants to estimate + the bits cost. For the first up to four literals we use the bit + cost of the literals from the literal cost model, after that we + use the average bit cost of the cost model. + + This function is used to sometimes discard a longer backward reference + when it is not much longer and the bit cost for encoding it is more + than the saved literals. + + backward_reference_offset MUST be positive. */ +static BROTLI_INLINE score_t BackwardReferenceScore( + size_t copy_length, size_t backward_reference_offset) { + return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length - + BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset); } -inline double BackwardReferenceScoreUsingLastDistance(size_t copy_length, - size_t distance_short_code) { - static const double kDistanceShortCodeBitCost[16] = { - -0.6, 0.95, 1.17, 1.27, - 0.93, 0.93, 0.96, 0.96, 0.99, 0.99, - 1.05, 1.05, 1.15, 1.15, 1.25, 1.25 - }; - return 5.4 * static_cast<double>(copy_length) - - kDistanceShortCodeBitCost[distance_short_code]; +static const score_t kDistanceShortCodeCost[BROTLI_NUM_DISTANCE_SHORT_CODES] = { + /* Repeat last */ + BROTLI_SCORE_BASE + 60, + /* 2nd, 3rd, 4th last */ + BROTLI_SCORE_BASE - 95, + BROTLI_SCORE_BASE - 117, + BROTLI_SCORE_BASE - 127, + /* Last with offset */ + BROTLI_SCORE_BASE - 93, + BROTLI_SCORE_BASE - 93, + BROTLI_SCORE_BASE - 96, + BROTLI_SCORE_BASE - 96, + BROTLI_SCORE_BASE - 99, + BROTLI_SCORE_BASE - 99, + /* 2nd last with offset */ + BROTLI_SCORE_BASE - 105, + BROTLI_SCORE_BASE - 105, + BROTLI_SCORE_BASE - 115, + BROTLI_SCORE_BASE - 115, + BROTLI_SCORE_BASE - 125, + BROTLI_SCORE_BASE - 125 +}; + +static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance( + size_t copy_length, size_t distance_short_code) { + return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length + + kDistanceShortCodeCost[distance_short_code]; } -struct BackwardMatch { - BackwardMatch(void) : distance(0), length_and_code(0) {} +static BROTLI_INLINE void DictionarySearchStaticticsReset( + DictionarySearchStatictics* self) { + self->num_lookups = 0; + self->num_matches = 0; +} - BackwardMatch(size_t dist, size_t len) - : distance(static_cast<uint32_t>(dist)) - , length_and_code(static_cast<uint32_t>(len << 5)) {} - - BackwardMatch(size_t dist, size_t len, size_t len_code) - : distance(static_cast<uint32_t>(dist)) - , length_and_code(static_cast<uint32_t>( - (len << 5) | (len == len_code ? 0 : len_code))) {} - - size_t length(void) const { - return length_and_code >> 5; - } - size_t length_code(void) const { - size_t code = length_and_code & 31; - return code ? code : length(); +static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem( + size_t item, const uint8_t* data, size_t max_length, size_t max_backward, + HasherSearchResult* out) { + size_t len; + size_t dist; + size_t offset; + size_t matchlen; + size_t backward; + score_t score; + len = item & 31; + dist = item >> 5; + offset = kBrotliDictionaryOffsetsByLength[len] + len * dist; + if (len > max_length) { + return BROTLI_FALSE; } + matchlen = FindMatchLengthWithLimit(data, &kBrotliDictionary[offset], len); + if (matchlen + kCutoffTransformsCount <= len || matchlen == 0) { + return BROTLI_FALSE; + } + { + size_t transform_id = kCutoffTransforms[len - matchlen]; + backward = max_backward + dist + 1 + + (transform_id << kBrotliDictionarySizeBitsByLength[len]); + } + score = BackwardReferenceScore(matchlen, backward); + if (score < out->score) { + return BROTLI_FALSE; + } + out->len = matchlen; + out->len_x_code = len ^ matchlen; + out->distance = backward; + out->score = score; + return BROTLI_TRUE; +} + +static BROTLI_INLINE BROTLI_BOOL SearchInStaticDictionary( + DictionarySearchStatictics* self, const uint8_t* data, size_t max_length, + size_t max_backward, HasherSearchResult* out, BROTLI_BOOL shallow) { + size_t key; + size_t i; + BROTLI_BOOL is_match_found = BROTLI_FALSE; + if (self->num_matches < (self->num_lookups >> 7)) { + return BROTLI_FALSE; + } + key = Hash14(data) << 1; + for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) { + size_t item = kStaticDictionaryHash[key]; + self->num_lookups++; + if (item != 0 && + TestStaticDictionaryItem(item, data, max_length, max_backward, out)) { + self->num_matches++; + is_match_found = BROTLI_TRUE; + } + } + return is_match_found; +} + +typedef struct BackwardMatch { uint32_t distance; uint32_t length_and_code; -}; +} BackwardMatch; -// A (forgetful) hash table to the data seen by the compressor, to -// help create backward references to previous data. -// -// This is a hash map of fixed size (kBucketSize). Starting from the -// given index, kBucketSweep buckets are used to store values of a key. -template <int kBucketBits, int kBucketSweep, bool kUseDictionary> -class HashLongestMatchQuickly { - public: - HashLongestMatchQuickly(void) { - Reset(); - } - void Reset(void) { - need_init_ = true; - num_dict_lookups_ = 0; - num_dict_matches_ = 0; - } - void Init(void) { - if (need_init_) { - // It is not strictly necessary to fill this buffer here, but - // not filling will make the results of the compression stochastic - // (but correct). This is because random data would cause the - // system to find accidentally good backward references here and there. - memset(&buckets_[0], 0, sizeof(buckets_)); - need_init_ = false; +static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self, + size_t dist, size_t len) { + self->distance = (uint32_t)dist; + self->length_and_code = (uint32_t)(len << 5); +} + +static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self, + size_t dist, size_t len, size_t len_code) { + self->distance = (uint32_t)dist; + self->length_and_code = + (uint32_t)((len << 5) | (len == len_code ? 0 : len_code)); +} + +static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) { + return self->length_and_code >> 5; +} + +static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) { + size_t code = self->length_and_code & 31; + return code ? code : BackwardMatchLength(self); +} + +#define EXPAND_CAT(a, b) CAT(a, b) +#define CAT(a, b) a ## b +#define FN(X) EXPAND_CAT(X, HASHER()) + +#define MAX_NUM_MATCHES_H10 (64 + MAX_TREE_SEARCH_DEPTH) + +#define HASHER() H10 +#define HashToBinaryTree HASHER() + +#define BUCKET_BITS 17 +#define BUCKET_SIZE (1 << BUCKET_BITS) + +static size_t FN(HashTypeLength)(void) { return 4; } +static size_t FN(StoreLookahead)(void) { return MAX_TREE_COMP_LENGTH; } + +static uint32_t FN(HashBytes)(const uint8_t *data) { + uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - BUCKET_BITS); +} + +/* A (forgetful) hash table where each hash bucket contains a binary tree of + sequences whose first 4 bytes share the same hash code. + Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting + position in the input data. The binary tree is sorted by the lexicographic + order of the sequences, and it is also a max-heap with respect to the + starting positions. */ +typedef struct HashToBinaryTree { + /* The window size minus 1 */ + size_t window_mask_; + + /* Hash table that maps the 4-byte hashes of the sequence to the last + position where this hash was found, which is the root of the binary + tree of sequences that share this hash bucket. */ + uint32_t buckets_[BUCKET_SIZE]; + + /* The union of the binary trees of each hash bucket. The root of the tree + corresponding to a hash is a sequence starting at buckets_[hash] and + the left and right children of a sequence starting at pos are + forest_[2 * pos] and forest_[2 * pos + 1]. */ + uint32_t* forest_; + + /* A position used to mark a non-existent sequence, i.e. a tree is empty if + its root is at invalid_pos_ and a node is a leaf if both its children + are at invalid_pos_. */ + uint32_t invalid_pos_; + + size_t forest_size_; + BROTLI_BOOL is_dirty_; +} HashToBinaryTree; + +static void FN(Reset)(HashToBinaryTree* self) { + self->is_dirty_ = BROTLI_TRUE; +} + +static void FN(Initialize)(HashToBinaryTree* self) { + self->forest_ = NULL; + self->forest_size_ = 0; + FN(Reset)(self); +} + +static void FN(Cleanup)(MemoryManager* m, HashToBinaryTree* self) { + BROTLI_FREE(m, self->forest_); +} + +static void FN(Init)( + MemoryManager* m, HashToBinaryTree* self, const uint8_t* data, + const BrotliEncoderParams* params, size_t position, size_t bytes, + BROTLI_BOOL is_last) { + if (self->is_dirty_) { + uint32_t invalid_pos; + size_t num_nodes; + uint32_t i; + BROTLI_UNUSED(data); + self->window_mask_ = (1u << params->lgwin) - 1u; + invalid_pos = (uint32_t)(0 - self->window_mask_); + self->invalid_pos_ = invalid_pos; + for (i = 0; i < BUCKET_SIZE; i++) { + self->buckets_[i] = invalid_pos; } - } - void InitForData(const uint8_t* data, size_t num) { - for (size_t i = 0; i < num; ++i) { - const uint32_t key = HashBytes(&data[i]); - memset(&buckets_[key], 0, kBucketSweep * sizeof(buckets_[0])); - need_init_ = false; + num_nodes = (position == 0 && is_last) ? bytes : self->window_mask_ + 1; + if (num_nodes > self->forest_size_) { + BROTLI_FREE(m, self->forest_); + self->forest_ = BROTLI_ALLOC(m, uint32_t, 2 * num_nodes); + if (BROTLI_IS_OOM(m)) return; + self->forest_size_ = num_nodes; } + self->is_dirty_ = BROTLI_FALSE; } - // Look at 4 bytes at data. - // Compute a hash from these, and store the value somewhere within - // [ix .. ix+3]. - inline void Store(const uint8_t *data, const uint32_t ix) { - const uint32_t key = HashBytes(data); - // Wiggle the value with the bucket sweep range. - const uint32_t off = (ix >> 3) % kBucketSweep; - buckets_[key + off] = ix; +} + +static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self, + const size_t pos) { + return 2 * (pos & self->window_mask_); +} + +static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self, + const size_t pos) { + return 2 * (pos & self->window_mask_) + 1; +} + +/* Stores the hash of the next 4 bytes and in a single tree-traversal, the + hash bucket's binary tree is searched for matches and is re-rooted at the + current position. + + If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the + current position is searched for matches, but the state of the hash table + is not changed, since we can not know the final sorting order of the + current (incomplete) sequence. + + This function must be called with increasing cur_ix positions. */ +static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)( + HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data, + const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length, + const size_t max_backward, size_t* const BROTLI_RESTRICT best_len, + BackwardMatch* BROTLI_RESTRICT matches) { + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + const size_t max_comp_len = + BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH); + const BROTLI_BOOL should_reroot_tree = + TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH); + const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); + size_t prev_ix = self->buckets_[key]; + /* The forest index of the rightmost node of the left subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t node_left = FN(LeftChildIndex)(self, cur_ix); + /* The forest index of the leftmost node of the right subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t node_right = FN(RightChildIndex)(self, cur_ix); + /* The match length of the rightmost node of the left subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t best_len_left = 0; + /* The match length of the leftmost node of the right subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + size_t best_len_right = 0; + size_t depth_remaining; + if (should_reroot_tree) { + self->buckets_[key] = (uint32_t)cur_ix; } - - // Find a longest backward match of &ring_buffer[cur_ix & ring_buffer_mask] - // up to the length of max_length and stores the position cur_ix in the - // hash table. - // - // Does not look for matches longer than max_length. - // Does not look for matches further away than max_backward. - // Writes the best found match length into best_len_out. - // Writes the index (&data[index]) of the start of the best match into - // best_distance_out. - inline bool FindLongestMatch(const uint8_t * __restrict ring_buffer, - const size_t ring_buffer_mask, - const int* __restrict distance_cache, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - size_t * __restrict best_len_out, - size_t * __restrict best_len_code_out, - size_t * __restrict best_distance_out, - double* __restrict best_score_out) { - const size_t best_len_in = *best_len_out; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - const uint32_t key = HashBytes(&ring_buffer[cur_ix_masked]); - int compare_char = ring_buffer[cur_ix_masked + best_len_in]; - double best_score = *best_score_out; - size_t best_len = best_len_in; - size_t cached_backward = static_cast<size_t>(distance_cache[0]); - size_t prev_ix = cur_ix - cached_backward; - bool match_found = false; - if (prev_ix < cur_ix) { - prev_ix &= static_cast<uint32_t>(ring_buffer_mask); - if (compare_char == ring_buffer[prev_ix + best_len]) { - size_t len = FindMatchLengthWithLimit(&ring_buffer[prev_ix], - &ring_buffer[cur_ix_masked], - max_length); - if (len >= 4) { - best_score = BackwardReferenceScoreUsingLastDistance(len, 0); - best_len = len; - *best_len_out = len; - *best_len_code_out = len; - *best_distance_out = cached_backward; - *best_score_out = best_score; - compare_char = ring_buffer[cur_ix_masked + best_len]; - if (kBucketSweep == 1) { - buckets_[key] = static_cast<uint32_t>(cur_ix); - return true; - } else { - match_found = true; - } - } + for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) { + const size_t backward = cur_ix - prev_ix; + const size_t prev_ix_masked = prev_ix & ring_buffer_mask; + if (backward == 0 || backward > max_backward || depth_remaining == 0) { + if (should_reroot_tree) { + self->forest_[node_left] = self->invalid_pos_; + self->forest_[node_right] = self->invalid_pos_; } + break; } - if (kBucketSweep == 1) { - // Only one to look for, don't bother to prepare for a loop. - prev_ix = buckets_[key]; - buckets_[key] = static_cast<uint32_t>(cur_ix); - size_t backward = cur_ix - prev_ix; - prev_ix &= static_cast<uint32_t>(ring_buffer_mask); - if (compare_char != ring_buffer[prev_ix + best_len_in]) { - return false; - } - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - return false; - } - const size_t len = FindMatchLengthWithLimit(&ring_buffer[prev_ix], - &ring_buffer[cur_ix_masked], - max_length); - if (len >= 4) { - *best_len_out = len; - *best_len_code_out = len; - *best_distance_out = backward; - *best_score_out = BackwardReferenceScore(len, backward); - return true; - } - } else { - uint32_t *bucket = buckets_ + key; - prev_ix = *bucket++; - for (int i = 0; i < kBucketSweep; ++i, prev_ix = *bucket++) { - const size_t backward = cur_ix - prev_ix; - prev_ix &= static_cast<uint32_t>(ring_buffer_mask); - if (compare_char != ring_buffer[prev_ix + best_len]) { - continue; - } - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - continue; - } - const size_t len = FindMatchLengthWithLimit(&ring_buffer[prev_ix], - &ring_buffer[cur_ix_masked], - max_length); - if (len >= 4) { - const double score = BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score = score; - best_len = len; - *best_len_out = best_len; - *best_len_code_out = best_len; - *best_distance_out = backward; - *best_score_out = score; - compare_char = ring_buffer[cur_ix_masked + best_len]; - match_found = true; - } - } - } - } - if (kUseDictionary && !match_found && - num_dict_matches_ >= (num_dict_lookups_ >> 7)) { - ++num_dict_lookups_; - const uint32_t dict_key = Hash<14>(&ring_buffer[cur_ix_masked]) << 1; - const uint16_t v = kStaticDictionaryHash[dict_key]; - if (v > 0) { - const uint32_t len = v & 31; - const uint32_t dist = v >> 5; - const size_t offset = - kBrotliDictionaryOffsetsByLength[len] + len * dist; - if (len <= max_length) { - const size_t matchlen = - FindMatchLengthWithLimit(&ring_buffer[cur_ix_masked], - &kBrotliDictionary[offset], len); - if (matchlen + kCutoffTransformsCount > len && matchlen > 0) { - const size_t transform_id = kCutoffTransforms[len - matchlen]; - const size_t word_id = - transform_id * (1u << kBrotliDictionarySizeBitsByLength[len]) + - dist; - const size_t backward = max_backward + word_id + 1; - const double score = BackwardReferenceScore(matchlen, backward); - if (best_score < score) { - ++num_dict_matches_; - best_score = score; - best_len = matchlen; - *best_len_out = best_len; - *best_len_code_out = len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - } - } - const uint32_t off = (cur_ix >> 3) % kBucketSweep; - buckets_[key + off] = static_cast<uint32_t>(cur_ix); - return match_found; - } - - enum { kHashLength = 5 }; - enum { kHashTypeLength = 8 }; - // HashBytes is the function that chooses the bucket to place - // the address in. The HashLongestMatch and HashLongestMatchQuickly - // classes have separate, different implementations of hashing. - static uint32_t HashBytes(const uint8_t *data) { - // Computing a hash based on 5 bytes works much better for - // qualities 1 and 3, where the next hash value is likely to replace - uint64_t h = (BROTLI_UNALIGNED_LOAD64(data) << 24) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return static_cast<uint32_t>(h >> (64 - kBucketBits)); - } - - enum { kHashMapSize = 4 << kBucketBits }; - - private: - static const uint32_t kBucketSize = 1 << kBucketBits; - uint32_t buckets_[kBucketSize + kBucketSweep]; - // True if buckets_ array needs to be initialized. - bool need_init_; - size_t num_dict_lookups_; - size_t num_dict_matches_; -}; - -// A (forgetful) hash table to the data seen by the compressor, to -// help create backward references to previous data. -// -// This is a hash map of fixed size (kBucketSize) to a ring buffer of -// fixed size (kBlockSize). The ring buffer contains the last kBlockSize -// index positions of the given hash key in the compressed data. -template <int kBucketBits, - int kBlockBits, - int kNumLastDistancesToCheck> -class HashLongestMatch { - public: - HashLongestMatch(void) { - Reset(); - } - - void Reset(void) { - need_init_ = true; - num_dict_lookups_ = 0; - num_dict_matches_ = 0; - } - - void Init(void) { - if (need_init_) { - memset(&num_[0], 0, sizeof(num_)); - need_init_ = false; - } - } - - void InitForData(const uint8_t* data, size_t num) { - for (size_t i = 0; i < num; ++i) { - const uint32_t key = HashBytes(&data[i]); - num_[key] = 0; - need_init_ = false; - } - } - - // Look at 3 bytes at data. - // Compute a hash from these, and store the value of ix at that position. - inline void Store(const uint8_t *data, const uint32_t ix) { - const uint32_t key = HashBytes(data); - const int minor_ix = num_[key] & kBlockMask; - buckets_[key][minor_ix] = ix; - ++num_[key]; - } - - // Find a longest backward match of &data[cur_ix] up to the length of - // max_length and stores the position cur_ix in the hash table. - // - // Does not look for matches longer than max_length. - // Does not look for matches further away than max_backward. - // Writes the best found match length into best_len_out. - // Writes the index (&data[index]) offset from the start of the best match - // into best_distance_out. - // Write the score of the best match into best_score_out. - bool FindLongestMatch(const uint8_t * __restrict data, - const size_t ring_buffer_mask, - const int* __restrict distance_cache, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - size_t * __restrict best_len_out, - size_t * __restrict best_len_code_out, - size_t * __restrict best_distance_out, - double * __restrict best_score_out) { - *best_len_code_out = 0; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - bool match_found = false; - // Don't accept a short copy from far away. - double best_score = *best_score_out; - size_t best_len = *best_len_out; - *best_len_out = 0; - // Try last distance first. - for (size_t i = 0; i < kNumLastDistancesToCheck; ++i) { - const size_t idx = kDistanceCacheIndex[i]; - const size_t backward = - static_cast<size_t>(distance_cache[idx] + kDistanceCacheOffset[i]); - size_t prev_ix = static_cast<size_t>(cur_ix - backward); - if (prev_ix >= cur_ix) { - continue; - } - if (PREDICT_FALSE(backward > max_backward)) { - continue; - } - prev_ix &= ring_buffer_mask; - - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { - continue; - } - const size_t len = FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >= 3 || (len == 2 && i < 2)) { - // Comparing for >= 2 does not change the semantics, but just saves for - // a few unnecessary binary logarithms in backward reference score, - // since we are not interested in such short matches. - double score = BackwardReferenceScoreUsingLastDistance(len, i); - if (best_score < score) { - best_score = score; - best_len = len; - *best_len_out = best_len; - *best_len_code_out = best_len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - const uint32_t key = HashBytes(&data[cur_ix_masked]); - const uint32_t * __restrict const bucket = &buckets_[key][0]; - const size_t down = (num_[key] > kBlockSize) ? (num_[key] - kBlockSize) : 0; - for (size_t i = num_[key]; i > down;) { - --i; - size_t prev_ix = bucket[i & kBlockMask]; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { - continue; - } - const size_t len = FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >= 4) { - // Comparing for >= 3 does not change the semantics, but just saves - // for a few unnecessary binary logarithms in backward reference - // score, since we are not interested in such short matches. - double score = BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score = score; - best_len = len; - *best_len_out = best_len; - *best_len_code_out = best_len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - buckets_[key][num_[key] & kBlockMask] = static_cast<uint32_t>(cur_ix); - ++num_[key]; - if (!match_found && num_dict_matches_ >= (num_dict_lookups_ >> 7)) { - size_t dict_key = Hash<14>(&data[cur_ix_masked]) << 1; - for (int k = 0; k < 2; ++k, ++dict_key) { - ++num_dict_lookups_; - const uint16_t v = kStaticDictionaryHash[dict_key]; - if (v > 0) { - const size_t len = v & 31; - const size_t dist = v >> 5; - const size_t offset = - kBrotliDictionaryOffsetsByLength[len] + len * dist; - if (len <= max_length) { - const size_t matchlen = - FindMatchLengthWithLimit(&data[cur_ix_masked], - &kBrotliDictionary[offset], len); - if (matchlen + kCutoffTransformsCount > len && matchlen > 0) { - const size_t transform_id = kCutoffTransforms[len - matchlen]; - const size_t word_id = - transform_id * (1 << kBrotliDictionarySizeBitsByLength[len]) + - dist; - const size_t backward = max_backward + word_id + 1; - double score = BackwardReferenceScore(matchlen, backward); - if (best_score < score) { - ++num_dict_matches_; - best_score = score; - best_len = matchlen; - *best_len_out = best_len; - *best_len_code_out = len; - *best_distance_out = backward; - *best_score_out = best_score; - match_found = true; - } - } - } - } - } - } - return match_found; - } - - // Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the - // length of max_length and stores the position cur_ix in the hash table. - // - // Sets *num_matches to the number of matches found, and stores the found - // matches in matches[0] to matches[*num_matches - 1]. The matches will be - // sorted by strictly increasing length and (non-strictly) increasing - // distance. - size_t FindAllMatches(const uint8_t* data, - const size_t ring_buffer_mask, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - BackwardMatch* matches) { - BackwardMatch* const orig_matches = matches; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - size_t best_len = 1; - size_t stop = cur_ix - 64; - if (cur_ix < 64) { stop = 0; } - for (size_t i = cur_ix - 1; i > stop && best_len <= 2; --i) { - size_t prev_ix = i; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (data[cur_ix_masked] != data[prev_ix] || - data[cur_ix_masked + 1] != data[prev_ix + 1]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len = len; - *matches++ = BackwardMatch(backward, len); - } - } - const uint32_t key = HashBytes(&data[cur_ix_masked]); - const uint32_t * __restrict const bucket = &buckets_[key][0]; - const size_t down = (num_[key] > kBlockSize) ? (num_[key] - kBlockSize) : 0; - for (size_t i = num_[key]; i > down;) { - --i; - size_t prev_ix = bucket[i & kBlockMask]; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward == 0 || backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len = len; - *matches++ = BackwardMatch(backward, len); - } - } - buckets_[key][num_[key] & kBlockMask] = static_cast<uint32_t>(cur_ix); - ++num_[key]; - uint32_t dict_matches[kMaxDictionaryMatchLen + 1]; - for (size_t i = 0; i <= kMaxDictionaryMatchLen; ++i) { - dict_matches[i] = kInvalidMatch; - } - size_t minlen = std::max<size_t>(4, best_len + 1); - if (FindAllStaticDictionaryMatches(&data[cur_ix_masked], minlen, max_length, - &dict_matches[0])) { - size_t maxlen = std::min<size_t>(kMaxDictionaryMatchLen, max_length); - for (size_t l = minlen; l <= maxlen; ++l) { - uint32_t dict_id = dict_matches[l]; - if (dict_id < kInvalidMatch) { - *matches++ = BackwardMatch(max_backward + (dict_id >> 5) + 1, l, - dict_id & 31); - } - } - } - return static_cast<size_t>(matches - orig_matches); - } - - enum { kHashLength = 4 }; - enum { kHashTypeLength = 4 }; - - // HashBytes is the function that chooses the bucket to place - // the address in. The HashLongestMatch and HashLongestMatchQuickly - // classes have separate, different implementations of hashing. - static uint32_t HashBytes(const uint8_t *data) { - uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kBucketBits); - } - - enum { kHashMapSize = 2 << kBucketBits }; - - static const size_t kMaxNumMatches = 64 + (1 << kBlockBits); - - private: - // Number of hash buckets. - static const uint32_t kBucketSize = 1 << kBucketBits; - - // Only kBlockSize newest backward references are kept, - // and the older are forgotten. - static const uint32_t kBlockSize = 1 << kBlockBits; - - // Mask for accessing entries in a block (in a ringbuffer manner). - static const uint32_t kBlockMask = (1 << kBlockBits) - 1; - - // Number of entries in a particular bucket. - uint16_t num_[kBucketSize]; - - // Buckets containing kBlockSize of backward references. - uint32_t buckets_[kBucketSize][kBlockSize]; - - // True if num_ array needs to be initialized. - bool need_init_; - - size_t num_dict_lookups_; - size_t num_dict_matches_; -}; - -// A (forgetful) hash table where each hash bucket contains a binary tree of -// sequences whose first 4 bytes share the same hash code. -// Each sequence is kMaxTreeCompLength long and is identified by its starting -// position in the input data. The binary tree is sorted by the lexicographic -// order of the sequences, and it is also a max-heap with respect to the -// starting positions. -class HashToBinaryTree { - public: - HashToBinaryTree() : forest_(NULL) { - Reset(); - } - - ~HashToBinaryTree() { - delete[] forest_; - } - - void Reset() { - need_init_ = true; - } - - void Init(int lgwin, size_t position, size_t bytes, bool is_last) { - if (need_init_) { - window_mask_ = (1u << lgwin) - 1u; - invalid_pos_ = static_cast<uint32_t>(0 - window_mask_); - for (uint32_t i = 0; i < kBucketSize; i++) { - buckets_[i] = invalid_pos_; - } - size_t num_nodes = (position == 0 && is_last) ? bytes : window_mask_ + 1; - forest_ = new uint32_t[2 * num_nodes]; - need_init_ = false; - } - } - - // Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the - // length of max_length and stores the position cur_ix in the hash table. - // - // Sets *num_matches to the number of matches found, and stores the found - // matches in matches[0] to matches[*num_matches - 1]. The matches will be - // sorted by strictly increasing length and (non-strictly) increasing - // distance. - size_t FindAllMatches(const uint8_t* data, - const size_t ring_buffer_mask, - const size_t cur_ix, - const size_t max_length, - const size_t max_backward, - BackwardMatch* matches) { - BackwardMatch* const orig_matches = matches; - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - size_t best_len = 1; - size_t stop = cur_ix - 64; - if (cur_ix < 64) { stop = 0; } - for (size_t i = cur_ix - 1; i > stop && best_len <= 2; --i) { - size_t prev_ix = i; - const size_t backward = cur_ix - prev_ix; - if (PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &= ring_buffer_mask; - if (data[cur_ix_masked] != data[prev_ix] || - data[cur_ix_masked + 1] != data[prev_ix + 1]) { - continue; - } - const size_t len = - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len = len; - *matches++ = BackwardMatch(backward, len); - } - } - if (best_len < max_length) { - matches = StoreAndFindMatches(data, cur_ix, ring_buffer_mask, - max_length, &best_len, matches); - } - uint32_t dict_matches[kMaxDictionaryMatchLen + 1]; - for (size_t i = 0; i <= kMaxDictionaryMatchLen; ++i) { - dict_matches[i] = kInvalidMatch; - } - size_t minlen = std::max<size_t>(4, best_len + 1); - if (FindAllStaticDictionaryMatches(&data[cur_ix_masked], minlen, max_length, - &dict_matches[0])) { - size_t maxlen = std::min<size_t>(kMaxDictionaryMatchLen, max_length); - for (size_t l = minlen; l <= maxlen; ++l) { - uint32_t dict_id = dict_matches[l]; - if (dict_id < kInvalidMatch) { - *matches++ = BackwardMatch(max_backward + (dict_id >> 5) + 1, l, - dict_id & 31); - } - } - } - return static_cast<size_t>(matches - orig_matches); - } - - // Stores the hash of the next 4 bytes and re-roots the binary tree at the - // current sequence, without returning any matches. - // REQUIRES: cur_ix + kMaxTreeCompLength <= end-of-current-block - void Store(const uint8_t* data, - const size_t ring_buffer_mask, - const size_t cur_ix) { - size_t best_len = 0; - StoreAndFindMatches(data, cur_ix, ring_buffer_mask, kMaxTreeCompLength, - &best_len, NULL); - } - - void StitchToPreviousBlock(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - if (num_bytes >= 3 && position >= kMaxTreeCompLength) { - // Store the last `kMaxTreeCompLength - 1` positions in the hasher. - // These could not be calculated before, since they require knowledge - // of both the previous and the current block. - const size_t i_start = position - kMaxTreeCompLength + 1; - const size_t i_end = std::min(position, i_start + num_bytes); - for (size_t i = i_start; i < i_end; ++i) { - // We know that i + kMaxTreeCompLength <= position + num_bytes, i.e. the - // end of the current block and that we have at least - // kMaxTreeCompLength tail in the ringbuffer. - Store(ringbuffer, ringbuffer_mask, i); - } - } - } - - static const size_t kMaxNumMatches = 64 + kMaxTreeSearchDepth; - - private: - // Stores the hash of the next 4 bytes and in a single tree-traversal, the - // hash bucket's binary tree is searched for matches and is re-rooted at the - // current position. - // - // If less than kMaxTreeCompLength data is available, the hash bucket of the - // current position is searched for matches, but the state of the hash table - // is not changed, since we can not know the final sorting order of the - // current (incomplete) sequence. - // - // This function must be called with increasing cur_ix positions. - BackwardMatch* StoreAndFindMatches(const uint8_t* const __restrict data, - const size_t cur_ix, - const size_t ring_buffer_mask, - const size_t max_length, - size_t* const __restrict best_len, - BackwardMatch* __restrict matches) { - const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - const size_t max_backward = window_mask_ - 15; - const size_t max_comp_len = std::min(max_length, kMaxTreeCompLength); - const bool reroot_tree = max_length >= kMaxTreeCompLength; - const uint32_t key = HashBytes(&data[cur_ix_masked]); - size_t prev_ix = buckets_[key]; - // The forest index of the rightmost node of the left subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t node_left = LeftChildIndex(cur_ix); - // The forest index of the leftmost node of the right subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t node_right = RightChildIndex(cur_ix); - // The match length of the rightmost node of the left subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t best_len_left = 0; - // The match length of the leftmost node of the right subtree of the new - // root, updated as we traverse and reroot the tree of the hash bucket. - size_t best_len_right = 0; - if (reroot_tree) { - buckets_[key] = static_cast<uint32_t>(cur_ix); - } - for (size_t depth_remaining = kMaxTreeSearchDepth; ; --depth_remaining) { - const size_t backward = cur_ix - prev_ix; - const size_t prev_ix_masked = prev_ix & ring_buffer_mask; - if (backward == 0 || backward > max_backward || depth_remaining == 0) { - if (reroot_tree) { - forest_[node_left] = invalid_pos_; - forest_[node_right] = invalid_pos_; - } - break; - } - const size_t cur_len = std::min(best_len_left, best_len_right); - const size_t len = cur_len + + { + const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right); + size_t len; + assert(cur_len <= MAX_TREE_COMP_LENGTH); + len = cur_len + FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len], &data[prev_ix_masked + cur_len], max_length - cur_len); - if (len > *best_len) { + assert(0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len)); + if (matches && len > *best_len) { *best_len = len; - if (matches) { - *matches++ = BackwardMatch(backward, len); + InitBackwardMatch(matches++, backward, len); + } + if (len >= max_comp_len) { + if (should_reroot_tree) { + self->forest_[node_left] = + self->forest_[FN(LeftChildIndex)(self, prev_ix)]; + self->forest_[node_right] = + self->forest_[FN(RightChildIndex)(self, prev_ix)]; } - if (len >= max_comp_len) { - if (reroot_tree) { - forest_[node_left] = forest_[LeftChildIndex(prev_ix)]; - forest_[node_right] = forest_[RightChildIndex(prev_ix)]; - } - break; - } + break; } if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) { best_len_left = len; - if (reroot_tree) { - forest_[node_left] = static_cast<uint32_t>(prev_ix); + if (should_reroot_tree) { + self->forest_[node_left] = (uint32_t)prev_ix; } - node_left = RightChildIndex(prev_ix); - prev_ix = forest_[node_left]; + node_left = FN(RightChildIndex)(self, prev_ix); + prev_ix = self->forest_[node_left]; } else { best_len_right = len; - if (reroot_tree) { - forest_[node_right] = static_cast<uint32_t>(prev_ix); + if (should_reroot_tree) { + self->forest_[node_right] = (uint32_t)prev_ix; } - node_right = LeftChildIndex(prev_ix); - prev_ix = forest_[node_right]; + node_right = FN(LeftChildIndex)(self, prev_ix); + prev_ix = self->forest_[node_right]; } } - return matches; } + return matches; +} - inline size_t LeftChildIndex(const size_t pos) { - return 2 * (pos & window_mask_); - } +/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the + length of max_length and stores the position cur_ix in the hash table. - inline size_t RightChildIndex(const size_t pos) { - return 2 * (pos & window_mask_) + 1; - } - - static uint32_t HashBytes(const uint8_t *data) { - uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kBucketBits); - } - - static const int kBucketBits = 17; - static const size_t kBucketSize = 1 << kBucketBits; - - // The window size minus 1 - size_t window_mask_; - - // Hash table that maps the 4-byte hashes of the sequence to the last - // position where this hash was found, which is the root of the binary - // tree of sequences that share this hash bucket. - uint32_t buckets_[kBucketSize]; - - // The union of the binary trees of each hash bucket. The root of the tree - // corresponding to a hash is a sequence starting at buckets_[hash] and - // the left and right children of a sequence starting at pos are - // forest_[2 * pos] and forest_[2 * pos + 1]. - uint32_t* forest_; - - // A position used to mark a non-existent sequence, i.e. a tree is empty if - // its root is at invalid_pos_ and a node is a leaf if both its children - // are at invalid_pos_. - uint32_t invalid_pos_; - - bool need_init_; -}; - -struct Hashers { - // For kBucketSweep == 1, enabling the dictionary lookup makes compression - // a little faster (0.5% - 1%) and it compresses 0.15% better on small text - // and html inputs. - typedef HashLongestMatchQuickly<16, 1, true> H2; - typedef HashLongestMatchQuickly<16, 2, false> H3; - typedef HashLongestMatchQuickly<17, 4, true> H4; - typedef HashLongestMatch<14, 4, 4> H5; - typedef HashLongestMatch<14, 5, 4> H6; - typedef HashLongestMatch<15, 6, 10> H7; - typedef HashLongestMatch<15, 7, 10> H8; - typedef HashLongestMatch<15, 8, 16> H9; - typedef HashToBinaryTree H10; - - Hashers(void) : hash_h2(0), hash_h3(0), hash_h4(0), hash_h5(0), - hash_h6(0), hash_h7(0), hash_h8(0), hash_h9(0), hash_h10(0) {} - - ~Hashers(void) { - delete hash_h2; - delete hash_h3; - delete hash_h4; - delete hash_h5; - delete hash_h6; - delete hash_h7; - delete hash_h8; - delete hash_h9; - delete hash_h10; - } - - void Init(int type) { - switch (type) { - case 2: hash_h2 = new H2; break; - case 3: hash_h3 = new H3; break; - case 4: hash_h4 = new H4; break; - case 5: hash_h5 = new H5; break; - case 6: hash_h6 = new H6; break; - case 7: hash_h7 = new H7; break; - case 8: hash_h8 = new H8; break; - case 9: hash_h9 = new H9; break; - case 10: hash_h10 = new H10; break; - default: break; + Sets *num_matches to the number of matches found, and stores the found + matches in matches[0] to matches[*num_matches - 1]. The matches will be + sorted by strictly increasing length and (non-strictly) increasing + distance. */ +static BROTLI_INLINE size_t FN(FindAllMatches)(HashToBinaryTree* self, + const uint8_t* data, const size_t ring_buffer_mask, const size_t cur_ix, + const size_t max_length, const size_t max_backward, + const BrotliEncoderParams* params, BackwardMatch* matches) { + BackwardMatch* const orig_matches = matches; + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + size_t best_len = 1; + const size_t short_match_max_backward = + params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64; + size_t stop = cur_ix - short_match_max_backward; + uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1]; + size_t i; + if (cur_ix < short_match_max_backward) { stop = 0; } + for (i = cur_ix - 1; i > stop && best_len <= 2; --i) { + size_t prev_ix = i; + const size_t backward = cur_ix - prev_ix; + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + break; + } + prev_ix &= ring_buffer_mask; + if (data[cur_ix_masked] != data[prev_ix] || + data[cur_ix_masked + 1] != data[prev_ix + 1]) { + continue; + } + { + const size_t len = + FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], + max_length); + if (len > best_len) { + best_len = len; + InitBackwardMatch(matches++, backward, len); + } } } - - template<typename Hasher> - void WarmupHash(const size_t size, const uint8_t* dict, Hasher* hasher) { - hasher->Init(); - for (size_t i = 0; i + Hasher::kHashTypeLength - 1 < size; i++) { - hasher->Store(&dict[i], static_cast<uint32_t>(i)); - } + if (best_len < max_length) { + matches = FN(StoreAndFindMatches)(self, data, cur_ix, ring_buffer_mask, + max_length, max_backward, &best_len, matches); } - - // Custom LZ77 window. - void PrependCustomDictionary( - int type, int lgwin, const size_t size, const uint8_t* dict) { - switch (type) { - case 2: WarmupHash(size, dict, hash_h2); break; - case 3: WarmupHash(size, dict, hash_h3); break; - case 4: WarmupHash(size, dict, hash_h4); break; - case 5: WarmupHash(size, dict, hash_h5); break; - case 6: WarmupHash(size, dict, hash_h6); break; - case 7: WarmupHash(size, dict, hash_h7); break; - case 8: WarmupHash(size, dict, hash_h8); break; - case 9: WarmupHash(size, dict, hash_h9); break; - case 10: - hash_h10->Init(lgwin, 0, size, false); - for (size_t i = 0; i + kMaxTreeCompLength - 1 < size; ++i) { - hash_h10->Store(dict, std::numeric_limits<size_t>::max(), i); + for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) { + dict_matches[i] = kInvalidMatch; + } + { + size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1); + if (BrotliFindAllStaticDictionaryMatches(&data[cur_ix_masked], minlen, + max_length, &dict_matches[0])) { + size_t maxlen = BROTLI_MIN( + size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length); + size_t l; + for (l = minlen; l <= maxlen; ++l) { + uint32_t dict_id = dict_matches[l]; + if (dict_id < kInvalidMatch) { + InitDictionaryBackwardMatch(matches++, + max_backward + (dict_id >> 5) + 1, l, dict_id & 31); } - break; - default: break; + } } } + return (size_t)(matches - orig_matches); +} + +/* Stores the hash of the next 4 bytes and re-roots the binary tree at the + current sequence, without returning any matches. + REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */ +static BROTLI_INLINE void FN(Store)(HashToBinaryTree* self, const uint8_t *data, + const size_t mask, const size_t ix) { + /* Maximum distance is window size - 16, see section 9.1. of the spec. */ + const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1; + FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH, + max_backward, NULL, NULL); +} + +static BROTLI_INLINE void FN(StoreRange)(HashToBinaryTree* self, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i = ix_start; + size_t j = ix_start; + if (ix_start + 63 <= ix_end) { + i = ix_end - 63; + } + if (ix_start + 512 <= i) { + for (; j < i; j += 8) { + FN(Store)(self, data, mask, j); + } + } + for (; i < ix_end; ++i) { + FN(Store)(self, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HashToBinaryTree* self, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && + position >= MAX_TREE_COMP_LENGTH) { + /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1; + const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes); + size_t i; + for (i = i_start; i < i_end; ++i) { + /* Maximum distance is window size - 16, see section 9.1. of the spec. + Furthermore, we have to make sure that we don't look further back + from the start of the next block than the window size, otherwise we + could access already overwritten areas of the ring-buffer. */ + const size_t max_backward = + self->window_mask_ - BROTLI_MAX(size_t, + BROTLI_WINDOW_GAP - 1, + position - i); + /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the + end of the current block and that we have at least + MAX_TREE_COMP_LENGTH tail in the ring-buffer. */ + FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask, + MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL); + } + } +} + +#undef BUCKET_SIZE +#undef BUCKET_BITS + +#undef HASHER + +/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression + a little faster (0.5% - 1%) and it compresses 0.15% better on small text + and HTML inputs. */ + +#define HASHER() H2 +#define BUCKET_BITS 16 +#define BUCKET_SWEEP 1 +#define USE_DICTIONARY 1 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef BUCKET_SWEEP +#undef USE_DICTIONARY +#undef HASHER + +#define HASHER() H3 +#define BUCKET_SWEEP 2 +#define USE_DICTIONARY 0 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef USE_DICTIONARY +#undef BUCKET_SWEEP +#undef BUCKET_BITS +#undef HASHER + +#define HASHER() H4 +#define BUCKET_BITS 17 +#define BUCKET_SWEEP 4 +#define USE_DICTIONARY 1 +#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ +#undef USE_DICTIONARY +#undef BUCKET_SWEEP +#undef BUCKET_BITS +#undef HASHER + +#define HASHER() H5 +#define BUCKET_BITS 14 +#define BLOCK_BITS 4 +#define NUM_LAST_DISTANCES_TO_CHECK 4 +#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ +#undef BLOCK_BITS +#undef HASHER + +#define HASHER() H6 +#define BLOCK_BITS 5 +#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef BLOCK_BITS +#undef BUCKET_BITS +#undef HASHER + +#define HASHER() H7 +#define BUCKET_BITS 15 +#define BLOCK_BITS 6 +#define NUM_LAST_DISTANCES_TO_CHECK 10 +#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ +#undef BLOCK_BITS +#undef HASHER + +#define HASHER() H8 +#define BLOCK_BITS 7 +#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef BLOCK_BITS +#undef HASHER + +#define HASHER() H9 +#define BLOCK_BITS 8 +#define NUM_LAST_DISTANCES_TO_CHECK 16 +#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef BLOCK_BITS +#undef BUCKET_BITS +#undef HASHER + +#define BUCKET_BITS 15 + +#define NUM_LAST_DISTANCES_TO_CHECK 4 +#define NUM_BANKS 1 +#define BANK_BITS 16 +#define HASHER() H40 +#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ +#undef HASHER +#undef NUM_LAST_DISTANCES_TO_CHECK + +#define NUM_LAST_DISTANCES_TO_CHECK 10 +#define HASHER() H41 +#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ +#undef HASHER +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef NUM_BANKS +#undef BANK_BITS + +#define NUM_LAST_DISTANCES_TO_CHECK 16 +#define NUM_BANKS 512 +#define BANK_BITS 9 +#define HASHER() H42 +#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ +#undef HASHER +#undef NUM_LAST_DISTANCES_TO_CHECK +#undef NUM_BANKS +#undef BANK_BITS + +#undef BUCKET_BITS + +#undef FN +#undef CAT +#undef EXPAND_CAT + +#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(7) H(8) H(9) \ + H(40) H(41) H(42) +#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10) + +typedef struct Hashers { +#define MEMBER_(N) H ## N* h ## N; + FOR_ALL_HASHERS(MEMBER_) +#undef MEMBER_ +} Hashers; + +static BROTLI_INLINE void InitHashers(Hashers* self) { +#define INIT_(N) self->h ## N = 0; + FOR_ALL_HASHERS(INIT_) +#undef INIT_ +} + +static BROTLI_INLINE void DestroyHashers(MemoryManager* m, Hashers* self) { + if (self->h10) CleanupH10(m, self->h10); +#define CLEANUP_(N) BROTLI_FREE(m, self->h ## N) + FOR_ALL_HASHERS(CLEANUP_) +#undef CLEANUP_ +} + +static BROTLI_INLINE void HashersReset(Hashers* self, int type) { + switch (type) { +#define RESET_(N) case N: ResetH ## N(self->h ## N); break; + FOR_ALL_HASHERS(RESET_) +#undef RESET_ + default: break; + } +} + +static BROTLI_INLINE void HashersSetup( + MemoryManager* m, Hashers* self, int type) { + switch (type) { +#define SETUP_(N) case N: self->h ## N = BROTLI_ALLOC(m, H ## N, 1); break; + FOR_ALL_HASHERS(SETUP_) +#undef SETUP_ + default: break; + } + if (BROTLI_IS_OOM(m)) return; + if (type == 10) InitializeH10(self->h10); + HashersReset(self, type); +} + +#define WARMUP_HASH_(N) \ +static BROTLI_INLINE void WarmupHashH ## N(MemoryManager* m, \ + const BrotliEncoderParams* params, const size_t size, const uint8_t* dict, \ + H ## N* hasher) { \ + size_t overlap = (StoreLookaheadH ## N()) - 1; \ + size_t i; \ + InitH ## N(m, hasher, dict, params, 0, size, BROTLI_FALSE); \ + if (BROTLI_IS_OOM(m)) return; \ + for (i = 0; i + overlap < size; i++) { \ + StoreH ## N(hasher, dict, ~(size_t)0, i); \ + } \ +} +FOR_ALL_HASHERS(WARMUP_HASH_) +#undef WARMUP_HASH_ + +/* Custom LZ77 window. */ +static BROTLI_INLINE void HashersPrependCustomDictionary( + MemoryManager* m, Hashers* self, const BrotliEncoderParams* params, + const size_t size, const uint8_t* dict) { + int hasher_type = ChooseHasher(params); + switch (hasher_type) { +#define PREPEND_(N) \ + case N: WarmupHashH ## N(m, params, size, dict, self->h ## N); break; + FOR_ALL_HASHERS(PREPEND_) +#undef PREPEND_ + default: break; + } + if (BROTLI_IS_OOM(m)) return; +} - H2* hash_h2; - H3* hash_h3; - H4* hash_h4; - H5* hash_h5; - H6* hash_h6; - H7* hash_h7; - H8* hash_h8; - H9* hash_h9; - H10* hash_h10; -}; +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -} // namespace brotli - -#endif // BROTLI_ENC_HASH_H_ +#endif /* BROTLI_ENC_HASH_H_ */
diff --git a/third_party/brotli/enc/hash_forgetful_chain_inc.h b/third_party/brotli/enc/hash_forgetful_chain_inc.h new file mode 100644 index 0000000..131aa05 --- /dev/null +++ b/third_party/brotli/enc/hash_forgetful_chain_inc.h
@@ -0,0 +1,250 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS, + NUM_LAST_DISTANCES_TO_CHECK */ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + Hashes are stored in chains which are bucketed to groups. Group of chains + share a storage "bank". When more than "bank size" chain nodes are added, + oldest nodes are replaced; this way several chains may share a tail. */ + +#define HashForgetfulChain HASHER() + +#define BANK_SIZE (1 << BANK_BITS) + +/* Number of hash buckets. */ +#define BUCKET_SIZE (1 << BUCKET_BITS) + +#define CAPPED_CHAINS 0 + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } + +/* HashBytes is the function that chooses the bucket to place the address in.*/ +static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t *data) { + const uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - BUCKET_BITS); +} + +typedef struct FN(Slot) { + uint16_t delta; + uint16_t next; +} FN(Slot); + +typedef struct FN(Bank) { + FN(Slot) slots[BANK_SIZE]; +} FN(Bank); + +typedef struct HashForgetfulChain { + uint32_t addr[BUCKET_SIZE]; + uint16_t head[BUCKET_SIZE]; + /* Truncated hash used for quick rejection of "distance cache" candidates. */ + uint8_t tiny_hash[65536]; + FN(Bank) banks[NUM_BANKS]; + uint16_t free_slot_idx[NUM_BANKS]; + BROTLI_BOOL is_dirty_; + DictionarySearchStatictics dict_search_stats_; + size_t max_hops; +} HashForgetfulChain; + +static void FN(Reset)(HashForgetfulChain* self) { + self->is_dirty_ = BROTLI_TRUE; + DictionarySearchStaticticsReset(&self->dict_search_stats_); +} + +static void FN(InitEmpty)(HashForgetfulChain* self) { + if (self->is_dirty_) { + /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position + processed by hasher never reaches 3GB + 64M; this makes all new chains + to be terminated after the first node. */ + memset(self->addr, 0xCC, sizeof(self->addr)); + memset(self->head, 0, sizeof(self->head)); + memset(self->tiny_hash, 0, sizeof(self->tiny_hash)); + memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx)); + self->is_dirty_ = BROTLI_FALSE; + } +} + +static void FN(InitForData)(HashForgetfulChain* self, const uint8_t* data, + size_t num) { + size_t i; + for (i = 0; i < num; ++i) { + size_t bucket = FN(HashBytes)(&data[i]); + /* See InitEmpty comment. */ + self->addr[bucket] = 0xCCCCCCCC; + self->head[bucket] = 0xCCCC; + } + memset(self->tiny_hash, 0, sizeof(self->tiny_hash)); + memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx)); + if (num != 0) { + self->is_dirty_ = BROTLI_FALSE; + } +} + +static void FN(Init)( + MemoryManager* m, HashForgetfulChain* self, const uint8_t* data, + const BrotliEncoderParams* params, size_t position, size_t bytes, + BROTLI_BOOL is_last) { + /* Choose which initialization method is faster. + Init() is about 100 times faster than InitForData(). */ + const size_t kMaxBytesForPartialHashInit = BUCKET_SIZE >> 6; + BROTLI_UNUSED(m); + self->max_hops = (params->quality > 6 ? 7u : 8u) << (params->quality - 4); + if (position == 0 && is_last && bytes <= kMaxBytesForPartialHashInit) { + FN(InitForData)(self, data, bytes); + } else { + FN(InitEmpty)(self); + } +} + +/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend + node to corresponding chain; also update tiny_hash for current position. */ +static BROTLI_INLINE void FN(Store)(HashForgetfulChain* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { + const size_t key = FN(HashBytes)(&data[ix & mask]); + const size_t bank = key & (NUM_BANKS - 1); + const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1); + size_t delta = ix - self->addr[key]; + self->tiny_hash[(uint16_t)ix] = (uint8_t)key; + if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF; + self->banks[bank].slots[idx].delta = (uint16_t)delta; + self->banks[bank].slots[idx].next = self->head[key]; + self->addr[key] = (uint32_t)ix; + self->head[key] = (uint16_t)idx; +} + +static BROTLI_INLINE void FN(StoreRange)(HashForgetfulChain* self, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(self, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HashForgetfulChain* self, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ring_buffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(self, ringbuffer, ring_buffer_mask, position - 3); + FN(Store)(self, ringbuffer, ring_buffer_mask, position - 2); + FN(Store)(self, ringbuffer, ring_buffer_mask, position - 1); + } +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + Returns 1 when match is found, otherwise 0. */ +static BROTLI_INLINE BROTLI_BOOL FN(FindLongestMatch)( + HashForgetfulChain* self, const uint8_t* BROTLI_RESTRICT data, + const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, + const size_t cur_ix, const size_t max_length, const size_t max_backward, + HasherSearchResult* BROTLI_RESTRICT out) { + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + BROTLI_BOOL is_match_found = BROTLI_FALSE; + /* Don't accept a short copy from far away. */ + score_t best_score = out->score; + size_t best_len = out->len; + size_t i; + const size_t key = FN(HashBytes)(&data[cur_ix_masked]); + const uint8_t tiny_hash = (uint8_t)(key); + out->len = 0; + out->len_x_code = 0; + /* Try last distance first. */ + for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) { + const size_t idx = kDistanceCacheIndex[i]; + const size_t backward = + (size_t)(distance_cache[idx] + kDistanceCacheOffset[i]); + size_t prev_ix = (cur_ix - backward); + /* For distance code 0 we want to consider 2-byte matches. */ + if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue; + if (prev_ix >= cur_ix || backward > max_backward) { + continue; + } + prev_ix &= ring_buffer_mask; + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 2) { + score_t score = BackwardReferenceScoreUsingLastDistance(len, i); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + is_match_found = BROTLI_TRUE; + } + } + } + } + { + const size_t bank = key & (NUM_BANKS - 1); + size_t backward = 0; + size_t hops = self->max_hops; + size_t delta = cur_ix - self->addr[key]; + size_t slot = self->head[key]; + while (hops--) { + size_t prev_ix; + size_t last = slot; + backward += delta; + if (backward > max_backward || (CAPPED_CHAINS && !delta)) break; + prev_ix = (cur_ix - backward) & ring_buffer_mask; + slot = self->banks[bank].slots[last].next; + delta = self->banks[bank].slots[last].delta; + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + is_match_found = BROTLI_TRUE; + } + } + } + } + FN(Store)(self, data, ring_buffer_mask, cur_ix); + } + if (!is_match_found) { + is_match_found = SearchInStaticDictionary(&self->dict_search_stats_, + &data[cur_ix_masked], max_length, max_backward, out, BROTLI_FALSE); + } + return is_match_found; +} + +#undef BANK_SIZE +#undef BUCKET_SIZE +#undef CAPPED_CHAINS + +#undef HashForgetfulChain
diff --git a/third_party/brotli/enc/hash_longest_match_inc.h b/third_party/brotli/enc/hash_longest_match_inc.h new file mode 100644 index 0000000..5e934ba --- /dev/null +++ b/third_party/brotli/enc/hash_longest_match_inc.h
@@ -0,0 +1,241 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, BUCKET_BITS, BLOCK_BITS, + NUM_LAST_DISTANCES_TO_CHECK */ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (BUCKET_SIZE) to a ring buffer of + fixed size (BLOCK_SIZE). The ring buffer contains the last BLOCK_SIZE + index positions of the given hash key in the compressed data. */ + +#define HashLongestMatch HASHER() + +/* Number of hash buckets. */ +#define BUCKET_SIZE (1 << BUCKET_BITS) + +/* Only BLOCK_SIZE newest backward references are kept, + and the older are forgotten. */ +#define BLOCK_SIZE (1u << BLOCK_BITS) + +/* Mask for accessing entries in a block (in a ring-buffer manner). */ +#define BLOCK_MASK ((1 << BLOCK_BITS) - 1) + +#define HASH_MAP_SIZE (2 << BUCKET_BITS) + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } + +/* HashBytes is the function that chooses the bucket to place + the address in. The HashLongestMatch and HashLongestMatchQuickly + classes have separate, different implementations of hashing. */ +static uint32_t FN(HashBytes)(const uint8_t *data) { + uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - BUCKET_BITS); +} + +typedef struct HashLongestMatch { + /* Number of entries in a particular bucket. */ + uint16_t num_[BUCKET_SIZE]; + + /* Buckets containing BLOCK_SIZE of backward references. */ + uint32_t buckets_[BLOCK_SIZE << BUCKET_BITS]; + + /* True if num_ array needs to be initialized. */ + BROTLI_BOOL is_dirty_; + + DictionarySearchStatictics dict_search_stats_; +} HashLongestMatch; + +static void FN(Reset)(HashLongestMatch* self) { + self->is_dirty_ = BROTLI_TRUE; + DictionarySearchStaticticsReset(&self->dict_search_stats_); +} + +static void FN(InitEmpty)(HashLongestMatch* self) { + if (self->is_dirty_) { + memset(self->num_, 0, sizeof(self->num_)); + self->is_dirty_ = BROTLI_FALSE; + } +} + +static void FN(InitForData)(HashLongestMatch* self, const uint8_t* data, + size_t num) { + size_t i; + for (i = 0; i < num; ++i) { + const uint32_t key = FN(HashBytes)(&data[i]); + self->num_[key] = 0; + } + if (num != 0) { + self->is_dirty_ = BROTLI_FALSE; + } +} + +static void FN(Init)( + MemoryManager* m, HashLongestMatch* self, const uint8_t* data, + const BrotliEncoderParams* params, size_t position, size_t bytes, + BROTLI_BOOL is_last) { + /* Choose which initialization method is faster. + Init() is about 100 times faster than InitForData(). */ + const size_t kMaxBytesForPartialHashInit = HASH_MAP_SIZE >> 7; + BROTLI_UNUSED(m); + BROTLI_UNUSED(params); + if (position == 0 && is_last && bytes <= kMaxBytesForPartialHashInit) { + FN(InitForData)(self, data, bytes); + } else { + FN(InitEmpty)(self); + } +} + +/* Look at 4 bytes at &data[ix & mask]. + Compute a hash from these, and store the value of ix at that position. */ +static BROTLI_INLINE void FN(Store)(HashLongestMatch* self, const uint8_t *data, + const size_t mask, const size_t ix) { + const uint32_t key = FN(HashBytes)(&data[ix & mask]); + const size_t minor_ix = self->num_[key] & BLOCK_MASK; + self->buckets_[minor_ix + (key << BLOCK_BITS)] = (uint32_t)ix; + ++self->num_[key]; +} + +static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* self, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(self, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)(HashLongestMatch* self, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, + size_t ringbuffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1); + } +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + Returns true when match is found, otherwise false. */ +static BROTLI_INLINE BROTLI_BOOL FN(FindLongestMatch)(HashLongestMatch* self, + const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, + const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, + const size_t max_length, const size_t max_backward, + HasherSearchResult* BROTLI_RESTRICT out) { + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + BROTLI_BOOL is_match_found = BROTLI_FALSE; + /* Don't accept a short copy from far away. */ + score_t best_score = out->score; + size_t best_len = out->len; + size_t i; + out->len = 0; + out->len_x_code = 0; + /* Try last distance first. */ + for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) { + const size_t idx = kDistanceCacheIndex[i]; + const size_t backward = + (size_t)(distance_cache[idx] + kDistanceCacheOffset[i]); + size_t prev_ix = (size_t)(cur_ix - backward); + if (prev_ix >= cur_ix) { + continue; + } + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + continue; + } + prev_ix &= ring_buffer_mask; + + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 3 || (len == 2 && i < 2)) { + /* Comparing for >= 2 does not change the semantics, but just saves for + a few unnecessary binary logarithms in backward reference score, + since we are not interested in such short matches. */ + score_t score = BackwardReferenceScoreUsingLastDistance(len, i); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + is_match_found = BROTLI_TRUE; + } + } + } + } + { + const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); + uint32_t* BROTLI_RESTRICT bucket = &self->buckets_[key << BLOCK_BITS]; + const size_t down = + (self->num_[key] > BLOCK_SIZE) ? (self->num_[key] - BLOCK_SIZE) : 0u; + for (i = self->num_[key]; i > down;) { + size_t prev_ix = bucket[--i & BLOCK_MASK]; + const size_t backward = cur_ix - prev_ix; + if (BROTLI_PREDICT_FALSE(backward > max_backward)) { + break; + } + prev_ix &= ring_buffer_mask; + if (cur_ix_masked + best_len > ring_buffer_mask || + prev_ix + best_len > ring_buffer_mask || + data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { + continue; + } + { + const size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = best_score; + is_match_found = BROTLI_TRUE; + } + } + } + } + bucket[self->num_[key] & BLOCK_MASK] = (uint32_t)cur_ix; + ++self->num_[key]; + } + if (!is_match_found) { + is_match_found = SearchInStaticDictionary(&self->dict_search_stats_, + &data[cur_ix_masked], max_length, max_backward, out, BROTLI_FALSE); + } + return is_match_found; +} + +#undef HASH_MAP_SIZE +#undef BLOCK_MASK +#undef BLOCK_SIZE +#undef BUCKET_SIZE + +#undef HashLongestMatch
diff --git a/third_party/brotli/enc/hash_longest_match_quickly_inc.h b/third_party/brotli/enc/hash_longest_match_quickly_inc.h new file mode 100644 index 0000000..801ab22a --- /dev/null +++ b/third_party/brotli/enc/hash_longest_match_quickly_inc.h
@@ -0,0 +1,230 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, USE_DICTIONARY */ + +#define HashLongestMatchQuickly HASHER() + +#define BUCKET_SIZE (1 << BUCKET_BITS) + +#define HASH_MAP_SIZE (4 << BUCKET_BITS) + +static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; } +static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } + +/* HashBytes is the function that chooses the bucket to place + the address in. The HashLongestMatch and HashLongestMatchQuickly + classes have separate, different implementations of hashing. */ +static uint32_t FN(HashBytes)(const uint8_t *data) { + /* Computing a hash based on 5 bytes works much better for + qualities 1 and 3, where the next hash value is likely to replace */ + uint64_t h = (BROTLI_UNALIGNED_LOAD64(data) << 24) * kHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return (uint32_t)(h >> (64 - BUCKET_BITS)); +} + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (BUCKET_SIZE). Starting from the + given index, BUCKET_SWEEP buckets are used to store values of a key. */ +typedef struct HashLongestMatchQuickly { + uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP]; + /* True if buckets_ array needs to be initialized. */ + BROTLI_BOOL is_dirty_; + DictionarySearchStatictics dict_search_stats_; +} HashLongestMatchQuickly; + +static void FN(Reset)(HashLongestMatchQuickly* self) { + self->is_dirty_ = BROTLI_TRUE; + DictionarySearchStaticticsReset(&self->dict_search_stats_); +} + +static void FN(InitEmpty)(HashLongestMatchQuickly* self) { + if (self->is_dirty_) { + /* It is not strictly necessary to fill this buffer here, but + not filling will make the results of the compression stochastic + (but correct). This is because random data would cause the + system to find accidentally good backward references here and there. */ + memset(&self->buckets_[0], 0, sizeof(self->buckets_)); + self->is_dirty_ = BROTLI_FALSE; + } +} + +static void FN(InitForData)(HashLongestMatchQuickly* self, const uint8_t* data, + size_t num) { + size_t i; + for (i = 0; i < num; ++i) { + const uint32_t key = FN(HashBytes)(&data[i]); + memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0])); + } + if (num != 0) { + self->is_dirty_ = BROTLI_FALSE; + } +} + +static void FN(Init)( + MemoryManager* m, HashLongestMatchQuickly* self, const uint8_t* data, + const BrotliEncoderParams* params, size_t position, size_t bytes, + BROTLI_BOOL is_last) { + /* Choose which initialization method is faster. + Init() is about 100 times faster than InitForData(). */ + const size_t kMaxBytesForPartialHashInit = HASH_MAP_SIZE >> 7; + BROTLI_UNUSED(m); + BROTLI_UNUSED(params); + if (position == 0 && is_last && bytes <= kMaxBytesForPartialHashInit) { + FN(InitForData)(self, data, bytes); + } else { + FN(InitEmpty)(self); + } +} + +/* Look at 5 bytes at &data[ix & mask]. + Compute a hash from these, and store the value somewhere within + [ix .. ix+3]. */ +static BROTLI_INLINE void FN(Store)(HashLongestMatchQuickly* self, + const uint8_t *data, const size_t mask, const size_t ix) { + const uint32_t key = FN(HashBytes)(&data[ix & mask]); + /* Wiggle the value with the bucket sweep range. */ + const uint32_t off = (ix >> 3) % BUCKET_SWEEP; + self->buckets_[key + off] = (uint32_t)ix; +} + +static BROTLI_INLINE void FN(StoreRange)(HashLongestMatchQuickly* self, + const uint8_t *data, const size_t mask, const size_t ix_start, + const size_t ix_end) { + size_t i; + for (i = ix_start; i < ix_end; ++i) { + FN(Store)(self, data, mask, i); + } +} + +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashLongestMatchQuickly* self, size_t num_bytes, size_t position, + const uint8_t* ringbuffer, size_t ringbuffer_mask) { + if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1); + } +} + +/* Find a longest backward match of &data[cur_ix & ring_buffer_mask] + up to the length of max_length and stores the position cur_ix in the + hash table. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + Returns true if match is found, otherwise false. */ +static BROTLI_INLINE BROTLI_BOOL FN(FindLongestMatch)( + HashLongestMatchQuickly* self, const uint8_t* BROTLI_RESTRICT data, + const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, + const size_t cur_ix, const size_t max_length, const size_t max_backward, + HasherSearchResult* BROTLI_RESTRICT out) { + const size_t best_len_in = out->len; + const size_t cur_ix_masked = cur_ix & ring_buffer_mask; + const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); + int compare_char = data[cur_ix_masked + best_len_in]; + score_t best_score = out->score; + size_t best_len = best_len_in; + size_t cached_backward = (size_t)distance_cache[0]; + size_t prev_ix = cur_ix - cached_backward; + BROTLI_BOOL is_match_found = BROTLI_FALSE; + out->len_x_code = 0; + if (prev_ix < cur_ix) { + prev_ix &= (uint32_t)ring_buffer_mask; + if (compare_char == data[prev_ix + best_len]) { + size_t len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + best_score = BackwardReferenceScoreUsingLastDistance(len, 0); + best_len = len; + out->len = len; + out->distance = cached_backward; + out->score = best_score; + compare_char = data[cur_ix_masked + best_len]; + if (BUCKET_SWEEP == 1) { + self->buckets_[key] = (uint32_t)cur_ix; + return BROTLI_TRUE; + } else { + is_match_found = BROTLI_TRUE; + } + } + } + } + if (BUCKET_SWEEP == 1) { + size_t backward; + size_t len; + /* Only one to look for, don't bother to prepare for a loop. */ + prev_ix = self->buckets_[key]; + self->buckets_[key] = (uint32_t)cur_ix; + backward = cur_ix - prev_ix; + prev_ix &= (uint32_t)ring_buffer_mask; + if (compare_char != data[prev_ix + best_len_in]) { + return BROTLI_FALSE; + } + if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) { + return BROTLI_FALSE; + } + len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + out->len = len; + out->distance = backward; + out->score = BackwardReferenceScore(len, backward); + return BROTLI_TRUE; + } + } else { + uint32_t *bucket = self->buckets_ + key; + int i; + prev_ix = *bucket++; + for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) { + const size_t backward = cur_ix - prev_ix; + size_t len; + prev_ix &= (uint32_t)ring_buffer_mask; + if (compare_char != data[prev_ix + best_len]) { + continue; + } + if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) { + continue; + } + len = FindMatchLengthWithLimit(&data[prev_ix], + &data[cur_ix_masked], + max_length); + if (len >= 4) { + const score_t score = BackwardReferenceScore(len, backward); + if (best_score < score) { + best_score = score; + best_len = len; + out->len = best_len; + out->distance = backward; + out->score = score; + compare_char = data[cur_ix_masked + best_len]; + is_match_found = BROTLI_TRUE; + } + } + } + } + if (USE_DICTIONARY && !is_match_found) { + is_match_found = SearchInStaticDictionary(&self->dict_search_stats_, + &data[cur_ix_masked], max_length, max_backward, out, BROTLI_TRUE); + } + self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix; + return is_match_found; +} + +#undef HASH_MAP_SIZE +#undef BUCKET_SIZE + +#undef HashLongestMatchQuickly
diff --git a/third_party/brotli/enc/histogram.c b/third_party/brotli/enc/histogram.c new file mode 100644 index 0000000..a8f0413 --- /dev/null +++ b/third_party/brotli/enc/histogram.c
@@ -0,0 +1,95 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Build per-context histograms of literals, commands and distance codes. */ + +#include "./histogram.h" + +#include "./block_splitter.h" +#include "./command.h" +#include "./context.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +typedef struct BlockSplitIterator { + const BlockSplit* split_; /* Not owned. */ + size_t idx_; + size_t type_; + size_t length_; +} BlockSplitIterator; + +static void InitBlockSplitIterator(BlockSplitIterator* self, + const BlockSplit* split) { + self->split_ = split; + self->idx_ = 0; + self->type_ = 0; + self->length_ = split->lengths ? split->lengths[0] : 0; +} + +static void BlockSplitIteratorNext(BlockSplitIterator* self) { + if (self->length_ == 0) { + ++self->idx_; + self->type_ = self->split_->types[self->idx_]; + self->length_ = self->split_->lengths[self->idx_]; + } + --self->length_; +} + +void BrotliBuildHistogramsWithContext( + const Command* cmds, const size_t num_commands, + const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split, + const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos, + size_t mask, uint8_t prev_byte, uint8_t prev_byte2, + const ContextType* context_modes, HistogramLiteral* literal_histograms, + HistogramCommand* insert_and_copy_histograms, + HistogramDistance* copy_dist_histograms) { + size_t pos = start_pos; + BlockSplitIterator literal_it; + BlockSplitIterator insert_and_copy_it; + BlockSplitIterator dist_it; + size_t i; + + InitBlockSplitIterator(&literal_it, literal_split); + InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split); + InitBlockSplitIterator(&dist_it, dist_split); + for (i = 0; i < num_commands; ++i) { + const Command* cmd = &cmds[i]; + size_t j; + BlockSplitIteratorNext(&insert_and_copy_it); + HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_], + cmd->cmd_prefix_); + for (j = cmd->insert_len_; j != 0; --j) { + size_t context; + BlockSplitIteratorNext(&literal_it); + context = (literal_it.type_ << BROTLI_LITERAL_CONTEXT_BITS) + + Context(prev_byte, prev_byte2, context_modes[literal_it.type_]); + HistogramAddLiteral(&literal_histograms[context], + ringbuffer[pos & mask]); + prev_byte2 = prev_byte; + prev_byte = ringbuffer[pos & mask]; + ++pos; + } + pos += CommandCopyLen(cmd); + if (CommandCopyLen(cmd)) { + prev_byte2 = ringbuffer[(pos - 2) & mask]; + prev_byte = ringbuffer[(pos - 1) & mask]; + if (cmd->cmd_prefix_ >= 128) { + size_t context; + BlockSplitIteratorNext(&dist_it); + context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) + + CommandDistanceContext(cmd); + HistogramAddDistance(©_dist_histograms[context], + cmd->dist_prefix_); + } + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/histogram.cc b/third_party/brotli/enc/histogram.cc deleted file mode 100644 index 9d733d8..0000000 --- a/third_party/brotli/enc/histogram.cc +++ /dev/null
@@ -1,67 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Build per-context histograms of literals, commands and distance codes. - -#include "./histogram.h" - -#include <cmath> - -#include "./block_splitter.h" -#include "./command.h" -#include "./context.h" -#include "./prefix.h" - -namespace brotli { - -void BuildHistograms( - const Command* cmds, - const size_t num_commands, - const BlockSplit& literal_split, - const BlockSplit& insert_and_copy_split, - const BlockSplit& dist_split, - const uint8_t* ringbuffer, - size_t start_pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const std::vector<ContextType>& context_modes, - std::vector<HistogramLiteral>* literal_histograms, - std::vector<HistogramCommand>* insert_and_copy_histograms, - std::vector<HistogramDistance>* copy_dist_histograms) { - size_t pos = start_pos; - BlockSplitIterator literal_it(literal_split); - BlockSplitIterator insert_and_copy_it(insert_and_copy_split); - BlockSplitIterator dist_it(dist_split); - for (size_t i = 0; i < num_commands; ++i) { - const Command &cmd = cmds[i]; - insert_and_copy_it.Next(); - (*insert_and_copy_histograms)[insert_and_copy_it.type_].Add( - cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - literal_it.Next(); - size_t context = (literal_it.type_ << kLiteralContextBits) + - Context(prev_byte, prev_byte2, context_modes[literal_it.type_]); - (*literal_histograms)[context].Add(ringbuffer[pos & mask]); - prev_byte2 = prev_byte; - prev_byte = ringbuffer[pos & mask]; - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len()) { - prev_byte2 = ringbuffer[(pos - 2) & mask]; - prev_byte = ringbuffer[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >= 128) { - dist_it.Next(); - size_t context = (dist_it.type_ << kDistanceContextBits) + - cmd.DistanceContext(); - (*copy_dist_histograms)[context].Add(cmd.dist_prefix_); - } - } - } -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/histogram.h b/third_party/brotli/enc/histogram.h index a1153c8..2161574b 100644 --- a/third_party/brotli/enc/histogram.h +++ b/third_party/brotli/enc/histogram.h
@@ -4,91 +4,57 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Models the histograms of literals, commands and distance codes. +/* Models the histograms of literals, commands and distance codes. */ #ifndef BROTLI_ENC_HISTOGRAM_H_ #define BROTLI_ENC_HISTOGRAM_H_ -#include <cstring> -#include <limits> -#include <vector> -#include "./context.h" +#include <string.h> /* memset */ + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./block_splitter.h" #include "./command.h" -#include "./fast_log.h" -#include "./prefix.h" -#include "./types.h" +#include "./context.h" +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -struct BlockSplit; +#define FN(X) X ## Literal +#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS +#define DataType uint8_t +#include "./histogram_inc.h" /* NOLINT(build/include) */ +#undef DataType +#undef DATA_SIZE +#undef FN -// A simple container for histograms of data in blocks. -template<int kDataSize> -struct Histogram { - Histogram(void) { - Clear(); - } - void Clear(void) { - memset(data_, 0, sizeof(data_)); - total_count_ = 0; - bit_cost_ = std::numeric_limits<double>::infinity(); - } - void Add(size_t val) { - ++data_[val]; - ++total_count_; - } - void Remove(size_t val) { - --data_[val]; - --total_count_; - } - template<typename DataType> - void Add(const DataType *p, size_t n) { - total_count_ += n; - n += 1; - while(--n) ++data_[*p++]; - } - void AddHistogram(const Histogram& v) { - total_count_ += v.total_count_; - for (size_t i = 0; i < kDataSize; ++i) { - data_[i] += v.data_[i]; - } - } +#define FN(X) X ## Command +#define DataType uint16_t +#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS +#include "./histogram_inc.h" /* NOLINT(build/include) */ +#undef DATA_SIZE +#undef FN - uint32_t data_[kDataSize]; - size_t total_count_; - double bit_cost_; -}; +#define FN(X) X ## Distance +#define DATA_SIZE BROTLI_NUM_DISTANCE_SYMBOLS +#include "./histogram_inc.h" /* NOLINT(build/include) */ +#undef DataType +#undef DATA_SIZE +#undef FN -// Literal histogram. -typedef Histogram<256> HistogramLiteral; -// Prefix histograms. -typedef Histogram<kNumCommandPrefixes> HistogramCommand; -typedef Histogram<kNumDistancePrefixes> HistogramDistance; -typedef Histogram<kNumBlockLenPrefixes> HistogramBlockLength; -// Context map histogram, 256 Huffman tree indexes + 16 run length codes. -typedef Histogram<272> HistogramContextMap; -// Block type histogram, 256 block types + 2 special symbols. -typedef Histogram<258> HistogramBlockType; +BROTLI_INTERNAL void BrotliBuildHistogramsWithContext( + const Command* cmds, const size_t num_commands, + const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split, + const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos, + size_t mask, uint8_t prev_byte, uint8_t prev_byte2, + const ContextType* context_modes, HistogramLiteral* literal_histograms, + HistogramCommand* insert_and_copy_histograms, + HistogramDistance* copy_dist_histograms); -static const size_t kLiteralContextBits = 6; -static const size_t kDistanceContextBits = 2; +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -void BuildHistograms( - const Command* cmds, - const size_t num_commands, - const BlockSplit& literal_split, - const BlockSplit& insert_and_copy_split, - const BlockSplit& dist_split, - const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const std::vector<ContextType>& context_modes, - std::vector<HistogramLiteral>* literal_histograms, - std::vector<HistogramCommand>* insert_and_copy_histograms, - std::vector<HistogramDistance>* copy_dist_histograms); - -} // namespace brotli - -#endif // BROTLI_ENC_HISTOGRAM_H_ +#endif /* BROTLI_ENC_HISTOGRAM_H_ */
diff --git a/third_party/brotli/enc/histogram_inc.h b/third_party/brotli/enc/histogram_inc.h new file mode 100644 index 0000000..7807036 --- /dev/null +++ b/third_party/brotli/enc/histogram_inc.h
@@ -0,0 +1,51 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: Histogram, DATA_SIZE, DataType */ + +/* A simple container for histograms of data in blocks. */ + +typedef struct FN(Histogram) { + uint32_t data_[DATA_SIZE]; + size_t total_count_; + double bit_cost_; +} FN(Histogram); + +static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) { + memset(self->data_, 0, sizeof(self->data_)); + self->total_count_ = 0; + self->bit_cost_ = HUGE_VAL; +} + +static BROTLI_INLINE void FN(ClearHistograms)( + FN(Histogram)* array, size_t length) { + size_t i; + for (i = 0; i < length; ++i) FN(HistogramClear)(array + i); +} + +static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) { + ++self->data_[val]; + ++self->total_count_; +} + +static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self, + const DataType *p, size_t n) { + self->total_count_ += n; + n += 1; + while (--n) ++self->data_[*p++]; +} + +static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self, + const FN(Histogram)* v) { + size_t i; + self->total_count_ += v->total_count_; + for (i = 0; i < DATA_SIZE; ++i) { + self->data_[i] += v->data_[i]; + } +} + +static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }
diff --git a/third_party/brotli/enc/literal_cost.c b/third_party/brotli/enc/literal_cost.c new file mode 100644 index 0000000..2e78600 --- /dev/null +++ b/third_party/brotli/enc/literal_cost.c
@@ -0,0 +1,178 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Literal cost model to allow backward reference replacement to be efficient. +*/ + +#include "./literal_cost.h" + +#include <brotli/types.h> +#include "./fast_log.h" +#include "./port.h" +#include "./utf8_util.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static size_t UTF8Position(size_t last, size_t c, size_t clamp) { + if (c < 128) { + return 0; /* Next one is the 'Byte 1' again. */ + } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */ + return BROTLI_MIN(size_t, 1, clamp); + } else { + /* Let's decide over the last byte if this ends the sequence. */ + if (last < 0xe0) { + return 0; /* Completed two or three byte coding. */ + } else { /* Next one is the 'Byte 3' of utf-8 encoding. */ + return BROTLI_MIN(size_t, 2, clamp); + } + } +} + +static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask, + const uint8_t *data) { + size_t counts[3] = { 0 }; + size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */ + size_t last_c = 0; + size_t utf8_pos = 0; + size_t i; + for (i = 0; i < len; ++i) { + size_t c = data[(pos + i) & mask]; + utf8_pos = UTF8Position(last_c, c, 2); + ++counts[utf8_pos]; + last_c = c; + } + if (counts[2] < 500) { + max_utf8 = 1; + } + if (counts[1] + counts[2] < 25) { + max_utf8 = 0; + } + return max_utf8; +} + +static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask, + const uint8_t *data, float *cost) { + /* max_utf8 is 0 (normal ASCII single byte modeling), + 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */ + const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data); + size_t histogram[3][256] = { { 0 } }; + size_t window_half = 495; + size_t in_window = BROTLI_MIN(size_t, window_half, len); + size_t in_window_utf8[3] = { 0 }; + + + size_t i; + { /* Bootstrap histograms. */ + size_t last_c = 0; + size_t utf8_pos = 0; + for (i = 0; i < in_window; ++i) { + size_t c = data[(pos + i) & mask]; + ++histogram[utf8_pos][c]; + ++in_window_utf8[utf8_pos]; + utf8_pos = UTF8Position(last_c, c, max_utf8); + last_c = c; + } + } + + /* Compute bit costs with sliding window. */ + for (i = 0; i < len; ++i) { + if (i >= window_half) { + /* Remove a byte in the past. */ + size_t c = + i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask]; + size_t last_c = + i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask]; + size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); + --histogram[utf8_pos2][data[(pos + i - window_half) & mask]]; + --in_window_utf8[utf8_pos2]; + } + if (i + window_half < len) { + /* Add a byte in the future. */ + size_t c = data[(pos + i + window_half - 1) & mask]; + size_t last_c = data[(pos + i + window_half - 2) & mask]; + size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); + ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]]; + ++in_window_utf8[utf8_pos2]; + } + { + size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask]; + size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask]; + size_t utf8_pos = UTF8Position(last_c, c, max_utf8); + size_t masked_pos = (pos + i) & mask; + size_t histo = histogram[utf8_pos][data[masked_pos]]; + double lit_cost; + if (histo == 0) { + histo = 1; + } + lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo); + lit_cost += 0.02905; + if (lit_cost < 1.0) { + lit_cost *= 0.5; + lit_cost += 0.5; + } + /* Make the first bytes more expensive -- seems to help, not sure why. + Perhaps because the entropy source is changing its properties + rapidly in the beginning of the file, perhaps because the beginning + of the data is a statistical "anomaly". */ + if (i < 2000) { + lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35); + } + cost[i] = (float)lit_cost; + } + } +} + +void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask, + const uint8_t *data, float *cost) { + if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) { + EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); + return; + } else { + size_t histogram[256] = { 0 }; + size_t window_half = 2000; + size_t in_window = BROTLI_MIN(size_t, window_half, len); + + /* Bootstrap histogram. */ + size_t i; + for (i = 0; i < in_window; ++i) { + ++histogram[data[(pos + i) & mask]]; + } + + /* Compute bit costs with sliding window. */ + for (i = 0; i < len; ++i) { + size_t histo; + if (i >= window_half) { + /* Remove a byte in the past. */ + --histogram[data[(pos + i - window_half) & mask]]; + --in_window; + } + if (i + window_half < len) { + /* Add a byte in the future. */ + ++histogram[data[(pos + i + window_half) & mask]]; + ++in_window; + } + histo = histogram[data[(pos + i) & mask]]; + if (histo == 0) { + histo = 1; + } + { + double lit_cost = FastLog2(in_window) - FastLog2(histo); + lit_cost += 0.029; + if (lit_cost < 1.0) { + lit_cost *= 0.5; + lit_cost += 0.5; + } + cost[i] = (float)lit_cost; + } + } + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/literal_cost.cc b/third_party/brotli/enc/literal_cost.cc deleted file mode 100644 index e6be86f..0000000 --- a/third_party/brotli/enc/literal_cost.cc +++ /dev/null
@@ -1,165 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Literal cost model to allow backward reference replacement to be efficient. - -#include "./literal_cost.h" - -#include <math.h> -#include <algorithm> - -#include "./fast_log.h" -#include "./types.h" -#include "./utf8_util.h" - -namespace brotli { - -static size_t UTF8Position(size_t last, size_t c, size_t clamp) { - if (c < 128) { - return 0; // Next one is the 'Byte 1' again. - } else if (c >= 192) { // Next one is the 'Byte 2' of utf-8 encoding. - return std::min<size_t>(1, clamp); - } else { - // Let's decide over the last byte if this ends the sequence. - if (last < 0xe0) { - return 0; // Completed two or three byte coding. - } else { // Next one is the 'Byte 3' of utf-8 encoding. - return std::min<size_t>(2, clamp); - } - } -} - -static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask, - const uint8_t *data) { - size_t counts[3] = { 0 }; - size_t max_utf8 = 1; // should be 2, but 1 compresses better. - size_t last_c = 0; - size_t utf8_pos = 0; - for (size_t i = 0; i < len; ++i) { - size_t c = data[(pos + i) & mask]; - utf8_pos = UTF8Position(last_c, c, 2); - ++counts[utf8_pos]; - last_c = c; - } - if (counts[2] < 500) { - max_utf8 = 1; - } - if (counts[1] + counts[2] < 25) { - max_utf8 = 0; - } - return max_utf8; -} - -static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask, - const uint8_t *data, float *cost) { - - // max_utf8 is 0 (normal ascii single byte modeling), - // 1 (for 2-byte utf-8 modeling), or 2 (for 3-byte utf-8 modeling). - const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data); - size_t histogram[3][256] = { { 0 } }; - size_t window_half = 495; - size_t in_window = std::min(window_half, len); - size_t in_window_utf8[3] = { 0 }; - - // Bootstrap histograms. - size_t last_c = 0; - size_t utf8_pos = 0; - for (size_t i = 0; i < in_window; ++i) { - size_t c = data[(pos + i) & mask]; - ++histogram[utf8_pos][c]; - ++in_window_utf8[utf8_pos]; - utf8_pos = UTF8Position(last_c, c, max_utf8); - last_c = c; - } - - // Compute bit costs with sliding window. - for (size_t i = 0; i < len; ++i) { - if (i >= window_half) { - // Remove a byte in the past. - size_t c = i < window_half + 1 ? - 0 : data[(pos + i - window_half - 1) & mask]; - size_t last_c = i < window_half + 2 ? - 0 : data[(pos + i - window_half - 2) & mask]; - size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); - --histogram[utf8_pos2][data[(pos + i - window_half) & mask]]; - --in_window_utf8[utf8_pos2]; - } - if (i + window_half < len) { - // Add a byte in the future. - size_t c = data[(pos + i + window_half - 1) & mask]; - size_t last_c = data[(pos + i + window_half - 2) & mask]; - size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8); - ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]]; - ++in_window_utf8[utf8_pos2]; - } - size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask]; - size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask]; - size_t utf8_pos = UTF8Position(last_c, c, max_utf8); - size_t masked_pos = (pos + i) & mask; - size_t histo = histogram[utf8_pos][data[masked_pos]]; - if (histo == 0) { - histo = 1; - } - double lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo); - lit_cost += 0.02905; - if (lit_cost < 1.0) { - lit_cost *= 0.5; - lit_cost += 0.5; - } - // Make the first bytes more expensive -- seems to help, not sure why. - // Perhaps because the entropy source is changing its properties - // rapidly in the beginning of the file, perhaps because the beginning - // of the data is a statistical "anomaly". - if (i < 2000) { - lit_cost += 0.7 - (static_cast<double>(2000 - i) / 2000.0 * 0.35); - } - cost[i] = static_cast<float>(lit_cost); - } -} - -void EstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask, - const uint8_t *data, float *cost) { - if (IsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) { - EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); - return; - } - size_t histogram[256] = { 0 }; - size_t window_half = 2000; - size_t in_window = std::min(window_half, len); - - // Bootstrap histogram. - for (size_t i = 0; i < in_window; ++i) { - ++histogram[data[(pos + i) & mask]]; - } - - // Compute bit costs with sliding window. - for (size_t i = 0; i < len; ++i) { - if (i >= window_half) { - // Remove a byte in the past. - --histogram[data[(pos + i - window_half) & mask]]; - --in_window; - } - if (i + window_half < len) { - // Add a byte in the future. - ++histogram[data[(pos + i + window_half) & mask]]; - ++in_window; - } - size_t histo = histogram[data[(pos + i) & mask]]; - if (histo == 0) { - histo = 1; - } - double lit_cost = FastLog2(in_window) - FastLog2(histo); - lit_cost += 0.029; - if (lit_cost < 1.0) { - lit_cost *= 0.5; - lit_cost += 0.5; - } - cost[i] = static_cast<float>(lit_cost); - } -} - - -} // namespace brotli
diff --git a/third_party/brotli/enc/literal_cost.h b/third_party/brotli/enc/literal_cost.h index 291aa8a..7b3d030d 100644 --- a/third_party/brotli/enc/literal_cost.h +++ b/third_party/brotli/enc/literal_cost.h
@@ -4,21 +4,27 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Literal cost model to allow backward reference replacement to be efficient. +/* Literal cost model to allow backward reference replacement to be efficient. +*/ #ifndef BROTLI_ENC_LITERAL_COST_H_ #define BROTLI_ENC_LITERAL_COST_H_ -#include "./types.h" +#include <brotli/types.h> +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// Estimates how many bits the literals in the interval [pos, pos + len) in the -// ringbuffer (data, mask) will take entropy coded and writes these estimates -// to the cost[0..len) array. -void EstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask, - const uint8_t *data, float *cost); +/* Estimates how many bits the literals in the interval [pos, pos + len) in the + ring-buffer (data, mask) will take entropy coded and writes these estimates + to the cost[0..len) array. */ +BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals( + size_t pos, size_t len, size_t mask, const uint8_t *data, float *cost); -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_LITERAL_COST_H_ +#endif /* BROTLI_ENC_LITERAL_COST_H_ */
diff --git a/third_party/brotli/enc/memory.c b/third_party/brotli/enc/memory.c new file mode 100644 index 0000000..5aa5a22 --- /dev/null +++ b/third_party/brotli/enc/memory.c
@@ -0,0 +1,181 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ + +#include "./memory.h" + +#include <assert.h> +#include <stdlib.h> /* exit, free, malloc */ +#include <string.h> /* memcpy */ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_PERM_ALLOCATED 128 +#define MAX_NEW_ALLOCATED 64 +#define MAX_NEW_FREED 64 + +#define PERM_ALLOCATED_OFFSET 0 +#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED +#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED) + +static void* DefaultAllocFunc(void* opaque, size_t size) { + BROTLI_UNUSED(opaque); + return malloc(size); +} + +static void DefaultFreeFunc(void* opaque, void* address) { + BROTLI_UNUSED(opaque); + free(address); +} + +void BrotliInitMemoryManager( + MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func, + void* opaque) { + if (!alloc_func) { + m->alloc_func = DefaultAllocFunc; + m->free_func = DefaultFreeFunc; + m->opaque = 0; + } else { + m->alloc_func = alloc_func; + m->free_func = free_func; + m->opaque = opaque; + } +#if !defined(BROTLI_ENCODER_EXIT_ON_OOM) + m->is_oom = BROTLI_FALSE; + m->perm_allocated = 0; + m->new_allocated = 0; + m->new_freed = 0; +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ +} + +#if defined(BROTLI_ENCODER_EXIT_ON_OOM) + +void* BrotliAllocate(MemoryManager* m, size_t n) { + void* result = m->alloc_func(m->opaque, n); + if (!result) exit(EXIT_FAILURE); + return result; +} + +void BrotliFree(MemoryManager* m, void* p) { + m->free_func(m->opaque, p); +} + +void BrotliWipeOutMemoryManager(MemoryManager* m) { + BROTLI_UNUSED(m); +} + +#else /* BROTLI_ENCODER_EXIT_ON_OOM */ + +static void SortPointers(void** items, const size_t n) { + /* Shell sort. */ + static const size_t gaps[] = {23, 10, 4, 1}; + int g = 0; + for (; g < 4; ++g) { + size_t gap = gaps[g]; + size_t i; + for (i = gap; i < n; ++i) { + size_t j = i; + void* tmp = items[i]; + for (; j >= gap && tmp < items[j - gap]; j -= gap) { + items[j] = items[j - gap]; + } + items[j] = tmp; + } + } +} + +static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) { + size_t a_read_index = 0; + size_t b_read_index = 0; + size_t a_write_index = 0; + size_t b_write_index = 0; + size_t annihilated = 0; + while (a_read_index < a_len && b_read_index < b_len) { + if (a[a_read_index] == b[b_read_index]) { + a_read_index++; + b_read_index++; + annihilated++; + } else if (a[a_read_index] < b[b_read_index]) { + a[a_write_index++] = a[a_read_index++]; + } else { + b[b_write_index++] = b[b_read_index++]; + } + } + while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++]; + while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++]; + return annihilated; +} + +static void CollectGarbagePointers(MemoryManager* m) { + size_t annihilated; + SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated); + SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed); + annihilated = Annihilate( + m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated, + m->pointers + NEW_FREED_OFFSET, m->new_freed); + m->new_allocated -= annihilated; + m->new_freed -= annihilated; + + if (m->new_freed != 0) { + annihilated = Annihilate( + m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated, + m->pointers + NEW_FREED_OFFSET, m->new_freed); + m->perm_allocated -= annihilated; + m->new_freed -= annihilated; + assert(m->new_freed == 0); + } + + if (m->new_allocated != 0) { + assert(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED); + memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated, + m->pointers + NEW_ALLOCATED_OFFSET, + sizeof(void*) * m->new_allocated); + m->perm_allocated += m->new_allocated; + m->new_allocated = 0; + SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated); + } +} + +void* BrotliAllocate(MemoryManager* m, size_t n) { + void* result = m->alloc_func(m->opaque, n); + if (!result) { + m->is_oom = BROTLI_TRUE; + return NULL; + } + if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m); + m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result; + return result; +} + +void BrotliFree(MemoryManager* m, void* p) { + if (!p) return; + m->free_func(m->opaque, p); + if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m); + m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p; +} + +void BrotliWipeOutMemoryManager(MemoryManager* m) { + size_t i; + CollectGarbagePointers(m); + /* Now all unfreed pointers are in perm-allocated list. */ + for (i = 0; i < m->perm_allocated; ++i) { + m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]); + } + m->perm_allocated = 0; +} + +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/memory.h b/third_party/brotli/enc/memory.h new file mode 100644 index 0000000..eea91a9 --- /dev/null +++ b/third_party/brotli/enc/memory.h
@@ -0,0 +1,62 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Macros for memory management. */ + +#ifndef BROTLI_ENC_MEMORY_H_ +#define BROTLI_ENC_MEMORY_H_ + +#include <brotli/types.h> +#include "./port.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \ + !defined(BROTLI_ENCODER_EXIT_ON_OOM) +#define BROTLI_ENCODER_EXIT_ON_OOM +#endif + +typedef struct MemoryManager { + brotli_alloc_func alloc_func; + brotli_free_func free_func; + void* opaque; +#if !defined(BROTLI_ENCODER_EXIT_ON_OOM) + BROTLI_BOOL is_oom; + size_t perm_allocated; + size_t new_allocated; + size_t new_freed; + void* pointers[256]; +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ +} MemoryManager; + +BROTLI_INTERNAL void BrotliInitMemoryManager( + MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func, + void* opaque); + +BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n); +#define BROTLI_ALLOC(M, T, N) ((T*)BrotliAllocate((M), (N) * sizeof(T))) + +BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p); +#define BROTLI_FREE(M, P) { \ + BrotliFree((M), (P)); \ + P = NULL; \ +} + +#if defined(BROTLI_ENCODER_EXIT_ON_OOM) +#define BROTLI_IS_OOM(M) (!!0) +#else /* BROTLI_ENCODER_EXIT_ON_OOM */ +#define BROTLI_IS_OOM(M) (!!(M)->is_oom) +#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ + +BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_MEMORY_H_ */
diff --git a/third_party/brotli/enc/metablock.c b/third_party/brotli/enc/metablock.c new file mode 100644 index 0000000..402aef6 --- /dev/null +++ b/third_party/brotli/enc/metablock.c
@@ -0,0 +1,516 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ + +#include "./metablock.h" + +#include "../common/constants.h" +#include <brotli/types.h> +#include "./bit_cost.h" +#include "./block_splitter.h" +#include "./cluster.h" +#include "./context.h" +#include "./entropy_encode.h" +#include "./histogram.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +void BrotliBuildMetaBlock(MemoryManager* m, + const uint8_t* ringbuffer, + const size_t pos, + const size_t mask, + const BrotliEncoderParams* params, + uint8_t prev_byte, + uint8_t prev_byte2, + const Command* cmds, + size_t num_commands, + ContextType literal_context_mode, + MetaBlockSplit* mb) { + /* Histogram ids need to fit in one byte. */ + static const size_t kMaxNumberOfHistograms = 256; + HistogramDistance* distance_histograms; + HistogramLiteral* literal_histograms; + ContextType* literal_context_modes; + size_t num_literal_contexts; + size_t num_distance_contexts; + size_t i; + + BrotliSplitBlock(m, cmds, num_commands, + ringbuffer, pos, mask, params, + &mb->literal_split, + &mb->command_split, + &mb->distance_split); + if (BROTLI_IS_OOM(m)) return; + + literal_context_modes = + BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types); + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < mb->literal_split.num_types; ++i) { + literal_context_modes[i] = literal_context_mode; + } + + num_literal_contexts = + mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; + num_distance_contexts = + mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; + literal_histograms = BROTLI_ALLOC(m, HistogramLiteral, num_literal_contexts); + if (BROTLI_IS_OOM(m)) return; + ClearHistogramsLiteral(literal_histograms, num_literal_contexts); + + assert(mb->command_histograms == 0); + mb->command_histograms_size = mb->command_split.num_types; + mb->command_histograms = + BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size); + if (BROTLI_IS_OOM(m)) return; + ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size); + distance_histograms = + BROTLI_ALLOC(m, HistogramDistance, num_distance_contexts); + if (BROTLI_IS_OOM(m)) return; + ClearHistogramsDistance(distance_histograms, num_distance_contexts); + BrotliBuildHistogramsWithContext(cmds, num_commands, + &mb->literal_split, &mb->command_split, &mb->distance_split, + ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes, + literal_histograms, mb->command_histograms, distance_histograms); + BROTLI_FREE(m, literal_context_modes); + + assert(mb->literal_context_map == 0); + mb->literal_context_map_size = + mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; + mb->literal_context_map = + BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); + if (BROTLI_IS_OOM(m)) return; + assert(mb->literal_histograms == 0); + mb->literal_histograms_size = mb->literal_context_map_size; + mb->literal_histograms = + BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size); + if (BROTLI_IS_OOM(m)) return; + BrotliClusterHistogramsLiteral(m, literal_histograms, + mb->literal_context_map_size, + kMaxNumberOfHistograms, + mb->literal_histograms, + &mb->literal_histograms_size, + mb->literal_context_map); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, literal_histograms); + + assert(mb->distance_context_map == 0); + mb->distance_context_map_size = + mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; + mb->distance_context_map = + BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size); + if (BROTLI_IS_OOM(m)) return; + assert(mb->distance_histograms == 0); + mb->distance_histograms_size = mb->distance_context_map_size; + mb->distance_histograms = + BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size); + if (BROTLI_IS_OOM(m)) return; + BrotliClusterHistogramsDistance(m, distance_histograms, + mb->distance_context_map_size, + kMaxNumberOfHistograms, + mb->distance_histograms, + &mb->distance_histograms_size, + mb->distance_context_map); + if (BROTLI_IS_OOM(m)) return; + BROTLI_FREE(m, distance_histograms); +} + +#define FN(X) X ## Literal +#include "./metablock_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Command +#include "./metablock_inc.h" /* NOLINT(build/include) */ +#undef FN + +#define FN(X) X ## Distance +#include "./metablock_inc.h" /* NOLINT(build/include) */ +#undef FN + +void BrotliBuildMetaBlockGreedy(MemoryManager* m, + const uint8_t* ringbuffer, + size_t pos, + size_t mask, + const Command *commands, + size_t n_commands, + MetaBlockSplit* mb) { + BlockSplitterLiteral lit_blocks; + BlockSplitterCommand cmd_blocks; + BlockSplitterDistance dist_blocks; + size_t num_literals = 0; + size_t i; + for (i = 0; i < n_commands; ++i) { + num_literals += commands[i].insert_len_; + } + + InitBlockSplitterLiteral(m, &lit_blocks, 256, 512, 400.0, num_literals, + &mb->literal_split, &mb->literal_histograms, + &mb->literal_histograms_size); + if (BROTLI_IS_OOM(m)) return; + InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024, + 500.0, n_commands, &mb->command_split, &mb->command_histograms, + &mb->command_histograms_size); + if (BROTLI_IS_OOM(m)) return; + InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands, + &mb->distance_split, &mb->distance_histograms, + &mb->distance_histograms_size); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_); + for (j = cmd.insert_len_; j != 0; --j) { + BlockSplitterAddSymbolLiteral(&lit_blocks, ringbuffer[pos & mask]); + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) { + BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_); + } + } + + BlockSplitterFinishBlockLiteral(&lit_blocks, /* is_final = */ BROTLI_TRUE); + BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE); + BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE); +} + +/* Greedy block splitter for one block category (literal, command or distance). + Gathers histograms for all context buckets. */ +typedef struct ContextBlockSplitter { + /* Alphabet size of particular block category. */ + size_t alphabet_size_; + size_t num_contexts_; + size_t max_block_types_; + /* We collect at least this many symbols for each block. */ + size_t min_block_size_; + /* We merge histograms A and B if + entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, + where A is the current histogram and B is the histogram of the last or the + second last block type. */ + double split_threshold_; + + size_t num_blocks_; + BlockSplit* split_; /* not owned */ + HistogramLiteral* histograms_; /* not owned */ + size_t* histograms_size_; /* not owned */ + + /* The number of symbols that we want to collect before deciding on whether + or not to merge the block with a previous one or emit a new block. */ + size_t target_block_size_; + /* The number of symbols in the current histogram. */ + size_t block_size_; + /* Offset of the current histogram. */ + size_t curr_histogram_ix_; + /* Offset of the histograms of the previous two block types. */ + size_t last_histogram_ix_[2]; + /* Entropy of the previous two block types. */ + double* last_entropy_; + /* The number of times we merged the current block with the last one. */ + size_t merge_last_count_; +} ContextBlockSplitter; + +static void InitContextBlockSplitter( + MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size, + size_t num_contexts, size_t min_block_size, double split_threshold, + size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms, + size_t* histograms_size) { + size_t max_num_blocks = num_symbols / min_block_size + 1; + size_t max_num_types; + + self->alphabet_size_ = alphabet_size; + self->num_contexts_ = num_contexts; + self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts; + self->min_block_size_ = min_block_size; + self->split_threshold_ = split_threshold; + self->num_blocks_ = 0; + self->split_ = split; + self->histograms_size_ = histograms_size; + self->target_block_size_ = min_block_size; + self->block_size_ = 0; + self->curr_histogram_ix_ = 0; + self->merge_last_count_ = 0; + + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + max_num_types = + BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1); + BROTLI_ENSURE_CAPACITY(m, uint8_t, + split->types, split->types_alloc_size, max_num_blocks); + BROTLI_ENSURE_CAPACITY(m, uint32_t, + split->lengths, split->lengths_alloc_size, max_num_blocks); + if (BROTLI_IS_OOM(m)) return; + split->num_blocks = max_num_blocks; + self->last_entropy_ = BROTLI_ALLOC(m, double, 2 * num_contexts); + if (BROTLI_IS_OOM(m)) return; + assert(*histograms == 0); + *histograms_size = max_num_types * num_contexts; + *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size); + self->histograms_ = *histograms; + if (BROTLI_IS_OOM(m)) return; + /* Clear only current histogram. */ + ClearHistogramsLiteral(&self->histograms_[0], num_contexts); + self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0; +} + +static void CleanupContextBlockSplitter( + MemoryManager* m, ContextBlockSplitter* self) { + BROTLI_FREE(m, self->last_entropy_); +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +static void ContextBlockSplitterFinishBlock( + MemoryManager* m, ContextBlockSplitter* self, BROTLI_BOOL is_final) { + BlockSplit* split = self->split_; + const size_t num_contexts = self->num_contexts_; + double* last_entropy = self->last_entropy_; + HistogramLiteral* histograms = self->histograms_; + + if (self->block_size_ < self->min_block_size_) { + self->block_size_ = self->min_block_size_; + } + if (self->num_blocks_ == 0) { + size_t i; + /* Create first block. */ + split->lengths[0] = (uint32_t)self->block_size_; + split->types[0] = 0; + + for (i = 0; i < num_contexts; ++i) { + last_entropy[i] = + BitsEntropy(histograms[i].data_, self->alphabet_size_); + last_entropy[num_contexts + i] = last_entropy[i]; + } + ++self->num_blocks_; + ++split->num_types; + self->curr_histogram_ix_ += num_contexts; + if (self->curr_histogram_ix_ < *self->histograms_size_) { + ClearHistogramsLiteral( + &self->histograms_[self->curr_histogram_ix_], self->num_contexts_); + } + self->block_size_ = 0; + } else if (self->block_size_ > 0) { + /* Try merging the set of histograms for the current block type with the + respective set of histograms for the last and second last block types. + Decide over the split based on the total reduction of entropy across + all contexts. */ + double* entropy = BROTLI_ALLOC(m, double, num_contexts); + HistogramLiteral* combined_histo = + BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts); + double* combined_entropy = BROTLI_ALLOC(m, double, 2 * num_contexts); + double diff[2] = { 0.0 }; + size_t i; + if (BROTLI_IS_OOM(m)) return; + for (i = 0; i < num_contexts; ++i) { + size_t curr_histo_ix = self->curr_histogram_ix_ + i; + size_t j; + entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_, + self->alphabet_size_); + for (j = 0; j < 2; ++j) { + size_t jx = j * num_contexts + i; + size_t last_histogram_ix = self->last_histogram_ix_[j] + i; + combined_histo[jx] = histograms[curr_histo_ix]; + HistogramAddHistogramLiteral(&combined_histo[jx], + &histograms[last_histogram_ix]); + combined_entropy[jx] = BitsEntropy( + &combined_histo[jx].data_[0], self->alphabet_size_); + diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx]; + } + } + + if (split->num_types < self->max_block_types_ && + diff[0] > self->split_threshold_ && + diff[1] > self->split_threshold_) { + /* Create new block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = (uint8_t)split->num_types; + self->last_histogram_ix_[1] = self->last_histogram_ix_[0]; + self->last_histogram_ix_[0] = split->num_types * num_contexts; + for (i = 0; i < num_contexts; ++i) { + last_entropy[num_contexts + i] = last_entropy[i]; + last_entropy[i] = entropy[i]; + } + ++self->num_blocks_; + ++split->num_types; + self->curr_histogram_ix_ += num_contexts; + if (self->curr_histogram_ix_ < *self->histograms_size_) { + ClearHistogramsLiteral( + &self->histograms_[self->curr_histogram_ix_], self->num_contexts_); + } + self->block_size_ = 0; + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else if (diff[1] < diff[0] - 20.0) { + /* Combine this block with second last block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2]; + BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1); + for (i = 0; i < num_contexts; ++i) { + histograms[self->last_histogram_ix_[0] + i] = + combined_histo[num_contexts + i]; + last_entropy[num_contexts + i] = last_entropy[i]; + last_entropy[i] = combined_entropy[num_contexts + i]; + HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]); + } + ++self->num_blocks_; + self->block_size_ = 0; + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else { + /* Combine this block with last block. */ + split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_; + for (i = 0; i < num_contexts; ++i) { + histograms[self->last_histogram_ix_[0] + i] = combined_histo[i]; + last_entropy[i] = combined_entropy[i]; + if (split->num_types == 1) { + last_entropy[num_contexts + i] = last_entropy[i]; + } + HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]); + } + self->block_size_ = 0; + if (++self->merge_last_count_ > 1) { + self->target_block_size_ += self->min_block_size_; + } + } + BROTLI_FREE(m, combined_entropy); + BROTLI_FREE(m, combined_histo); + BROTLI_FREE(m, entropy); + } + if (is_final) { + *self->histograms_size_ = split->num_types * num_contexts; + split->num_blocks = self->num_blocks_; + } +} + +/* Adds the next symbol to the current block type and context. When the + current block reaches the target size, decides on merging the block. */ +static void ContextBlockSplitterAddSymbol(MemoryManager* m, + ContextBlockSplitter* self, size_t symbol, size_t context) { + HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context], + symbol); + ++self->block_size_; + if (self->block_size_ == self->target_block_size_) { + ContextBlockSplitterFinishBlock(m, self, /* is_final = */ BROTLI_FALSE); + if (BROTLI_IS_OOM(m)) return; + } +} + +void BrotliBuildMetaBlockGreedyWithContexts(MemoryManager* m, + const uint8_t* ringbuffer, + size_t pos, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + ContextType literal_context_mode, + size_t num_contexts, + const uint32_t* static_context_map, + const Command *commands, + size_t n_commands, + MetaBlockSplit* mb) { + ContextBlockSplitter lit_blocks; + BlockSplitterCommand cmd_blocks; + BlockSplitterDistance dist_blocks; + size_t num_literals = 0; + size_t i; + for (i = 0; i < n_commands; ++i) { + num_literals += commands[i].insert_len_; + } + + InitContextBlockSplitter(m, &lit_blocks, 256, num_contexts, 512, 400.0, + num_literals, &mb->literal_split, &mb->literal_histograms, + &mb->literal_histograms_size); + if (BROTLI_IS_OOM(m)) return; + InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024, + 500.0, n_commands, &mb->command_split, &mb->command_histograms, + &mb->command_histograms_size); + if (BROTLI_IS_OOM(m)) return; + InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands, + &mb->distance_split, &mb->distance_histograms, + &mb->distance_histograms_size); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < n_commands; ++i) { + const Command cmd = commands[i]; + size_t j; + BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_); + for (j = cmd.insert_len_; j != 0; --j) { + size_t context = Context(prev_byte, prev_byte2, literal_context_mode); + uint8_t literal = ringbuffer[pos & mask]; + ContextBlockSplitterAddSymbol( + m, &lit_blocks, literal, static_context_map[context]); + prev_byte2 = prev_byte; + if (BROTLI_IS_OOM(m)) return; + prev_byte = literal; + ++pos; + } + pos += CommandCopyLen(&cmd); + if (CommandCopyLen(&cmd)) { + prev_byte2 = ringbuffer[(pos - 2) & mask]; + prev_byte = ringbuffer[(pos - 1) & mask]; + if (cmd.cmd_prefix_ >= 128) { + BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_); + } + } + } + + ContextBlockSplitterFinishBlock(m, &lit_blocks, /* is_final = */ BROTLI_TRUE); + if (BROTLI_IS_OOM(m)) return; + CleanupContextBlockSplitter(m, &lit_blocks); + BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE); + BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE); + + assert(mb->literal_context_map == 0); + mb->literal_context_map_size = + mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; + mb->literal_context_map = + BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); + if (BROTLI_IS_OOM(m)) return; + + for (i = 0; i < mb->literal_split.num_types; ++i) { + size_t j; + for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) { + mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] = + (uint32_t)(i * num_contexts) + static_context_map[j]; + } + } +} + +void BrotliOptimizeHistograms(size_t num_direct_distance_codes, + size_t distance_postfix_bits, + MetaBlockSplit* mb) { + uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS]; + size_t num_distance_codes; + size_t i; + for (i = 0; i < mb->literal_histograms_size; ++i) { + BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_, + good_for_rle); + } + for (i = 0; i < mb->command_histograms_size; ++i) { + BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS, + mb->command_histograms[i].data_, + good_for_rle); + } + num_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES + + num_direct_distance_codes + + ((2 * BROTLI_MAX_DISTANCE_BITS) << distance_postfix_bits); + for (i = 0; i < mb->distance_histograms_size; ++i) { + BrotliOptimizeHuffmanCountsForRle(num_distance_codes, + mb->distance_histograms[i].data_, + good_for_rle); + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/metablock.cc b/third_party/brotli/enc/metablock.cc deleted file mode 100644 index fc962c5..0000000 --- a/third_party/brotli/enc/metablock.cc +++ /dev/null
@@ -1,539 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Algorithms for distributing the literals and commands of a metablock between -// block types and contexts. - -#include "./metablock.h" - -#include "./block_splitter.h" -#include "./context.h" -#include "./cluster.h" -#include "./histogram.h" - -namespace brotli { - -void BuildMetaBlock(const uint8_t* ringbuffer, - const size_t pos, - const size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const Command* cmds, - size_t num_commands, - ContextType literal_context_mode, - MetaBlockSplit* mb) { - SplitBlock(cmds, num_commands, - ringbuffer, pos, mask, - &mb->literal_split, - &mb->command_split, - &mb->distance_split); - - std::vector<ContextType> literal_context_modes(mb->literal_split.num_types, - literal_context_mode); - - size_t num_literal_contexts = - mb->literal_split.num_types << kLiteralContextBits; - size_t num_distance_contexts = - mb->distance_split.num_types << kDistanceContextBits; - std::vector<HistogramLiteral> literal_histograms(num_literal_contexts); - mb->command_histograms.resize(mb->command_split.num_types); - std::vector<HistogramDistance> distance_histograms(num_distance_contexts); - BuildHistograms(cmds, num_commands, - mb->literal_split, - mb->command_split, - mb->distance_split, - ringbuffer, - pos, - mask, - prev_byte, - prev_byte2, - literal_context_modes, - &literal_histograms, - &mb->command_histograms, - &distance_histograms); - - // Histogram ids need to fit in one byte. - static const size_t kMaxNumberOfHistograms = 256; - - ClusterHistograms(literal_histograms, - 1u << kLiteralContextBits, - mb->literal_split.num_types, - kMaxNumberOfHistograms, - &mb->literal_histograms, - &mb->literal_context_map); - - ClusterHistograms(distance_histograms, - 1u << kDistanceContextBits, - mb->distance_split.num_types, - kMaxNumberOfHistograms, - &mb->distance_histograms, - &mb->distance_context_map); -} - -// Greedy block splitter for one block category (literal, command or distance). -template<typename HistogramType> -class BlockSplitter { - public: - BlockSplitter(size_t alphabet_size, - size_t min_block_size, - double split_threshold, - size_t num_symbols, - BlockSplit* split, - std::vector<HistogramType>* histograms) - : alphabet_size_(alphabet_size), - min_block_size_(min_block_size), - split_threshold_(split_threshold), - num_blocks_(0), - split_(split), - histograms_(histograms), - target_block_size_(min_block_size), - block_size_(0), - curr_histogram_ix_(0), - merge_last_count_(0) { - size_t max_num_blocks = num_symbols / min_block_size + 1; - // We have to allocate one more histogram than the maximum number of block - // types for the current histogram when the meta-block is too big. - size_t max_num_types = std::min<size_t>(max_num_blocks, kMaxBlockTypes + 1); - split_->lengths.resize(max_num_blocks); - split_->types.resize(max_num_blocks); - histograms_->resize(max_num_types); - last_histogram_ix_[0] = last_histogram_ix_[1] = 0; - } - - // Adds the next symbol to the current histogram. When the current histogram - // reaches the target size, decides on merging the block. - void AddSymbol(size_t symbol) { - (*histograms_)[curr_histogram_ix_].Add(symbol); - ++block_size_; - if (block_size_ == target_block_size_) { - FinishBlock(/* is_final = */ false); - } - } - - // Does either of three things: - // (1) emits the current block with a new block type; - // (2) emits the current block with the type of the second last block; - // (3) merges the current block with the last block. - void FinishBlock(bool is_final) { - if (block_size_ < min_block_size_) { - block_size_ = min_block_size_; - } - if (num_blocks_ == 0) { - // Create first block. - split_->lengths[0] = static_cast<uint32_t>(block_size_); - split_->types[0] = 0; - last_entropy_[0] = - BitsEntropy(&(*histograms_)[0].data_[0], alphabet_size_); - last_entropy_[1] = last_entropy_[0]; - ++num_blocks_; - ++split_->num_types; - ++curr_histogram_ix_; - block_size_ = 0; - } else if (block_size_ > 0) { - double entropy = BitsEntropy(&(*histograms_)[curr_histogram_ix_].data_[0], - alphabet_size_); - HistogramType combined_histo[2]; - double combined_entropy[2]; - double diff[2]; - for (size_t j = 0; j < 2; ++j) { - size_t last_histogram_ix = last_histogram_ix_[j]; - combined_histo[j] = (*histograms_)[curr_histogram_ix_]; - combined_histo[j].AddHistogram((*histograms_)[last_histogram_ix]); - combined_entropy[j] = BitsEntropy( - &combined_histo[j].data_[0], alphabet_size_); - diff[j] = combined_entropy[j] - entropy - last_entropy_[j]; - } - - if (split_->num_types < kMaxBlockTypes && - diff[0] > split_threshold_ && - diff[1] > split_threshold_) { - // Create new block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = static_cast<uint8_t>(split_->num_types); - last_histogram_ix_[1] = last_histogram_ix_[0]; - last_histogram_ix_[0] = static_cast<uint8_t>(split_->num_types); - last_entropy_[1] = last_entropy_[0]; - last_entropy_[0] = entropy; - ++num_blocks_; - ++split_->num_types; - ++curr_histogram_ix_; - block_size_ = 0; - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else if (diff[1] < diff[0] - 20.0) { - // Combine this block with second last block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = split_->types[num_blocks_ - 2]; - std::swap(last_histogram_ix_[0], last_histogram_ix_[1]); - (*histograms_)[last_histogram_ix_[0]] = combined_histo[1]; - last_entropy_[1] = last_entropy_[0]; - last_entropy_[0] = combined_entropy[1]; - ++num_blocks_; - block_size_ = 0; - (*histograms_)[curr_histogram_ix_].Clear(); - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else { - // Combine this block with last block. - split_->lengths[num_blocks_ - 1] += static_cast<uint32_t>(block_size_); - (*histograms_)[last_histogram_ix_[0]] = combined_histo[0]; - last_entropy_[0] = combined_entropy[0]; - if (split_->num_types == 1) { - last_entropy_[1] = last_entropy_[0]; - } - block_size_ = 0; - (*histograms_)[curr_histogram_ix_].Clear(); - if (++merge_last_count_ > 1) { - target_block_size_ += min_block_size_; - } - } - } - if (is_final) { - (*histograms_).resize(split_->num_types); - split_->types.resize(num_blocks_); - split_->lengths.resize(num_blocks_); - } - } - - private: - static const uint16_t kMaxBlockTypes = 256; - - // Alphabet size of particular block category. - const size_t alphabet_size_; - // We collect at least this many symbols for each block. - const size_t min_block_size_; - // We merge histograms A and B if - // entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, - // where A is the current histogram and B is the histogram of the last or the - // second last block type. - const double split_threshold_; - - size_t num_blocks_; - BlockSplit* split_; // not owned - std::vector<HistogramType>* histograms_; // not owned - - // The number of symbols that we want to collect before deciding on whether - // or not to merge the block with a previous one or emit a new block. - size_t target_block_size_; - // The number of symbols in the current histogram. - size_t block_size_; - // Offset of the current histogram. - size_t curr_histogram_ix_; - // Offset of the histograms of the previous two block types. - size_t last_histogram_ix_[2]; - // Entropy of the previous two block types. - double last_entropy_[2]; - // The number of times we merged the current block with the last one. - size_t merge_last_count_; -}; - -void BuildMetaBlockGreedy(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb) { - size_t num_literals = 0; - for (size_t i = 0; i < n_commands; ++i) { - num_literals += commands[i].insert_len_; - } - - BlockSplitter<HistogramLiteral> lit_blocks( - 256, 512, 400.0, num_literals, - &mb->literal_split, &mb->literal_histograms); - BlockSplitter<HistogramCommand> cmd_blocks( - kNumCommandPrefixes, 1024, 500.0, n_commands, - &mb->command_split, &mb->command_histograms); - BlockSplitter<HistogramDistance> dist_blocks( - 64, 512, 100.0, n_commands, - &mb->distance_split, &mb->distance_histograms); - - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - cmd_blocks.AddSymbol(cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - lit_blocks.AddSymbol(ringbuffer[pos & mask]); - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len() && cmd.cmd_prefix_ >= 128) { - dist_blocks.AddSymbol(cmd.dist_prefix_); - } - } - - lit_blocks.FinishBlock(/* is_final = */ true); - cmd_blocks.FinishBlock(/* is_final = */ true); - dist_blocks.FinishBlock(/* is_final = */ true); -} - -// Greedy block splitter for one block category (literal, command or distance). -// Gathers histograms for all context buckets. -template<typename HistogramType> -class ContextBlockSplitter { - public: - ContextBlockSplitter(size_t alphabet_size, - size_t num_contexts, - size_t min_block_size, - double split_threshold, - size_t num_symbols, - BlockSplit* split, - std::vector<HistogramType>* histograms) - : alphabet_size_(alphabet_size), - num_contexts_(num_contexts), - max_block_types_(kMaxBlockTypes / num_contexts), - min_block_size_(min_block_size), - split_threshold_(split_threshold), - num_blocks_(0), - split_(split), - histograms_(histograms), - target_block_size_(min_block_size), - block_size_(0), - curr_histogram_ix_(0), - last_entropy_(2 * num_contexts), - merge_last_count_(0) { - size_t max_num_blocks = num_symbols / min_block_size + 1; - // We have to allocate one more histogram than the maximum number of block - // types for the current histogram when the meta-block is too big. - size_t max_num_types = std::min(max_num_blocks, max_block_types_ + 1); - split_->lengths.resize(max_num_blocks); - split_->types.resize(max_num_blocks); - histograms_->resize(max_num_types * num_contexts); - last_histogram_ix_[0] = last_histogram_ix_[1] = 0; - } - - // Adds the next symbol to the current block type and context. When the - // current block reaches the target size, decides on merging the block. - void AddSymbol(size_t symbol, size_t context) { - (*histograms_)[curr_histogram_ix_ + context].Add(symbol); - ++block_size_; - if (block_size_ == target_block_size_) { - FinishBlock(/* is_final = */ false); - } - } - - // Does either of three things: - // (1) emits the current block with a new block type; - // (2) emits the current block with the type of the second last block; - // (3) merges the current block with the last block. - void FinishBlock(bool is_final) { - if (block_size_ < min_block_size_) { - block_size_ = min_block_size_; - } - if (num_blocks_ == 0) { - // Create first block. - split_->lengths[0] = static_cast<uint32_t>(block_size_); - split_->types[0] = 0; - for (size_t i = 0; i < num_contexts_; ++i) { - last_entropy_[i] = - BitsEntropy(&(*histograms_)[i].data_[0], alphabet_size_); - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - } - ++num_blocks_; - ++split_->num_types; - curr_histogram_ix_ += num_contexts_; - block_size_ = 0; - } else if (block_size_ > 0) { - // Try merging the set of histograms for the current block type with the - // respective set of histograms for the last and second last block types. - // Decide over the split based on the total reduction of entropy across - // all contexts. - std::vector<double> entropy(num_contexts_); - std::vector<HistogramType> combined_histo(2 * num_contexts_); - std::vector<double> combined_entropy(2 * num_contexts_); - double diff[2] = { 0.0 }; - for (size_t i = 0; i < num_contexts_; ++i) { - size_t curr_histo_ix = curr_histogram_ix_ + i; - entropy[i] = BitsEntropy(&(*histograms_)[curr_histo_ix].data_[0], - alphabet_size_); - for (size_t j = 0; j < 2; ++j) { - size_t jx = j * num_contexts_ + i; - size_t last_histogram_ix = last_histogram_ix_[j] + i; - combined_histo[jx] = (*histograms_)[curr_histo_ix]; - combined_histo[jx].AddHistogram((*histograms_)[last_histogram_ix]); - combined_entropy[jx] = BitsEntropy( - &combined_histo[jx].data_[0], alphabet_size_); - diff[j] += combined_entropy[jx] - entropy[i] - last_entropy_[jx]; - } - } - - if (split_->num_types < max_block_types_ && - diff[0] > split_threshold_ && - diff[1] > split_threshold_) { - // Create new block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = static_cast<uint8_t>(split_->num_types); - last_histogram_ix_[1] = last_histogram_ix_[0]; - last_histogram_ix_[0] = split_->num_types * num_contexts_; - for (size_t i = 0; i < num_contexts_; ++i) { - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - last_entropy_[i] = entropy[i]; - } - ++num_blocks_; - ++split_->num_types; - curr_histogram_ix_ += num_contexts_; - block_size_ = 0; - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else if (diff[1] < diff[0] - 20.0) { - // Combine this block with second last block. - split_->lengths[num_blocks_] = static_cast<uint32_t>(block_size_); - split_->types[num_blocks_] = split_->types[num_blocks_ - 2]; - std::swap(last_histogram_ix_[0], last_histogram_ix_[1]); - for (size_t i = 0; i < num_contexts_; ++i) { - (*histograms_)[last_histogram_ix_[0] + i] = - combined_histo[num_contexts_ + i]; - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - last_entropy_[i] = combined_entropy[num_contexts_ + i]; - (*histograms_)[curr_histogram_ix_ + i].Clear(); - } - ++num_blocks_; - block_size_ = 0; - merge_last_count_ = 0; - target_block_size_ = min_block_size_; - } else { - // Combine this block with last block. - split_->lengths[num_blocks_ - 1] += static_cast<uint32_t>(block_size_); - for (size_t i = 0; i < num_contexts_; ++i) { - (*histograms_)[last_histogram_ix_[0] + i] = combined_histo[i]; - last_entropy_[i] = combined_entropy[i]; - if (split_->num_types == 1) { - last_entropy_[num_contexts_ + i] = last_entropy_[i]; - } - (*histograms_)[curr_histogram_ix_ + i].Clear(); - } - block_size_ = 0; - if (++merge_last_count_ > 1) { - target_block_size_ += min_block_size_; - } - } - } - if (is_final) { - (*histograms_).resize(split_->num_types * num_contexts_); - split_->types.resize(num_blocks_); - split_->lengths.resize(num_blocks_); - } - } - - private: - static const int kMaxBlockTypes = 256; - - // Alphabet size of particular block category. - const size_t alphabet_size_; - const size_t num_contexts_; - const size_t max_block_types_; - // We collect at least this many symbols for each block. - const size_t min_block_size_; - // We merge histograms A and B if - // entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, - // where A is the current histogram and B is the histogram of the last or the - // second last block type. - const double split_threshold_; - - size_t num_blocks_; - BlockSplit* split_; // not owned - std::vector<HistogramType>* histograms_; // not owned - - // The number of symbols that we want to collect before deciding on whether - // or not to merge the block with a previous one or emit a new block. - size_t target_block_size_; - // The number of symbols in the current histogram. - size_t block_size_; - // Offset of the current histogram. - size_t curr_histogram_ix_; - // Offset of the histograms of the previous two block types. - size_t last_histogram_ix_[2]; - // Entropy of the previous two block types. - std::vector<double> last_entropy_; - // The number of times we merged the current block with the last one. - size_t merge_last_count_; -}; - -void BuildMetaBlockGreedyWithContexts(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - ContextType literal_context_mode, - size_t num_contexts, - const uint32_t* static_context_map, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb) { - size_t num_literals = 0; - for (size_t i = 0; i < n_commands; ++i) { - num_literals += commands[i].insert_len_; - } - - ContextBlockSplitter<HistogramLiteral> lit_blocks( - 256, num_contexts, 512, 400.0, num_literals, - &mb->literal_split, &mb->literal_histograms); - BlockSplitter<HistogramCommand> cmd_blocks( - kNumCommandPrefixes, 1024, 500.0, n_commands, - &mb->command_split, &mb->command_histograms); - BlockSplitter<HistogramDistance> dist_blocks( - 64, 512, 100.0, n_commands, - &mb->distance_split, &mb->distance_histograms); - - for (size_t i = 0; i < n_commands; ++i) { - const Command cmd = commands[i]; - cmd_blocks.AddSymbol(cmd.cmd_prefix_); - for (size_t j = cmd.insert_len_; j != 0; --j) { - size_t context = Context(prev_byte, prev_byte2, literal_context_mode); - uint8_t literal = ringbuffer[pos & mask]; - lit_blocks.AddSymbol(literal, static_context_map[context]); - prev_byte2 = prev_byte; - prev_byte = literal; - ++pos; - } - pos += cmd.copy_len(); - if (cmd.copy_len()) { - prev_byte2 = ringbuffer[(pos - 2) & mask]; - prev_byte = ringbuffer[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >= 128) { - dist_blocks.AddSymbol(cmd.dist_prefix_); - } - } - } - - lit_blocks.FinishBlock(/* is_final = */ true); - cmd_blocks.FinishBlock(/* is_final = */ true); - dist_blocks.FinishBlock(/* is_final = */ true); - - mb->literal_context_map.resize( - mb->literal_split.num_types << kLiteralContextBits); - for (size_t i = 0; i < mb->literal_split.num_types; ++i) { - for (size_t j = 0; j < (1u << kLiteralContextBits); ++j) { - mb->literal_context_map[(i << kLiteralContextBits) + j] = - static_cast<uint32_t>(i * num_contexts) + static_context_map[j]; - } - } -} - -void OptimizeHistograms(size_t num_direct_distance_codes, - size_t distance_postfix_bits, - MetaBlockSplit* mb) { - uint8_t* good_for_rle = new uint8_t[kNumCommandPrefixes]; - for (size_t i = 0; i < mb->literal_histograms.size(); ++i) { - OptimizeHuffmanCountsForRle(256, &mb->literal_histograms[i].data_[0], - good_for_rle); - } - for (size_t i = 0; i < mb->command_histograms.size(); ++i) { - OptimizeHuffmanCountsForRle(kNumCommandPrefixes, - &mb->command_histograms[i].data_[0], - good_for_rle); - } - size_t num_distance_codes = - kNumDistanceShortCodes + num_direct_distance_codes + - (48u << distance_postfix_bits); - for (size_t i = 0; i < mb->distance_histograms.size(); ++i) { - OptimizeHuffmanCountsForRle(num_distance_codes, - &mb->distance_histograms[i].data_[0], - good_for_rle); - } - delete[] good_for_rle; -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/metablock.h b/third_party/brotli/enc/metablock.h index d192885..da29d813 100644 --- a/third_party/brotli/enc/metablock.h +++ b/third_party/brotli/enc/metablock.h
@@ -4,77 +4,107 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Algorithms for distributing the literals and commands of a metablock between -// block types and contexts. +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ #ifndef BROTLI_ENC_METABLOCK_H_ #define BROTLI_ENC_METABLOCK_H_ -#include <vector> - +#include <brotli/types.h> +#include "./block_splitter.h" #include "./command.h" +#include "./context.h" #include "./histogram.h" +#include "./memory.h" +#include "./port.h" +#include "./quality.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -struct BlockSplit { - BlockSplit(void) : num_types(0) {} - - size_t num_types; - std::vector<uint8_t> types; - std::vector<uint32_t> lengths; -}; - -struct MetaBlockSplit { +typedef struct MetaBlockSplit { BlockSplit literal_split; BlockSplit command_split; BlockSplit distance_split; - std::vector<uint32_t> literal_context_map; - std::vector<uint32_t> distance_context_map; - std::vector<HistogramLiteral> literal_histograms; - std::vector<HistogramCommand> command_histograms; - std::vector<HistogramDistance> distance_histograms; -}; + uint32_t* literal_context_map; + size_t literal_context_map_size; + uint32_t* distance_context_map; + size_t distance_context_map_size; + HistogramLiteral* literal_histograms; + size_t literal_histograms_size; + HistogramCommand* command_histograms; + size_t command_histograms_size; + HistogramDistance* distance_histograms; + size_t distance_histograms_size; +} MetaBlockSplit; -// Uses the slow shortest-path block splitter and does context clustering. -void BuildMetaBlock(const uint8_t* ringbuffer, - const size_t pos, - const size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - const Command* cmds, - size_t num_commands, - ContextType literal_context_mode, - MetaBlockSplit* mb); +static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) { + BrotliInitBlockSplit(&mb->literal_split); + BrotliInitBlockSplit(&mb->command_split); + BrotliInitBlockSplit(&mb->distance_split); + mb->literal_context_map = 0; + mb->literal_context_map_size = 0; + mb->distance_context_map = 0; + mb->distance_context_map_size = 0; + mb->literal_histograms = 0; + mb->literal_histograms_size = 0; + mb->command_histograms = 0; + mb->command_histograms_size = 0; + mb->distance_histograms = 0; + mb->distance_histograms_size = 0; +} -// Uses a fast greedy block splitter that tries to merge current block with the -// last or the second last block and does not do any context modeling. -void BuildMetaBlockGreedy(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb); +static BROTLI_INLINE void DestroyMetaBlockSplit( + MemoryManager* m, MetaBlockSplit* mb) { + BrotliDestroyBlockSplit(m, &mb->literal_split); + BrotliDestroyBlockSplit(m, &mb->command_split); + BrotliDestroyBlockSplit(m, &mb->distance_split); + BROTLI_FREE(m, mb->literal_context_map); + BROTLI_FREE(m, mb->distance_context_map); + BROTLI_FREE(m, mb->literal_histograms); + BROTLI_FREE(m, mb->command_histograms); + BROTLI_FREE(m, mb->distance_histograms); +} -// Uses a fast greedy block splitter that tries to merge current block with the -// last or the second last block and uses a static context clustering which -// is the same for all block types. -void BuildMetaBlockGreedyWithContexts(const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - ContextType literal_context_mode, - size_t num_contexts, - const uint32_t* static_context_map, - const Command *commands, - size_t n_commands, - MetaBlockSplit* mb); +/* Uses the slow shortest-path block splitter and does context clustering. */ +BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m, + const uint8_t* ringbuffer, + const size_t pos, + const size_t mask, + const BrotliEncoderParams* params, + uint8_t prev_byte, + uint8_t prev_byte2, + const Command* cmds, + size_t num_commands, + ContextType literal_context_mode, + MetaBlockSplit* mb); -void OptimizeHistograms(size_t num_direct_distance_codes, - size_t distance_postfix_bits, - MetaBlockSplit* mb); +/* Uses a fast greedy block splitter that tries to merge current block with the + last or the second last block and does not do any context modeling. */ +BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(MemoryManager* m, + const uint8_t* ringbuffer, + size_t pos, + size_t mask, + const Command* commands, + size_t n_commands, + MetaBlockSplit* mb); -} // namespace brotli +/* Uses a fast greedy block splitter that tries to merge current block with the + last or the second last block and uses a static context clustering which + is the same for all block types. */ +BROTLI_INTERNAL void BrotliBuildMetaBlockGreedyWithContexts( + MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask, + uint8_t prev_byte, uint8_t prev_byte2, ContextType literal_context_mode, + size_t num_contexts, const uint32_t* static_context_map, + const Command* commands, size_t n_commands, MetaBlockSplit* mb); -#endif // BROTLI_ENC_METABLOCK_H_ +BROTLI_INTERNAL void BrotliOptimizeHistograms(size_t num_direct_distance_codes, + size_t distance_postfix_bits, + MetaBlockSplit* mb); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_METABLOCK_H_ */
diff --git a/third_party/brotli/enc/metablock_inc.h b/third_party/brotli/enc/metablock_inc.h new file mode 100644 index 0000000..c8bfb81 --- /dev/null +++ b/third_party/brotli/enc/metablock_inc.h
@@ -0,0 +1,183 @@ +/* NOLINT(build/header_guard) */ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* template parameters: FN */ + +#define HistogramType FN(Histogram) + +/* Greedy block splitter for one block category (literal, command or distance). +*/ +typedef struct FN(BlockSplitter) { + /* Alphabet size of particular block category. */ + size_t alphabet_size_; + /* We collect at least this many symbols for each block. */ + size_t min_block_size_; + /* We merge histograms A and B if + entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, + where A is the current histogram and B is the histogram of the last or the + second last block type. */ + double split_threshold_; + + size_t num_blocks_; + BlockSplit* split_; /* not owned */ + HistogramType* histograms_; /* not owned */ + size_t* histograms_size_; /* not owned */ + + /* The number of symbols that we want to collect before deciding on whether + or not to merge the block with a previous one or emit a new block. */ + size_t target_block_size_; + /* The number of symbols in the current histogram. */ + size_t block_size_; + /* Offset of the current histogram. */ + size_t curr_histogram_ix_; + /* Offset of the histograms of the previous two block types. */ + size_t last_histogram_ix_[2]; + /* Entropy of the previous two block types. */ + double last_entropy_[2]; + /* The number of times we merged the current block with the last one. */ + size_t merge_last_count_; +} FN(BlockSplitter); + +static void FN(InitBlockSplitter)( + MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size, + size_t min_block_size, double split_threshold, size_t num_symbols, + BlockSplit* split, HistogramType** histograms, size_t* histograms_size) { + size_t max_num_blocks = num_symbols / min_block_size + 1; + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + size_t max_num_types = + BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1); + self->alphabet_size_ = alphabet_size; + self->min_block_size_ = min_block_size; + self->split_threshold_ = split_threshold; + self->num_blocks_ = 0; + self->split_ = split; + self->histograms_size_ = histograms_size; + self->target_block_size_ = min_block_size; + self->block_size_ = 0; + self->curr_histogram_ix_ = 0; + self->merge_last_count_ = 0; + BROTLI_ENSURE_CAPACITY(m, uint8_t, + split->types, split->types_alloc_size, max_num_blocks); + BROTLI_ENSURE_CAPACITY(m, uint32_t, + split->lengths, split->lengths_alloc_size, max_num_blocks); + if (BROTLI_IS_OOM(m)) return; + self->split_->num_blocks = max_num_blocks; + assert(*histograms == 0); + *histograms_size = max_num_types; + *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size); + self->histograms_ = *histograms; + if (BROTLI_IS_OOM(m)) return; + /* Clear only current histogram. */ + FN(HistogramClear)(&self->histograms_[0]); + self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0; +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +static void FN(BlockSplitterFinishBlock)( + FN(BlockSplitter)* self, BROTLI_BOOL is_final) { + BlockSplit* split = self->split_; + double* last_entropy = self->last_entropy_; + HistogramType* histograms = self->histograms_; + self->block_size_ = + BROTLI_MAX(size_t, self->block_size_, self->min_block_size_); + if (self->num_blocks_ == 0) { + /* Create first block. */ + split->lengths[0] = (uint32_t)self->block_size_; + split->types[0] = 0; + last_entropy[0] = + BitsEntropy(histograms[0].data_, self->alphabet_size_); + last_entropy[1] = last_entropy[0]; + ++self->num_blocks_; + ++split->num_types; + ++self->curr_histogram_ix_; + if (self->curr_histogram_ix_ < *self->histograms_size_) + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + self->block_size_ = 0; + } else if (self->block_size_ > 0) { + double entropy = BitsEntropy(histograms[self->curr_histogram_ix_].data_, + self->alphabet_size_); + HistogramType combined_histo[2]; + double combined_entropy[2]; + double diff[2]; + size_t j; + for (j = 0; j < 2; ++j) { + size_t last_histogram_ix = self->last_histogram_ix_[j]; + combined_histo[j] = histograms[self->curr_histogram_ix_]; + FN(HistogramAddHistogram)(&combined_histo[j], + &histograms[last_histogram_ix]); + combined_entropy[j] = BitsEntropy( + &combined_histo[j].data_[0], self->alphabet_size_); + diff[j] = combined_entropy[j] - entropy - last_entropy[j]; + } + + if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES && + diff[0] > self->split_threshold_ && + diff[1] > self->split_threshold_) { + /* Create new block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = (uint8_t)split->num_types; + self->last_histogram_ix_[1] = self->last_histogram_ix_[0]; + self->last_histogram_ix_[0] = (uint8_t)split->num_types; + last_entropy[1] = last_entropy[0]; + last_entropy[0] = entropy; + ++self->num_blocks_; + ++split->num_types; + ++self->curr_histogram_ix_; + if (self->curr_histogram_ix_ < *self->histograms_size_) + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + self->block_size_ = 0; + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else if (diff[1] < diff[0] - 20.0) { + /* Combine this block with second last block. */ + split->lengths[self->num_blocks_] = (uint32_t)self->block_size_; + split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2]; + BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1); + histograms[self->last_histogram_ix_[0]] = combined_histo[1]; + last_entropy[1] = last_entropy[0]; + last_entropy[0] = combined_entropy[1]; + ++self->num_blocks_; + self->block_size_ = 0; + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + self->merge_last_count_ = 0; + self->target_block_size_ = self->min_block_size_; + } else { + /* Combine this block with last block. */ + split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_; + histograms[self->last_histogram_ix_[0]] = combined_histo[0]; + last_entropy[0] = combined_entropy[0]; + if (split->num_types == 1) { + last_entropy[1] = last_entropy[0]; + } + self->block_size_ = 0; + FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); + if (++self->merge_last_count_ > 1) { + self->target_block_size_ += self->min_block_size_; + } + } + } + if (is_final) { + *self->histograms_size_ = split->num_types; + split->num_blocks = self->num_blocks_; + } +} + +/* Adds the next symbol to the current histogram. When the current histogram + reaches the target size, decides on merging the block. */ +static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) { + FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol); + ++self->block_size_; + if (self->block_size_ == self->target_block_size_) { + FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE); + } +} + +#undef HistogramType
diff --git a/third_party/brotli/enc/port.h b/third_party/brotli/enc/port.h index e73df63a..0d5f24c 100644 --- a/third_party/brotli/enc/port.h +++ b/third_party/brotli/enc/port.h
@@ -4,14 +4,16 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Macros for endianness, branch prediction and unaligned loads and stores. +/* Macros for endianness, branch prediction and unaligned loads and stores. */ #ifndef BROTLI_ENC_PORT_H_ #define BROTLI_ENC_PORT_H_ #include <assert.h> -#include <string.h> -#include "./types.h" +#include <string.h> /* memcpy */ + +#include <brotli/port.h> +#include <brotli/types.h> #if defined OS_LINUX || defined OS_CYGWIN #include <endian.h> @@ -24,9 +26,9 @@ #define __LITTLE_ENDIAN LITTLE_ENDIAN #endif -// define the macro IS_LITTLE_ENDIAN -// using the above endian definitions from endian.h if -// endian.h was included +/* define the macro IS_LITTLE_ENDIAN + using the above endian definitions from endian.h if + endian.h was included */ #ifdef __BYTE_ORDER #if __BYTE_ORDER == __LITTLE_ENDIAN #define IS_LITTLE_ENDIAN @@ -37,49 +39,36 @@ #if defined(__LITTLE_ENDIAN__) #define IS_LITTLE_ENDIAN #endif -#endif // __BYTE_ORDER +#endif /* __BYTE_ORDER */ #if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) #define IS_LITTLE_ENDIAN #endif -// Enable little-endian optimization for x64 architecture on Windows. +/* Enable little-endian optimization for x64 architecture on Windows. */ #if (defined(_WIN32) || defined(_WIN64)) && defined(_M_X64) #define IS_LITTLE_ENDIAN #endif -/* Compatibility with non-clang compilers. */ -#ifndef __has_builtin -#define __has_builtin(x) 0 -#endif - -#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || \ - (defined(__llvm__) && __has_builtin(__builtin_expect)) -#define PREDICT_FALSE(x) (__builtin_expect(x, 0)) -#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) -#else -#define PREDICT_FALSE(x) (x) -#define PREDICT_TRUE(x) (x) -#endif - -// Portable handling of unaligned loads, stores, and copies. -// On some platforms, like ARM, the copy functions can be more efficient -// then a load and a store. +/* Portable handling of unaligned loads, stores, and copies. + On some platforms, like ARM, the copy functions can be more efficient + then a load and a store. */ #if defined(ARCH_PIII) || \ defined(ARCH_ATHLON) || defined(ARCH_K8) || defined(_ARCH_PPC) -// x86 and x86-64 can perform unaligned loads/stores directly; -// modern PowerPC hardware can also do unaligned integer loads and stores; -// but note: the FPU still sends unaligned loads and stores to a trap handler! +/* x86 and x86-64 can perform unaligned loads/stores directly; + modern PowerPC hardware can also do unaligned integer loads and stores; + but note: the FPU still sends unaligned loads and stores to a trap handler! +*/ -#define BROTLI_UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32_t *>(_p)) -#define BROTLI_UNALIGNED_LOAD64(_p) (*reinterpret_cast<const uint64_t *>(_p)) +#define BROTLI_UNALIGNED_LOAD32(_p) (*(const uint32_t *)(_p)) +#define BROTLI_UNALIGNED_LOAD64(_p) (*(const uint64_t *)(_p)) #define BROTLI_UNALIGNED_STORE32(_p, _val) \ - (*reinterpret_cast<uint32_t *>(_p) = (_val)) + (*(uint32_t *)(_p) = (_val)) #define BROTLI_UNALIGNED_STORE64(_p, _val) \ - (*reinterpret_cast<uint64_t *>(_p) = (_val)) + (*(uint64_t *)(_p) = (_val)) #elif defined(__arm__) && \ !defined(__ARM_ARCH_5__) && \ @@ -93,50 +82,79 @@ !defined(__ARM_ARCH_6ZK__) && \ !defined(__ARM_ARCH_6T2__) -// ARMv7 and newer support native unaligned accesses, but only of 16-bit -// and 32-bit values (not 64-bit); older versions either raise a fatal signal, -// do an unaligned read and rotate the words around a bit, or do the reads very -// slowly (trip through kernel mode). +/* ARMv7 and newer support native unaligned accesses, but only of 16-bit + and 32-bit values (not 64-bit); older versions either raise a fatal signal, + do an unaligned read and rotate the words around a bit, or do the reads very + slowly (trip through kernel mode). */ -#define BROTLI_UNALIGNED_LOAD32(_p) (*reinterpret_cast<const uint32_t *>(_p)) +#define BROTLI_UNALIGNED_LOAD32(_p) (*(const uint32_t *)(_p)) #define BROTLI_UNALIGNED_STORE32(_p, _val) \ - (*reinterpret_cast<uint32_t *>(_p) = (_val)) + (*(uint32_t *)(_p) = (_val)) -inline uint64_t BROTLI_UNALIGNED_LOAD64(const void *p) { +static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64(const void *p) { uint64_t t; memcpy(&t, p, sizeof t); return t; } -inline void BROTLI_UNALIGNED_STORE64(void *p, uint64_t v) { +static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64(void *p, uint64_t v) { memcpy(p, &v, sizeof v); } #else -// These functions are provided for architectures that don't support -// unaligned loads and stores. +/* These functions are provided for architectures that don't support */ +/* unaligned loads and stores. */ -inline uint32_t BROTLI_UNALIGNED_LOAD32(const void *p) { +static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32(const void *p) { uint32_t t; memcpy(&t, p, sizeof t); return t; } -inline uint64_t BROTLI_UNALIGNED_LOAD64(const void *p) { +static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64(const void *p) { uint64_t t; memcpy(&t, p, sizeof t); return t; } -inline void BROTLI_UNALIGNED_STORE32(void *p, uint32_t v) { +static BROTLI_INLINE void BROTLI_UNALIGNED_STORE32(void *p, uint32_t v) { memcpy(p, &v, sizeof v); } -inline void BROTLI_UNALIGNED_STORE64(void *p, uint64_t v) { +static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64(void *p, uint64_t v) { memcpy(p, &v, sizeof v); } #endif -#endif // BROTLI_ENC_PORT_H_ +#define TEMPLATE_(T) \ + static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \ + static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; } +TEMPLATE_(double) TEMPLATE_(float) TEMPLATE_(int) +TEMPLATE_(size_t) TEMPLATE_(uint32_t) TEMPLATE_(uint8_t) +#undef TEMPLATE_ +#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B))) +#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B))) + +#define BROTLI_SWAP(T, A, I, J) { \ + T __brotli_swap_tmp = (A)[(I)]; \ + (A)[(I)] = (A)[(J)]; \ + (A)[(J)] = __brotli_swap_tmp; \ +} + +#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \ + if (C < (R)) { \ + size_t _new_size = (C == 0) ? (R) : C; \ + T* new_array; \ + while (_new_size < (R)) _new_size *= 2; \ + new_array = BROTLI_ALLOC((M), T, _new_size); \ + if (!BROTLI_IS_OOM(m) && C != 0) \ + memcpy(new_array, A, C * sizeof(T)); \ + BROTLI_FREE((M), A); \ + A = new_array; \ + C = _new_size; \ + } \ +} + +#endif /* BROTLI_ENC_PORT_H_ */
diff --git a/third_party/brotli/enc/prefix.h b/third_party/brotli/enc/prefix.h index 86fff8d..e279ffe 100644 --- a/third_party/brotli/enc/prefix.h +++ b/third_party/brotli/enc/prefix.h
@@ -4,76 +4,51 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Functions for encoding of integers into prefix codes the amount of extra -// bits, and the actual values of the extra bits. +/* Functions for encoding of integers into prefix codes the amount of extra + bits, and the actual values of the extra bits. */ #ifndef BROTLI_ENC_PREFIX_H_ #define BROTLI_ENC_PREFIX_H_ +#include "../common/constants.h" +#include <brotli/port.h> +#include <brotli/types.h> #include "./fast_log.h" -#include "./types.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static const uint32_t kNumInsertLenPrefixes = 24; -static const uint32_t kNumCopyLenPrefixes = 24; -static const uint32_t kNumCommandPrefixes = 704; -static const uint32_t kNumBlockLenPrefixes = 26; -static const uint32_t kNumDistanceShortCodes = 16; -static const uint32_t kNumDistancePrefixes = 520; - -// Represents the range of values belonging to a prefix code: -// [offset, offset + 2^nbits) -struct PrefixCodeRange { - uint32_t offset; - uint32_t nbits; -}; - -static const PrefixCodeRange kBlockLengthPrefixCode[kNumBlockLenPrefixes] = { - { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2}, - { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3}, - { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4}, - { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5}, - { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, - { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12}, - {8433, 13}, {16625, 24} -}; - -inline void GetBlockLengthPrefixCode(uint32_t len, uint32_t* code, - uint32_t* n_extra, uint32_t* extra) { - *code = 0; - while (*code < 25 && len >= kBlockLengthPrefixCode[*code + 1].offset) { - ++(*code); - } - *n_extra = kBlockLengthPrefixCode[*code].nbits; - *extra = len - kBlockLengthPrefixCode[*code].offset; -} - -inline void PrefixEncodeCopyDistance(size_t distance_code, - size_t num_direct_codes, - size_t postfix_bits, - uint16_t* code, - uint32_t* extra_bits) { - if (distance_code < kNumDistanceShortCodes + num_direct_codes) { - *code = static_cast<uint16_t>(distance_code); +/* Here distance_code is an intermediate code, i.e. one of the special codes or + the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */ +static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code, + size_t num_direct_codes, + size_t postfix_bits, + uint16_t* code, + uint32_t* extra_bits) { + if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) { + *code = (uint16_t)distance_code; *extra_bits = 0; return; + } else { + size_t dist = ((size_t)1 << (postfix_bits + 2u)) + + (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes); + size_t bucket = Log2FloorNonZero(dist) - 1; + size_t postfix_mask = (1u << postfix_bits) - 1; + size_t postfix = dist & postfix_mask; + size_t prefix = (dist >> bucket) & 1; + size_t offset = (2 + prefix) << bucket; + size_t nbits = bucket - postfix_bits; + *code = (uint16_t)( + (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes + + ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix)); + *extra_bits = (uint32_t)( + (nbits << 24) | ((dist - offset) >> postfix_bits)); } - distance_code -= kNumDistanceShortCodes + num_direct_codes; /* >= 0 */ - distance_code += (1u << (postfix_bits + 2u)); /* > 0 */ - size_t bucket = Log2FloorNonZero(distance_code) - 1; - size_t postfix_mask = (1 << postfix_bits) - 1; - size_t postfix = distance_code & postfix_mask; - size_t prefix = (distance_code >> bucket) & 1; - size_t offset = (2 + prefix) << bucket; - size_t nbits = bucket - postfix_bits; - *code = static_cast<uint16_t>( - (kNumDistanceShortCodes + num_direct_codes + - ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix)); - *extra_bits = static_cast<uint32_t>( - (nbits << 24) | ((distance_code - offset) >> postfix_bits)); } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_PREFIX_H_ +#endif /* BROTLI_ENC_PREFIX_H_ */
diff --git a/third_party/brotli/enc/quality.h b/third_party/brotli/enc/quality.h new file mode 100644 index 0000000..6dade072 --- /dev/null +++ b/third_party/brotli/enc/quality.h
@@ -0,0 +1,134 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Constants and formulas that affect speed-ratio trade-offs and thus define + quality levels. */ + +#ifndef BROTLI_ENC_QUALITY_H_ +#define BROTLI_ENC_QUALITY_H_ + +#include <brotli/encode.h> + +#define FAST_ONE_PASS_COMPRESSION_QUALITY 0 +#define FAST_TWO_PASS_COMPRESSION_QUALITY 1 +#define ZOPFLIFICATION_QUALITY 10 +#define HQ_ZOPFLIFICATION_QUALITY 11 + +#define MAX_QUALITY_FOR_STATIC_ENRTOPY_CODES 2 +#define MIN_QUALITY_FOR_BLOCK_SPLIT 4 +#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4 +#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5 +#define MIN_QUALITY_FOR_CONTEXT_MODELING 5 +#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7 +#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10 +/* Only for "font" mode. */ +#define MIN_QUALITY_FOR_RECOMPUTE_DISTANCE_PREFIXES 10 + +/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting, + so we buffer at most this much literals and commands. */ +#define MAX_NUM_DELAYED_SYMBOLS 0x2fff + +/* Encoding parameters */ +typedef struct BrotliEncoderParams { + BrotliEncoderMode mode; + int quality; + int lgwin; + int lgblock; +} BrotliEncoderParams; + +/* Returns hash-table size for quality levels 0 and 1. */ +static BROTLI_INLINE size_t MaxHashTableSize(int quality) { + return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17; +} + +/* The maximum length for which the zopflification uses distinct distances. */ +#define MAX_ZOPFLI_LEN_QUALITY_10 150 +#define MAX_ZOPFLI_LEN_QUALITY_11 325 + +/* Do not thoroughly search when a long copy is found. */ +#define BROTLI_LONG_COPY_QUICK_STEP 16384 + +static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) { + return params->quality <= 10 ? + MAX_ZOPFLI_LEN_QUALITY_10 : + MAX_ZOPFLI_LEN_QUALITY_11; +} + +/* Number of best candidates to evaluate to expand Zopfli chain. */ +static BROTLI_INLINE size_t MaxZopfliCandidates( + const BrotliEncoderParams* params) { + return params->quality <= 10 ? 1 : 5; +} + +static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) { + params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY, + BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality)); + if (params->lgwin < BROTLI_MIN_WINDOW_BITS) { + params->lgwin = BROTLI_MIN_WINDOW_BITS; + } else if (params->lgwin > BROTLI_MAX_WINDOW_BITS) { + params->lgwin = BROTLI_MAX_WINDOW_BITS; + } +} + +/* Returns optimized lg_block value. */ +static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) { + int lgblock = params->lgblock; + if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY || + params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { + lgblock = params->lgwin; + } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) { + lgblock = 14; + } else if (lgblock == 0) { + lgblock = 16; + if (params->quality >= 9 && params->lgwin > lgblock) { + lgblock = BROTLI_MIN(int, 18, params->lgwin); + } + } else { + lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS, + BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock)); + } + return lgblock; +} + +/* Returns log2 of the size of main ring buffer area. + Allocate at least lgwin + 1 bits for the ring buffer so that the newly + added block fits there completely and we still get lgwin bits and at least + read_block_size_bits + 1 bits because the copy tail length needs to be + smaller than ring-buffer size. */ +static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) { + return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock); +} + +static BROTLI_INLINE size_t MaxMetablockSize( + const BrotliEncoderParams* params) { + int bits = + BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS); + return (size_t)1 << bits; +} + +/* When searching for backward references and have not seen matches for a long + time, we can skip some match lookups. Unsuccessful match lookups are very + expensive and this kind of a heuristic speeds up compression quite a lot. + At first 8 byte strides are taken and every second byte is put to hasher. + After 4x more literals stride by 16 bytes, every put 4-th byte to hasher. + Applied only to qualities 2 to 9. */ +static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch( + const BrotliEncoderParams* params) { + return params->quality < 9 ? 64 : 512; +} + +static BROTLI_INLINE int ChooseHasher(const BrotliEncoderParams* params) { + if (params->quality > 9) { + return 10; + } else if (params->quality < 5) { + return params->quality; + } else if (params->lgwin <= 16) { + return params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42; + } + return params->quality; +} + +#endif /* BROTLI_ENC_QUALITY_H_ */
diff --git a/third_party/brotli/enc/ringbuffer.h b/third_party/brotli/enc/ringbuffer.h index 13e1b836..0e7ef97 100644 --- a/third_party/brotli/enc/ringbuffer.h +++ b/third_party/brotli/enc/ringbuffer.h
@@ -4,142 +4,157 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Sliding window over the input data. +/* Sliding window over the input data. */ #ifndef BROTLI_ENC_RINGBUFFER_H_ #define BROTLI_ENC_RINGBUFFER_H_ -#include <cstdlib> /* free, realloc */ +#include <string.h> /* memcpy */ +#include <brotli/types.h> +#include "./memory.h" #include "./port.h" -#include "./types.h" +#include "./quality.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -// A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of -// data in a circular manner: writing a byte writes it to: -// `position() % (1 << window_bits)'. -// For convenience, the RingBuffer array contains another copy of the -// first `1 << tail_bits' bytes: -// buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits), -// and another copy of the last two bytes: -// buffer_[-1] == buffer_[(1 << window_bits) - 1] and -// buffer_[-2] == buffer_[(1 << window_bits) - 2]. -class RingBuffer { - public: - RingBuffer(int window_bits, int tail_bits) - : size_(1u << window_bits), - mask_((1u << window_bits) - 1), - tail_size_(1u << tail_bits), - total_size_(size_ + tail_size_), - cur_size_(0), - pos_(0), - data_(0), - buffer_(0) {} - - ~RingBuffer(void) { - free(data_); - } - - // Allocates or re-allocates data_ to the given length + plus some slack - // region before and after. Fills the slack regions with zeros. - inline void InitBuffer(const uint32_t buflen) { - static const size_t kSlackForEightByteHashingEverywhere = 7; - cur_size_ = buflen; - data_ = static_cast<uint8_t*>(realloc( - data_, 2 + buflen + kSlackForEightByteHashingEverywhere)); - buffer_ = data_ + 2; - buffer_[-2] = buffer_[-1] = 0; - for (size_t i = 0; i < kSlackForEightByteHashingEverywhere; ++i) { - buffer_[cur_size_ + i] = 0; - } - } - - // Push bytes into the ring buffer. - void Write(const uint8_t *bytes, size_t n) { - if (pos_ == 0 && n < tail_size_) { - // Special case for the first write: to process the first block, we don't - // need to allocate the whole ringbuffer and we don't need the tail - // either. However, we do this memory usage optimization only if the - // first write is less than the tail size, which is also the input block - // size, otherwise it is likely that other blocks will follow and we - // will need to reallocate to the full size anyway. - pos_ = static_cast<uint32_t>(n); - InitBuffer(pos_); - memcpy(buffer_, bytes, n); - return; - } - if (cur_size_ < total_size_) { - // Lazily allocate the full buffer. - InitBuffer(total_size_); - // Initialize the last two bytes to zero, so that we don't have to worry - // later when we copy the last two bytes to the first two positions. - buffer_[size_ - 2] = 0; - buffer_[size_ - 1] = 0; - } - const size_t masked_pos = pos_ & mask_; - // The length of the writes is limited so that we do not need to worry - // about a write - WriteTail(bytes, n); - if (PREDICT_TRUE(masked_pos + n <= size_)) { - // A single write fits. - memcpy(&buffer_[masked_pos], bytes, n); - } else { - // Split into two writes. - // Copy into the end of the buffer, including the tail buffer. - memcpy(&buffer_[masked_pos], bytes, - std::min(n, total_size_ - masked_pos)); - // Copy into the beginning of the buffer - memcpy(&buffer_[0], bytes + (size_ - masked_pos), - n - (size_ - masked_pos)); - } - buffer_[-2] = buffer_[size_ - 2]; - buffer_[-1] = buffer_[size_ - 1]; - pos_ += static_cast<uint32_t>(n); - if (pos_ > (1u << 30)) { /* Wrap, but preserve not-a-first-lap feature. */ - pos_ = (pos_ & ((1u << 30) - 1)) | (1u << 30); - } - } - - void Reset(void) { - pos_ = 0; - } - - // Logical cursor position in the ring buffer. - uint32_t position(void) const { return pos_; } - - // Bit mask for getting the physical position for a logical position. - uint32_t mask(void) const { return mask_; } - - uint8_t *start(void) { return &buffer_[0]; } - const uint8_t *start(void) const { return &buffer_[0]; } - - private: - void WriteTail(const uint8_t *bytes, size_t n) { - const size_t masked_pos = pos_ & mask_; - if (PREDICT_FALSE(masked_pos < tail_size_)) { - // Just fill the tail buffer with the beginning data. - const size_t p = size_ + masked_pos; - memcpy(&buffer_[p], bytes, std::min(n, tail_size_ - masked_pos)); - } - } - - // Size of the ringbuffer is (1 << window_bits) + tail_size_. +/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of + data in a circular manner: writing a byte writes it to: + `position() % (1 << window_bits)'. + For convenience, the RingBuffer array contains another copy of the + first `1 << tail_bits' bytes: + buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits), + and another copy of the last two bytes: + buffer_[-1] == buffer_[(1 << window_bits) - 1] and + buffer_[-2] == buffer_[(1 << window_bits) - 2]. */ +typedef struct RingBuffer { + /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */ const uint32_t size_; const uint32_t mask_; const uint32_t tail_size_; const uint32_t total_size_; uint32_t cur_size_; - // Position to write in the ring buffer. + /* Position to write in the ring buffer. */ uint32_t pos_; - // The actual ring buffer containing the copy of the last two bytes, the data, - // and the copy of the beginning as a tail. + /* The actual ring buffer containing the copy of the last two bytes, the data, + and the copy of the beginning as a tail. */ uint8_t *data_; - // The start of the ringbuffer. + /* The start of the ring-buffer. */ uint8_t *buffer_; -}; +} RingBuffer; -} // namespace brotli +static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) { + rb->cur_size_ = 0; + rb->pos_ = 0; + rb->data_ = 0; + rb->buffer_ = 0; +} -#endif // BROTLI_ENC_RINGBUFFER_H_ +static BROTLI_INLINE void RingBufferSetup( + const BrotliEncoderParams* params, RingBuffer* rb) { + int window_bits = ComputeRbBits(params); + int tail_bits = params->lgblock; + *(uint32_t*)&rb->size_ = 1u << window_bits; + *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1; + *(uint32_t*)&rb->tail_size_ = 1u << tail_bits; + *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_; +} + +static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) { + BROTLI_FREE(m, rb->data_); +} + +/* Allocates or re-allocates data_ to the given length + plus some slack + region before and after. Fills the slack regions with zeros. */ +static BROTLI_INLINE void RingBufferInitBuffer( + MemoryManager* m, const uint32_t buflen, RingBuffer* rb) { + static const size_t kSlackForEightByteHashingEverywhere = 7; + uint8_t* new_data = BROTLI_ALLOC( + m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere); + size_t i; + if (BROTLI_IS_OOM(m)) return; + if (rb->data_) { + memcpy(new_data, rb->data_, + 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere); + BROTLI_FREE(m, rb->data_); + } + rb->data_ = new_data; + rb->cur_size_ = buflen; + rb->buffer_ = rb->data_ + 2; + rb->buffer_[-2] = rb->buffer_[-1] = 0; + for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) { + rb->buffer_[rb->cur_size_ + i] = 0; + } +} + +static BROTLI_INLINE void RingBufferWriteTail( + const uint8_t *bytes, size_t n, RingBuffer* rb) { + const size_t masked_pos = rb->pos_ & rb->mask_; + if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) { + /* Just fill the tail buffer with the beginning data. */ + const size_t p = rb->size_ + masked_pos; + memcpy(&rb->buffer_[p], bytes, + BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos)); + } +} + +/* Push bytes into the ring buffer. */ +static BROTLI_INLINE void RingBufferWrite( + MemoryManager* m, const uint8_t *bytes, size_t n, RingBuffer* rb) { + if (rb->pos_ == 0 && n < rb->tail_size_) { + /* Special case for the first write: to process the first block, we don't + need to allocate the whole ring-buffer and we don't need the tail + either. However, we do this memory usage optimization only if the + first write is less than the tail size, which is also the input block + size, otherwise it is likely that other blocks will follow and we + will need to reallocate to the full size anyway. */ + rb->pos_ = (uint32_t)n; + RingBufferInitBuffer(m, rb->pos_, rb); + if (BROTLI_IS_OOM(m)) return; + memcpy(rb->buffer_, bytes, n); + return; + } + if (rb->cur_size_ < rb->total_size_) { + /* Lazily allocate the full buffer. */ + RingBufferInitBuffer(m, rb->total_size_, rb); + if (BROTLI_IS_OOM(m)) return; + /* Initialize the last two bytes to zero, so that we don't have to worry + later when we copy the last two bytes to the first two positions. */ + rb->buffer_[rb->size_ - 2] = 0; + rb->buffer_[rb->size_ - 1] = 0; + } + { + const size_t masked_pos = rb->pos_ & rb->mask_; + /* The length of the writes is limited so that we do not need to worry + about a write */ + RingBufferWriteTail(bytes, n, rb); + if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) { + /* A single write fits. */ + memcpy(&rb->buffer_[masked_pos], bytes, n); + } else { + /* Split into two writes. + Copy into the end of the buffer, including the tail buffer. */ + memcpy(&rb->buffer_[masked_pos], bytes, + BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos)); + /* Copy into the beginning of the buffer */ + memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos), + n - (rb->size_ - masked_pos)); + } + } + rb->buffer_[-2] = rb->buffer_[rb->size_ - 2]; + rb->buffer_[-1] = rb->buffer_[rb->size_ - 1]; + rb->pos_ += (uint32_t)n; + if (rb->pos_ > (1u << 30)) { + /* Wrap, but preserve not-a-first-lap feature. */ + rb->pos_ = (rb->pos_ & ((1u << 30) - 1)) | (1u << 30); + } +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_RINGBUFFER_H_ */
diff --git a/third_party/brotli/enc/static_dict.c b/third_party/brotli/enc/static_dict.c new file mode 100644 index 0000000..edfaa84b --- /dev/null +++ b/third_party/brotli/enc/static_dict.c
@@ -0,0 +1,478 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#include "./static_dict.h" + +#include "../common/dictionary.h" +#include "./find_match_length.h" +#include "./port.h" +#include "./static_dict_lut.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +static const uint8_t kUppercaseFirst = 10; +static const uint8_t kOmitLastNTransforms[10] = { + 0, 12, 27, 23, 42, 63, 56, 48, 59, 64, +}; + +static BROTLI_INLINE uint32_t Hash(const uint8_t *data) { + uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kDictHashMul32; + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - kDictNumBits); +} + +static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code, + uint32_t* matches) { + uint32_t match = (uint32_t)((distance << 5) + len_code); + matches[len] = BROTLI_MIN(uint32_t, matches[len], match); +} + +static BROTLI_INLINE size_t DictMatchLength(const uint8_t* data, + size_t id, + size_t len, + size_t maxlen) { + const size_t offset = kBrotliDictionaryOffsetsByLength[len] + len * id; + return FindMatchLengthWithLimit(&kBrotliDictionary[offset], data, + BROTLI_MIN(size_t, len, maxlen)); +} + +static BROTLI_INLINE BROTLI_BOOL IsMatch( + DictWord w, const uint8_t* data, size_t max_length) { + if (w.len > max_length) { + return BROTLI_FALSE; + } else { + const size_t offset = kBrotliDictionaryOffsetsByLength[w.len] + + (size_t)w.len * (size_t)w.idx; + const uint8_t* dict = &kBrotliDictionary[offset]; + if (w.transform == 0) { + /* Match against base dictionary word. */ + return + TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len); + } else if (w.transform == 10) { + /* Match against uppercase first transform. + Note that there are only ASCII uppercase words in the lookup table. */ + return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' && + (dict[0] ^ 32) == data[0] && + FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) == + w.len - 1u); + } else { + /* Match against uppercase all transform. + Note that there are only ASCII uppercase words in the lookup table. */ + size_t i; + for (i = 0; i < w.len; ++i) { + if (dict[i] >= 'a' && dict[i] <= 'z') { + if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE; + } else { + if (dict[i] != data[i]) return BROTLI_FALSE; + } + } + return BROTLI_TRUE; + } + } +} + +BROTLI_BOOL BrotliFindAllStaticDictionaryMatches( + const uint8_t* data, size_t min_length, size_t max_length, + uint32_t* matches) { + BROTLI_BOOL has_found_match = BROTLI_FALSE; + { + size_t offset = kStaticDictionaryBuckets[Hash(data)]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x7F; + const size_t n = (size_t)1 << kBrotliDictionarySizeBitsByLength[l]; + const size_t id = w.idx; + end = !!(w.len & 0x80); + w.len = (uint8_t)l; + if (w.transform == 0) { + const size_t matchlen = DictMatchLength(data, id, l, max_length); + const uint8_t* s; + size_t minlen; + size_t maxlen; + size_t len; + /* Transform "" + kIdentity + "" */ + if (matchlen == l) { + AddMatch(id, l, l, matches); + has_found_match = BROTLI_TRUE; + } + /* Transforms "" + kOmitLast1 + "" and "" + kOmitLast1 + "ing " */ + if (matchlen >= l - 1) { + AddMatch(id + 12 * n, l - 1, l, matches); + if (l + 2 < max_length && + data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' && + data[l + 2] == ' ') { + AddMatch(id + 49 * n, l + 3, l, matches); + } + has_found_match = BROTLI_TRUE; + } + /* Transform "" + kOmitLastN + "" (N = 2 .. 9) */ + minlen = min_length; + if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9); + maxlen = BROTLI_MIN(size_t, matchlen, l - 2); + for (len = minlen; len <= maxlen; ++len) { + AddMatch(id + kOmitLastNTransforms[l - len] * n, len, l, matches); + has_found_match = BROTLI_TRUE; + } + if (matchlen < l || l + 6 >= max_length) { + continue; + } + s = &data[l]; + /* Transforms "" + kIdentity + <suffix> */ + if (s[0] == ' ') { + AddMatch(id + n, l + 1, l, matches); + if (s[1] == 'a') { + if (s[2] == ' ') { + AddMatch(id + 28 * n, l + 3, l, matches); + } else if (s[2] == 's') { + if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches); + } else if (s[2] == 't') { + if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches); + } else if (s[2] == 'n') { + if (s[3] == 'd' && s[4] == ' ') { + AddMatch(id + 10 * n, l + 5, l, matches); + } + } + } else if (s[1] == 'b') { + if (s[2] == 'y' && s[3] == ' ') { + AddMatch(id + 38 * n, l + 4, l, matches); + } + } else if (s[1] == 'i') { + if (s[2] == 'n') { + if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches); + } else if (s[2] == 's') { + if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches); + } + } else if (s[1] == 'f') { + if (s[2] == 'o') { + if (s[3] == 'r' && s[4] == ' ') { + AddMatch(id + 25 * n, l + 5, l, matches); + } + } else if (s[2] == 'r') { + if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') { + AddMatch(id + 37 * n, l + 6, l, matches); + } + } + } else if (s[1] == 'o') { + if (s[2] == 'f') { + if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches); + } else if (s[2] == 'n') { + if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches); + } + } else if (s[1] == 'n') { + if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') { + AddMatch(id + 80 * n, l + 5, l, matches); + } + } else if (s[1] == 't') { + if (s[2] == 'h') { + if (s[3] == 'e') { + if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches); + } else if (s[3] == 'a') { + if (s[4] == 't' && s[5] == ' ') { + AddMatch(id + 29 * n, l + 6, l, matches); + } + } + } else if (s[2] == 'o') { + if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches); + } + } else if (s[1] == 'w') { + if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') { + AddMatch(id + 35 * n, l + 6, l, matches); + } + } + } else if (s[0] == '"') { + AddMatch(id + 19 * n, l + 1, l, matches); + if (s[1] == '>') { + AddMatch(id + 21 * n, l + 2, l, matches); + } + } else if (s[0] == '.') { + AddMatch(id + 20 * n, l + 1, l, matches); + if (s[1] == ' ') { + AddMatch(id + 31 * n, l + 2, l, matches); + if (s[2] == 'T' && s[3] == 'h') { + if (s[4] == 'e') { + if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches); + } else if (s[4] == 'i') { + if (s[5] == 's' && s[6] == ' ') { + AddMatch(id + 75 * n, l + 7, l, matches); + } + } + } + } + } else if (s[0] == ',') { + AddMatch(id + 76 * n, l + 1, l, matches); + if (s[1] == ' ') { + AddMatch(id + 14 * n, l + 2, l, matches); + } + } else if (s[0] == '\n') { + AddMatch(id + 22 * n, l + 1, l, matches); + if (s[1] == '\t') { + AddMatch(id + 50 * n, l + 2, l, matches); + } + } else if (s[0] == ']') { + AddMatch(id + 24 * n, l + 1, l, matches); + } else if (s[0] == '\'') { + AddMatch(id + 36 * n, l + 1, l, matches); + } else if (s[0] == ':') { + AddMatch(id + 51 * n, l + 1, l, matches); + } else if (s[0] == '(') { + AddMatch(id + 57 * n, l + 1, l, matches); + } else if (s[0] == '=') { + if (s[1] == '"') { + AddMatch(id + 70 * n, l + 2, l, matches); + } else if (s[1] == '\'') { + AddMatch(id + 86 * n, l + 2, l, matches); + } + } else if (s[0] == 'a') { + if (s[1] == 'l' && s[2] == ' ') { + AddMatch(id + 84 * n, l + 3, l, matches); + } + } else if (s[0] == 'e') { + if (s[1] == 'd') { + if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches); + } else if (s[1] == 'r') { + if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches); + } else if (s[1] == 's') { + if (s[2] == 't' && s[3] == ' ') { + AddMatch(id + 95 * n, l + 4, l, matches); + } + } + } else if (s[0] == 'f') { + if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') { + AddMatch(id + 90 * n, l + 4, l, matches); + } + } else if (s[0] == 'i') { + if (s[1] == 'v') { + if (s[2] == 'e' && s[3] == ' ') { + AddMatch(id + 92 * n, l + 4, l, matches); + } + } else if (s[1] == 'z') { + if (s[2] == 'e' && s[3] == ' ') { + AddMatch(id + 100 * n, l + 4, l, matches); + } + } + } else if (s[0] == 'l') { + if (s[1] == 'e') { + if (s[2] == 's' && s[3] == 's' && s[4] == ' ') { + AddMatch(id + 93 * n, l + 5, l, matches); + } + } else if (s[1] == 'y') { + if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches); + } + } else if (s[0] == 'o') { + if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') { + AddMatch(id + 106 * n, l + 4, l, matches); + } + } + } else { + /* Set is_all_caps=0 for kUppercaseFirst and + is_all_caps=1 otherwise (kUppercaseAll) transform. */ + const BROTLI_BOOL is_all_caps = + TO_BROTLI_BOOL(w.transform != kUppercaseFirst); + const uint8_t* s; + if (!IsMatch(w, data, max_length)) { + continue; + } + /* Transform "" + kUppercase{First,All} + "" */ + AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches); + has_found_match = BROTLI_TRUE; + if (l + 1 >= max_length) { + continue; + } + /* Transforms "" + kUppercase{First,All} + <suffix> */ + s = &data[l]; + if (s[0] == ' ') { + AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches); + } else if (s[0] == '"') { + AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches); + if (s[1] == '>') { + AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches); + } + } else if (s[0] == '.') { + AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches); + if (s[1] == ' ') { + AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches); + } + } else if (s[0] == ',') { + AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches); + if (s[1] == ' ') { + AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches); + } + } else if (s[0] == '\'') { + AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches); + } else if (s[0] == '(') { + AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches); + } else if (s[0] == '=') { + if (s[1] == '"') { + AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches); + } else if (s[1] == '\'') { + AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches); + } + } + } + } + } + /* Transforms with prefixes " " and "." */ + if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) { + BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' '); + size_t offset = kStaticDictionaryBuckets[Hash(&data[1])]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x7F; + const size_t n = (size_t)1 << kBrotliDictionarySizeBitsByLength[l]; + const size_t id = w.idx; + end = !!(w.len & 0x80); + w.len = (uint8_t)l; + if (w.transform == 0) { + const uint8_t* s; + if (!IsMatch(w, &data[1], max_length - 1)) { + continue; + } + /* Transforms " " + kIdentity + "" and "." + kIdentity + "" */ + AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches); + has_found_match = BROTLI_TRUE; + if (l + 2 >= max_length) { + continue; + } + /* Transforms " " + kIdentity + <suffix> and "." + kIdentity + <suffix> + */ + s = &data[l + 1]; + if (s[0] == ' ') { + AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches); + } else if (s[0] == '(') { + AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches); + } else if (is_space) { + if (s[0] == ',') { + AddMatch(id + 103 * n, l + 2, l, matches); + if (s[1] == ' ') { + AddMatch(id + 33 * n, l + 3, l, matches); + } + } else if (s[0] == '.') { + AddMatch(id + 71 * n, l + 2, l, matches); + if (s[1] == ' ') { + AddMatch(id + 52 * n, l + 3, l, matches); + } + } else if (s[0] == '=') { + if (s[1] == '"') { + AddMatch(id + 81 * n, l + 3, l, matches); + } else if (s[1] == '\'') { + AddMatch(id + 98 * n, l + 3, l, matches); + } + } + } + } else if (is_space) { + /* Set is_all_caps=0 for kUppercaseFirst and + is_all_caps=1 otherwise (kUppercaseAll) transform. */ + const BROTLI_BOOL is_all_caps = + TO_BROTLI_BOOL(w.transform != kUppercaseFirst); + const uint8_t* s; + if (!IsMatch(w, &data[1], max_length - 1)) { + continue; + } + /* Transforms " " + kUppercase{First,All} + "" */ + AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches); + has_found_match = BROTLI_TRUE; + if (l + 2 >= max_length) { + continue; + } + /* Transforms " " + kUppercase{First,All} + <suffix> */ + s = &data[l + 1]; + if (s[0] == ' ') { + AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches); + } else if (s[0] == ',') { + if (!is_all_caps) { + AddMatch(id + 109 * n, l + 2, l, matches); + } + if (s[1] == ' ') { + AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches); + } + } else if (s[0] == '.') { + AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches); + if (s[1] == ' ') { + AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches); + } + } else if (s[0] == '=') { + if (s[1] == '"') { + AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches); + } else if (s[1] == '\'') { + AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches); + } + } + } + } + } + if (max_length >= 6) { + /* Transforms with prefixes "e ", "s ", ", " and "\xc2\xa0" */ + if ((data[1] == ' ' && + (data[0] == 'e' || data[0] == 's' || data[0] == ',')) || + (data[0] == 0xc2 && data[1] == 0xa0)) { + size_t offset = kStaticDictionaryBuckets[Hash(&data[2])]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x7F; + const size_t n = (size_t)1 << kBrotliDictionarySizeBitsByLength[l]; + const size_t id = w.idx; + end = !!(w.len & 0x80); + w.len = (uint8_t)l; + if (w.transform == 0 && IsMatch(w, &data[2], max_length - 2)) { + if (data[0] == 0xc2) { + AddMatch(id + 102 * n, l + 2, l, matches); + has_found_match = BROTLI_TRUE; + } else if (l + 2 < max_length && data[l + 2] == ' ') { + size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13); + AddMatch(id + t * n, l + 3, l, matches); + has_found_match = BROTLI_TRUE; + } + } + } + } + } + if (max_length >= 9) { + /* Transforms with prefixes " the " and ".com/" */ + if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' && + data[3] == 'e' && data[4] == ' ') || + (data[0] == '.' && data[1] == 'c' && data[2] == 'o' && + data[3] == 'm' && data[4] == '/')) { + size_t offset = kStaticDictionaryBuckets[Hash(&data[5])]; + BROTLI_BOOL end = !offset; + while (!end) { + DictWord w = kStaticDictionaryWords[offset++]; + const size_t l = w.len & 0x7F; + const size_t n = (size_t)1 << kBrotliDictionarySizeBitsByLength[l]; + const size_t id = w.idx; + end = !!(w.len & 0x80); + w.len = (uint8_t)l; + if (w.transform == 0 && IsMatch(w, &data[5], max_length - 5)) { + AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches); + has_found_match = BROTLI_TRUE; + if (l + 5 < max_length) { + const uint8_t* s = &data[l + 5]; + if (data[0] == ' ') { + if (l + 8 < max_length && + s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') { + AddMatch(id + 62 * n, l + 9, l, matches); + if (l + 12 < max_length && + s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') { + AddMatch(id + 73 * n, l + 13, l, matches); + } + } + } + } + } + } + } + } + return has_found_match; +} + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/static_dict.cc b/third_party/brotli/enc/static_dict.cc deleted file mode 100644 index 27177b1..0000000 --- a/third_party/brotli/enc/static_dict.cc +++ /dev/null
@@ -1,455 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -#include "./static_dict.h" - -#include <algorithm> - -#include "./dictionary.h" -#include "./find_match_length.h" -#include "./static_dict_lut.h" -#include "./transform.h" - -namespace brotli { - -inline uint32_t Hash(const uint8_t *data) { - uint32_t h = BROTLI_UNALIGNED_LOAD32(data) * kDictHashMul32; - // The higher bits contain more mixture from the multiplication, - // so we take our results from there. - return h >> (32 - kDictNumBits); -} - -inline void AddMatch(size_t distance, size_t len, size_t len_code, - uint32_t* matches) { - uint32_t match = static_cast<uint32_t>((distance << 5) + len_code); - matches[len] = std::min(matches[len], match); -} - -inline size_t DictMatchLength(const uint8_t* data, - size_t id, - size_t len, - size_t maxlen) { - const size_t offset = kBrotliDictionaryOffsetsByLength[len] + len * id; - return FindMatchLengthWithLimit(&kBrotliDictionary[offset], data, - std::min(len, maxlen)); -} - -inline bool IsMatch(DictWord w, const uint8_t* data, size_t max_length) { - if (w.len > max_length) return false; - const size_t offset = kBrotliDictionaryOffsetsByLength[w.len] + w.len * w.idx; - const uint8_t* dict = &kBrotliDictionary[offset]; - if (w.transform == 0) { - // Match against base dictionary word. - return FindMatchLengthWithLimit(dict, data, w.len) == w.len; - } else if (w.transform == 10) { - // Match against uppercase first transform. - // Note that there are only ASCII uppercase words in the lookup table. - return (dict[0] >= 'a' && dict[0] <= 'z' && - (dict[0] ^ 32) == data[0] && - FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) == - w.len - 1u); - } else { - // Match against uppercase all transform. - // Note that there are only ASCII uppercase words in the lookup table. - for (size_t i = 0; i < w.len; ++i) { - if (dict[i] >= 'a' && dict[i] <= 'z') { - if ((dict[i] ^ 32) != data[i]) return false; - } else { - if (dict[i] != data[i]) return false; - } - } - return true; - } -} - -bool FindAllStaticDictionaryMatches(const uint8_t* data, - size_t min_length, - size_t max_length, - uint32_t* matches) { - bool found_match = false; - size_t key = Hash(data); - size_t bucket = kStaticDictionaryBuckets[key]; - if (bucket != 0) { - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; - const size_t id = w.idx; - if (w.transform == 0) { - const size_t matchlen = DictMatchLength(data, id, l, max_length); - // Transform "" + kIdentity + "" - if (matchlen == l) { - AddMatch(id, l, l, matches); - found_match = true; - } - // Transforms "" + kOmitLast1 + "" and "" + kOmitLast1 + "ing " - if (matchlen >= l - 1) { - AddMatch(id + 12 * n, l - 1, l, matches); - if (l + 2 < max_length && - data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' && - data[l + 2] == ' ') { - AddMatch(id + 49 * n, l + 3, l, matches); - } - found_match = true; - } - // Transform "" + kOmitLastN + "" (N = 2 .. 9) - size_t minlen = min_length; - if (l > 9) minlen = std::max(minlen, l - 9); - size_t maxlen = std::min(matchlen, l - 2); - for (size_t len = minlen; len <= maxlen; ++len) { - AddMatch(id + kOmitLastNTransforms[l - len] * n, len, l, matches); - found_match = true; - } - if (matchlen < l || l + 6 >= max_length) { - continue; - } - const uint8_t* s = &data[l]; - // Transforms "" + kIdentity + <suffix> - if (s[0] == ' ') { - AddMatch(id + n, l + 1, l, matches); - if (s[1] == 'a') { - if (s[2] == ' ') { - AddMatch(id + 28 * n, l + 3, l, matches); - } else if (s[2] == 's') { - if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches); - } else if (s[2] == 't') { - if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches); - } else if (s[2] == 'n') { - if (s[3] == 'd' && s[4] == ' ') { - AddMatch(id + 10 * n, l + 5, l, matches); - } - } - } else if (s[1] == 'b') { - if (s[2] == 'y' && s[3] == ' ') { - AddMatch(id + 38 * n, l + 4, l, matches); - } - } else if (s[1] == 'i') { - if (s[2] == 'n') { - if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches); - } else if (s[2] == 's') { - if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches); - } - } else if (s[1] == 'f') { - if (s[2] == 'o') { - if (s[3] == 'r' && s[4] == ' ') { - AddMatch(id + 25 * n, l + 5, l, matches); - } - } else if (s[2] == 'r') { - if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') { - AddMatch(id + 37 * n, l + 6, l, matches); - } - } - } else if (s[1] == 'o') { - if (s[2] == 'f') { - if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches); - } else if (s[2] == 'n') { - if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches); - } - } else if (s[1] == 'n') { - if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') { - AddMatch(id + 80 * n, l + 5, l, matches); - } - } else if (s[1] == 't') { - if (s[2] == 'h') { - if (s[3] == 'e') { - if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches); - } else if (s[3] == 'a') { - if (s[4] == 't' && s[5] == ' ') { - AddMatch(id + 29 * n, l + 6, l, matches); - } - } - } else if (s[2] == 'o') { - if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches); - } - } else if (s[1] == 'w') { - if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') { - AddMatch(id + 35 * n, l + 6, l, matches); - } - } - } else if (s[0] == '"') { - AddMatch(id + 19 * n, l + 1, l, matches); - if (s[1] == '>') { - AddMatch(id + 21 * n, l + 2, l, matches); - } - } else if (s[0] == '.') { - AddMatch(id + 20 * n, l + 1, l, matches); - if (s[1] == ' ') { - AddMatch(id + 31 * n, l + 2, l, matches); - if (s[2] == 'T' && s[3] == 'h') { - if (s[4] == 'e') { - if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches); - } else if (s[4] == 'i') { - if (s[5] == 's' && s[6] == ' ') { - AddMatch(id + 75 * n, l + 7, l, matches); - } - } - } - } - } else if (s[0] == ',') { - AddMatch(id + 76 * n, l + 1, l, matches); - if (s[1] == ' ') { - AddMatch(id + 14 * n, l + 2, l, matches); - } - } else if (s[0] == '\n') { - AddMatch(id + 22 * n, l + 1, l, matches); - if (s[1] == '\t') { - AddMatch(id + 50 * n, l + 2, l, matches); - } - } else if (s[0] == ']') { - AddMatch(id + 24 * n, l + 1, l, matches); - } else if (s[0] == '\'') { - AddMatch(id + 36 * n, l + 1, l, matches); - } else if (s[0] == ':') { - AddMatch(id + 51 * n, l + 1, l, matches); - } else if (s[0] == '(') { - AddMatch(id + 57 * n, l + 1, l, matches); - } else if (s[0] == '=') { - if (s[1] == '"') { - AddMatch(id + 70 * n, l + 2, l, matches); - } else if (s[1] == '\'') { - AddMatch(id + 86 * n, l + 2, l, matches); - } - } else if (s[0] == 'a') { - if (s[1] == 'l' && s[2] == ' ') { - AddMatch(id + 84 * n, l + 3, l, matches); - } - } else if (s[0] == 'e') { - if (s[1] == 'd') { - if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches); - } else if (s[1] == 'r') { - if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches); - } else if (s[1] == 's') { - if (s[2] == 't' && s[3] == ' ') { - AddMatch(id + 95 * n, l + 4, l, matches); - } - } - } else if (s[0] == 'f') { - if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') { - AddMatch(id + 90 * n, l + 4, l, matches); - } - } else if (s[0] == 'i') { - if (s[1] == 'v') { - if (s[2] == 'e' && s[3] == ' ') { - AddMatch(id + 92 * n, l + 4, l, matches); - } - } else if (s[1] == 'z') { - if (s[2] == 'e' && s[3] == ' ') { - AddMatch(id + 100 * n, l + 4, l, matches); - } - } - } else if (s[0] == 'l') { - if (s[1] == 'e') { - if (s[2] == 's' && s[3] == 's' && s[4] == ' ') { - AddMatch(id + 93 * n, l + 5, l, matches); - } - } else if (s[1] == 'y') { - if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches); - } - } else if (s[0] == 'o') { - if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') { - AddMatch(id + 106 * n, l + 4, l, matches); - } - } - } else { - // Set t=false for kUppercaseFirst and - // t=true otherwise (kUppercaseAll) transform. - const bool t = w.transform != kUppercaseFirst; - if (!IsMatch(w, data, max_length)) { - continue; - } - // Transform "" + kUppercase{First,All} + "" - AddMatch(id + (t ? 44 : 9) * n, l, l, matches); - found_match = true; - if (l + 1 >= max_length) { - continue; - } - // Transforms "" + kUppercase{First,All} + <suffix> - const uint8_t* s = &data[l]; - if (s[0] == ' ') { - AddMatch(id + (t ? 68 : 4) * n, l + 1, l, matches); - } else if (s[0] == '"') { - AddMatch(id + (t ? 87 : 66) * n, l + 1, l, matches); - if (s[1] == '>') { - AddMatch(id + (t ? 97 : 69) * n, l + 2, l, matches); - } - } else if (s[0] == '.') { - AddMatch(id + (t ? 101 : 79) * n, l + 1, l, matches); - if (s[1] == ' ') { - AddMatch(id + (t ? 114 : 88) * n, l + 2, l, matches); - } - } else if (s[0] == ',') { - AddMatch(id + (t ? 112 : 99) * n, l + 1, l, matches); - if (s[1] == ' ') { - AddMatch(id + (t ? 107 : 58) * n, l + 2, l, matches); - } - } else if (s[0] == '\'') { - AddMatch(id + (t ? 94 : 74) * n, l + 1, l, matches); - } else if (s[0] == '(') { - AddMatch(id + (t ? 113 : 78) * n, l + 1, l, matches); - } else if (s[0] == '=') { - if (s[1] == '"') { - AddMatch(id + (t ? 105 : 104) * n, l + 2, l, matches); - } else if (s[1] == '\'') { - AddMatch(id + (t ? 116 : 108) * n, l + 2, l, matches); - } - } - } - } - } - // Transforms with prefixes " " and "." - if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) { - bool is_space = (data[0] == ' '); - key = Hash(&data[1]); - bucket = kStaticDictionaryBuckets[key]; - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; - const size_t id = w.idx; - if (w.transform == 0) { - if (!IsMatch(w, &data[1], max_length - 1)) { - continue; - } - // Transforms " " + kIdentity + "" and "." + kIdentity + "" - AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches); - found_match = true; - if (l + 2 >= max_length) { - continue; - } - // Transforms " " + kIdentity + <suffix> and "." + kIdentity + <suffix> - const uint8_t* s = &data[l + 1]; - if (s[0] == ' ') { - AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches); - } else if (s[0] == '(') { - AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches); - } else if (is_space) { - if (s[0] == ',') { - AddMatch(id + 103 * n, l + 2, l, matches); - if (s[1] == ' ') { - AddMatch(id + 33 * n, l + 3, l, matches); - } - } else if (s[0] == '.') { - AddMatch(id + 71 * n, l + 2, l, matches); - if (s[1] == ' ') { - AddMatch(id + 52 * n, l + 3, l, matches); - } - } else if (s[0] == '=') { - if (s[1] == '"') { - AddMatch(id + 81 * n, l + 3, l, matches); - } else if (s[1] == '\'') { - AddMatch(id + 98 * n, l + 3, l, matches); - } - } - } - } else if (is_space) { - // Set t=false for kUppercaseFirst and - // t=true otherwise (kUppercaseAll) transform. - const bool t = w.transform != kUppercaseFirst; - if (!IsMatch(w, &data[1], max_length - 1)) { - continue; - } - // Transforms " " + kUppercase{First,All} + "" - AddMatch(id + (t ? 85 : 30) * n, l + 1, l, matches); - found_match = true; - if (l + 2 >= max_length) { - continue; - } - // Transforms " " + kUppercase{First,All} + <suffix> - const uint8_t* s = &data[l + 1]; - if (s[0] == ' ') { - AddMatch(id + (t ? 83 : 15) * n, l + 2, l, matches); - } else if (s[0] == ',') { - if (!t) { - AddMatch(id + 109 * n, l + 2, l, matches); - } - if (s[1] == ' ') { - AddMatch(id + (t ? 111 : 65) * n, l + 3, l, matches); - } - } else if (s[0] == '.') { - AddMatch(id + (t ? 115 : 96) * n, l + 2, l, matches); - if (s[1] == ' ') { - AddMatch(id + (t ? 117 : 91) * n, l + 3, l, matches); - } - } else if (s[0] == '=') { - if (s[1] == '"') { - AddMatch(id + (t ? 110 : 118) * n, l + 3, l, matches); - } else if (s[1] == '\'') { - AddMatch(id + (t ? 119 : 120) * n, l + 3, l, matches); - } - } - } - } - } - if (max_length >= 6) { - // Transforms with prefixes "e ", "s ", ", " and "\xc2\xa0" - if ((data[1] == ' ' && - (data[0] == 'e' || data[0] == 's' || data[0] == ',')) || - (data[0] == 0xc2 && data[1] == 0xa0)) { - key = Hash(&data[2]); - bucket = kStaticDictionaryBuckets[key]; - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; - const size_t id = w.idx; - if (w.transform == 0 && IsMatch(w, &data[2], max_length - 2)) { - if (data[0] == 0xc2) { - AddMatch(id + 102 * n, l + 2, l, matches); - found_match = true; - } else if (l + 2 < max_length && data[l + 2] == ' ') { - size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13); - AddMatch(id + t * n, l + 3, l, matches); - found_match = true; - } - } - } - } - } - if (max_length >= 9) { - // Transforms with prefixes " the " and ".com/" - if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' && - data[3] == 'e' && data[4] == ' ') || - (data[0] == '.' && data[1] == 'c' && data[2] == 'o' && - data[3] == 'm' && data[4] == '/')) { - key = Hash(&data[5]); - bucket = kStaticDictionaryBuckets[key]; - size_t num = bucket & 0xff; - size_t offset = bucket >> 8; - for (size_t i = 0; i < num; ++i) { - const DictWord w = kStaticDictionaryWords[offset + i]; - const size_t l = w.len; - const size_t n = 1u << kBrotliDictionarySizeBitsByLength[l]; - const size_t id = w.idx; - if (w.transform == 0 && IsMatch(w, &data[5], max_length - 5)) { - AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches); - found_match = true; - if (l + 5 < max_length) { - const uint8_t* s = &data[l + 5]; - if (data[0] == ' ') { - if (l + 8 < max_length && - s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') { - AddMatch(id + 62 * n, l + 9, l, matches); - if (l + 12 < max_length && - s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') { - AddMatch(id + 73 * n, l + 13, l, matches); - } - } - } - } - } - } - } - } - return found_match; -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/static_dict.h b/third_party/brotli/enc/static_dict.h index d293934..86476d1 100644 --- a/third_party/brotli/enc/static_dict.h +++ b/third_party/brotli/enc/static_dict.h
@@ -4,29 +4,34 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Class to model the static dictionary. +/* Class to model the static dictionary. */ #ifndef BROTLI_ENC_STATIC_DICT_H_ #define BROTLI_ENC_STATIC_DICT_H_ -#include "./types.h" +#include <brotli/types.h> +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static const size_t kMaxDictionaryMatchLen = 37; +#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37 static const uint32_t kInvalidMatch = 0xfffffff; -// Matches data against static dictionary words, and for each length l, -// for which a match is found, updates matches[l] to be the minimum possible -// (distance << 5) + len_code. -// Prerequisites: -// matches array is at least kMaxDictionaryMatchLen + 1 long -// all elements are initialized to kInvalidMatch -bool FindAllStaticDictionaryMatches(const uint8_t* data, - size_t min_length, - size_t max_length, - uint32_t* matches); +/* Matches data against static dictionary words, and for each length l, + for which a match is found, updates matches[l] to be the minimum possible + (distance << 5) + len_code. + Returns 1 if matches have been found, otherwise 0. + Prerequisites: + matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long + all elements are initialized to kInvalidMatch */ +BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches( + const uint8_t* data, size_t min_length, size_t max_length, + uint32_t* matches); -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_STATIC_DICT_H_ +#endif /* BROTLI_ENC_STATIC_DICT_H_ */
diff --git a/third_party/brotli/enc/static_dict_lut.h b/third_party/brotli/enc/static_dict_lut.h index 267c7711..ba94f76 100644 --- a/third_party/brotli/enc/static_dict_lut.h +++ b/third_party/brotli/enc/static_dict_lut.h
@@ -4,4124 +4,5861 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Lookup table for static dictionary and transforms. +/* Lookup table for static dictionary and transforms. */ -#ifndef BROTLI_ENC_DICTIONARY_LUT_H_ -#define BROTLI_ENC_DICTIONARY_LUT_H_ +#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_ +#define BROTLI_ENC_STATIC_DICT_LUT_H_ -#include "./types.h" +#include <brotli/types.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -static const int kDictNumBits = 15 -;static const uint32_t kDictHashMul32 = 0x1e35a7bd; - -struct DictWord { +typedef struct DictWord { + /* Highest bit is used to indicate end of bucket. */ uint8_t len; uint8_t transform; uint16_t idx; +} DictWord; + +static const int kDictNumBits = 15; +static const uint32_t kDictHashMul32 = 0x1e35a7bd; + +static const uint16_t kStaticDictionaryBuckets[32768] = { +1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29, +0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0, +0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0 +,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0 +,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0 +,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0, +192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0, +0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0, +249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0, +271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0, +0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328, +329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355, +0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0, +0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0, +0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0, +458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0, +474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0, +0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0, +534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0, +0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0, +0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0, +0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0, +711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0, +0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0, +790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0, +844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893, +894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909, +0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944, +0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0, +984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0, +0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0 +,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0, +1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042 +,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0 +,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0 +,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0, +1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132, +0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0 +,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0 +,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224, +0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243 +,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264, +0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0, +1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311, +1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0, +1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366, +0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413, +1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459, +1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0, +1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537, +1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0, +1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0, +1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0, +1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0, +1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0, +1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0, +1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0 +,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0, +0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812, +1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0 +,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931, +0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958 +,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990, +2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0, +2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0, +2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0, +0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085, +0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123, +0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144, +2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161, +2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237, +0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0 +,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0, +0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0, +0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0, +0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0 +,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0 +,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404, +2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420, +0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434 +,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477 +,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0, +0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539, +2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0, +2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0, +0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0 +,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0, +2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628, +2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0 +,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0, +2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0 +,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0 +,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0 +,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0 +,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0, +2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0, +2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828 +,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841, +0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0, +2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878, +2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0, +2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0 +,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967, +0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990, +0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012 +,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0, +3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0 +,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0 +,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0, +0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161, +0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0, +3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0, +0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239, +3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0 +,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287, +3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0 +,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0 +,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328, +3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0 +,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0, +3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0, +3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0 +,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470, +0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0, +3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0, +3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0, +3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0, +3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0, +3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0, +3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658 +,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0 +,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711 +,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737 +,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0 +,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789, +0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0 +,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860, +3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892, +3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0 +,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966 +,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0 +,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0 +,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0, +4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0, +4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105 +,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0 +,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329, +0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350 +,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0, +0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386 +,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427 +,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0 +,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470 +,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0, +0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527 +,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0, +0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0, +4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0, +0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0, +4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0, +4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0, +0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729, +4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747 +,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751, +4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0 +,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0, +0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0 +,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0 +,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0 +,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0, +4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020, +5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0, +5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0, +5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064, +5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0, +0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101, +5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0 +,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159, +5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0 +,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0, +5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219, +0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0, +0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0, +0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0, +5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0 +,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0, +0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0, +5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0, +5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388 +,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0, +5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416 +,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444, +5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0 +,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0 +,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518, +0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0, +5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0, +5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0, +0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0, +5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0, +0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0 +,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763, +5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784, +0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801, +0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833 +,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0, +5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891, +0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924 +,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953 +,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0, +5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009 +,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0, +0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053, +0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0, +6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0 +,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0 +,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146, +6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0, +6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0, +6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0, +0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0, +6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373, +0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0, +6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0, +6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0, +0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0, +0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481 +,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0, +0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0, +6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532 +,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0, +6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0 +,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0, +0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704, +6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0, +6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752, +6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0 +,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0, +6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868 +,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879 +,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0, +0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919 +,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936 +,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0 +,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0 +,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995, +0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030 +,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0, +0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067, +7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090, +0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0 +,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0, +0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0, +7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0, +7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201, +7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232, +7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0 +,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0 +,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0, +7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367, +7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379, +7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0, +7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0 +,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0, +0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472, +0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0, +7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0, +7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0, +7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581 +,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0, +0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0, +7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0 +,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688 +,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0, +7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0 +,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0 +,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783, +0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0, +7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0, +7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0 +,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921, +7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0 +,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0, +7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008, +0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0, +8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059, +8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0, +0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0, +8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0, +0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0, +8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0, +0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0, +8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0 +,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286 +,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0, +8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0, +8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0, +0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0, +8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0, +0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0 +,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481, +8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0 +,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570, +0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0, +0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623 +,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0, +0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0, +0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0 +,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742, +8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0, +8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788 +,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828, +8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0, +8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0, +8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0, +8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913 +,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0, +8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0, +0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0 +,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095 +,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121, +9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136, +0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0, +9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0, +0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197, +9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225 +,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0, +0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248, +0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0, +9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0 +,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0, +9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326, +9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0, +9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500, +0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0 +,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542, +0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558, +0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0 +,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0, +0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0, +0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0, +9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703, +9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754 +,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0 +,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811, +0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0 +,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856, +9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0 +,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0, +9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974 +,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0 +,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032, +0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0, +0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0, +10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084, +0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0, +10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0, +0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159, +10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0, +10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0, +10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0, +0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0, +0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0, +10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308, +0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0, +10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0, +0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0, +10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0, +0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0, +10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0, +10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0, +10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451, +0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0, +10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521, +10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0, +0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562, +10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0, +0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601, +0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629, +10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0, +10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0, +0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0, +0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715, +10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730, +10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752, +10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0, +10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791, +0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0, +10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0, +10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0, +10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891, +10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0, +0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0, +10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932, +0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0, +10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0, +10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989, +0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0, +10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021, +0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0, +11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0, +11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0, +11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131, +0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0, +11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0, +0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182, +11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200, +11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0, +11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0, +0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0, +0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0, +11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0, +11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0, +11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0, +0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0, +11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0, +11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511, +11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0, +0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552, +11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0, +0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0, +11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0, +11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603, +11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0, +11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0, +11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677, +11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719, +0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0, +11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0, +11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785, +0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836, +0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872, +11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0, +11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0, +0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943, +11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0, +0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986, +11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0, +12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0, +0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0, +12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0, +12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0, +0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104, +12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0, +0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144, +0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0, +12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187, +12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0, +12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0, +12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0, +12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0, +12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0, +0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0, +0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0, +12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355, +12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0, +12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0, +0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0, +0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0, +0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0, +0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0, +12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520, +0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0, +0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0, +0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565, +0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0, +0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0, +12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0, +12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0, +12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743, +0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0, +12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0, +0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0, +0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0, +12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0, +0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898, +0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0, +12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944, +0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0, +12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0, +0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996, +12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0, +13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0, +13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044, +13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0, +13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0, +13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0, +13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134, +0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0, +13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0, +13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0, +13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0, +13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0, +13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0, +13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0, +13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0, +0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0, +13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449, +0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466, +13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0, +13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0, +13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0, +13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556, +13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0, +0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0, +13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0, +13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634, +0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0, +0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0, +13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0, +13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719, +13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737, +13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765, +0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804, +13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0, +13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0, +13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0, +0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0, +13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0, +13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0, +13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0, +13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0, +0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0, +14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048, +14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067, +0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086, +14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0, +0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0, +14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128, +14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0, +14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0, +14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0, +14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0, +14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231, +0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0, +14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267, +14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0, +14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0, +14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0, +0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345, +14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0, +14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0, +0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0, +0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0, +0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0, +0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0, +0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526, +14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0, +14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0, +14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0, +0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0, +0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0, +0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0, +0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0, +14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0, +0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728, +14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744, +14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0, +14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786, +14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0, +0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0, +0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0, +0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0, +14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0, +14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936, +0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0, +0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022, +0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043, +15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084, +0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097, +0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0, +15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0, +15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154, +15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0, +0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0, +0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0, +0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0, +0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281, +15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0, +15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0, +0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0, +15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348, +15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0, +15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0, +15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410, +0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0, +15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0, +15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467, +0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0, +15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0, +15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554, +0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0, +0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593, +15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0, +0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617, +15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0, +15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0, +15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0, +0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0, +0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0, +15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745, +15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0, +0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790, +15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0, +0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0, +15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0, +0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0, +15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890, +0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0, +15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0, +0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981, +15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000, +0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0, +0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0, +0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0, +0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056, +0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069, +16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089, +16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260, +16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0, +0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0, +0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297, +0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0, +0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0, +16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0, +16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0, +0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378, +16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406, +16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0, +16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0, +0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0, +0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508, +16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531, +0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0, +16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573, +16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0, +0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0, +16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653, +16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0, +16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705, +0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0, +16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729, +0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743, +0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0, +16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0, +16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0, +0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841, +16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0, +0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889, +16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913, +0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942, +16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0, +16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993, +0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013, +17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0, +17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055, +0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0, +0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0, +0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0, +0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135, +17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151, +17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0, +0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195, +17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221, +0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0, +17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295, +0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0, +17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0, +0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0, +17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419, +0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0, +0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0, +17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485, +0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0, +17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0, +17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0, +0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556, +0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0, +17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582, +17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600, +0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0, +17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0, +0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0, +17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673, +0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728, +0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0, +0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754, +17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0, +17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0, +17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845, +0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0, +0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0, +0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0, +18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0, +18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036, +18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0, +18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0, +0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0, +18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0, +18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151, +18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0, +0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192, +0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207, +18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225, +18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0, +18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0, +0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0, +0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0, +18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0, +18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357, +0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0, +0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0, +18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0, +0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505, +0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0, +18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0, +18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0, +18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0, +18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0, +18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0, +0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641, +18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0, +18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0, +0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0, +18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0, +18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0, +0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781, +0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801, +18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829, +0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0, +18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0, +0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0, +18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0, +0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0, +0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0, +0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981, +0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0, +19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0, +0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0, +19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111, +0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0, +19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182, +19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0, +0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210, +0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0, +0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0, +0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285, +19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0, +0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0, +0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0, +19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0, +0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413, +19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0, +19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0, +19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0, +0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552, +19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560, +19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0, +0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589, +0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0, +19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631, +0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0, +0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0, +0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0, +19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0, +0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0, +0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0, +0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0, +19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0, +0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0, +0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0, +19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864, +0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0, +19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892, +19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0, +19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0, +19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0, +19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0, +20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0, +0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0, +20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064, +0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0, +20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0, +20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0, +20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0, +20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0, +20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0, +20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0, +20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0, +20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0, +20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0, +20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322, +0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365, +0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0, +20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0, +20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431, +0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0, +0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0, +20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0, +20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499, +20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543, +0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0, +20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0, +20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0, +20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728, +20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749, +0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0, +0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0, +0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0, +20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0, +20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0, +0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0, +0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917, +0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0, +0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0, +0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0, +20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017, +21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0, +0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0, +21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0, +0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080, +21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0, +0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0, +0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115, +21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137, +21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0, +0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0, +21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0, +0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0, +0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0, +0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0, +21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0, +0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326, +0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0, +0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0, +21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384, +0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0, +0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407, +0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0, +0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0, +21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0, +21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0, +21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0, +0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0, +0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619, +21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646, +21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683, +0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0, +21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0, +0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0, +0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0, +21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0, +21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788, +21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0, +21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833, +21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0, +21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0, +21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915, +0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0, +0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0, +0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0, +0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0, +21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0, +22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0, +0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0, +0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0, +22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0, +0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0, +0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0, +0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0, +0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190, +0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0, +22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0, +0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0, +0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0, +0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317, +0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0, +0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0, +22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0, +0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396, +22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0, +0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0, +0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0, +22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0, +22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0, +22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0, +22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0, +22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0, +22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0, +0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656, +0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0, +22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723, +0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729, +0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0, +0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0, +22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782, +22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0, +0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0, +0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0, +22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0, +0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884, +22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0, +22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929, +22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0, +22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0, +22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0, +22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024, +23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0, +23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0, +0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0, +0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0, +0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0, +0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230, +23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0, +0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303, +23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0, +0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0, +0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0, +23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0, +23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0, +23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0, +23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519, +23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0, +0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569, +23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0, +0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0, +0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0, +0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0, +23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689, +0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0, +23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0, +23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0, +0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0, +0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0, +23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837, +23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883, +23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0, +23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942, +23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0, +0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0, +0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991, +0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0, +24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0, +24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0, +24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070, +0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0, +0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0, +24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147, +24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170, +24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0, +24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0, +24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0, +24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0, +0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372, +24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0, +24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0, +0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442, +24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0, +24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473, +24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0, +0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498, +0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518, +0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549, +24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0, +0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575, +0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0, +24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594, +0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0, +0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640, +0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0, +0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0, +0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690, +24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712, +0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0, +0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0, +24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0, +0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799, +24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0, +24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847, +0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0, +24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0, +0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0, +24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0, +24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0, +24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003, +0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0, +0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0, +25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065, +25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0, +25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0, +0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0, +0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0, +25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0, +25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0, +0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337, +25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0, +25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0, +0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0, +25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0, +25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0, +0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0, +0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0, +25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0, +25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0, +25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0, +0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0, +0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0, +0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615, +0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0, +25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702, +25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715, +25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739, +0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0, +25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809, +0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0, +25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0, +25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876, +25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0, +0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0, +25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0, +25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0, +25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978, +0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0, +26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017, +26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0, +26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0, +0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0, +26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0, +26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0, +0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0, +0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321, +26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0, +26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0, +26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0, +26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0, +0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475, +0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0, +26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0, +0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0, +26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0, +0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611, +26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632, +26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0, +26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747, +26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0, +0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0, +0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0, +26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0, +26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851, +0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0, +26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0, +0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0, +26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0, +26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0, +26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0, +26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0, +0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029, +27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0, +27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0, +27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0, +27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0, +0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0, +0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0, +27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0, +27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0, +27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0, +27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0, +27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278, +0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0, +0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0, +0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367, +0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0, +27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465, +27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0, +27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0, +27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0, +0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0, +0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0, +0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0, +27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0, +27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673, +27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0, +0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0, +0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774, +27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0, +27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0, +0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0, +27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931, +27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960, +27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0, +27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0, +0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0, +28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0, +28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0, +28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0, +0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0, +0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0, +28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0, +28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0, +28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0, +28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0, +0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0, +28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0, +28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303, +0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320, +28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0, +0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0, +28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0, +28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0, +0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0, +0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510, +0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0, +28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560, +28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0, +28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0, +28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0, +28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0, +28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0, +28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711, +28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742, +0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0, +0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768, +0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0, +28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0, +0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0, +28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869, +0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0, +28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0, +0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0, +28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0, +28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983, +0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0, +0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0, +0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054, +29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0, +0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0, +0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0, +29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0, +0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256, +29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0, +29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312, +0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0, +0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0, +0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0, +0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412, +29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0, +29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0, +0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0, +0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0, +0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529, +0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0, +0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0, +29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594, +0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0, +0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0, +29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656, +29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0, +29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689, +29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0, +29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0, +0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0, +29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0, +29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0, +0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0, +29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0, +0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979, +29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0, +30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039, +0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0, +0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0, +30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131, +30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0, +30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0, +0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0, +30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219, +0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240, +30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0, +30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304, +30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0, +0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359, +30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0, +30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0, +0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0, +0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469, +0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0, +0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0, +0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555, +30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0, +30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640, +30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0, +0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0, +0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733, +0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748, +0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0, +30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0, +30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0, +0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0, +30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866, +0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0, +30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915, +30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956, +0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978, +30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0, +31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0, +31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0, +31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0, +0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142, +0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0, +0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186, +0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0, +0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0, +31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0, +31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0, +31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0, +0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0, +31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0, +0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0, +0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350, +31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0, +31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405, +31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422, +31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0, +0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0, +31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0, +31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0, +31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0, +0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553, +31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571, +0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0, +0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0, +31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0, +0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0, +0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0, +31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0}; + +static const DictWord kStaticDictionaryWords[31705] = { +{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9, +11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317}, +{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0, +1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,10 +,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870} +,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0, +151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0, +10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548} +,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16, +0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12, +10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0, +301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10, +431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{145 +,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139 +,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{ +135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0, +1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10, +989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135, +11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,188} +,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7, +11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0 +,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{ +132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664 +},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7, +11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10, +11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531}, +{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537} +,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0, +999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11, +359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{ +133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754} +,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{ +132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{ +135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85}, +{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0, +225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0, +110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345} +,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{ +137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0, +1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{ +8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201} +,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10 +,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248}, +{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5, +0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{ +4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{ +9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{ +133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{ +141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{ +138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{ +9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0, +877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10, +661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,11 +,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271 +},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12, +0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28}, +{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84} +,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13 +,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{ +11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{ +138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187} +,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321}, +{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{ +137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878} +,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10, +448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822 +},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0, +1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10 +,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359}, +{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934} +,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100}, +{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63} +,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10, +288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10, +322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79}, +{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9, +11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0, +1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{ +9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0, +1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0 +,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9 +,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0, +1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0 +,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{ +11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12, +0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25} +,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14, +0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0, +200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145, +0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11, +512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5 +,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0, +698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20 +},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11 +,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0 +,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10, +446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11, +862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,10 +,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{ +137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{ +146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172} +,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12 +,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140, +11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253 +},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0, +251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488} +,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246}, +{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807 +},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12, +11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0 +,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86} +,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{ +134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12 +,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8 +,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13 +,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6 +,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187}, +{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187} +,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11 +,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834} +,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11, +386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10, +1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10, +540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4, +10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10 +,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5, +10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{ +134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869}, +{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5, +11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0, +1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29 +},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137 +,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10, +513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10, +95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134 +,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0 +},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671}, +{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10, +438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{ +14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{ +5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786} +,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,684 +},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0 +,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936}, +{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615} +,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275 +},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11, +255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6, +10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{ +15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232 +},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11 +,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},{ +5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{ +6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{ +6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0 +,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660 +},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140 +,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{ +136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179} +,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{ +7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6, +11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12 +,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11, +1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440 +},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{ +12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55}, +{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10 +,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913 +},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0 +,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101 +},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{ +9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152}, +{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11, +320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0 +,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{ +4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7, +10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999} +,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9, +0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706} +,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135, +10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10 +,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591} +,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0 +,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{ +139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556}, +{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723 +},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11 +,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556}, +{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10, +0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369} +,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10, +1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141}, +{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0 +,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0 +,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10 +,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150, +10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10 +,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11 +,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9, +10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{ +141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10 +,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122 +},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{ +11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{ +7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11, +436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14, +11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138 +,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702 +},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487}, +{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11, +165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11, +453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{ +7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7, +10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{ +11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10 +,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{ +14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{ +19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341}, +{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10, +557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11, +169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9, +11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100} +,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596}, +{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10, +141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0, +466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7 +,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{ +12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7 +,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11, +140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{ +11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10 +,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659 +},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{ +135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483 +},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{ +17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615} +,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227 +},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0, +1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882} +,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476} +,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{ +5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351}, +{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149, +11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9, +0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0, +263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999}, +{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,420 +},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133, +11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6, +0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5, +10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302}, +{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{ +13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9, +10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{ +14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,10 +,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5 +,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{ +4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9 +,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{ +12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529} +,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8, +10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11, +0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0, +297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303} +,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977}, +{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{ +136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0, +2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0, +231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10, +0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48 +},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{ +11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13, +0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71} +,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,665 +},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,11 +,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9 +,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0, +792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10, +1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{ +11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300 +},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11, +16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7, +10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{ +138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6, +10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{ +13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0, +508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134, +10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{ +6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97}, +{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533 +},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10, +128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6 +,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{ +15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391 +},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134 +,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10, +1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{ +135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{ +6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{ +10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32} +,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892}, +{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389} +,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0 +,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11 +,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{ +136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{ +5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7 +,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,565 +},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10 +,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10, +1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10, +623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12, +10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7, +11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87} +,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411} +,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829 +},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11, +231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10, +11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{ +142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135, +11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10 +,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192} +,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10, +245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0 +,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134, +0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7 +,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11, +679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139 +,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604}, +{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992 +},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{ +134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508} +,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141} +,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0 +,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9 +,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0, +686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117 +},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,11 +,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149, +10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139, +11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0 +,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244 +},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10, +7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10, +662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{ +143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39} +,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134, +11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4, +10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{7 +,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0, +244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137 +,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0 +,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8 +,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10, +543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10, +205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0, +848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236 +},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{ +10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6 +,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132, +10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139, +0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272 +},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11, +480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0 +,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11, +2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26 +},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10, +589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{ +136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10, +79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7 +,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4, +10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{ +133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276 +},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726}, +{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0, +309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0, +874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,0 +,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6, +10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9, +11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0, +194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0 +,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9 +,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506 +},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14 +},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147 +,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11, +1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292}, +{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7 +,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325} +,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{ +5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134 +,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142, +0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133 +,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10, +243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{ +140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526 +},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8 +,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135, +11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{ +135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{ +135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0, +1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47} +,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11, +134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{ +4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391}, +{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137, +11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253}, +{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138 +,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6, +0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7, +0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6, +10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10 +,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853}, +{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14 +,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0, +518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0, +916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198} +,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11, +395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6, +0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10, +10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478} +,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11 +,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{ +134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11 +,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10, +67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139, +0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0, +468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11, +460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0 +,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{ +147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277}, +{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0, +141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10, +311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{ +139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0, +143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140, +10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678} +,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117}, +{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141 +},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517} +,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10, +254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0, +403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134, +10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7, +11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{ +12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270 +},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10, +1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8 +,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11, +400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11 +,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0, +77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0, +646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0, +1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11, +389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{132 +,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203 +},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7 +,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5, +0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231} +,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11, +289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,1429 +},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10, +265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131 +},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0, +154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,11 +,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0 +,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0, +20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921}, +{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0 +,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6, +0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6, +11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355}, +{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{ +133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0, +1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313 +},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0 +,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0, +1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6, +11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{ +142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6, +0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10, +67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400}, +{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503 +},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11 +,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{ +11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10 +,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10 +,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10, +1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10 +,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13, +10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{ +20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776}, +{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,117 +},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5, +11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100}, +{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10, +462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138, +10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296} +,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11, +386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11, +249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0 +,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11 +,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{ +138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{ +8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11, +524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10, +1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421 +},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{ +13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11, +756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337}, +{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577}, +{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11, +595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{ +8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0, +75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0, +954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134, +0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{ +17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{ +7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135 +,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35}, +{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11, +514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12, +11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832} +,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11, +784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0, +556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561 +},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813}, +{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11, +283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6, +0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0, +150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,10 +,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858} +,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134, +0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169} +,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10, +26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138, +11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10, +11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135 +,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851 +},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7, +11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11, +279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1 +},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{ +7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11, +0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0, +255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11, +567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0, +552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{ +14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0, +405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11 +,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016} +,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0, +826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0, +916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51}, +{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950} +,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10, +1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88 +},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0 +,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266}, +{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{ +7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0, +286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10, +935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63 +},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0 +,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11, +53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{ +133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218 +},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637 +},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11, +651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150, +0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10, +72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10 +,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5 +},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162}, +{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10, +1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135, +11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{ +134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5, +0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351} +,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4 +,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999} +,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{ +148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7, +11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15, +11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12, +11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,888 +},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642}, +{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0 +,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11, +273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135 +,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{ +7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0 +,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0, +1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919}, +{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956}, +{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0 +,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0, +980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0, +1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{ +10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961} +,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{ +12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12, +0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0, +986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998 +},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0, +1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{ +12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0, +1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0, +482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489 +},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{ +14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14, +0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0, +113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122 +},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{ +18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18, +0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11 +,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764}, +{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11, +229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{ +135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8, +10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{ +135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11, +523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11, +580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6, +10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0, +665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135, +11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793 +},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0, +965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141 +},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0, +209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{ +133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{ +11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0, +463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11, +398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11, +11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142 +,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692 +},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138 +,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016}, +{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825} +,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6 +,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10 +,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152, +11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854}, +{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4 +,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0, +902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4, +10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0, +525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5, +11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767}, +{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733} +,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710}, +{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0 +,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11 +,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{135 +,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139, +0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11 +,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0 +,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0, +763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0, +172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6 +,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8, +10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11, +10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,263} +,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11, +190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11 +,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0, +426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11, +381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0, +277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475} +,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{ +10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43 +},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537 +},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11, +730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369}, +{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14, +11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11 +,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},{ +141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0, +642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0, +1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{ +11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12, +0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0, +171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384} +,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903}, +{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203}, +{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827}, +{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0, +1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0, +1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9, +11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0 +,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469 +},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73 +},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11, +147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0, +396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7, +0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10, +651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{150 +,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46 +},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11, +182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10, +421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11, +1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0 +,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0 +,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132, +11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{ +15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9, +10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350}, +{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5, +11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0, +588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275} +,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149} +,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{ +10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10, +528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12, +10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},{ +13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71} +,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0, +768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11, +498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13} +,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4 +,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0 +,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11, +183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4, +10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24}, +{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10, +334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5, +11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7, +11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{ +15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230}, +{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149, +11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{ +13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654 +},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419} +,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{ +137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9, +10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{ +138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575 +},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132, +0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13 +,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644 +},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{ +12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606} +,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12, +11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978}, +{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{ +139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132, +0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7 +,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10, +454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10, +792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{ +12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10, +513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7 +,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{ +12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297 +},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11, +1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11, +1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139, +0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12}, +{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{ +135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,11, +620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12, +11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{ +135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9 +,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0, +1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{ +135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579}, +{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5 +,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{ +7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7 +,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91 +},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0, +1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136 +,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144 +,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498}, +{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281 +},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0, +211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608} +,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926}, +{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11 +,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138 +},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638} +,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,11 +,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{ +140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23} +,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696} +,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279} +,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10, +149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147, +10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10, +0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5, +10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10, +11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400}, +{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279} +,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11, +0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421} +,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{ +9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8 +,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933 +},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11, +589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12 +,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{ +18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{ +8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673} +,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400 +},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{ +4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11 +,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13, +11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{ +8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{ +6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{ +135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340 +},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229} +,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11, +898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7, +10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7 +,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0 +,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137, +11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9, +10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{ +10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364} +,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10, +6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10, +172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11, +478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139, +0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{ +136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0, +641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11, +69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0 +,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10, +494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276} +,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10 +,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0 +,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11, +107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140, +11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580} +,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10 +,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6, +11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{ +134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10, +1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11 +,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{ +144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7 +,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{ +137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674} +,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10, +1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0, +149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{ +11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11, +258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{ +135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7 +,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9, +10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664}, +{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10, +699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145, +10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0, +225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0, +1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819}, +{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0, +1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11 +,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{ +10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0, +417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0, +1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134, +11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138, +11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0, +386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750 +},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11, +26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11, +451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10 +,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136, +0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943 +},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10, +488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11, +1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18, +11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5 +},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0 +,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11, +410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356}, +{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0, +912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0, +921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833}, +{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9, +10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10 +,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904 +},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,10 +,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0, +788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325}, +{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8 +,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8 +,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389}, +{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0, +148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24 +},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462} +,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0 +,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805 +},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0, +81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0, +179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748} +,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0 +,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{ +6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812} +,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{ +12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15, +0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0, +227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10, +86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,10 +,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503} +,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0, +858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371 +},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735 +},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138}, +{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,10 +,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480} +,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11, +935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11, +594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0, +4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0 +,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},{ +134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0, +279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135, +10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0, +938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{132 +,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,1789 +},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905} +,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301} +,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11, +693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12, +11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{ +144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623 +},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6, +10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{ +14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749} +,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,0 +,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7, +11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11 +,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7, +11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9, +11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716}, +{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11, +947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13 +,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454} +,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35} +,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941}, +{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135, +11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{ +132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91} +,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800}, +{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0, +464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10, +0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{ +133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11, +114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11, +139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11, +179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134 +,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{ +7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0, +900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0, +642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47} +,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0, +273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10 +,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11, +1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0, +662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4, +10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114}, +{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671}, +{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10 +,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763} +,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0, +894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{8 +,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{ +141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{ +137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8, +0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7, +11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882 +},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{ +13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0, +423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0, +654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731} +,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10, +68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10, +0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11, +902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11, +1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132, +11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133, +11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,952 +},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0, +673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018} +,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884} +,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0, +5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9, +0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11, +1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372} +,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{ +10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10 +,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0, +658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10, +1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138, +10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117 +},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139, +0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9, +11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744}, +{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{ +11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14, +0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397}, +{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792 +},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{ +7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14} +,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710}, +{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186} +,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0, +200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10, +1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050}, +{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{ +140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0, +934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{ +7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15 +,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{ +19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5, +10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11, +930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{ +133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10, +34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11, +513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10, +723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135, +0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{ +7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0 +,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5, +11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142 +,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11, +1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291} +,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11, +111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0, +811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651 +},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0 +,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11 +,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{ +139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337} +,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259} +,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405 +},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10, +76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132} +,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7 +,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801}, +{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10 +,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23} +,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21}, +{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5 +,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14 +,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20, +10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10, +31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26} +,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0, +803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11, +526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13, +11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6 +,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{ +136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11 +,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11, +11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330}, +{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0, +790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511} +,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0 +,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610} +,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602} +,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7, +11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133, +10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48 +},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480} +,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10, +75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69} +,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459} +,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301 +},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0, +300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11, +1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0 +,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137 +,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624 +},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687} +,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10, +72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10 +,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949}, +{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319}, +{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0 +,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667 +},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140, +11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4, +11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0, +1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{ +11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445} +,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72} +,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10, +181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138 +,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{ +140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109} +,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11, +152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11, +74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1}, +{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0, +1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10, +605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13, +10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132, +10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{ +10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672} +,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189} +,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649}, +{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99} +,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644}, +{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0, +1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20, +0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384} +,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139, +11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8, +10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116}, +{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10, +44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815 +},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848} +,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11, +271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,10 +,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804 +},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0, +244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135, +0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8, +10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145 +,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{ +4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9 +,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267}, +{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{ +12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10, +79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233} +,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120} +,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10, +27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13, +10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{ +15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820} +,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4 +,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691}, +{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823}, +{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414} +,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0, +816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{ +10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,396 +},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494} +,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{ +10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10, +430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{140 +,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0, +593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288}, +{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420}, +{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7, +11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},{ +142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0, +81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10, +293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410}, +{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10, +121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},{ +132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,16 +},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0, +816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463} +,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11 +,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153} +,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0, +652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11, +43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604 +},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523 +},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76} +,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{ +13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{ +7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135 +,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149 +,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151} +,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{ +19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142 +,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,1581 +},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579} +,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69}, +{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139, +10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{4 +,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7 +,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11, +1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13, +11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},{ +145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496} +,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323}, +{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,384 +},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400} +,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11, +212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{ +140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{ +5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{ +8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0, +283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401} +,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,136 +},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639}, +{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9, +11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{ +12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,664 +},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518 +},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10, +1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,0 +,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135, +10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137}, +{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{ +135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0, +664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},{ +14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,11, +488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12, +10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,1872 +},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0 +,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62 +},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10, +5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12}, +{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781}, +{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927} +,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654}, +{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238}, +{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{ +136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760}, +{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0 +,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114} +,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9}, +{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139, +10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},{ +6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10, +419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{ +11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0, +123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,11 +,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{ +136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110} +,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11, +569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11, +128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{ +7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754}, +{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,10 +,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11, +982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{142 +,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10, +10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{134 +,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10, +468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5, +10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0, +82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{6 +,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8 +,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{ +12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10 +,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},{ +7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,647 +},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11, +694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5, +0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100}, +{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,1810 +},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013 +},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0, +2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7, +10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574}, +{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11, +150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,11 +,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},{ +14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,799 +},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0, +1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10, +598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7, +0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473}, +{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11, +1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8, +10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159}, +{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,0 +,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329}, +{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9} +,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533} +,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11, +609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947 +},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9, +11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11, +281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,11 +,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{150 +,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136 +,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136 +,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9, +11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145}, +{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,0 +},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0} +,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126} +,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{ +12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0, +413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358 +},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{ +12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{ +11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10, +622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4, +11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,507 +},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{ +7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{ +12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{ +6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10 +,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10 +,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712 +},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10, +504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11, +10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,1017} +,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10, +311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,10 +,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11, +188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140, +11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{132 +,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10 +,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7, +0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11 +,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776}, +{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285} +,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11, +11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0, +87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593} +,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,547 +},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{12 +,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991}, +{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0, +604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},{ +4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030} +,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0, +558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11, +477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0, +24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{ +135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,10 +,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{136 +,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621}, +{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},{8 +,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,947 +},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11, +472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133, +11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{ +139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0, +8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11, +163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16}, +{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{ +132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0, +342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0, +967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0, +1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0 +,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{ +10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10, +0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0, +201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591 +},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{ +11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11, +0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0, +957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318 +},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{ +12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13, +0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365 +},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{ +13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0, +239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355 +},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{ +15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154 +},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0, +112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18 +,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161 +},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,10 +,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{4 +,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815} +,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0, +639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10, +0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},{ +6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11 +,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{ +136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021} +,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134, +0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{8 +,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957} +,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,1057 +},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11, +148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10, +1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10, +796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6, +0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{ +132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{ +141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{ +9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,165 +},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11, +388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9}, +{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137 +,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0, +847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338 +},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11, +294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0, +249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32} +,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0, +1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6, +0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0, +706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{5 +,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10 +,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11 +,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0 +,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11, +10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413}, +{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582} +,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10, +828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0, +128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309}, +{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{ +137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745} +,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,198 +},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0, +842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69} +,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,19 +},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{ +7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862}, +{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11, +99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134 +},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526 +},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{ +7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{ +14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{ +146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,1833 +},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,11 +,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10, +1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0, +627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401} +,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0, +742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{ +135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346} +,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51} +,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{ +6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929}, +{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10, +143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10, +584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4, +11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{ +134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892} +,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,126 +},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10, +352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0, +1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{ +142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7, +11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14, +11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0, +2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0, +1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135, +11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},{ +4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{ +13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,0, +1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{ +141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0, +2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{7 +,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{ +12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{ +9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0, +1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11, +11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0, +68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11, +635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{133 +,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{ +135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496} +,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,716 +},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135 +,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{ +8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7, +11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},{ +137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0, +829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19, +0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{ +7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,0, +314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11, +82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290}, +{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325 +},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66} +,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7 +,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136 +,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0, +683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{7 +,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{ +12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11, +466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{148 +,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5 +,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196} +,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6 +,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4 +,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{ +132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138 +,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{ +6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465}, +{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898 +},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{ +7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{ +147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135 +,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619}, +{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{ +11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0, +600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134, +11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{141 +,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{ +138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11, +650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{ +136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131} +,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11, +1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{10 +,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86} +,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0, +69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0, +51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471}, +{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10 +,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554} +,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517 +},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117}, +{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{ +11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{ +6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11, +11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},{ +6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{ +140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10, +1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10, +10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274}, +{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{ +10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11, +434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205} +,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11, +10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,829} +,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11, +219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0, +605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6 +,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0, +835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187 +},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434 +},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{ +9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0, +204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0, +10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137 +,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11, +697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{ +136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10 +,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0, +482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435 +},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678}, +{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4, +11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10, +11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{ +135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10 +,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0, +444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167} +,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697} +,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11 +,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9 +,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0, +91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0, +313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0, +886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10, +623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138, +0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10, +606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135 +,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749 +},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133, +11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11 +,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12, +11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487}, +{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10, +450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135 +,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7 +,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378 +},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787}, +{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75} +,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136, +10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134, +0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11, +913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132 +,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6 +,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7, +11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116 +},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10 +,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137 +,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366 +},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0, +33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135, +0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134 +,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136 +,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412}, +{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11, +549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{ +4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11, +10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345} +,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11, +520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11 +,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0, +168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11, +10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{ +13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0, +105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10, +1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{7 +,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10 +,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14 +,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10 +,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{ +135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8, +11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0, +41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11, +222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677 +},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10, +708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14, +10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15 +},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135 +,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0, +1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141 +,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5 +,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10, +0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11 +,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{ +139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386}, +{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{ +139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{ +134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{ +11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{ +19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505 +},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0, +674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505} +,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{ +11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12, +0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0, +131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461 +},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14 +,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11, +929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0, +413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0, +930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0 +,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0, +187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{ +14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0 +,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{ +132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10, +31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6, +0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782}, +{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{ +7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272} +,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,303 +},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0, +998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13}, +{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867 +},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10, +282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6, +0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{ +140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15, +0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530 +},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15, +0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10, +376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0, +106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34}, +{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0, +192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11, +6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11, +120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10, +1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{ +14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10, +300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0, +1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0, +448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0, +720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10, +0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10 +,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4} +,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0, +193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{ +5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{ +141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0, +1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,0 +,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0, +609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367}, +{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10, +782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782 +},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0, +1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004 +},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{ +8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10, +366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{ +132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635}, +{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{ +11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269} +,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0, +189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0 +,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11, +1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11, +102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11, +10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{ +14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{ +133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{ +11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9, +10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475}, +{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645} +,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{ +134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428 +},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399} +,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0, +50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11, +97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136 +,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0 +,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10, +411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,10 +,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{ +12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101 +},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10, +380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836} +,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206 +},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{ +138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0, +1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{ +11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{ +6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10, +769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{ +133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0, +196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0, +577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10, +453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0, +1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148}, +{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10 +,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6, +10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{ +14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11, +805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132 +,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{ +7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8, +11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{ +14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342} +,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,513 +},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11, +250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979 +},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11, +155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7, +10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0, +20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10, +0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10 +,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941} +,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0, +1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94}, +{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{ +135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37 +},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0, +659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0, +583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971} +,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{ +136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0, +405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137, +11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0, +495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140, +10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137, +0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{ +135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0, +1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11 +,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13 +,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0 +,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0, +1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137, +10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0 +,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5, +11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7 +,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10, +162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11, +933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0, +106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11, +883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756} +,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974} +,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11 +,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{ +15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19 +,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11, +10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0, +1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{ +5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{ +132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7, +11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0 +,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918}, +{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0 +,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109 +},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11, +493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185 +},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{ +11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7 +,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722}, +{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{ +6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141 +,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0, +336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10, +226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564}, +{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430 +},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{ +7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679}, +{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{ +151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135, +10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139 +,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135 +,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97 +},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{ +13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16, +0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198 +},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10 +,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676}, +{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557}, +{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{ +143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11 +,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10, +1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{ +134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11, +449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129}, +{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532}, +{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11, +657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0, +1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10, +10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{136 +,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{ +5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7, +11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11 +,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0 +,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147, +10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{ +13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141} +,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{ +9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736} +,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10, +153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396} +,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356}, +{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{ +10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0, +913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137, +10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10, +400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0, +1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0, +329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0 +,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818} +,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{ +12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15, +0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11, +328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134, +0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{7 +,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124 +},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{ +11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146, +11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{ +133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{ +11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11, +131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926}, +{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0, +813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872 +},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{ +15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561 +},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0, +491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{ +139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10, +154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,368} +,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0, +815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0 +,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{ +144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281} +,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{ +12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495}, +{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{ +10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864} +,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10, +0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6, +0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0, +1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{ +11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{ +135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395},{ +138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6 +,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7, +10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8, +0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0, +806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7, +11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146, +11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,1746} +,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10, +1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11, +10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10, +1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133, +11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10, +392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{134 +,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199} +,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10, +386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5} +,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189} +,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11, +125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8, +10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667}, +{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{ +14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9, +0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562 +},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{ +14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10 +,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{ +136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493} +,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11, +90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0, +961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186}, +{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10, +595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,0 +,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11, +10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{135 +,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,465 +},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11, +456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10, +688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741 +},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514 +},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10, +254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0, +725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787 +},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834}, +{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352} +,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0, +144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146, +10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0, +97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{ +8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657}, +{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10, +408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,0 +,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11, +598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11, +215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11, +769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{ +140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{ +140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9 +,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15}, +{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282} +,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5, +0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{6 +,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{ +8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019} +,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7 +,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9 +,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682}, +{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22 +,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0, +383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,11 +,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4, +0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713 +},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11, +553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},{ +7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,51 +},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10, +762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{ +135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636} +,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,191 +},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0, +336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0, +568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90}, +{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19 +,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11, +233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0, +833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735}, +{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18, +0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0 +,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139, +11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{ +133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{ +6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11, +802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80 +},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11, +1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{5 +,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11, +11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},{ +8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720}, +{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7, +11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7, +10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13, +10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10 +,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,1432} +,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11, +1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},{ +5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{ +11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11, +30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11, +1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20 +},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{ +11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,170 +},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304} +,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,10 +,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},{ +7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11, +10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},{ +133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7 +,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10, +518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0, +2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11, +58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11, +408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11, +311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136, +10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8, +10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{15 +,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10, +13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10, +569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,0 +,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{137 +,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12 +,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0, +214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},{ +5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4, +10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{ +139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24}, +{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11, +145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,10 +,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11 +,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366}, +{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0, +1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11, +1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10, +995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{5 +,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{ +5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{ +16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514} +,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,560 +},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796 +},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11, +0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689 +},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,11 +,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196} +,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10, +270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15, +10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0, +299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10, +0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0, +419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11, +497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{ +132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7, +10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,1315} +,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0, +573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,0 +,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0, +936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{140 +,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{ +6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0, +505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10, +11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981}, +{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{ +138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,166 +},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135, +11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7, +11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292}, +{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0, +1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6, +10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{ +137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11, +1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0, +699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11, +6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811 +},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139, +10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9, +0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0, +155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363 +},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6, +0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155} +,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10, +73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11, +107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0, +341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434 +},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10, +725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,460} +,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10, +659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{ +133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11, +221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,10 +,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},{ +133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,212 +},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0, +273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0, +543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0, +250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10, +495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{146 +,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8, +0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},{ +5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727} +,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{ +9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299} +,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11, +202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{4 +,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{ +139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{ +136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,11, +569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11, +711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6, +11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{11 +,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5 +,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13 +,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{ +7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4 +,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676} +,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133, +10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,703} +,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{ +9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138 +,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9 +,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219} +,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780}, +{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10 +,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0, +2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,1848} +,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0, +2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{ +135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,841 +},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{137 +,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464}, +{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11 +,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526}, +{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11, +31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0, +68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10 +,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{ +140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11, +279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133, +11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101 +},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,10 +,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{135 +,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,157 +},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11, +118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10, +11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11 +,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{ +135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11, +429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0, +1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808 +},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10, +498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005}, +{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11, +916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,0 +,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10, +983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11, +513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7, +11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,751 +},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0, +582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{ +10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,228 +},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140} +,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11, +344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,0 +,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0, +1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14, +11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0, +494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10, +515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,0 +,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0, +315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{ +11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0, +668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{ +12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524}, +{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13, +0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221 +},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{ +135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{ +8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11, +603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,11 +,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0, +31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514} +,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,0 +,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10, +181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142, +10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165}, +{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7, +10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{12 +,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{ +9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139}, +{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10, +1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10, +80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{142 +,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{ +5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0, +102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11, +501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},{ +135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0 +,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442 +},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{ +7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7, +10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785}, +{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},{6 +,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{ +136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{ +5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5 +,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{ +134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0, +251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11, +695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{134 +,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11 +,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11, +839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,10 +,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0, +370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535 +},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10, +117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134, +0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{140 +,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{ +12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10, +1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11, +1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213 +},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,11 +,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6, +11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},{ +5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5, +10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,1013 +},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60} +,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{ +7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148 +},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,11 +,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{ +134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,418 +},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10, +215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{135 +,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0, +1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{ +135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{ +11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9 +,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,541 +},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0, +86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45}, +{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79} +,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{ +14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148, +0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15, +10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4, +10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,0, +1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11, +312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{ +11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10 +,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89 +},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290} +,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945} +,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6, +11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},{ +6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0, +420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7, +0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{ +13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0, +1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,0 +,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639} +,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11, +0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10 +,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10, +410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886}, +{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11 +,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11 +,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{7 +,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0, +691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139}, +{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9 +,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{ +141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{135, +10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{ +10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143} +,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135, +10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0 +,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{ +135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{ +15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{ +10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198} +,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664} +,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135, +0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{ +142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133, +0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0, +709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{ +132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{ +150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,330 +},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11, +328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},{ +7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5 +,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135 +,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10}, +{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21}, +{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0, +1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133, +0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198}, +{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,42 +},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10, +492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10, +404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13, +10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,420} +,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{ +9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0 +,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228 +},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390 +},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0, +190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{ +134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{ +135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0, +764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,0 +,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008}, +{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10, +759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{ +7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0, +355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250 +},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{ +132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,11 +,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7, +10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},{ +10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7, +0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255} +,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11 +,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,1999} +,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11, +26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11, +579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0, +507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10, +1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149, +10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},{ +7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{ +135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,737 +},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11, +890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},{ +136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10 +,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{ +133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746}, +{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0, +884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6, +0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{ +145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0, +1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,11 +,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0, +904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371 +},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572} +,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11, +397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10, +342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11, +0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9, +10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10, +705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10 +,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{ +10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10, +201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{11 +,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761} +,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10, +868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{11 +,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220} +,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10, +474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{12 +,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{ +13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10, +403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{14 +,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14 +,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401} +,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10, +74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10, +154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103 +},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90} +,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,22 +},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11, +441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0, +1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{ +138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133, +11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},{ +135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,11 +,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11, +340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109}, +{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36} +,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298} +,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{ +15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{ +10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{ +135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,476 +},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824 +},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133, +0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10 +,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783}, +{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206} +,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,389 +},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0, +912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136, +11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{5 +,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{ +10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,1968 +},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56 +},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6 +,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{ +143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0, +726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{ +133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{ +4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10 +,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,600 +},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225} +,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0, +1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11, +103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,0 +,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92 +},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11, +870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4, +10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10, +192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},{ +7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0, +253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624 +},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{ +12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149}, +{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{ +11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,11 +,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204} +,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{134 +,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5 +,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5 +,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0, +1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10, +0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0, +136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0, +474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0, +343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{6 +,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11, +468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,0 +,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428}, +{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4, +10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,1871} +,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005} +,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,1564 +},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570 +},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7, +11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},{ +135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138, +11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11, +967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10, +138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0, +446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{ +135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{ +149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{ +12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100} +,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83} +,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11, +530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{ +10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10, +11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,847 +},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901 +},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33 +},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{ +135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12, +0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0, +660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,10 +,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8, +10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12, +10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138, +10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},{ +4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{ +133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11, +364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{12 +,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{ +7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651}, +{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0, +202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27}, +{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,10 +,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139, +11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5, +0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12, +0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0, +242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0, +830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0, +327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4, +0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{7 +,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,719 +},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139 +},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14, +11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7, +10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{ +134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,11, +596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,0 +,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574}, +{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161} +,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,344 +},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155 +},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11, +379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5, +11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{5 +,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7, +11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,483 +},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{ +136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410}, +{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10, +411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{ +137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0, +496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147, +11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5, +11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},{ +145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0, +380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0, +345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168}, +{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,10 +,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7, +0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0 +,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11 +,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{ +132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0, +1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11, +544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,0 +,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11 +,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0 +,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{ +18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0, +395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0, +210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227}, +{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579}, +{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,108 +},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{ +138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0, +497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132, +11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{ +7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912}, +{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,347 +},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,10 +,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{ +132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0, +1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680 +},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0, +101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{ +7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10, +11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10, +1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,11 +,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11 +,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{ +13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10, +854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{150 +,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0, +1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481 +},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10, +275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},{ +6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155 +},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10, +147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0, +1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{134 +,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10 +,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,834} +,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,1265 +},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465} +,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137, +11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9, +11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7, +11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132, +11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11 +,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10, +190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,1138} +,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660} +,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587} +,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569} +,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{134 +,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12, +10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413}, +{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,54 +},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8, +0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296}, +{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{ +142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,11, +755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{ +132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,819 +},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11, +630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{132 +,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655}, +{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11, +634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11, +445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0, +1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{ +13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11 +,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11 +,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13, +11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{141 +,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11}, +{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11, +655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,1259} +,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10, +649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,11 +,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{146 +,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0 +,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,1054} +,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935} +,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12 +,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0, +188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193 +},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{ +18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137, +0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0, +321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55} +,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{ +142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,445 +},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184} +,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11, +546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{ +132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{ +140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,11 +,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10, +577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10, +726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,10 +,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{ +11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10, +930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{12 +,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131}, +{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10, +461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14, +10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{ +148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{ +7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{ +17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{ +133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{ +7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{ +9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11 +,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14 +,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{ +138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,11, +1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9, +10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145}, +{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,73 +},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10, +120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10, +21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11, +614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7, +0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5, +0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399 +},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{ +11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72}, +{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0, +507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10, +531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134, +11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{ +9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0, +653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10 +,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{ +10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14, +0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4, +10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{ +11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164} +,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10, +452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10, +161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{ +142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10, +420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,0 +,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{ +138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0 +,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10 +,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10, +477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10 +,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116 +},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8 +,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9, +0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11, +734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{ +140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8 +,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11, +613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11, +32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799} +,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11 +,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138, +11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7, +11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8, +11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{ +8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10 +,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6, +11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4, +11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11, +916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{ +146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{ +7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11, +214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471 +},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9 +,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11 +,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{ +10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929 +},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11 +,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14, +11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0 +,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215 +},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11, +126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7, +10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0, +566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11, +796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,1530} +,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4 +,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10, +292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12, +10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6, +10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10, +616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142 +,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021 +},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0, +280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133, +11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598} +,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249}, +{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659}, +{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{ +146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7 +,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11 +,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{ +139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137, +11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{ +132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0, +627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0, +388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0, +490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0, +566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11 +,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0 +,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682} +,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11 +,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11, +660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337 +},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013 +},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10, +740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582 +},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143, +11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11 +,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198} +,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0, +19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7, +11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7, +10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{ +132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0, +2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768}, +{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14, +0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142, +10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11, +576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0 +,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0 +,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10, +547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141 +,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{ +137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5 +,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394 +},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132, +11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{ +11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134, +0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7, +11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{18 +,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{ +140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436} +,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11, +171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8, +0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10, +11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038}, +{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{ +7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{ +142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917}, +{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{ +140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0}, +{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905 +},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26} +,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837}, +{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138 +,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{ +134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{ +139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271}, +{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11, +99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11, +209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7, +11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{ +134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0 +,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{ +10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{ +135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228} +,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10, +496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7, +0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0, +752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179 +},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9, +11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798}, +{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11, +248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0, +958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11, +345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10, +744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9, +10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{ +151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936} +,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916 +},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{ +12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9 +,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0 +,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648 +},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10, +335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14 +,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{ +7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553} +,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0, +879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11, +723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11, +719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11 +,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11, +472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{ +139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{ +143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{ +11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480} +,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0, +604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447} +,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10, +60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10 +,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10, +1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{ +6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{ +14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221 +},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10 +,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0, +379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11, +1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{ +135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932} +,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0 +,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10, +1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7, +10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,111} +,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278 +},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0, +310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33} +,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354} +,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{ +9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58 +},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619 +},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10, +2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0, +1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891 +},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{ +148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10 +,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{ +134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{ +6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358}, +{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5, +11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11, +11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0 +,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140, +0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{ +137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10, +197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491}, +{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0 +,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0, +511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10, +219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{ +132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376} +,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11 +,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8, +10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{ +138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0, +777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{ +138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11, +104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{ +142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{ +135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{133 +,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9 +,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,326 +},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{ +10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0, +757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11, +0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0, +1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815}, +{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{ +134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{ +138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0, +926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{ +137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0, +1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0, +985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11, +411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,10 +,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465 +},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{ +137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10, +242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,10 +,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{12 +,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487} +,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10, +286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11, +481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{ +4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11, +1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{4 +,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116} +,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11, +516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10, +517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0, +829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0, +1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,10 +,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{ +134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519}, +{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0, +895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,0 +,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402}, +{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201}, +{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0, +1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{ +135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81}, +{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0, +1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0, +212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5 +,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8} +,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520}, +{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135, +11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{ +135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792}, +{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11, +1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0, +1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0, +9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0 +,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0, +1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5, +10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11, +11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,642} +,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67} +,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,1016 +},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11 +,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139, +10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0, +1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{ +143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904} +,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10, +618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688}, +{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7 +,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9 +,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{ +141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12 +,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136, +10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13, +11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5, +0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757} +,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11, +817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11, +235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{ +132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14, +0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133, +10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0, +370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606} +,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0, +774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695}, +{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11 +,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0, +189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174 +},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221 +},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{151 +,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490}, +{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11, +146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140, +10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{11 +,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0, +325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7, +10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},{ +134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6,0 +,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0 +,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11, +0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10 +,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150, +0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{5 +,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{ +11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11, +263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0, +285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327} +,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7, +11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{ +141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0 +,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{ +150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11 +,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{ +135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11, +569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11, +1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154 +},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38 +},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917}, +{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,0 +,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7, +11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,704 +},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{134 +,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7 +,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7, +10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0, +217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732} +,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33}, +{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11, +268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,0 +,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11 +,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0, +27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578} +,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6, +10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136, +11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},{ +4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7, +0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252} +,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{ +13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10 +,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{ +12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,10, +527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,0 +,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10, +178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,10 +,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142, +10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11, +705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},{ +16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121}, +{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{ +7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294} +,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829} +,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855}, +{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0 +,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929 +},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{ +12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0, +197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7 +,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55} +,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373}, +{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11, +702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{139 +,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{ +21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{ +133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8 +,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0, +1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,11 +,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{ +141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{ +14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6 +,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8, +11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232}, +{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10, +27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344} +,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,11 +,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{ +133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234}, +{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,11 +,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531 +},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20} +,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0, +920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10, +909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268 +},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11, +1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7, +10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13, +10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{7 +,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342} +,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0, +223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10, +915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,0 +,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{142 +,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135, +11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0 +,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10, +675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13, +11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0 +,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{ +4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{ +8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14} +,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10, +161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,11 +,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300}, +{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{ +133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,14 +},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111} +,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11, +1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10, +273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,11 +,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,772 +},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{132 +,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134, +0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284}, +{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11, +332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{ +139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,706 +},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4, +0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10, +11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7, +10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,767} +,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140, +0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},{ +10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844} +,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263} +,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823} +,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139, +10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11, +21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{ +135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420}, +{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7, +10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11, +11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0, +41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10, +493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},{ +5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921} +,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622}, +{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89}, +{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6 +,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0, +952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11, +569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{ +141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7, +10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844}, +{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{151 +,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{ +10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0, +459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{ +134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179} +,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113}, +{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11 +,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0, +1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12, +10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{ +135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{ +133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0, +260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0, +1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10, +350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},{ +137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140,0 +,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8, +11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13, +11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114}, +{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831} +,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7, +10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10, +0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0 +,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5, +10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497} +,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0, +634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,10 +,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11 +,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11, +11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304}, +{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11, +95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14, +11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{ +136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,10, +1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738 +},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5 +,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10 +,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13, +10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141, +11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12, +11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10 +,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11, +10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},{ +7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10, +10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{5 +,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0, +340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137, +11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11 +,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9, +11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0, +1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10, +165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,11 +,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0 +,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{135 +,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0, +675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225 +},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148 +,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0 +,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14, +10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,147} +,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430} +,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10, +258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7, +11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{135 +,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135, +11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11, +1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{5 +,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,590 +},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132, +11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{9 +,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460} +,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535} +,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0 +,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{ +134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{ +140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718} +,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15} +,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240} +,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,66 +},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11, +915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11, +376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14, +11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10, +11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{ +147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{ +143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{ +7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481} +,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4 +,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351} +,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11, +884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,10 +,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0, +356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{ +7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132, +10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,165} +,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0, +809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{ +142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11 +,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{5 +,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11 +,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{ +13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10, +116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{4 +,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{ +132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,1773 +},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,10 +,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{ +148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704} +,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0, +84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,11 +,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135, +0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24 +},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0, +222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402} +,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562}, +{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89} +,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{ +139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,10 +,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{ +138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,1645 +},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450 +},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{ +145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420} +,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0, +1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138 +,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10, +166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10, +317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0, +455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,11 +,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10, +388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,11 +,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5, +11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7, +10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395}, +{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{ +135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10, +205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15, +0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0, +696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169 +},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715} +,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0, +496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0, +1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11, +493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7, +0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0, +545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,0 +,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11 +,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0, +1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527 +},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0, +13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{ +142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429} +,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{ +139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320} +,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,905 +},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0, +1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11, +235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132, +10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6, +11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{135 +,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0, +147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9 +,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150, +11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{ +136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{ +137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552} +,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5 +,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11, +10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{ +139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742}, +{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235 +},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159 +},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249 +},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80} +,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59}, +{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0, +1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11, +331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{14 +,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{ +142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9, +11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123}, +{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{ +142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,10 +,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19 +},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10, +768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,971} +,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,11 +,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266 +},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194}, +{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603}, +{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10, +643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11, +1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{12 +,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542} +,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10, +355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{ +132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0 +,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0, +263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11, +302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623}, +{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0 +,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0, +647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10, +356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10, +29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6, +11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367}, +{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,11 +,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},{ +6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184}, +{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0, +199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266}, +{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519} +,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0, +606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134, +11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135, +11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58}, +{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0, +481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{ +142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978} +,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0, +253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11, +63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{ +148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0 +,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325 +},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133, +10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{134 +,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0, +365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11, +302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{ +142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{ +13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141, +0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},{ +135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{ +17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,843 +},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472} +,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11 +,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0, +657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18, +0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6 +,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{ +132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132,0 +,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11 +,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{11 +,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830} +,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0, +637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42 +},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014}, +{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{ +11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{ +11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553} +,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179}, +{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86}, +{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156}, +{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,1013 +},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0, +503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925 +},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0 +,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0, +868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933 +},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{ +15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18, +0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0, +42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133, +0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7 +,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6, +11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{ +137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,1973 +},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62 +},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114} +,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959}, +{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6, +0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7, +11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6, +0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136, +11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9, +11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{12 +,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50} +,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7}, +{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,99 +},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707 +},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11, +197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11, +74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131 +},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2}, +{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11 +,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12, +11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140, +11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{6 +,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11, +653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798} +,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11, +208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0, +439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722} +,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{ +133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133, +11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10, +253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615} +,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,624 +},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10, +382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10, +11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639 +},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10, +816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11, +265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{6 +,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6 +,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8 +,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{ +11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0, +226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232}, +{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44}, +{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698} +,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,10 +,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10, +1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11, +11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144}, +{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11, +81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250} +,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10, +250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,252} +,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{ +6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0 +,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138, +11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7, +11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19, +11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{5 +,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{ +132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,577 +},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10 +,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129} +,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136, +0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11, +10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0 +,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0 +,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{143 +,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{ +7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011} +,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0 +,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19 +,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11, +155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137, +11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10, +868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{ +138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,10, +1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10, +660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12, +11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11 +,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8, +11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0, +1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11, +57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11, +1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8, +11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,1246 +},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6, +11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7, +0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692}, +{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{ +18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9, +11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{15 +,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8 +,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313} +,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{ +9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837} +,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,46 +},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,0 +,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7, +11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7, +11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11 +,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11, +311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12, +11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{ +15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,304 +},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{ +10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166} +,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5, +11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0, +32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{ +134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{ +5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0, +116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0, +89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7, +0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},{ +13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,11 +,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{135 +,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{ +133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11, +947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,0 +,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{ +139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0 +,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136, +10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11, +494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10, +611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{139 +,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703} +,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9 +,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132, +11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12, +11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{ +149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133, +11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529 +},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437}, +{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,1758 +},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10, +579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0, +335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5, +11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0, +205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0, +370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10, +501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0, +286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10, +71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493} +,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11, +10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,980} +,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11, +384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18, +0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11, +676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{ +146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{ +134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10, +310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14, +11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136, +11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11, +5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9, +10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12, +0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8, +0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350} +,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{ +11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10, +597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{139 +,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12, +11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},{ +135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9, +0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0, +929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247 +},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137 +,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11, +606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,10 +,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275} +,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0 +,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10 +,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0, +128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,0 +,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0 +,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11 +,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0, +892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11, +889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,10 +,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0 +,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11 +,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0, +60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10, +155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,0 +,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5, +10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,409 +},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11, +202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135, +0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348}, +{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,11 +,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0, +315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0, +1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201}, +{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11, +769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{7 +,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576}, +{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10, +945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141, +11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0, +237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,0 +,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132, +11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},{ +140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530}, +{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11, +11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{137 +,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,0, +784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509 +},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0, +186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0, +208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0, +218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184}, +{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8, +11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},{ +7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7, +10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,1428} +,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0, +1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{ +137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,360 +},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0, +509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,739} +,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{ +143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{ +7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0, +1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5, +10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},{ +13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10 +,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157} +,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11, +133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},{ +4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{ +145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11, +758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7, +11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,1065 +},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0 +,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0, +528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150, +0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{ +138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11, +502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,11 +,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{14 +,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358} +,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,376 +},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{ +133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135, +11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556 +},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{ +143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212} +,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0, +84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11, +811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0, +1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256} +,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0 +,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0 +,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12 +,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5, +10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{ +14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7 +,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990} +,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{ +133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87}, +{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389} +,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,714 +},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0, +215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95}, +{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7, +10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,102} +,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10, +120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7 +,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0, +937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{ +137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074} +,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135, +11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},{ +132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{ +8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11, +1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11, +520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{11 +,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11, +339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500}, +{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{ +141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{ +138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0, +225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11, +72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7, +10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0, +1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11, +10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0 +,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11, +1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864}, +{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137} +,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317}, +{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836}, +{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692} +,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,55 +},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11, +617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138, +11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0, +385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133, +10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0, +365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11, +639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115 +},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0, +1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0, +1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{ +6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0, +921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0 +,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0, +820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922 +},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{ +15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0 +,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888 +},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11, +185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7, +11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9, +10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11, +401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9 +,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0, +912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958} +,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{ +141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293} +,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0, +22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163 +},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{ +142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10, +1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0, +879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52}, +{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977}, +{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10, +808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135 +,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{ +136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0, +2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134 +,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11 +,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0 +,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{ +150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{ +135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7, +11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10, +1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373 +},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{ +10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196}, +{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13, +10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841} +,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0, +240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0 +,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11 +,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10 +,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14 +,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11, +685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209 +},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0, +725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50 +},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138, +0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779}, +{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197}, +{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0, +315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11, +117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11 +,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0, +674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335} +,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0 +,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{ +9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14} +,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192 +},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684}, +{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10, +1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11, +10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{11 +,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7, +10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10, +1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10 +,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344}, +{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{ +18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150 +,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11, +0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380}, +{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6, +11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10 +,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10 +,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213}, +{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811 +},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0, +895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435 +},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0 +,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{ +133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13} +,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503} +,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0, +109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134 +,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270} +,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14 +,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10, +766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{ +12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249} +,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948 +},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135, +11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11 +,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11, +1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0, +212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10 +,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{ +135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138, +10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0, +11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139, +10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13 +,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7 +,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11, +149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10 +,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{ +136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11, +322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5, +10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{ +8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0 +,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139, +11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59 +},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{ +135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69}, +{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142, +0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{ +7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0 +,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{ +139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0 +,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10, +317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{ +146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832 +},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10, +398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73 +},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0, +51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297}, +{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639}, +{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893 +},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11, +1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11, +551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794 +},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11 +,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{ +10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11, +352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11 +,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785} +,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11, +902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11 +,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339} +,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11, +591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13, +11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{ +13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11, +478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11, +148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14 +,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420} +,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{ +15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17 +,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18, +11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149 +,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442} +,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{ +136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9 +,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{ +12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22 +},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311 +},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{ +12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0 +,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12, +0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{6 +,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9 +,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0 +,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607 +},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10, +1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10, +1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135, +11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0 +,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142 +,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11, +168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142, +11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{ +141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505} +,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{ +9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11, +616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{ +137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{ +136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0, +637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0 +,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137 +,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512 +},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11, +433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7, +10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811}, +{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10, +30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020}, +{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{ +134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0, +379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{ +149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0, +801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10 +,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138 +,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0, +1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81} +,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10, +946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10, +491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135 +,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{ +7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{ +10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466 +},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0 +,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11, +258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{ +147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6, +0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11 +,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11, +122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11 +,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{ +12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11, +478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13, +11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{ +15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{ +135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710 +},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653 +},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0 +,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677}, +{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10, +0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4, +11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,491 +},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138 +,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473} +,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0 +,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48}, +{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765}, +{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385} +,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795}, +{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0, +674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0, +1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10, +435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12, +10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4, +0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{ +10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397}, +{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174}, +{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10 +,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{ +134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569}, +{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11, +319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190}, +{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0, +202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9, +11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145, +11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137 +,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{ +136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172}, +{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287}, +{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4 +,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9, +11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384}, +{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{ +134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11, +909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139, +10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7 +,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{ +10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116} +,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133 +,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{ +139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426} +,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10, +136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10, +999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{ +135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11, +423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{ +140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0, +1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10 +,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9, +11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133, +11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10, +805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10, +2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149 +,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247 +},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10 +,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337} +,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0, +710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196} +,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10, +546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4, +11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90}, +{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147, +10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0, +478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135, +11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100}, +{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581}, +{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137, +0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108} +,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,501 +},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{ +8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0, +277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11, +1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11, +11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406}, +{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9 +,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{ +11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11, +822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581 +},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{ +10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0, +288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0, +1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10, +414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135, +11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{ +4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{ +6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146, +10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0 +,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629}, +{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{ +5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10, +235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7, +10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{ +9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{ +11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10, +848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12 +,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432} +,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10, +390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{ +133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11, +1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10, +1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533}, +{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132, +11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{ +20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8, +10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0, +269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915}, +{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469}, +{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341 +},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0, +19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055} +,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11, +29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140, +10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{ +21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3}, +{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10, +462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11, +11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},{ +5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13, +11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11 +,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10, +195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{10 +,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221 +},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,10 +,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{ +7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143}, +{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6 +,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{ +133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{ +145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10, +959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,11 +,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9, +0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0, +898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189 +},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156} +,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13}, +{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548}, +{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0, +707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733} +,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,11 +,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},{ +5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9, +11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{12 +,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147, +0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136, +10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{10 +,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11, +158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14, +11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10 +,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{7 +,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11, +0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0, +137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7, +0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42}, +{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0, +238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{ +148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7, +10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10 +,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{15 +,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0 +,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11, +11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23, +0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7, +10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10, +10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6, +0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9 +,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11, +896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{141 +,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{ +146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0 +,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},{ +4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{ +138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673}, +{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0, +353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10, +1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10, +471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246} +,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9 +,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759} +,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10, +987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{12 +,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{ +14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{ +132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{ +135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164}, +{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11, +134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},{ +8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135, +0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11, +50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11, +592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335 +},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11, +60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,11 +,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11 +,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143, +11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0, +746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11, +24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11, +768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,10 +,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0 +,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249}, +{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432}, +{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11, +744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10, +20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10, +920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{ +137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11, +927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{7 +,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11, +502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0, +429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0, +621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{ +133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10, +613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670} +,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568} +,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682 +},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476}, +{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8 +,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188}, +{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0, +109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10, +1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11 +,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0, +63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802 +},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11 +,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11, +347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11 +,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11, +556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11, +11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667}, +{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11, +325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12 +,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368}, +{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60 +},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11, +81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9 +,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{ +140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582 +},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139, +11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274} +,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0, +53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0 +,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{ +134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5 +,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0, +967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0, +1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11, +914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{ +139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11, +482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{ +135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0, +1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11, +1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7 +,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731 +},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47}, +{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10, +255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0, +153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{ +6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11, +1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10 +,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11, +177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0, +165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0, +449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5 +,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696} +,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7 +,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4 +,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950} +,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10, +805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{ +14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{ +13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477}, +{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10, +1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11 +,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11, +330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12, +0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},{ +6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020 +},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0, +721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{ +9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,392 +},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117 +},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6 +,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114}, +{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0, +1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{ +133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{ +134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133, +0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{ +12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0, +1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11, +483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0, +977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{ +132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135}, +{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796 +},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{ +7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672}, +{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{ +5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11, +11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11 +,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10, +110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10, +1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14, +11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0, +607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10, +33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133, +10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403}, +{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157} +,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10, +1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{ +139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111} +,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11, +158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15, +11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11 +,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724 +},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135, +10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697 +},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732}, +{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9, +0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9, +10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11 +,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10, +80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607} +,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11, +965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{4 +,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{ +140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{ +17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11 +,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6, +0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{ +7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0, +416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735}, +{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11, +469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0, +296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0 +,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0 +,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0, +1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11 +,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11, +11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{ +15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6, +11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11, +11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14, +0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936} +,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14 +,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8, +11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8, +0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{ +10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11, +0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390 +},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{ +13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0, +395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10, +1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0, +856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810}, +{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0, +377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151 +},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36} +,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32}, +{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150 +,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501} +,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180} +,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139, +10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138, +0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{ +10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11, +560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394}, +{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7, +10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,1587} +,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133 +,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59}, +{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285}, +{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463}, +{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0, +703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0, +53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{ +132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{ +138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459}, +{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301} +,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{ +140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0, +209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{ +13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0 +,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{137 +,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0 +,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11 +,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9, +11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0, +202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10, +0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0, +1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18, +0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0 +,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135, +11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},{ +4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95} +,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541 +},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10, +109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{ +132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584 +},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136 +},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135, +11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450}, +{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10, +45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673 +},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0 +,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8 +,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85}, +{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28} +,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11 +,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5 +,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{ +134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0, +385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0, +347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0, +65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0, +469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11, +342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0 +,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10, +11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310 +},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546} +,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11, +1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6, +0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12, +11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0 +,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11 +,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7, +10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{ +10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10, +529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11, +100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0 +,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13, +10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768 +},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383}, +{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{ +11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454} +,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11, +312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14, +11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15 +,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{ +145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733}, +{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0, +2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137 +,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7, +11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975} +,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11, +367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11, +520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{ +11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18, +0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222 +},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11, +396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6, +10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10 +,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0, +26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11, +253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11, +251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12, +11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{ +5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{ +133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10, +322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145, +10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11 +,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885}, +{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10, +146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938} +,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{ +152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{ +134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364}, +{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{ +9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466 +},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0, +1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9 +,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0 +,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0, +179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4, +0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{ +7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0, +820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11, +523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11 +,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{ +10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0, +422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695 +},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0, +1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6 +,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{ +8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135 +,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10 +,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424} +,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10 +,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74 +},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11, +684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10, +422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10, +387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4, +0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11, +0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134 +,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447}, +{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940 +},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614}, +{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0, +1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0, +81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0 +,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{ +136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{ +138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{ +6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324} +,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{ +135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362 +},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242}, +{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115} +,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11 +,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488} +,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241 +},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{ +135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{ +141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0, +244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11, +952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11 +,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5, +10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686}, +{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253} +,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,684 +},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141, +11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139, +10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0 +,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0, +785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{ +134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498}, +{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146 +,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{ +12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5, +11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0, +1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10, +10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552 +},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10, +373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11, +60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10, +702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0, +488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10 +,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0, +150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110} +,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7, +11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{ +10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10, +633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{ +134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228 +},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0, +60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{ +148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025}, +{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7, +10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{ +12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33} +,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0, +723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11, +548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0, +246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4 +,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10, +640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136 +,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11, +811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5, +0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506}, +{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11 +,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{ +13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056} +,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10, +10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9, +0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0, +264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136} +,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11, +435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0, +1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0 +,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5 +,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{ +5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0, +446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5, +10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0, +1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11, +719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0, +568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153}, +{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10, +504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10, +975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172 +},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0 +,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134 +,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0, +306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{ +135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{ +138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813} +,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11, +120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11 +,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10 +,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4, +10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201 +},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11, +62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10 +,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40 +},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0, +16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0 +,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0, +994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11 +,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{7 +,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{ +10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{ +9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,772 +},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508} +,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11, +607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139 +,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133, +0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7, +0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10 +,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{ +4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11, +290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4, +0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0, +918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84 +},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10, +458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5, +0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10, +1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997}, +{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11, +1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11, +24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231}, +{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10 +,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652} +,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11, +365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{ +12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486 +},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0, +1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98} +,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11, +176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10 +,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10, +199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13, +0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177 +},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712 +},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11, +776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6 +,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855} +,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{ +9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0 +,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11 +,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10 +,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15, +10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12, +11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540} +,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745}, +{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0, +817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0, +538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{ +11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{ +10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10 +,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0 +,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12 +},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{ +132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4 +,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933} +,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077 +},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11 +,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14, +0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989} +,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0, +394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32}, +{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35 +},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375} +,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,1003 +},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0, +328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0 +,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0 +,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632}, +{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223} +,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10, +814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534 +},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11, +34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6}, +{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635} +,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12, +0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11, +308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{ +134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11, +472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0, +659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{ +133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9 +,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9, +11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{ +11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78}, +{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8 +,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7 +,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962 +},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10, +942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8, +10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{ +14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10 +,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{ +134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,707 +},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0, +1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{ +135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0, +469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11, +13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11, +696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{132 +,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11, +698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236} +,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0, +370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310}, +{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{ +7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0, +458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{135 +,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142, +11,410},{9,11,660},{138,11,347} }; -static const uint32_t kStaticDictionaryBuckets[] = { - 0x000002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000203, 0x00050e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x001301, 0x000000, 0x000000, 0x000000, 0x001401, 0x000000, 0x001501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x001602, - 0x000000, 0x000000, 0x001804, 0x000000, 0x001c18, 0x000000, 0x003402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x003606, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x003c0f, 0x004b12, 0x000000, 0x000000, - 0x000000, 0x005d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x005f01, 0x000000, 0x006001, 0x000000, 0x006101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x006202, 0x006405, 0x006902, 0x006b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x006d01, 0x000000, 0x006e01, - 0x006f01, 0x000000, 0x007005, 0x007506, 0x007b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x007c03, 0x007f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x008002, 0x000000, 0x000000, 0x008201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x008303, 0x000000, 0x000000, 0x008602, 0x000000, 0x000000, - 0x000000, 0x008801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x008901, - 0x008a03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x008d01, 0x008e01, 0x008f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x009001, 0x000000, 0x000000, 0x000000, 0x009103, 0x009402, 0x009601, 0x009701, - 0x000000, 0x000000, 0x009801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x009901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x009a05, 0x000000, 0x000000, 0x000000, 0x000000, 0x009f16, 0x00b501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00b605, 0x000000, - 0x000000, 0x000000, 0x00bb01, 0x00bc03, 0x000000, 0x000000, 0x00bf02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00c103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00c405, 0x00c907, - 0x00d001, 0x000000, 0x000000, 0x00d10e, 0x000000, 0x00df01, 0x000000, 0x000000, - 0x000000, 0x00e006, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x00e601, 0x000000, 0x000000, 0x000000, - 0x00e708, 0x000000, 0x00ef02, 0x000000, 0x000000, 0x00f102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x00f302, 0x000000, 0x000000, 0x000000, 0x00f503, 0x000000, 0x000000, - 0x00f802, 0x00fa02, 0x00fc05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x010103, 0x000000, 0x000000, 0x010402, 0x010604, 0x000000, 0x000000, 0x000000, - 0x010a01, 0x000000, 0x000000, 0x010b01, 0x000000, 0x010c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x010e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x010f01, 0x000000, - 0x011004, 0x000000, 0x011401, 0x000000, 0x011508, 0x011d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x011e02, 0x000000, 0x012001, 0x012101, 0x012204, 0x000000, - 0x000000, 0x000000, 0x012601, 0x000000, 0x000000, 0x012701, 0x012801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x012901, 0x000000, 0x000000, 0x000000, 0x012a06, 0x000000, 0x000000, - 0x013013, 0x000000, 0x014303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x014601, 0x000000, 0x014701, 0x014807, 0x000000, 0x000000, 0x000000, 0x000000, - 0x014f04, 0x000000, 0x000000, 0x015301, 0x000000, 0x015401, 0x015501, 0x015603, - 0x000000, 0x000000, 0x015902, 0x000000, 0x015b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x015c02, 0x015e04, 0x000000, 0x000000, 0x016208, - 0x000000, 0x016a01, 0x000000, 0x016b04, 0x000000, 0x016f01, 0x017001, 0x000000, - 0x017102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x017301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x017402, 0x000000, 0x017601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x017701, 0x017811, 0x000000, 0x000000, 0x018901, - 0x018a01, 0x018b02, 0x000000, 0x000000, 0x018d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x018f08, 0x000000, 0x000000, 0x01970c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x01a301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x01a401, 0x000000, 0x000000, 0x01a501, 0x01a606, 0x000000, 0x000000, 0x01ac06, - 0x01b201, 0x01b306, 0x01b901, 0x000000, 0x000000, 0x01ba01, 0x000000, 0x01bb01, - 0x01bc08, 0x01c403, 0x01c701, 0x000000, 0x01c801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x01c901, 0x000000, 0x000000, 0x000000, 0x01ca01, 0x000000, - 0x000000, 0x000000, 0x01cb02, 0x000000, 0x01cd01, 0x01ce02, 0x01d001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x01d103, 0x01d401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x01d504, 0x000000, 0x000000, - 0x000000, 0x01d902, 0x000000, 0x01db07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x01e202, 0x000000, 0x01e401, 0x000000, 0x000000, 0x000000, 0x01e502, 0x000000, - 0x000000, 0x01e703, 0x01ea01, 0x01eb05, 0x000000, 0x000000, 0x01f002, 0x01f201, - 0x01f301, 0x000000, 0x01f404, 0x000000, 0x000000, 0x000000, 0x01f801, 0x000000, - 0x000000, 0x01f901, 0x000000, 0x000000, 0x000000, 0x01fa02, 0x000000, 0x000000, - 0x000000, 0x01fc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x01fe01, 0x01ff07, - 0x02060a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x021001, - 0x021104, 0x000000, 0x000000, 0x000000, 0x021509, 0x000000, 0x000000, 0x000000, - 0x000000, 0x021e0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x022804, 0x000000, 0x000000, 0x000000, 0x000000, - 0x022c03, 0x022f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x023003, 0x000000, 0x023301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x023401, 0x023509, 0x000000, 0x023e2c, 0x000000, 0x026a01, 0x000000, - 0x026b03, 0x000000, 0x000000, 0x026e01, 0x026f01, 0x000000, 0x000000, 0x000000, - 0x027001, 0x000000, 0x000000, 0x027101, 0x027201, 0x000000, 0x000000, 0x027302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x027501, 0x000000, 0x02760a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x028002, 0x000000, 0x000000, 0x000000, 0x000000, 0x02820d, 0x028f0c, 0x029b05, - 0x000000, 0x000000, 0x000000, 0x02a001, 0x000000, 0x000000, 0x000000, 0x02a108, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x02a905, 0x000000, 0x02ae03, 0x000000, 0x02b103, 0x000000, 0x02b406, 0x02ba01, - 0x02bb04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x02bf01, - 0x02c002, 0x000000, 0x000000, 0x000000, 0x000000, 0x02c203, 0x02c501, 0x000000, - 0x02c60f, 0x000000, 0x000000, 0x000000, 0x000000, 0x02d503, 0x000000, 0x000000, - 0x02d801, 0x000000, 0x000000, 0x000000, 0x02d901, 0x02da15, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x02ef0a, 0x000000, 0x000000, 0x000000, 0x02f901, - 0x000000, 0x02fa04, 0x000000, 0x000000, 0x02fe03, 0x000000, 0x000000, 0x000000, - 0x030104, 0x030501, 0x000000, 0x000000, 0x030601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x030701, - 0x000000, 0x000000, 0x000000, 0x030806, 0x030e02, 0x000000, 0x000000, 0x000000, - 0x031003, 0x031302, 0x000000, 0x000000, 0x000000, 0x000000, 0x031503, 0x000000, - 0x000000, 0x000000, 0x031801, 0x000000, 0x000000, 0x000000, 0x000000, 0x03190a, - 0x000000, 0x000000, 0x03230f, 0x033202, 0x033406, 0x000000, 0x033a07, 0x000000, - 0x000000, 0x000000, 0x034101, 0x000000, 0x000000, 0x034206, 0x000000, 0x000000, - 0x000000, 0x034803, 0x000000, 0x034b06, 0x000000, 0x035101, 0x035208, 0x035a01, - 0x000000, 0x035b0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x036902, 0x000000, 0x036b01, 0x000000, 0x036c0d, 0x037903, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x037c01, - 0x037d04, 0x038101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x038201, 0x000000, 0x000000, 0x000000, 0x038304, 0x038702, 0x038901, - 0x000000, 0x000000, 0x000000, 0x038a01, 0x000000, 0x038b01, 0x038c01, 0x000000, - 0x038d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x038e05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x039306, 0x000000, 0x000000, 0x000000, 0x039903, - 0x039c05, 0x000000, 0x03a104, 0x000000, 0x03a509, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x03ae01, 0x000000, 0x000000, 0x03af09, 0x000000, 0x03b801, - 0x03b901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x03ba07, - 0x000000, 0x03c101, 0x03c20d, 0x000000, 0x000000, 0x03cf01, 0x000000, 0x000000, - 0x03d001, 0x03d101, 0x03d201, 0x03d301, 0x000000, 0x03d403, 0x000000, 0x000000, - 0x000000, 0x000000, 0x03d701, 0x000000, 0x000000, 0x03d802, 0x000000, 0x000000, - 0x03da02, 0x03dc02, 0x03de01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x03df01, 0x000000, 0x000000, 0x000000, - 0x03e003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x03e304, - 0x000000, 0x000000, 0x000000, 0x03e702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x03e903, 0x000000, 0x000000, 0x000000, 0x000000, 0x03ec02, 0x03ee02, - 0x000000, 0x000000, 0x000000, 0x03f001, 0x000000, 0x000000, 0x000000, 0x03f101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x03f201, 0x000000, - 0x03f302, 0x000000, 0x000000, 0x000000, 0x000000, 0x03f502, 0x03f704, 0x000000, - 0x000000, 0x000000, 0x03fb01, 0x000000, 0x03fc01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x03fd02, 0x000000, 0x000000, 0x000000, 0x03ff01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x040001, 0x000000, 0x000000, 0x040101, - 0x040204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x040602, 0x000000, - 0x040801, 0x000000, 0x000000, 0x000000, 0x000000, 0x040903, 0x000000, 0x000000, - 0x000000, 0x040c03, 0x040f02, 0x000000, 0x000000, 0x000000, 0x041101, 0x04120a, - 0x000000, 0x000000, 0x041c01, 0x000000, 0x041d03, 0x000000, 0x000000, 0x042001, - 0x000000, 0x000000, 0x000000, 0x042102, 0x000000, 0x000000, 0x042301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x042401, 0x000000, - 0x000000, 0x042501, 0x000000, 0x000000, 0x000000, 0x000000, 0x042601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x042701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x042801, 0x000000, 0x000000, 0x000000, 0x000000, 0x042901, 0x042a02, - 0x000000, 0x000000, 0x000000, 0x042c01, 0x042d02, 0x042f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x043002, 0x000000, 0x043205, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x043704, 0x043b04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x043f06, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x044501, 0x000000, 0x04460c, 0x000000, 0x045205, 0x000000, - 0x000000, 0x000000, 0x045702, 0x045905, 0x000000, 0x045e03, 0x000000, 0x046104, - 0x000000, 0x000000, 0x046503, 0x000000, 0x046801, 0x000000, 0x046902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x046b0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x047701, 0x000000, 0x000000, 0x047801, 0x047902, - 0x000000, 0x047b01, 0x047c01, 0x000000, 0x000000, 0x047d01, 0x047e01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x047f01, 0x000000, 0x048001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x048109, 0x000000, 0x048a01, 0x000000, 0x000000, - 0x000000, 0x048b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x048c02, - 0x000000, 0x048e03, 0x000000, 0x049101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x049201, 0x049301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x049402, 0x049602, 0x049809, 0x000000, 0x04a109, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x04aa1a, 0x000000, 0x000000, 0x04c403, 0x000000, 0x000000, - 0x04c703, 0x000000, 0x000000, 0x04ca01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x04cb01, 0x04cc01, 0x000000, 0x000000, 0x04cd01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x04ce02, - 0x000000, 0x000000, 0x000000, 0x04d00a, 0x000000, 0x000000, 0x04da01, 0x04db02, - 0x04dd02, 0x04df06, 0x000000, 0x000000, 0x000000, 0x000000, 0x04e501, 0x04e603, - 0x04e901, 0x04ea01, 0x000000, 0x000000, 0x000000, 0x04eb01, 0x000000, 0x000000, - 0x04ec01, 0x000000, 0x000000, 0x000000, 0x04ed02, 0x04ef01, 0x000000, 0x000000, - 0x04f001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x04f101, 0x000000, 0x04f206, - 0x000000, 0x000000, 0x000000, 0x000000, 0x04f801, 0x04f902, 0x04fb0d, 0x050802, - 0x000000, 0x000000, 0x050a01, 0x050b01, 0x050c01, 0x000000, 0x000000, 0x050d01, - 0x050e01, 0x050f06, 0x000000, 0x000000, 0x000000, 0x000000, 0x051502, 0x000000, - 0x051707, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x051e01, 0x051f02, 0x000000, 0x052102, 0x000000, 0x052304, - 0x052701, 0x052801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x052901, 0x052a01, 0x052b0b, 0x000000, 0x053601, 0x000000, 0x053705, - 0x000000, 0x000000, 0x000000, 0x000000, 0x053c01, 0x053d04, 0x000000, 0x05410b, - 0x000000, 0x054c01, 0x000000, 0x000000, 0x000000, 0x054d02, 0x054f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x055001, 0x000000, 0x000000, - 0x000000, 0x055103, 0x055401, 0x000000, 0x05550d, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x056207, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x056902, 0x000000, 0x056b07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x057208, 0x000000, 0x000000, 0x000000, 0x000000, 0x057a02, - 0x000000, 0x057c02, 0x000000, 0x000000, 0x057e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x057f01, 0x058001, 0x000000, 0x058102, 0x000000, 0x000000, - 0x000000, 0x058301, 0x058403, 0x05870d, 0x000000, 0x000000, 0x059416, 0x05aa03, - 0x000000, 0x000000, 0x05ad01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x05ae01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x05af03, 0x000000, 0x000000, 0x000000, 0x000000, 0x05b201, - 0x05b301, 0x05b40e, 0x05c202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x05c403, 0x000000, 0x05c701, 0x000000, 0x05c805, 0x000000, 0x000000, - 0x05cd09, 0x000000, 0x000000, 0x05d601, 0x000000, 0x000000, 0x000000, 0x05d702, - 0x000000, 0x000000, 0x05d901, 0x05da02, 0x05dc13, 0x05ef01, 0x05f005, 0x000000, - 0x000000, 0x000000, 0x05f502, 0x000000, 0x000000, 0x000000, 0x000000, 0x05f701, - 0x05f804, 0x000000, 0x05fc03, 0x05ff01, 0x000000, 0x000000, 0x000000, 0x060001, - 0x06010b, 0x060c01, 0x000000, 0x060d08, 0x061501, 0x06160d, 0x062301, 0x000000, - 0x062402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x062604, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x062a14, 0x000000, 0x063e04, 0x000000, 0x064201, 0x000000, 0x064301, 0x000000, - 0x064403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x064702, 0x064901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x064a04, 0x000000, 0x064e01, 0x000000, - 0x064f02, 0x065101, 0x000000, 0x065203, 0x000000, 0x000000, 0x06550c, 0x000000, - 0x000000, 0x000000, 0x000000, 0x066101, 0x000000, 0x000000, 0x000000, 0x066206, - 0x000000, 0x000000, 0x000000, 0x066802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x066a07, 0x000000, 0x000000, - 0x000000, 0x067102, 0x000000, 0x000000, 0x067301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x067401, 0x000000, 0x000000, 0x000000, 0x067501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x067607, 0x000000, 0x067d01, 0x000000, 0x000000, - 0x067e01, 0x067f04, 0x000000, 0x000000, 0x068301, 0x000000, 0x000000, 0x068401, - 0x068502, 0x000000, 0x068701, 0x068801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x068901, 0x000000, 0x000000, 0x000000, 0x068a01, 0x068b04, 0x068f02, - 0x000000, 0x069105, 0x000000, 0x000000, 0x069611, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x06a701, 0x000000, 0x000000, 0x06a810, 0x000000, 0x000000, - 0x06b80d, 0x000000, 0x000000, 0x000000, 0x000000, 0x06c501, 0x06c602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x06c802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x06ca01, 0x000000, 0x000000, 0x06cb01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x06cc02, 0x06ce02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x06d004, 0x000000, 0x000000, 0x000000, - 0x06d402, 0x000000, 0x000000, 0x000000, 0x06d609, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x06df05, 0x000000, 0x000000, 0x000000, 0x000000, - 0x06e413, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x06f701, 0x000000, - 0x06f802, 0x06fa01, 0x000000, 0x000000, 0x000000, 0x000000, 0x06fb01, 0x06fc01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x06fd01, 0x06fe02, 0x070005, 0x000000, - 0x070501, 0x070602, 0x000000, 0x000000, 0x000000, 0x000000, 0x070802, 0x000000, - 0x070a02, 0x070c01, 0x000000, 0x000000, 0x000000, 0x070d05, 0x071201, 0x000000, - 0x071302, 0x071507, 0x000000, 0x071c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x071d0b, 0x07280f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x073709, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x074002, 0x000000, 0x000000, 0x000000, 0x074202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x074405, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x074937, 0x000000, 0x078004, 0x078404, 0x000000, 0x000000, 0x000000, - 0x078801, 0x078901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x078a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x078b02, 0x000000, 0x000000, 0x000000, 0x078d0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x079902, 0x000000, 0x000000, - 0x079b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x079d07, 0x000000, 0x07a401, - 0x000000, 0x07a507, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07ac02, - 0x07ae01, 0x000000, 0x000000, 0x000000, 0x000000, 0x07af01, 0x000000, 0x07b002, - 0x000000, 0x07b201, 0x07b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x07b402, 0x000000, 0x000000, 0x000000, 0x000000, 0x07b601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07b703, 0x07ba03, 0x000000, 0x07bd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07bf04, 0x07c302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x07c50e, 0x07d304, 0x07d704, 0x000000, 0x000000, 0x000000, - 0x07db01, 0x07dc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07de01, 0x000000, 0x07df01, 0x07e004, - 0x000000, 0x000000, 0x000000, 0x000000, 0x07e404, 0x000000, 0x000000, 0x07e804, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07ec07, 0x07f304, 0x07f702, - 0x000000, 0x07f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x07fa02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07fc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x07fd01, 0x07fe01, - 0x000000, 0x07ff01, 0x08000a, 0x000000, 0x080a04, 0x000000, 0x000000, 0x080e01, - 0x000000, 0x080f01, 0x081001, 0x000000, 0x000000, 0x081103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x081401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x081501, 0x000000, 0x081601, 0x000000, 0x081708, 0x000000, 0x000000, - 0x000000, 0x000000, 0x081f02, 0x082101, 0x082202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x082401, 0x000000, 0x082502, 0x082701, 0x082810, 0x083802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x083a09, 0x000000, 0x000000, 0x084301, - 0x084403, 0x000000, 0x084702, 0x000000, 0x000000, 0x084901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x084a02, 0x000000, 0x000000, 0x084c02, 0x084e01, - 0x084f02, 0x000000, 0x000000, 0x000000, 0x085107, 0x000000, 0x000000, 0x000000, - 0x085802, 0x085a01, 0x085b01, 0x085c03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x085f01, 0x086001, 0x000000, - 0x000000, 0x086103, 0x086401, 0x000000, 0x000000, 0x000000, 0x000000, 0x086501, - 0x000000, 0x000000, 0x086607, 0x086d01, 0x000000, 0x086e01, 0x000000, 0x086f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x087001, 0x087120, - 0x000000, 0x000000, 0x089108, 0x089903, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x089c0c, 0x08a803, 0x000000, 0x08ab01, 0x000000, 0x08ac01, - 0x000000, 0x08ad02, 0x08af0d, 0x000000, 0x000000, 0x000000, 0x000000, 0x08bc01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08bd01, 0x000000, 0x08be02, - 0x08c001, 0x000000, 0x000000, 0x08c101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x08c209, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x08cb01, 0x000000, 0x000000, 0x08cc04, 0x000000, 0x000000, 0x000000, 0x08d001, - 0x08d102, 0x000000, 0x000000, 0x000000, 0x08d302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x08d502, 0x000000, 0x08d705, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x08dc01, 0x08dd01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08de02, - 0x000000, 0x08e004, 0x000000, 0x000000, 0x000000, 0x000000, 0x08e401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x08e501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x08e601, 0x000000, 0x08e703, 0x000000, 0x08ea04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08ee02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08f001, - 0x08f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x08f201, 0x000000, 0x08f301, - 0x000000, 0x000000, 0x000000, 0x08f402, 0x08f601, 0x08f702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x08f905, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x08fe02, 0x000000, 0x090001, 0x000000, 0x000000, - 0x090101, 0x000000, 0x090206, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x090801, - 0x090901, 0x090a01, 0x090b02, 0x000000, 0x000000, 0x090d01, 0x000000, 0x090e03, - 0x000000, 0x091101, 0x000000, 0x000000, 0x091201, 0x000000, 0x091302, 0x000000, - 0x091509, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x091e01, 0x000000, 0x091f02, 0x092101, 0x092201, 0x000000, 0x09230f, 0x000000, - 0x000000, 0x000000, 0x093214, 0x000000, 0x094607, 0x000000, 0x094d04, 0x095101, - 0x000000, 0x095207, 0x000000, 0x000000, 0x095901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x095a02, 0x000000, 0x095c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x095d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x095e03, 0x096102, 0x096304, 0x096703, 0x096a02, 0x000000, 0x000000, - 0x000000, 0x096c02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x096e01, 0x000000, 0x000000, 0x096f01, 0x097002, 0x097201, 0x000000, 0x097305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x097801, 0x000000, 0x000000, - 0x000000, 0x097901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x097a01, 0x097b01, - 0x000000, 0x097c01, 0x000000, 0x000000, 0x097d04, 0x098102, 0x000000, 0x098305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x098801, 0x098903, - 0x000000, 0x098c01, 0x000000, 0x000000, 0x098d0b, 0x099802, 0x000000, 0x099a03, - 0x000000, 0x000000, 0x099d02, 0x000000, 0x099f0d, 0x000000, 0x09ac01, 0x000000, - 0x09ad08, 0x09b505, 0x000000, 0x000000, 0x000000, 0x09ba02, 0x000000, 0x000000, - 0x09bc01, 0x000000, 0x000000, 0x09bd01, 0x000000, 0x09be12, 0x000000, 0x09d00a, - 0x09da01, 0x000000, 0x000000, 0x000000, 0x000000, 0x09db04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x09df01, 0x09e001, 0x09e101, 0x000000, - 0x000000, 0x09e202, 0x000000, 0x09e401, 0x000000, 0x000000, 0x09e501, 0x09e601, - 0x000000, 0x09e701, 0x09e801, 0x000000, 0x09e901, 0x000000, 0x09ea01, 0x09eb05, - 0x000000, 0x000000, 0x000000, 0x09f001, 0x09f102, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x09f301, 0x000000, 0x000000, 0x09f401, - 0x000000, 0x09f505, 0x09fa02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x09fc03, 0x000000, 0x09ff01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a000f, 0x000000, - 0x0a0f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0a1001, 0x0a1101, 0x000000, 0x000000, 0x000000, 0x0a1201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a1301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a1402, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0a1601, 0x000000, 0x0a1704, 0x000000, 0x0a1b02, 0x0a1d01, 0x000000, - 0x000000, 0x000000, 0x0a1e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a2001, - 0x0a2101, 0x000000, 0x0a2206, 0x000000, 0x0a2801, 0x0a2901, 0x000000, 0x000000, - 0x0a2a02, 0x000000, 0x0a2c01, 0x000000, 0x000000, 0x000000, 0x0a2d01, 0x0a2e04, - 0x0a3204, 0x000000, 0x0a3602, 0x000000, 0x000000, 0x000000, 0x0a3802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a3a01, 0x000000, 0x000000, 0x0a3b01, - 0x000000, 0x000000, 0x000000, 0x0a3c02, 0x000000, 0x0a3e02, 0x000000, 0x0a4003, - 0x000000, 0x000000, 0x0a4301, 0x0a4406, 0x000000, 0x000000, 0x0a4a01, 0x0a4b01, - 0x0a4c02, 0x000000, 0x000000, 0x0a4e03, 0x000000, 0x000000, 0x000000, 0x0a5101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a5201, 0x000000, 0x0a5305, 0x000000, - 0x0a5806, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a5e01, - 0x0a5f01, 0x000000, 0x000000, 0x0a6001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0a6101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0a6205, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0a6715, 0x0a7c02, 0x000000, 0x0a7e01, - 0x000000, 0x0a7f01, 0x000000, 0x000000, 0x0a8005, 0x000000, 0x000000, 0x0a8501, - 0x000000, 0x0a8603, 0x000000, 0x000000, 0x0a8903, 0x000000, 0x0a8c05, 0x0a9101, - 0x000000, 0x000000, 0x000000, 0x0a9202, 0x000000, 0x0a9401, 0x0a9501, 0x0a9609, - 0x000000, 0x000000, 0x000000, 0x0a9f0a, 0x0aa905, 0x0aae03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0ab102, 0x0ab307, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0aba01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0abb01, - 0x000000, 0x000000, 0x0abc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0abd02, 0x000000, 0x000000, 0x0abf02, 0x0ac104, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0ac504, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ac901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0aca01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0acb03, 0x0ace01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0acf02, 0x000000, 0x000000, 0x0ad101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ad201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ad301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ad403, 0x0ad707, 0x000000, - 0x000000, 0x0ade01, 0x000000, 0x000000, 0x0adf05, 0x000000, 0x0ae401, 0x000000, - 0x0ae502, 0x000000, 0x000000, 0x000000, 0x0ae701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ae802, - 0x0aea01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0aeb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0aec02, 0x0aee04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0af203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0af501, 0x000000, 0x0af601, 0x0af709, 0x0b0002, 0x0b0202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0b0401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0b0501, 0x0b0601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0b0704, 0x000000, 0x000000, 0x0b0b06, 0x000000, 0x0b1102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1302, 0x000000, - 0x0b1501, 0x000000, 0x000000, 0x0b1602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1801, 0x000000, 0x000000, - 0x000000, 0x0b1901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1a01, - 0x0b1b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b1d01, 0x000000, 0x000000, - 0x0b1e02, 0x000000, 0x0b2004, 0x000000, 0x0b2404, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0b2801, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b2901, - 0x000000, 0x0b2a01, 0x000000, 0x000000, 0x0b2b02, 0x000000, 0x0b2d06, 0x0b3307, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0b3a01, 0x000000, 0x0b3b01, 0x000000, - 0x000000, 0x0b3c01, 0x0b3d06, 0x0b4305, 0x0b4801, 0x0b4901, 0x000000, 0x000000, - 0x0b4a01, 0x000000, 0x000000, 0x0b4b0e, 0x000000, 0x000000, 0x000000, 0x0b5906, - 0x0b5f01, 0x000000, 0x0b6003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0b6312, 0x000000, 0x0b7501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0b7604, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0b7a01, 0x000000, 0x0b7b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0b7c05, 0x000000, 0x000000, 0x000000, 0x0b8103, 0x000000, - 0x0b8401, 0x000000, 0x000000, 0x0b8504, 0x0b8901, 0x0b8a04, 0x000000, 0x000000, - 0x000000, 0x0b8e02, 0x0b9001, 0x000000, 0x000000, 0x0b9101, 0x000000, 0x0b9201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b9301, 0x0b9401, - 0x0b9501, 0x0b9602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0b9801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0b9905, - 0x0b9e07, 0x000000, 0x0ba501, 0x0ba601, 0x0ba705, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0bac01, 0x000000, 0x000000, 0x0bad01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bae07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bb502, 0x000000, - 0x0bb701, 0x0bb801, 0x000000, 0x000000, 0x0bb901, 0x000000, 0x000000, 0x000000, - 0x0bba09, 0x000000, 0x000000, 0x0bc30a, 0x000000, 0x000000, 0x0bcd02, 0x000000, - 0x000000, 0x0bcf01, 0x000000, 0x000000, 0x0bd002, 0x0bd203, 0x000000, 0x000000, - 0x000000, 0x0bd504, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bd901, 0x0bda01, - 0x000000, 0x000000, 0x0bdb03, 0x000000, 0x0bde0a, 0x000000, 0x0be801, 0x000000, - 0x000000, 0x0be901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0bea02, 0x000000, 0x0bec04, 0x000000, 0x000000, 0x000000, 0x000000, 0x0bf001, - 0x000000, 0x0bf105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0bf60a, 0x000000, 0x000000, 0x0c0001, 0x0c0104, 0x0c0501, - 0x0c0601, 0x000000, 0x0c0706, 0x0c0d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c0e05, 0x000000, 0x0c1303, 0x000000, - 0x0c1604, 0x000000, 0x0c1a01, 0x000000, 0x000000, 0x000000, 0x0c1b01, 0x000000, - 0x0c1c01, 0x0c1d14, 0x000000, 0x0c3102, 0x000000, 0x000000, 0x000000, 0x0c3301, - 0x000000, 0x0c3407, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0c3b02, 0x0c3d02, 0x000000, 0x000000, 0x0c3f0b, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c4a02, 0x000000, 0x000000, 0x0c4c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0c4d01, 0x0c4e01, 0x0c4f06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c5502, 0x000000, 0x000000, 0x0c5701, - 0x000000, 0x000000, 0x0c5801, 0x000000, 0x000000, 0x0c5901, 0x000000, 0x0c5a03, - 0x0c5d02, 0x0c5f01, 0x000000, 0x000000, 0x0c6001, 0x0c6101, 0x000000, 0x000000, - 0x0c620b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0c6d02, 0x000000, 0x0c6f04, 0x000000, 0x000000, 0x0c7306, 0x000000, 0x000000, - 0x0c790a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0c8305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c8807, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0c8f01, 0x0c9002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0c9201, 0x000000, 0x000000, 0x0c9302, 0x0c9501, 0x000000, 0x0c9601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0c9701, 0x000000, 0x0c9801, 0x0c9902, - 0x000000, 0x0c9b05, 0x0ca006, 0x000000, 0x0ca602, 0x0ca801, 0x0ca909, 0x000000, - 0x000000, 0x0cb201, 0x0cb301, 0x0cb402, 0x0cb605, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0cbb01, 0x000000, 0x000000, - 0x0cbc06, 0x000000, 0x000000, 0x000000, 0x0cc204, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0cc607, 0x000000, 0x000000, - 0x000000, 0x0ccd04, 0x000000, 0x0cd102, 0x000000, 0x000000, 0x000000, 0x0cd301, - 0x000000, 0x000000, 0x000000, 0x0cd401, 0x0cd501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0cd605, 0x0cdb02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0cdd02, 0x0cdf03, 0x000000, 0x000000, 0x0ce201, 0x0ce301, - 0x0ce401, 0x000000, 0x0ce502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0ce702, 0x0ce902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0ceb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0cee01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0cef02, 0x0cf101, 0x0cf203, 0x000000, 0x0cf501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0cf602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0cf801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0cf902, 0x000000, 0x000000, 0x0cfb01, 0x0cfc01, 0x000000, 0x000000, 0x0cfd02, - 0x000000, 0x000000, 0x0cff01, 0x0d0002, 0x0d0204, 0x000000, 0x000000, 0x0d0602, - 0x000000, 0x000000, 0x0d0801, 0x000000, 0x0d0905, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0d0e04, 0x0d1201, 0x000000, 0x000000, 0x000000, 0x0d1303, 0x000000, - 0x000000, 0x0d1603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0d1901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0d1a0a, 0x000000, 0x000000, 0x0d2401, 0x0d2501, - 0x0d2601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0d2701, - 0x0d2801, 0x000000, 0x0d2903, 0x000000, 0x000000, 0x0d2c03, 0x000000, 0x000000, - 0x0d2f01, 0x000000, 0x000000, 0x0d3002, 0x000000, 0x0d3208, 0x0d3a03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0d3d0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0d4901, 0x000000, 0x0d4a21, 0x0d6b01, - 0x0d6c02, 0x0d6e02, 0x000000, 0x000000, 0x0d7001, 0x000000, 0x000000, 0x000000, - 0x0d7107, 0x000000, 0x000000, 0x0d7801, 0x000000, 0x000000, 0x000000, 0x0d7901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0d7a01, - 0x000000, 0x000000, 0x0d7b01, 0x000000, 0x0d7c03, 0x0d7f01, 0x000000, 0x0d8001, - 0x000000, 0x000000, 0x0d8101, 0x000000, 0x0d8201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0d8309, 0x000000, - 0x000000, 0x0d8c01, 0x0d8d05, 0x000000, 0x000000, 0x0d9205, 0x000000, 0x000000, - 0x000000, 0x0d9707, 0x0d9e02, 0x0da001, 0x000000, 0x0da101, 0x000000, 0x000000, - 0x0da208, 0x0daa01, 0x000000, 0x0dab01, 0x000000, 0x000000, 0x0dac01, 0x000000, - 0x000000, 0x000000, 0x0dad0c, 0x000000, 0x0db902, 0x000000, 0x000000, 0x000000, - 0x0dbb01, 0x0dbc01, 0x000000, 0x000000, 0x000000, 0x0dbd02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0dbf01, 0x0dc001, 0x0dc104, 0x000000, 0x000000, 0x0dc504, - 0x0dc901, 0x000000, 0x000000, 0x000000, 0x000000, 0x0dca05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0dcf03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0dd202, 0x0dd401, 0x000000, 0x000000, 0x0dd502, 0x0dd703, - 0x000000, 0x0dda01, 0x0ddb02, 0x000000, 0x000000, 0x0ddd03, 0x000000, 0x0de001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0de101, - 0x000000, 0x0de203, 0x000000, 0x0de501, 0x000000, 0x0de604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0dea12, 0x000000, - 0x0dfc12, 0x000000, 0x000000, 0x000000, 0x0e0e01, 0x000000, 0x000000, 0x000000, - 0x0e0f01, 0x000000, 0x0e1001, 0x000000, 0x0e1101, 0x0e1203, 0x000000, 0x000000, - 0x0e1502, 0x0e1702, 0x000000, 0x0e1901, 0x0e1a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e1b04, 0x0e1f03, - 0x0e2205, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e2704, 0x0e2b01, - 0x000000, 0x0e2c05, 0x0e3101, 0x0e3201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0e3301, 0x000000, 0x0e3401, 0x000000, 0x000000, 0x0e350d, - 0x0e4201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e4301, - 0x0e4403, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e4701, 0x0e4801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0e4901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0e4a02, 0x000000, 0x0e4c02, 0x0e4e01, 0x0e4f01, 0x000000, 0x0e501b, - 0x000000, 0x0e6b02, 0x000000, 0x000000, 0x000000, 0x0e6d02, 0x0e6f02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0e7102, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0e7301, 0x000000, 0x000000, 0x0e7407, 0x000000, - 0x000000, 0x000000, 0x0e7b01, 0x0e7c02, 0x000000, 0x000000, 0x000000, 0x0e7e01, - 0x0e7f0b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e8a01, 0x000000, - 0x0e8b01, 0x0e8c01, 0x000000, 0x000000, 0x0e8d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0e8f01, 0x0e9005, 0x000000, 0x0e9501, 0x0e9602, - 0x0e9806, 0x000000, 0x000000, 0x000000, 0x0e9e02, 0x000000, 0x0ea001, 0x000000, - 0x000000, 0x0ea101, 0x000000, 0x000000, 0x0ea201, 0x0ea309, 0x000000, 0x0eac02, - 0x000000, 0x0eae07, 0x0eb501, 0x0eb601, 0x000000, 0x0eb701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0eb802, 0x000000, 0x000000, 0x0eba03, 0x000000, 0x0ebd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ebe01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ebf01, 0x000000, 0x0ec009, - 0x0ec902, 0x000000, 0x0ecb01, 0x0ecc02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ece14, 0x000000, 0x0ee203, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ee501, 0x0ee601, 0x0ee704, - 0x0eeb01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0eec04, 0x000000, 0x000000, 0x0ef00a, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0efa0d, 0x000000, 0x000000, 0x0f0701, 0x0f0801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0f0901, 0x0f0a02, 0x0f0c06, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0f1201, 0x000000, 0x0f1302, 0x0f1501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x0f160a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0f2001, 0x000000, 0x0f2101, 0x000000, 0x0f220b, 0x0f2d01, - 0x000000, 0x0f2e05, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f3315, 0x0f4801, - 0x000000, 0x0f490b, 0x000000, 0x000000, 0x000000, 0x0f5406, 0x0f5a03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0f5d07, 0x0f6401, 0x0f6501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x0f6601, 0x000000, 0x000000, 0x000000, 0x0f6701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0f6802, 0x000000, 0x0f6a09, 0x000000, - 0x000000, 0x000000, 0x0f7301, 0x0f7401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f7501, 0x000000, 0x0f7606, - 0x0f7c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f7d01, 0x000000, 0x000000, - 0x000000, 0x0f7e01, 0x000000, 0x000000, 0x000000, 0x0f7f06, 0x0f8501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x0f8602, 0x0f8801, 0x0f8902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0f8b05, 0x000000, 0x0f9001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0f9119, 0x0faa06, - 0x000000, 0x000000, 0x0fb001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0fb101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0fb204, 0x000000, 0x0fb604, 0x000000, 0x000000, - 0x000000, 0x0fba01, 0x0fbb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0fbe03, 0x0fc101, 0x000000, 0x000000, 0x0fc202, - 0x0fc402, 0x0fc601, 0x0fc713, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0fda01, 0x000000, 0x0fdb01, 0x0fdc01, 0x000000, 0x0fdd01, 0x0fde03, 0x0fe106, - 0x000000, 0x000000, 0x0fe710, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x0ff703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0ffa03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x0ffd01, 0x0ffe01, 0x000000, 0x000000, 0x0fff02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x100101, 0x100202, 0x000000, - 0x000000, 0x000000, 0x100403, 0x000000, 0x100701, 0x000000, 0x000000, 0x000000, - 0x100803, 0x100b05, 0x000000, 0x101002, 0x000000, 0x000000, 0x101201, 0x10130a, - 0x000000, 0x101d01, 0x000000, 0x000000, 0x101e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x101f04, 0x102301, 0x102401, 0x000000, - 0x102503, 0x000000, 0x000000, 0x000000, 0x102804, 0x000000, 0x000000, 0x102c03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x102f02, 0x103101, 0x103201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1033a3, 0x000000, 0x000000, 0x10d603, 0x000000, - 0x000000, 0x000000, 0x10d90f, 0x10e802, 0x000000, 0x10ea01, 0x10eb01, 0x000000, - 0x10ec01, 0x000000, 0x10ed01, 0x000000, 0x000000, 0x000000, 0x10ee01, 0x000000, - 0x10ef01, 0x000000, 0x000000, 0x000000, 0x10f005, 0x000000, 0x000000, 0x000000, - 0x10f503, 0x10f801, 0x10f904, 0x10fd01, 0x000000, 0x10fe01, 0x10ff02, 0x000000, - 0x110101, 0x110209, 0x000000, 0x000000, 0x110b05, 0x000000, 0x000000, 0x000000, - 0x000000, 0x111004, 0x000000, 0x000000, 0x000000, 0x111401, 0x000000, 0x111503, - 0x000000, 0x000000, 0x000000, 0x000000, 0x111801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x111902, 0x000000, 0x000000, 0x000000, 0x111b01, 0x000000, 0x000000, - 0x000000, 0x111c01, 0x111d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x111f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x112001, - 0x000000, 0x000000, 0x000000, 0x112105, 0x000000, 0x000000, 0x000000, 0x112607, - 0x112d09, 0x000000, 0x000000, 0x000000, 0x000000, 0x113602, 0x113801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x113901, 0x000000, 0x000000, 0x113a03, 0x000000, - 0x113d01, 0x113e03, 0x114109, 0x000000, 0x114a01, 0x114b02, 0x114d01, 0x000000, - 0x114e11, 0x000000, 0x115f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x116002, 0x000000, 0x000000, 0x000000, 0x116201, 0x116301, 0x000000, 0x116401, - 0x116502, 0x000000, 0x116703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x116a04, 0x000000, 0x116e03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x117101, 0x000000, 0x117202, 0x000000, 0x117401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x117501, 0x117602, 0x000000, 0x117802, - 0x000000, 0x000000, 0x117a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x117c01, - 0x117d01, 0x000000, 0x000000, 0x000000, 0x117e02, 0x118001, 0x000000, 0x118102, - 0x000000, 0x118302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x118502, 0x000000, 0x000000, 0x118709, 0x000000, 0x000000, 0x11900b, - 0x000000, 0x119b02, 0x000000, 0x000000, 0x119d01, 0x119e09, 0x000000, 0x11a703, - 0x11aa01, 0x000000, 0x11ab01, 0x000000, 0x11ac02, 0x000000, 0x11ae01, 0x000000, - 0x000000, 0x11af02, 0x000000, 0x000000, 0x000000, 0x000000, 0x11b101, 0x000000, - 0x11b201, 0x000000, 0x000000, 0x11b301, 0x000000, 0x000000, 0x000000, 0x11b402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x11b601, 0x000000, 0x000000, - 0x000000, 0x11b705, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x11bc02, - 0x11be01, 0x11bf01, 0x11c002, 0x11c201, 0x000000, 0x11c302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x11c501, 0x11c602, 0x000000, 0x11c809, 0x000000, 0x000000, - 0x000000, 0x000000, 0x11d109, 0x000000, 0x000000, 0x11da03, 0x000000, 0x000000, - 0x000000, 0x11dd01, 0x000000, 0x000000, 0x000000, 0x11de01, 0x000000, 0x11df01, - 0x000000, 0x11e004, 0x000000, 0x000000, 0x000000, 0x11e401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x11e504, 0x000000, 0x000000, 0x11e902, 0x000000, - 0x000000, 0x000000, 0x11eb09, 0x000000, 0x000000, 0x11f401, 0x000000, 0x11f512, - 0x000000, 0x000000, 0x000000, 0x000000, 0x120701, 0x120801, 0x000000, 0x120901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x120a01, 0x000000, 0x120b01, 0x000000, - 0x000000, 0x120c03, 0x000000, 0x120f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x121020, 0x000000, 0x000000, 0x000000, 0x000000, 0x123002, 0x000000, - 0x123208, 0x000000, 0x123a01, 0x000000, 0x000000, 0x000000, 0x123b02, 0x123d02, - 0x000000, 0x123f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x124003, - 0x12430b, 0x000000, 0x000000, 0x000000, 0x000000, 0x124e0a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x125802, 0x000000, 0x000000, 0x000000, 0x000000, 0x125a02, - 0x000000, 0x125c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x125d04, 0x000000, - 0x000000, 0x126107, 0x000000, 0x000000, 0x126801, 0x000000, 0x000000, 0x000000, - 0x126901, 0x126a01, 0x126b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x126c03, - 0x000000, 0x000000, 0x126f01, 0x000000, 0x127008, 0x127806, 0x127e02, 0x000000, - 0x000000, 0x000000, 0x128002, 0x000000, 0x000000, 0x000000, 0x128201, 0x000000, - 0x000000, 0x000000, 0x128301, 0x000000, 0x000000, 0x000000, 0x128401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x128503, 0x000000, 0x128801, 0x128901, - 0x128a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x128b01, 0x000000, 0x000000, 0x000000, 0x128c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x128e23, 0x12b101, 0x000000, 0x12b201, 0x000000, - 0x12b308, 0x12bb01, 0x000000, 0x000000, 0x12bc01, 0x12bd01, 0x000000, 0x12be07, - 0x12c501, 0x12c602, 0x000000, 0x000000, 0x000000, 0x000000, 0x12c801, 0x12c901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x12ca01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x12cb01, 0x000000, 0x12cc02, 0x000000, - 0x000000, 0x12ce06, 0x000000, 0x12d401, 0x12d501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x12d601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x12d702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x12d902, 0x000000, 0x000000, 0x000000, 0x12db01, 0x000000, 0x12dc0e, - 0x000000, 0x000000, 0x000000, 0x12ea04, 0x000000, 0x000000, 0x12ee06, 0x000000, - 0x12f402, 0x12f603, 0x12f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x12fa05, 0x000000, 0x12ff0f, 0x000000, 0x000000, 0x130e01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x130f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x131001, - 0x000000, 0x131101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x131201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x131302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x131501, 0x131601, - 0x131706, 0x131d02, 0x131f06, 0x000000, 0x132503, 0x000000, 0x000000, 0x13280a, - 0x000000, 0x000000, 0x133201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x133301, 0x133402, 0x133602, 0x133805, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x133d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x133e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x134001, 0x000000, 0x134101, 0x134207, 0x000000, 0x13490e, 0x000000, - 0x135701, 0x000000, 0x135804, 0x135c03, 0x135f04, 0x136337, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x139a01, 0x139b02, 0x139d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x139e01, 0x000000, 0x000000, - 0x000000, 0x139f01, 0x000000, 0x000000, 0x000000, 0x13a003, 0x000000, 0x000000, - 0x000000, 0x000000, 0x13a301, 0x000000, 0x000000, 0x000000, 0x000000, 0x13a401, - 0x13a501, 0x13a602, 0x000000, 0x13a801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x13a901, 0x13aa01, 0x000000, - 0x13ab01, 0x000000, 0x000000, 0x13ac01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x13ad01, 0x000000, 0x000000, 0x13ae02, 0x000000, 0x000000, 0x000000, 0x13b001, - 0x13b102, 0x000000, 0x000000, 0x000000, 0x000000, 0x13b305, 0x13b805, 0x13bd01, - 0x000000, 0x13be02, 0x000000, 0x13c003, 0x000000, 0x000000, 0x000000, 0x13c303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x13c601, 0x000000, 0x13c701, - 0x13c802, 0x000000, 0x13ca01, 0x000000, 0x000000, 0x000000, 0x13cb08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x13d301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x13d401, 0x000000, 0x000000, 0x13d502, 0x13d703, - 0x000000, 0x000000, 0x13da02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x13dc0d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x13e901, 0x13ea02, 0x13ec04, 0x13f002, 0x13f201, 0x000000, - 0x13f301, 0x000000, 0x13f401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x13f507, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x13fc01, 0x13fd03, 0x000000, 0x140001, 0x000000, 0x140108, 0x000000, 0x000000, - 0x140907, 0x000000, 0x000000, 0x000000, 0x14100b, 0x000000, 0x000000, 0x000000, - 0x141b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x141e03, 0x142101, 0x000000, 0x000000, 0x000000, 0x142201, 0x000000, 0x000000, - 0x142303, 0x142602, 0x142801, 0x000000, 0x000000, 0x000000, 0x000000, 0x142901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x142a01, 0x142b02, 0x000000, 0x142d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x142e05, 0x000000, 0x000000, 0x000000, 0x143306, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x143901, 0x143a0b, 0x000000, - 0x000000, 0x144501, 0x000000, 0x000000, 0x144601, 0x144702, 0x144904, 0x000000, - 0x000000, 0x144d03, 0x145002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x145203, 0x000000, 0x145503, 0x145804, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x145c01, 0x000000, 0x145d02, 0x145f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x146001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x146101, 0x14620c, 0x000000, 0x146e0d, - 0x000000, 0x000000, 0x147b05, 0x148005, 0x000000, 0x148501, 0x000000, 0x148602, - 0x000000, 0x000000, 0x148801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x148902, 0x000000, 0x148b0a, 0x149507, 0x000000, 0x149c03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x149f01, 0x14a001, 0x14a101, 0x14a201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14a301, 0x000000, 0x14a402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14a601, 0x14a701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x14a802, 0x14aa03, 0x000000, 0x000000, 0x14ad01, 0x000000, 0x000000, - 0x14ae09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14b702, 0x000000, 0x000000, 0x14b901, 0x14ba01, 0x14bb01, 0x000000, 0x14bc01, - 0x000000, 0x000000, 0x14bd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x14be01, - 0x14bf01, 0x000000, 0x14c003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14c301, 0x000000, 0x000000, 0x000000, 0x14c408, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14cc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14cd01, 0x000000, 0x14ce02, - 0x14d003, 0x000000, 0x14d306, 0x000000, 0x000000, 0x000000, 0x000000, 0x14d902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14db01, 0x000000, 0x000000, 0x14dc01, 0x000000, 0x000000, 0x000000, 0x14dd01, - 0x000000, 0x14de01, 0x14df01, 0x000000, 0x000000, 0x14e002, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x14e201, 0x14e301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x14e401, - 0x000000, 0x14e504, 0x000000, 0x14e904, 0x000000, 0x000000, 0x000000, 0x000000, - 0x14ed01, 0x000000, 0x000000, 0x14ee02, 0x000000, 0x000000, 0x14f004, 0x000000, - 0x000000, 0x14f402, 0x000000, 0x14f606, 0x000000, 0x14fc06, 0x000000, 0x000000, - 0x000000, 0x150201, 0x000000, 0x000000, 0x000000, 0x150302, 0x000000, 0x000000, - 0x000000, 0x150502, 0x000000, 0x150701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x150802, 0x000000, 0x000000, 0x000000, 0x000000, 0x150a01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x150b02, 0x150d03, - 0x151003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x151301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x151405, 0x151901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x151a01, 0x000000, 0x000000, 0x000000, 0x151b01, 0x151c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x151d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x152101, - 0x000000, 0x000000, 0x152204, 0x000000, 0x152601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x152712, 0x153904, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x153d02, 0x000000, - 0x153f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x154001, - 0x154101, 0x000000, 0x000000, 0x000000, 0x154201, 0x154303, 0x154601, 0x000000, - 0x000000, 0x154701, 0x154802, 0x154a05, 0x000000, 0x000000, 0x000000, 0x154f01, - 0x155002, 0x000000, 0x000000, 0x000000, 0x155202, 0x000000, 0x000000, 0x000000, - 0x155403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x155702, - 0x000000, 0x155901, 0x000000, 0x000000, 0x155a03, 0x000000, 0x155d03, 0x000000, - 0x000000, 0x156001, 0x000000, 0x000000, 0x156102, 0x000000, 0x000000, 0x156301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x156407, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x156b01, 0x000000, 0x000000, 0x156c01, 0x156d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x156f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x157012, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x158203, 0x000000, 0x000000, 0x000000, 0x158501, - 0x000000, 0x158601, 0x000000, 0x000000, 0x158701, 0x000000, 0x000000, 0x000000, - 0x158802, 0x000000, 0x158a01, 0x000000, 0x000000, 0x158b01, 0x158c01, 0x000000, - 0x158d04, 0x000000, 0x000000, 0x15910c, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x159d01, 0x159e01, 0x000000, 0x000000, 0x159f02, 0x000000, 0x15a105, - 0x000000, 0x000000, 0x15a601, 0x000000, 0x15a701, 0x000000, 0x000000, 0x15a802, - 0x000000, 0x15aa0a, 0x000000, 0x15b401, 0x000000, 0x000000, 0x15b502, 0x000000, - 0x15b707, 0x15be01, 0x000000, 0x000000, 0x000000, 0x000000, 0x15bf03, 0x000000, - 0x000000, 0x000000, 0x15c202, 0x15c401, 0x000000, 0x15c501, 0x000000, 0x15c602, - 0x000000, 0x000000, 0x000000, 0x000000, 0x15c815, 0x000000, 0x000000, 0x15dd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x15df09, 0x15e801, 0x000000, 0x000000, 0x000000, 0x000000, 0x15e902, - 0x000000, 0x000000, 0x15eb0c, 0x000000, 0x15f701, 0x000000, 0x15f804, 0x000000, - 0x000000, 0x000000, 0x15fc0c, 0x000000, 0x160801, 0x000000, 0x160901, 0x160a08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x161201, 0x000000, - 0x000000, 0x000000, 0x161301, 0x161408, 0x000000, 0x161c01, 0x161d10, 0x162d01, - 0x000000, 0x162e06, 0x000000, 0x000000, 0x000000, 0x000000, 0x163401, 0x163504, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x163902, 0x163b0b, 0x000000, - 0x164603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x164901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x164a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x164b01, 0x000000, 0x000000, 0x164c01, 0x000000, 0x164d02, - 0x000000, 0x000000, 0x000000, 0x164f15, 0x000000, 0x166401, 0x000000, 0x166501, - 0x166609, 0x000000, 0x000000, 0x166f07, 0x167601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x167702, 0x000000, 0x167903, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x167c01, 0x167d02, 0x000000, 0x167f01, 0x168002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x168201, 0x168301, 0x168401, 0x000000, 0x168501, - 0x000000, 0x168601, 0x168702, 0x000000, 0x168906, 0x000000, 0x000000, 0x000000, - 0x000000, 0x168f04, 0x169302, 0x000000, 0x000000, 0x000000, 0x000000, 0x169502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x169704, 0x000000, 0x000000, 0x169b09, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x16a402, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x16a602, 0x000000, 0x000000, 0x16a80a, 0x000000, - 0x000000, 0x000000, 0x16b205, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x16b70b, 0x000000, 0x000000, 0x16c203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x16c501, 0x16c601, 0x000000, - 0x000000, 0x16c701, 0x000000, 0x000000, 0x16c802, 0x000000, 0x16ca09, 0x16d301, - 0x16d401, 0x000000, 0x16d504, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x16d902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x16db03, 0x000000, - 0x16de02, 0x16e002, 0x000000, 0x000000, 0x16e202, 0x000000, 0x16e402, 0x000000, - 0x000000, 0x16e602, 0x000000, 0x16e808, 0x000000, 0x000000, 0x000000, 0x16f002, - 0x16f202, 0x000000, 0x000000, 0x000000, 0x16f402, 0x000000, 0x16f609, 0x000000, - 0x000000, 0x000000, 0x16ff01, 0x000000, 0x000000, 0x170002, 0x170203, 0x000000, - 0x170501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x170602, - 0x000000, 0x17080a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x171204, 0x000000, 0x171601, 0x000000, 0x000000, 0x171701, 0x000000, 0x171809, - 0x172102, 0x172303, 0x000000, 0x172601, 0x172701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x172801, 0x172903, 0x000000, 0x172c10, 0x000000, 0x000000, 0x000000, - 0x000000, 0x173c02, 0x000000, 0x000000, 0x173e02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x174001, 0x000000, 0x000000, - 0x174105, 0x000000, 0x174601, 0x174701, 0x174803, 0x000000, 0x174b0c, 0x000000, - 0x000000, 0x000000, 0x175702, 0x175909, 0x176203, 0x176501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x176601, 0x000000, 0x176702, 0x000000, 0x000000, - 0x000000, 0x176901, 0x176a01, 0x000000, 0x000000, 0x176b05, 0x000000, 0x000000, - 0x177002, 0x177204, 0x000000, 0x000000, 0x000000, 0x000000, 0x177601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x177701, 0x000000, 0x000000, 0x177801, - 0x000000, 0x177901, 0x000000, 0x000000, 0x000000, 0x177a04, 0x177e02, 0x000000, - 0x178002, 0x000000, 0x178204, 0x000000, 0x178602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x178801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x178904, - 0x000000, 0x178d02, 0x000000, 0x000000, 0x178f01, 0x000000, 0x000000, 0x000000, - 0x179005, 0x179502, 0x179701, 0x000000, 0x000000, 0x000000, 0x179804, 0x179c01, - 0x000000, 0x000000, 0x179d07, 0x000000, 0x000000, 0x17a401, 0x000000, 0x000000, - 0x17a501, 0x000000, 0x17a602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x17a806, 0x000000, 0x17ae01, 0x000000, 0x000000, 0x000000, 0x17af02, - 0x000000, 0x17b105, 0x17b601, 0x17b703, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x17ba01, 0x17bb01, 0x000000, 0x000000, 0x17bc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x17bd01, 0x17be01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x17bf03, 0x000000, 0x17c201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x17c304, 0x000000, 0x000000, 0x17c701, 0x000000, 0x17c804, - 0x000000, 0x000000, 0x17cc0c, 0x17d802, 0x000000, 0x000000, 0x17da03, 0x000000, - 0x17dd01, 0x000000, 0x000000, 0x000000, 0x17de0e, 0x17ec01, 0x17ed03, 0x000000, - 0x000000, 0x000000, 0x17f001, 0x000000, 0x000000, 0x000000, 0x000000, 0x17f101, - 0x000000, 0x000000, 0x000000, 0x17f203, 0x17f508, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x17fd02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x17ff02, 0x000000, 0x000000, 0x180105, 0x180602, 0x180803, 0x000000, - 0x180b07, 0x000000, 0x181211, 0x000000, 0x182301, 0x182401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x182502, 0x000000, 0x000000, 0x000000, 0x000000, - 0x18270b, 0x18320b, 0x000000, 0x000000, 0x183d02, 0x000000, 0x183f04, 0x000000, - 0x000000, 0x184301, 0x184401, 0x184501, 0x000000, 0x18460d, 0x000000, 0x000000, - 0x000000, 0x185306, 0x000000, 0x000000, 0x000000, 0x185901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x185a05, 0x185f02, 0x000000, 0x186101, - 0x186201, 0x186306, 0x000000, 0x186905, 0x186e02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x187001, 0x000000, 0x000000, 0x000000, 0x187114, 0x188506, - 0x000000, 0x188b01, 0x000000, 0x000000, 0x000000, 0x188c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x188d22, 0x000000, - 0x000000, 0x000000, 0x18af02, 0x000000, 0x000000, 0x18b10a, 0x18bb02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x18bd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x18be02, - 0x000000, 0x000000, 0x18c001, 0x000000, 0x18c101, 0x000000, 0x18c201, 0x18c310, - 0x000000, 0x000000, 0x18d301, 0x18d40c, 0x18e001, 0x000000, 0x000000, 0x000000, - 0x18e101, 0x18e201, 0x18e301, 0x000000, 0x18e403, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x18e706, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x18ed01, 0x18ee01, 0x18ef02, 0x000000, 0x000000, 0x000000, 0x000000, 0x18f103, - 0x000000, 0x18f408, 0x18fc03, 0x18ff0b, 0x190a03, 0x000000, 0x190d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x190e01, 0x190f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x191001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x191102, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x191301, 0x000000, 0x191402, 0x191602, 0x191804, - 0x000000, 0x191c01, 0x191d03, 0x000000, 0x192005, 0x192501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x192601, 0x192701, 0x000000, 0x000000, 0x192803, 0x000000, 0x000000, 0x192b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x192d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x192e01, 0x192f02, 0x000000, 0x000000, 0x193104, 0x000000, 0x000000, - 0x000000, 0x193501, 0x000000, 0x000000, 0x193606, 0x000000, 0x193c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x193d01, 0x000000, 0x000000, - 0x193e01, 0x000000, 0x193f01, 0x000000, 0x194002, 0x194201, 0x000000, 0x000000, - 0x000000, 0x19430b, 0x000000, 0x194e01, 0x194f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x195004, 0x000000, 0x000000, 0x195402, - 0x195606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x195c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x195d01, 0x195e01, 0x195f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x196109, 0x000000, 0x000000, 0x000000, 0x196a01, 0x196b03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x196e01, 0x196f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x197001, 0x000000, - 0x000000, 0x000000, 0x197102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x197301, 0x000000, 0x000000, 0x197401, 0x197501, 0x000000, 0x000000, 0x000000, - 0x197601, 0x197701, 0x197802, 0x000000, 0x197a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x197b04, 0x197f02, 0x000000, 0x198102, 0x000000, 0x000000, 0x19832e, - 0x000000, 0x19b105, 0x000000, 0x000000, 0x000000, 0x19b601, 0x000000, 0x19b703, - 0x000000, 0x000000, 0x000000, 0x19ba03, 0x000000, 0x000000, 0x000000, 0x19bd01, - 0x000000, 0x19be01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x19bf01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x19c001, 0x19c105, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x19c601, 0x19c701, 0x000000, 0x000000, 0x19c801, - 0x19c902, 0x19cb04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x19cf02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x19d101, 0x19d204, 0x000000, 0x19d601, 0x000000, 0x19d702, 0x19d902, - 0x19db11, 0x000000, 0x19ec02, 0x000000, 0x000000, 0x000000, 0x000000, 0x19ee02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x19f001, 0x000000, 0x19f105, 0x000000, - 0x000000, 0x000000, 0x19f60d, 0x000000, 0x1a0303, 0x1a0601, 0x000000, 0x1a0702, - 0x000000, 0x1a0903, 0x1a0c06, 0x000000, 0x1a1201, 0x1a1301, 0x1a1401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1a1501, 0x000000, 0x000000, 0x000000, 0x1a1601, 0x000000, 0x1a170d, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a240b, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1a2f01, 0x1a3001, 0x1a3105, 0x000000, 0x000000, 0x1a3602, 0x1a3803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1a3b01, 0x000000, 0x000000, 0x000000, - 0x1a3c02, 0x000000, 0x1a3e05, 0x1a4301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1a4401, 0x1a4502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1a4701, 0x1a4806, 0x1a4e02, 0x000000, 0x1a5005, - 0x1a5501, 0x000000, 0x000000, 0x1a5607, 0x1a5d01, 0x000000, 0x1a5e01, 0x000000, - 0x000000, 0x1a5f01, 0x1a6001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1a6102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a6307, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a6a01, 0x000000, - 0x000000, 0x1a6b01, 0x1a6c05, 0x000000, 0x000000, 0x000000, 0x1a7106, 0x000000, - 0x000000, 0x000000, 0x1a7704, 0x1a7b01, 0x000000, 0x1a7c02, 0x000000, 0x000000, - 0x000000, 0x1a7e01, 0x000000, 0x1a7f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1a8007, - 0x000000, 0x000000, 0x000000, 0x1a8701, 0x000000, 0x000000, 0x000000, 0x1a8809, - 0x000000, 0x000000, 0x1a9101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1a9201, 0x000000, 0x000000, 0x000000, 0x1a9308, 0x000000, 0x000000, 0x000000, - 0x1a9b0b, 0x000000, 0x000000, 0x1aa601, 0x000000, 0x1aa70f, 0x1ab60d, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ac302, 0x000000, 0x000000, 0x1ac502, 0x000000, - 0x1ac701, 0x1ac80a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ad201, 0x000000, 0x1ad302, 0x1ad502, 0x1ad701, - 0x000000, 0x000000, 0x000000, 0x1ad801, 0x1ad901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1ada02, 0x000000, 0x000000, 0x1adc01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1add01, 0x000000, 0x000000, - 0x000000, 0x1ade01, 0x000000, 0x1adf07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ae601, 0x000000, - 0x1ae703, 0x1aea02, 0x1aec02, 0x000000, 0x1aee04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1af202, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1af409, 0x000000, 0x000000, 0x000000, 0x000000, 0x1afd01, - 0x000000, 0x1afe01, 0x000000, 0x000000, 0x1aff01, 0x000000, 0x000000, 0x1b0001, - 0x1b0101, 0x000000, 0x000000, 0x000000, 0x1b0201, 0x000000, 0x000000, 0x000000, - 0x1b0303, 0x1b0605, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1b0b01, 0x000000, 0x1b0c01, 0x000000, 0x000000, 0x000000, 0x1b0d01, 0x1b0e01, - 0x1b0f01, 0x000000, 0x1b1001, 0x000000, 0x1b1101, 0x000000, 0x000000, 0x1b1204, - 0x1b1601, 0x000000, 0x1b1703, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b1a01, - 0x1b1b01, 0x1b1c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1b1d06, 0x1b2301, 0x1b2403, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1b2702, 0x1b2909, 0x1b3202, 0x1b3401, 0x1b3501, - 0x000000, 0x000000, 0x1b3601, 0x1b3701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b3801, 0x000000, 0x000000, - 0x1b3909, 0x1b4201, 0x000000, 0x000000, 0x1b4303, 0x000000, 0x000000, 0x1b4601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b4704, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b4b02, 0x1b4d02, 0x1b4f03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b5211, - 0x000000, 0x000000, 0x000000, 0x1b6307, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b6a02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b6c01, 0x000000, - 0x000000, 0x1b6d01, 0x1b6e05, 0x1b7302, 0x000000, 0x1b7503, 0x1b7805, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b7d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1b7e07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1b8501, 0x000000, - 0x1b8601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1b8704, 0x1b8b02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1b8d06, 0x000000, 0x1b9301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1b9404, 0x000000, 0x1b9802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1b9a02, 0x1b9c01, 0x000000, 0x1b9d01, 0x1b9e01, 0x1b9f06, 0x000000, - 0x000000, 0x1ba502, 0x000000, 0x1ba701, 0x1ba802, 0x000000, 0x1baa01, 0x000000, - 0x000000, 0x000000, 0x1bab03, 0x1bae01, 0x1baf02, 0x000000, 0x000000, 0x1bb103, - 0x000000, 0x1bb40e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1bc201, 0x000000, 0x000000, 0x1bc302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bc504, 0x000000, 0x1bc901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bca01, - 0x000000, 0x1bcb01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bcc01, - 0x000000, 0x000000, 0x1bcd06, 0x000000, 0x000000, 0x1bd301, 0x000000, 0x1bd401, - 0x000000, 0x000000, 0x1bd502, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bd701, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bd801, 0x000000, 0x1bd902, - 0x000000, 0x1bdb01, 0x1bdc01, 0x000000, 0x000000, 0x1bdd05, 0x000000, 0x000000, - 0x1be209, 0x000000, 0x1beb02, 0x1bed02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1bef01, 0x000000, 0x000000, 0x000000, 0x1bf003, 0x1bf301, 0x1bf401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1bf505, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1bfa02, - 0x1bfc04, 0x1c0002, 0x000000, 0x1c0201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c0301, 0x000000, 0x1c0408, - 0x1c0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c0d03, 0x1c1002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1c120e, 0x000000, 0x1c2003, 0x1c2302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c2501, 0x1c2604, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1c2a05, 0x1c2f02, 0x000000, 0x1c3108, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1c3902, 0x1c3b02, 0x1c3d02, 0x1c3f01, 0x1c4002, - 0x1c4202, 0x1c4401, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c4503, 0x1c4801, - 0x000000, 0x1c4905, 0x000000, 0x000000, 0x1c4e13, 0x000000, 0x000000, 0x000000, - 0x1c6117, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1c7801, 0x000000, 0x000000, 0x1c7901, 0x1c7a01, 0x000000, 0x000000, 0x1c7b05, - 0x000000, 0x1c8003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1c8301, 0x000000, 0x1c8401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1c8503, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1c8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c8a01, 0x000000, 0x1c8b02, - 0x000000, 0x1c8d19, 0x000000, 0x1ca602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ca806, 0x000000, 0x1cae04, 0x1cb201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1cb301, 0x000000, 0x1cb401, 0x1cb502, - 0x1cb702, 0x1cb903, 0x000000, 0x000000, 0x000000, 0x000000, 0x1cbc01, 0x000000, - 0x1cbd08, 0x1cc501, 0x000000, 0x1cc601, 0x1cc705, 0x000000, 0x000000, 0x1ccc01, - 0x000000, 0x000000, 0x000000, 0x1ccd02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1ccf01, 0x000000, 0x000000, 0x000000, 0x1cd001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1cd101, 0x000000, 0x1cd201, - 0x1cd303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1cd603, 0x000000, - 0x000000, 0x1cd90c, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ce501, 0x000000, - 0x000000, 0x000000, 0x1ce601, 0x1ce701, 0x000000, 0x1ce801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ce903, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1cec01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1ced0f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1cfc06, 0x1d0202, 0x1d0406, 0x000000, 0x000000, 0x000000, - 0x1d0a01, 0x000000, 0x000000, 0x1d0b01, 0x000000, 0x000000, 0x000000, 0x1d0c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d0d05, 0x1d1203, - 0x000000, 0x1d1502, 0x000000, 0x1d1708, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d1f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1d2004, 0x000000, 0x000000, 0x1d2401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d2501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1d2603, 0x1d2906, 0x1d2f04, 0x000000, - 0x1d330e, 0x000000, 0x000000, 0x1d4101, 0x000000, 0x1d4202, 0x000000, 0x000000, - 0x1d4405, 0x000000, 0x000000, 0x000000, 0x1d4901, 0x1d4a09, 0x000000, 0x000000, - 0x1d5304, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d5701, 0x000000, - 0x000000, 0x000000, 0x1d5801, 0x1d5902, 0x1d5b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1d5d01, 0x000000, 0x000000, 0x1d5e02, 0x1d6001, 0x1d6104, 0x000000, - 0x000000, 0x000000, 0x1d6503, 0x000000, 0x000000, 0x1d6802, 0x000000, 0x000000, - 0x1d6a05, 0x000000, 0x1d6f02, 0x000000, 0x1d7101, 0x000000, 0x1d7202, 0x000000, - 0x000000, 0x1d7401, 0x1d7504, 0x1d7901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1d7a01, 0x000000, 0x1d7b02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1d7d02, 0x000000, 0x000000, 0x1d7f01, 0x1d8001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1d8109, 0x1d8a0a, 0x000000, 0x1d9401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1d9502, 0x1d9702, 0x000000, 0x1d9903, 0x1d9c02, 0x1d9e01, - 0x000000, 0x000000, 0x000000, 0x1d9f03, 0x000000, 0x1da202, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1da405, 0x000000, 0x000000, 0x000000, 0x1da901, - 0x000000, 0x000000, 0x1daa05, 0x000000, 0x000000, 0x1daf02, 0x1db108, 0x1db902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1dbb01, 0x000000, 0x1dbc01, - 0x1dbd01, 0x000000, 0x000000, 0x1dbe01, 0x000000, 0x000000, 0x1dbf04, 0x000000, - 0x1dc301, 0x000000, 0x1dc401, 0x1dc501, 0x000000, 0x1dc603, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1dc901, 0x000000, 0x000000, 0x000000, 0x000000, 0x1dca02, - 0x1dcc02, 0x1dce02, 0x000000, 0x000000, 0x1dd006, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1dd601, 0x000000, 0x1dd702, 0x1dd901, 0x000000, 0x000000, - 0x1dda01, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ddb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1ddc10, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1dec01, 0x1ded01, 0x1dee02, 0x1df001, 0x000000, - 0x1df101, 0x000000, 0x1df211, 0x000000, 0x1e0304, 0x1e0702, 0x1e0901, 0x000000, - 0x1e0a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e0b08, - 0x000000, 0x000000, 0x1e1307, 0x000000, 0x1e1a01, 0x000000, 0x1e1b01, 0x000000, - 0x1e1c0c, 0x000000, 0x1e2801, 0x000000, 0x000000, 0x000000, 0x1e2902, 0x000000, - 0x1e2b05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e3002, - 0x1e3201, 0x000000, 0x1e3301, 0x000000, 0x1e3402, 0x1e3604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e3a02, 0x000000, 0x000000, - 0x1e3c04, 0x1e4003, 0x000000, 0x1e4303, 0x000000, 0x000000, 0x000000, 0x1e4601, - 0x000000, 0x000000, 0x000000, 0x1e4701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1e4803, 0x000000, 0x000000, 0x1e4b01, 0x000000, - 0x1e4c02, 0x000000, 0x1e4e01, 0x000000, 0x1e4f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x1e5007, 0x1e5701, 0x000000, 0x000000, 0x1e5801, 0x000000, 0x000000, - 0x1e5901, 0x000000, 0x000000, 0x1e5a01, 0x000000, 0x000000, 0x1e5b01, 0x000000, - 0x000000, 0x1e5c05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e6105, - 0x1e6601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e6701, 0x1e6805, - 0x000000, 0x1e6d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e6f06, 0x000000, - 0x1e7501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e760b, 0x000000, - 0x1e8103, 0x000000, 0x000000, 0x1e8401, 0x000000, 0x1e8502, 0x000000, 0x1e8702, - 0x000000, 0x1e8906, 0x1e8f01, 0x1e9001, 0x1e9102, 0x000000, 0x1e9302, 0x1e950a, - 0x000000, 0x000000, 0x000000, 0x1e9f02, 0x000000, 0x1ea101, 0x000000, 0x1ea201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1ea302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1ea50a, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1eaf01, 0x1eb001, 0x1eb104, 0x1eb503, 0x000000, 0x1eb801, - 0x000000, 0x000000, 0x1eb92f, 0x000000, 0x000000, 0x1ee801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1ee901, 0x000000, 0x000000, 0x1eea02, 0x1eec01, 0x1eed01, - 0x1eee01, 0x000000, 0x1eef01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1ef001, 0x1ef102, 0x000000, 0x1ef301, 0x000000, 0x000000, - 0x1ef402, 0x000000, 0x000000, 0x1ef603, 0x000000, 0x1ef905, 0x1efe02, 0x000000, - 0x000000, 0x1f0002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1f0201, 0x000000, 0x1f0301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1f0404, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f0804, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1f0d03, 0x000000, 0x1f100f, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f1f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f2003, 0x1f2314, 0x1f3701, 0x000000, 0x1f3801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f390d, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f4601, - 0x1f4702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f4902, 0x000000, 0x000000, - 0x000000, 0x1f4b06, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x1f510a, 0x000000, 0x1f5b01, 0x1f5c01, 0x000000, 0x000000, - 0x1f5d02, 0x000000, 0x000000, 0x1f5f01, 0x1f6001, 0x000000, 0x000000, 0x1f6102, - 0x1f6301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1f6406, 0x000000, 0x000000, 0x000000, 0x1f6a09, - 0x1f7307, 0x1f7a01, 0x1f7b01, 0x000000, 0x000000, 0x1f7c01, 0x000000, 0x000000, - 0x000000, 0x1f7d01, 0x000000, 0x1f7e01, 0x000000, 0x1f7f02, 0x000000, 0x1f8102, - 0x1f830c, 0x000000, 0x000000, 0x000000, 0x1f8f01, 0x1f9008, 0x000000, 0x1f9803, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f9b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x1f9c11, 0x1fad01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1fae01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1faf03, 0x1fb202, 0x000000, 0x1fb403, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1fb701, - 0x1fb801, 0x1fb906, 0x1fbf01, 0x1fc001, 0x1fc101, 0x1fc208, 0x000000, 0x000000, - 0x1fca05, 0x000000, 0x000000, 0x1fcf01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x1fd001, 0x1fd107, 0x1fd801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x1fd903, 0x000000, 0x1fdc03, 0x1fdf02, 0x1fe102, - 0x000000, 0x1fe301, 0x1fe401, 0x000000, 0x000000, 0x000000, 0x000000, 0x1fe501, - 0x1fe60c, 0x000000, 0x000000, 0x1ff206, 0x000000, 0x000000, 0x000000, 0x1ff801, - 0x000000, 0x000000, 0x000000, 0x1ff901, 0x000000, 0x000000, 0x1ffa01, 0x000000, - 0x000000, 0x000000, 0x1ffb10, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x200b06, 0x000000, 0x000000, 0x000000, 0x000000, 0x201103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x201401, 0x000000, 0x201501, 0x000000, 0x000000, - 0x201603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x201901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x201a02, 0x000000, 0x201c01, 0x000000, 0x000000, 0x201d03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x202008, - 0x000000, 0x000000, 0x000000, 0x202809, 0x000000, 0x000000, 0x203105, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x203601, 0x000000, 0x203704, 0x203b04, 0x000000, 0x203f01, - 0x204004, 0x000000, 0x000000, 0x204403, 0x000000, 0x204701, 0x204802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x204a02, 0x000000, 0x000000, 0x000000, 0x204c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x204d08, 0x000000, 0x000000, 0x000000, 0x205501, 0x000000, 0x205604, - 0x205a02, 0x000000, 0x000000, 0x205c01, 0x205d03, 0x206003, 0x206301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x206402, 0x206604, 0x206a01, 0x206b01, 0x206c03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x206f03, 0x20720e, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x208001, - 0x000000, 0x000000, 0x000000, 0x208101, 0x208202, 0x208401, 0x208501, 0x208605, - 0x000000, 0x000000, 0x208b06, 0x209102, 0x000000, 0x000000, 0x20930a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x209d01, 0x000000, 0x000000, 0x209e03, - 0x000000, 0x20a101, 0x20a205, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x20a70c, 0x20b305, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x20b803, 0x000000, 0x000000, 0x000000, 0x000000, - 0x20bb03, 0x000000, 0x000000, 0x000000, 0x20be01, 0x000000, 0x20bf02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x20c106, 0x20c702, 0x000000, 0x000000, 0x20c902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x20cb01, - 0x20cc01, 0x000000, 0x20cd01, 0x000000, 0x20ce01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x20cf01, 0x000000, 0x20d009, 0x20d901, 0x20da01, 0x000000, - 0x20db01, 0x20dc09, 0x20e501, 0x000000, 0x000000, 0x000000, 0x000000, 0x20e601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x20e701, 0x000000, 0x000000, 0x20e810, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x20f801, - 0x20f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x20fa01, - 0x000000, 0x000000, 0x20fb03, 0x000000, 0x20fe04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x210207, 0x000000, 0x210904, 0x000000, 0x210d06, 0x000000, 0x000000, - 0x211301, 0x000000, 0x211401, 0x000000, 0x000000, 0x000000, 0x211503, 0x000000, - 0x211806, 0x211e01, 0x211f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x212002, - 0x212201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x212306, 0x000000, 0x000000, 0x212901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x212a02, 0x212c01, 0x212d22, 0x000000, - 0x214f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x215104, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x215504, 0x215902, 0x215b01, 0x000000, 0x000000, 0x215c04, 0x000000, - 0x000000, 0x21600c, 0x000000, 0x216c0c, 0x000000, 0x000000, 0x217801, 0x217901, - 0x000000, 0x000000, 0x217a03, 0x217d01, 0x217e04, 0x218204, 0x000000, 0x218608, - 0x000000, 0x000000, 0x000000, 0x000000, 0x218e0f, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x219d01, 0x000000, 0x219e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x219f01, 0x000000, 0x000000, 0x21a001, 0x000000, 0x000000, 0x000000, - 0x21a101, 0x000000, 0x000000, 0x000000, 0x21a202, 0x000000, 0x000000, 0x21a404, - 0x21a804, 0x21ac01, 0x000000, 0x000000, 0x21ad01, 0x000000, 0x21ae01, 0x000000, - 0x21af01, 0x21b00c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x21bc01, 0x21bd01, 0x21be0b, 0x21c902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x21cb02, 0x21cd01, 0x21ce01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21cf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x21d001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21d101, 0x000000, 0x000000, 0x21d201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21d301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x21d402, - 0x21d601, 0x21d701, 0x000000, 0x000000, 0x000000, 0x000000, 0x21d804, 0x000000, - 0x21dc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x21de03, 0x21e10a, 0x000000, 0x21eb02, 0x000000, 0x21ed03, 0x000000, 0x000000, - 0x000000, 0x21f001, 0x000000, 0x000000, 0x000000, 0x21f110, 0x000000, 0x220104, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x220501, 0x000000, 0x220602, 0x220801, 0x22090a, - 0x221303, 0x221601, 0x221705, 0x221c03, 0x221f01, 0x000000, 0x222002, 0x222203, - 0x000000, 0x000000, 0x000000, 0x000000, 0x222501, 0x222602, 0x222809, 0x223102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x223301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x223403, 0x223702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x223901, 0x223a01, 0x223b02, 0x000000, 0x223d03, 0x224001, - 0x224103, 0x224401, 0x000000, 0x224505, 0x000000, 0x224a01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x224b01, 0x000000, 0x000000, 0x224c02, 0x000000, 0x000000, - 0x224e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x224f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x225001, 0x000000, 0x000000, 0x000000, 0x000000, 0x225102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x225302, 0x22550d, 0x000000, 0x000000, 0x000000, 0x22620a, - 0x000000, 0x226c01, 0x226d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x226e01, 0x226f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x227104, 0x000000, - 0x000000, 0x000000, 0x000000, 0x227506, 0x227b01, 0x227c02, 0x000000, 0x227e02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x228001, 0x000000, 0x000000, 0x000000, - 0x228101, 0x000000, 0x000000, 0x000000, 0x228201, 0x000000, 0x228301, 0x000000, - 0x000000, 0x000000, 0x228401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x228501, 0x228601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x228701, 0x000000, - 0x000000, 0x000000, 0x228801, 0x000000, 0x228904, 0x000000, 0x000000, 0x000000, - 0x228d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x228e01, 0x000000, 0x228f10, 0x000000, 0x000000, 0x229f02, 0x000000, 0x000000, - 0x22a104, 0x000000, 0x000000, 0x22a502, 0x22a701, 0x000000, 0x000000, 0x22a801, - 0x22a901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x22aa01, - 0x000000, 0x22ab14, 0x000000, 0x000000, 0x000000, 0x000000, 0x22bf04, 0x22c301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x22c403, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x22c703, 0x000000, 0x22ca04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x22ce01, 0x22cf01, 0x22d001, 0x000000, 0x000000, 0x000000, 0x22d101, - 0x000000, 0x22d201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x22d30d, 0x000000, - 0x000000, 0x000000, 0x22e001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x22e102, 0x000000, 0x22e30b, - 0x000000, 0x22ee02, 0x000000, 0x000000, 0x000000, 0x22f002, 0x22f202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x22f401, 0x000000, 0x22f504, 0x000000, 0x22f903, - 0x22fc0d, 0x000000, 0x000000, 0x230901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x230a19, 0x000000, 0x232301, 0x000000, 0x000000, 0x000000, 0x000000, 0x232403, - 0x232701, 0x000000, 0x000000, 0x000000, 0x000000, 0x232801, 0x232902, 0x000000, - 0x232b05, 0x23300f, 0x233f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x234237, - 0x237901, 0x000000, 0x000000, 0x237a06, 0x238001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x238102, 0x000000, 0x000000, 0x000000, 0x238301, - 0x000000, 0x000000, 0x238402, 0x000000, 0x238601, 0x000000, 0x000000, 0x238701, - 0x238804, 0x238c01, 0x238d0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x239702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x239906, 0x000000, 0x000000, 0x239f01, 0x000000, 0x23a001, - 0x23a101, 0x000000, 0x000000, 0x000000, 0x23a201, 0x23a301, 0x000000, 0x000000, - 0x23a401, 0x000000, 0x000000, 0x23a501, 0x000000, 0x23a602, 0x000000, 0x000000, - 0x23a802, 0x23aa01, 0x000000, 0x000000, 0x000000, 0x23ab04, 0x000000, 0x000000, - 0x23af08, 0x000000, 0x23b704, 0x000000, 0x000000, 0x23bb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x23bc03, 0x000000, 0x23bf0b, 0x23ca02, - 0x000000, 0x000000, 0x23cc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x23cd03, 0x000000, 0x23d001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x23d102, 0x000000, 0x000000, 0x000000, 0x000000, 0x23d302, - 0x000000, 0x23d501, 0x23d601, 0x23d701, 0x000000, 0x23d809, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x23e101, 0x000000, - 0x23e201, 0x000000, 0x000000, 0x000000, 0x23e301, 0x23e401, 0x000000, 0x000000, - 0x23e501, 0x000000, 0x000000, 0x000000, 0x000000, 0x23e602, 0x000000, 0x000000, - 0x000000, 0x23e804, 0x000000, 0x000000, 0x000000, 0x000000, 0x23ec01, 0x23ed0a, - 0x000000, 0x000000, 0x000000, 0x23f703, 0x23fa05, 0x000000, 0x000000, 0x000000, - 0x000000, 0x23ff01, 0x240003, 0x000000, 0x240301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x240401, 0x240501, 0x240601, 0x000000, 0x240701, 0x240802, 0x000000, - 0x000000, 0x240a01, 0x000000, 0x240b01, 0x240c01, 0x000000, 0x000000, 0x240d02, - 0x000000, 0x240f01, 0x000000, 0x241001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x241101, 0x241202, 0x000000, 0x000000, 0x241401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x241502, 0x241701, - 0x000000, 0x000000, 0x241803, 0x000000, 0x000000, 0x000000, 0x000000, 0x241b03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x241e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x241f01, - 0x000000, 0x000000, 0x000000, 0x242001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x242101, 0x000000, 0x000000, 0x000000, 0x000000, 0x242201, 0x000000, - 0x000000, 0x242303, 0x242601, 0x000000, 0x000000, 0x000000, 0x242701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x242801, 0x000000, - 0x000000, 0x242901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x242a03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x242d01, 0x242e02, - 0x000000, 0x000000, 0x243001, 0x243102, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x243303, 0x243602, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x243803, - 0x000000, 0x000000, 0x000000, 0x243b01, 0x243c02, 0x243e01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x243f0d, 0x000000, 0x000000, - 0x244c04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x245004, 0x245407, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x245b01, 0x245c04, 0x246008, 0x246801, 0x246904, - 0x000000, 0x246d01, 0x246e96, 0x000000, 0x000000, 0x250402, 0x000000, 0x250603, - 0x000000, 0x000000, 0x000000, 0x000000, 0x250901, 0x000000, 0x000000, 0x000000, - 0x250a01, 0x000000, 0x250b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x250c01, 0x000000, 0x000000, 0x250d03, - 0x000000, 0x000000, 0x000000, 0x251001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x251101, 0x251202, 0x000000, 0x000000, 0x000000, 0x000000, 0x251402, 0x000000, - 0x251601, 0x251704, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x251b02, 0x000000, 0x251d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x251f03, 0x252202, 0x000000, 0x252402, 0x000000, 0x252602, - 0x000000, 0x000000, 0x252802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x252a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x252b01, 0x252c0f, 0x000000, 0x000000, 0x000000, 0x000000, - 0x253b01, 0x000000, 0x000000, 0x253c05, 0x000000, 0x000000, 0x254101, 0x000000, - 0x254201, 0x254301, 0x000000, 0x000000, 0x000000, 0x000000, 0x254401, 0x000000, - 0x000000, 0x000000, 0x254502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x254701, 0x254801, 0x000000, 0x254901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x254a01, 0x254b02, 0x000000, - 0x000000, 0x000000, 0x254d07, 0x000000, 0x255401, 0x000000, 0x255503, 0x000000, - 0x255802, 0x000000, 0x255a07, 0x256102, 0x000000, 0x256302, 0x256501, 0x256602, - 0x000000, 0x000000, 0x000000, 0x25680f, 0x257704, 0x000000, 0x000000, 0x257b02, - 0x000000, 0x000000, 0x000000, 0x257d02, 0x000000, 0x257f01, 0x000000, 0x258007, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x25871e, 0x000000, - 0x25a501, 0x25a602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x25a802, 0x000000, 0x000000, 0x25aa01, 0x25ab01, 0x25ac01, 0x25ad02, - 0x000000, 0x000000, 0x000000, 0x25af02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25b104, 0x25b501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x25b601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25b701, 0x000000, 0x25b801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x25b901, 0x000000, 0x000000, 0x25ba05, 0x000000, 0x000000, - 0x25bf01, 0x000000, 0x000000, 0x25c002, 0x000000, 0x25c202, 0x25c402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25c602, 0x000000, 0x25c808, 0x25d001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x25d101, 0x25d201, 0x25d302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x25d50c, 0x25e102, 0x000000, 0x000000, 0x25e301, 0x25e401, - 0x25e501, 0x000000, 0x25e60e, 0x25f401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x25f508, 0x000000, 0x25fd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x25fe01, - 0x000000, 0x000000, 0x000000, 0x25ff0e, 0x000000, 0x260d02, 0x000000, 0x260f06, - 0x000000, 0x000000, 0x000000, 0x261504, 0x000000, 0x261901, 0x261a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x261b01, 0x000000, 0x261c0b, 0x262701, - 0x000000, 0x262801, 0x000000, 0x000000, 0x000000, 0x262901, 0x262a02, 0x000000, - 0x262c01, 0x000000, 0x262d01, 0x000000, 0x262e01, 0x000000, 0x000000, 0x000000, - 0x262f01, 0x263007, 0x263702, 0x000000, 0x000000, 0x000000, 0x263903, 0x000000, - 0x263c04, 0x000000, 0x000000, 0x000000, 0x000000, 0x264001, 0x26410e, 0x000000, - 0x000000, 0x000000, 0x264f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x265201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x265308, 0x000000, 0x265b03, - 0x000000, 0x265e05, 0x000000, 0x266302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x266503, 0x000000, 0x000000, 0x266803, 0x266b04, 0x000000, 0x000000, 0x000000, - 0x266f01, 0x000000, 0x000000, 0x000000, 0x267001, 0x000000, 0x000000, 0x267103, - 0x000000, 0x267402, 0x000000, 0x000000, 0x000000, 0x267601, 0x267707, 0x000000, - 0x000000, 0x267e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x267f07, 0x268602, 0x268801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x268901, 0x268a01, 0x268b05, 0x269002, 0x269205, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x269706, 0x000000, - 0x269d01, 0x000000, 0x000000, 0x000000, 0x269e04, 0x000000, 0x000000, 0x26a20f, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x26b101, - 0x26b201, 0x26b301, 0x000000, 0x000000, 0x000000, 0x26b401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x26b503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x26b801, 0x000000, 0x000000, 0x000000, 0x000000, 0x26b908, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x26c101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x26c202, 0x26c405, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x26c901, 0x000000, 0x000000, 0x000000, 0x26ca01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x26cb07, 0x000000, 0x26d201, - 0x000000, 0x000000, 0x26d316, 0x26e904, 0x26ed03, 0x000000, 0x26f001, 0x26f104, - 0x000000, 0x000000, 0x26f505, 0x000000, 0x26fa02, 0x26fc01, 0x26fd03, 0x000000, - 0x000000, 0x000000, 0x270002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x270201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x270305, 0x270801, 0x000000, 0x000000, 0x270903, 0x000000, 0x000000, - 0x000000, 0x270c07, 0x000000, 0x271303, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x27160c, 0x272201, 0x272302, 0x272509, 0x000000, 0x000000, 0x000000, - 0x272e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x272f02, 0x000000, - 0x000000, 0x273102, 0x000000, 0x273302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x273501, 0x000000, 0x273601, 0x273701, 0x273801, 0x273901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x273a02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x273c09, 0x274501, 0x000000, 0x000000, 0x000000, 0x000000, 0x274602, - 0x000000, 0x000000, 0x274801, 0x274901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x274a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x274b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x274e03, 0x000000, 0x275104, 0x000000, 0x000000, 0x000000, - 0x275502, 0x000000, 0x275704, 0x000000, 0x000000, 0x275b01, 0x275c07, 0x000000, - 0x000000, 0x276303, 0x000000, 0x276603, 0x276901, 0x276a03, 0x000000, 0x000000, - 0x000000, 0x276d03, 0x277001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x277105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x277601, 0x000000, 0x277704, 0x000000, 0x277b0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x278702, 0x000000, 0x000000, - 0x000000, 0x278903, 0x000000, 0x000000, 0x278c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x278e01, 0x278f06, 0x000000, 0x000000, 0x279501, 0x000000, 0x279601, - 0x279701, 0x000000, 0x27980a, 0x000000, 0x000000, 0x27a202, 0x000000, 0x27a401, - 0x27a506, 0x000000, 0x000000, 0x27ab02, 0x000000, 0x27ad01, 0x27ae01, 0x27af08, - 0x27b703, 0x000000, 0x000000, 0x27ba02, 0x000000, 0x27bc03, 0x000000, 0x000000, - 0x000000, 0x27bf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x27c001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x27c110, 0x000000, 0x000000, 0x000000, 0x000000, - 0x27d108, 0x000000, 0x27d901, 0x000000, 0x000000, 0x27da01, 0x27db01, 0x000000, - 0x27dc01, 0x27dd01, 0x000000, 0x27de02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x27e004, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x27e404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x27e80c, - 0x000000, 0x27f401, 0x000000, 0x27f501, 0x27f601, 0x000000, 0x000000, 0x27f705, - 0x000000, 0x000000, 0x27fc01, 0x27fd06, 0x280306, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x280902, 0x000000, 0x280b03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x280e02, 0x000000, 0x000000, 0x281001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x281101, 0x000000, 0x281201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x281318, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x282b04, 0x282f01, 0x283001, 0x000000, 0x000000, 0x000000, 0x283106, 0x000000, - 0x283701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x283801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x283901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x283a04, 0x283e03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x284101, 0x000000, 0x000000, 0x000000, 0x284201, 0x000000, 0x284303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x284604, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x284a02, 0x284c01, 0x000000, 0x000000, - 0x000000, 0x284d01, 0x284e02, 0x000000, 0x285005, 0x000000, 0x285502, 0x000000, - 0x285701, 0x000000, 0x000000, 0x000000, 0x000000, 0x285802, 0x000000, 0x000000, - 0x285a01, 0x000000, 0x285b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x285d01, 0x000000, 0x000000, 0x285e03, 0x286101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x28620a, 0x286c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x286e02, 0x000000, 0x287009, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x287906, 0x000000, 0x287f01, 0x000000, - 0x288003, 0x000000, 0x000000, 0x000000, 0x288301, 0x288401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x288501, 0x000000, 0x000000, 0x000000, 0x288601, - 0x000000, 0x28870a, 0x000000, 0x000000, 0x289102, 0x289302, 0x289501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x289601, 0x000000, - 0x000000, 0x289702, 0x289902, 0x000000, 0x000000, 0x289b01, 0x000000, 0x289c06, - 0x000000, 0x28a201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28a301, 0x000000, 0x28a405, 0x28a901, 0x000000, 0x000000, - 0x28aa01, 0x000000, 0x28ab09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28b401, 0x28b501, 0x28b602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28b802, 0x000000, - 0x000000, 0x28ba03, 0x000000, 0x000000, 0x28bd02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28bf01, 0x000000, 0x28c001, 0x28c102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x28c301, 0x28c401, 0x000000, 0x28c501, 0x000000, 0x28c605, - 0x000000, 0x28cb02, 0x28cd02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x28cf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28d002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28d202, 0x000000, - 0x28d401, 0x000000, 0x000000, 0x000000, 0x28d503, 0x28d802, 0x000000, 0x000000, - 0x28da0a, 0x000000, 0x28e403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x28e709, 0x28f001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x28f101, - 0x28f209, 0x000000, 0x28fb07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x290203, 0x000000, 0x000000, - 0x000000, 0x290508, 0x000000, 0x000000, 0x290d0b, 0x000000, 0x291803, 0x291b01, - 0x000000, 0x000000, 0x291c01, 0x291d02, 0x291f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x292103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x292401, 0x000000, 0x292501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x292601, - 0x292708, 0x000000, 0x000000, 0x292f09, 0x000000, 0x293803, 0x293b01, 0x000000, - 0x293c02, 0x293e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x294101, - 0x294201, 0x294301, 0x000000, 0x294401, 0x000000, 0x000000, 0x000000, 0x294501, - 0x000000, 0x294608, 0x000000, 0x000000, 0x000000, 0x000000, 0x294e01, 0x000000, - 0x000000, 0x294f02, 0x000000, 0x295107, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x295801, 0x295901, - 0x295a02, 0x295c01, 0x000000, 0x295d04, 0x000000, 0x000000, 0x296104, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x296503, 0x000000, 0x000000, 0x296801, - 0x000000, 0x000000, 0x000000, 0x296901, 0x000000, 0x296a01, 0x000000, 0x296b01, - 0x000000, 0x296c02, 0x000000, 0x000000, 0x296e13, 0x000000, 0x298101, 0x000000, - 0x298202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x298401, 0x298501, - 0x29860f, 0x000000, 0x000000, 0x000000, 0x299501, 0x000000, 0x000000, 0x000000, - 0x299603, 0x000000, 0x299901, 0x000000, 0x299a01, 0x000000, 0x000000, 0x000000, - 0x299b01, 0x299c02, 0x299e03, 0x000000, 0x29a101, 0x000000, 0x000000, 0x29a208, - 0x000000, 0x29aa02, 0x000000, 0x000000, 0x000000, 0x000000, 0x29ac01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x29ad01, 0x000000, 0x000000, 0x000000, 0x29ae01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x29af01, 0x29b001, 0x000000, 0x29b102, 0x000000, 0x000000, 0x000000, - 0x29b302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29b504, - 0x000000, 0x29b90a, 0x000000, 0x000000, 0x29c305, 0x000000, 0x29c801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x29c902, 0x000000, 0x000000, 0x000000, 0x29cb03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29ce01, 0x000000, 0x29cf01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29d00a, - 0x000000, 0x29da03, 0x29dd02, 0x29df02, 0x000000, 0x000000, 0x29e101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29e203, - 0x000000, 0x000000, 0x000000, 0x000000, 0x29e501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x29e603, 0x29e90d, 0x29f601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x29f701, 0x000000, 0x000000, 0x29f803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x29fb02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x29fd02, 0x000000, 0x000000, 0x29ff01, 0x2a0003, 0x000000, - 0x000000, 0x000000, 0x2a0302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a0501, 0x000000, 0x000000, 0x000000, 0x2a060a, 0x000000, 0x2a1003, - 0x000000, 0x000000, 0x2a1301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a1404, 0x000000, 0x000000, 0x000000, 0x2a1802, 0x000000, 0x000000, - 0x2a1a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a1b04, 0x2a1f05, 0x000000, 0x000000, 0x000000, 0x2a2402, 0x000000, - 0x000000, 0x000000, 0x2a2604, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2a2a01, 0x000000, 0x000000, 0x2a2b0c, - 0x000000, 0x2a3701, 0x000000, 0x2a3801, 0x000000, 0x000000, 0x000000, 0x2a3902, - 0x000000, 0x000000, 0x000000, 0x2a3b02, 0x000000, 0x000000, 0x2a3d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2a3e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x2a3f01, 0x2a4002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2a4201, 0x000000, 0x2a4301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2a4401, 0x2a4501, 0x2a4603, 0x000000, 0x2a4917, 0x2a6001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2a6102, 0x000000, 0x000000, 0x2a6301, - 0x000000, 0x2a6403, 0x000000, 0x000000, 0x2a6701, 0x000000, 0x000000, 0x2a6801, - 0x2a6901, 0x2a6a01, 0x2a6b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2a6e03, 0x000000, 0x2a7101, 0x2a7205, 0x2a7712, 0x2a8901, 0x000000, - 0x000000, 0x2a8a01, 0x2a8b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2a8c03, 0x000000, 0x000000, 0x000000, 0x2a8f03, 0x2a9201, 0x000000, 0x000000, - 0x2a9302, 0x2a9501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2a9602, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2a9801, 0x000000, 0x2a9902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2a9b03, 0x2a9e01, 0x000000, 0x2a9f04, 0x000000, - 0x000000, 0x2aa301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2aa401, - 0x000000, 0x2aa505, 0x000000, 0x000000, 0x000000, 0x2aaa01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2aab04, 0x000000, 0x000000, 0x2aaf01, 0x2ab001, - 0x000000, 0x000000, 0x2ab102, 0x000000, 0x000000, 0x000000, 0x2ab307, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2aba06, 0x000000, 0x000000, 0x2ac002, 0x000000, - 0x000000, 0x000000, 0x2ac201, 0x000000, 0x000000, 0x2ac30a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2acd02, 0x000000, 0x2acf02, 0x2ad102, 0x000000, 0x000000, - 0x2ad302, 0x000000, 0x000000, 0x000000, 0x2ad501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ad601, - 0x000000, 0x000000, 0x000000, 0x2ad705, 0x000000, 0x000000, 0x000000, 0x2adc02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ade01, 0x000000, 0x000000, - 0x000000, 0x2adf02, 0x2ae104, 0x000000, 0x000000, 0x2ae502, 0x2ae703, 0x2aea01, - 0x000000, 0x000000, 0x2aeb01, 0x000000, 0x2aec02, 0x000000, 0x000000, 0x2aee01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2aef01, 0x000000, 0x000000, 0x000000, - 0x2af002, 0x000000, 0x2af201, 0x000000, 0x000000, 0x000000, 0x2af301, 0x2af401, - 0x000000, 0x000000, 0x000000, 0x2af501, 0x000000, 0x2af602, 0x000000, 0x2af809, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b0102, 0x2b0301, - 0x000000, 0x2b0403, 0x2b0701, 0x2b0802, 0x000000, 0x000000, 0x2b0a01, 0x2b0b01, - 0x2b0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b0d01, 0x000000, 0x000000, - 0x2b0e06, 0x2b1402, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b1603, 0x000000, - 0x000000, 0x000000, 0x2b1915, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b2e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b2f04, 0x2b3301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b3403, 0x000000, 0x000000, - 0x2b3701, 0x2b3801, 0x000000, 0x2b3903, 0x000000, 0x2b3c10, 0x000000, 0x2b4c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b4d02, 0x000000, 0x000000, - 0x000000, 0x2b4f06, 0x000000, 0x000000, 0x000000, 0x2b5501, 0x000000, 0x000000, - 0x000000, 0x2b5601, 0x2b5701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2b5801, 0x2b5901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2b5a03, 0x000000, 0x000000, 0x2b5d06, 0x2b6301, 0x000000, 0x000000, - 0x000000, 0x2b6405, 0x000000, 0x2b6905, 0x2b6e0c, 0x000000, 0x2b7a0b, 0x000000, - 0x000000, 0x000000, 0x2b8501, 0x000000, 0x000000, 0x2b8603, 0x000000, 0x2b8901, - 0x000000, 0x2b8a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2b8b01, 0x000000, 0x2b8c03, 0x2b8f01, 0x2b9001, 0x2b9102, 0x000000, - 0x2b9301, 0x000000, 0x2b9401, 0x000000, 0x000000, 0x000000, 0x2b9501, 0x000000, - 0x000000, 0x2b9601, 0x2b9703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2b9a01, - 0x000000, 0x000000, 0x2b9b02, 0x2b9d06, 0x000000, 0x000000, 0x000000, 0x2ba302, - 0x2ba502, 0x000000, 0x000000, 0x000000, 0x2ba706, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2bad01, 0x2bae01, 0x000000, 0x000000, 0x000000, 0x2baf03, - 0x2bb201, 0x000000, 0x000000, 0x2bb301, 0x2bb405, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bb906, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bbf02, 0x2bc101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bc201, 0x000000, 0x2bc301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2bc401, 0x000000, 0x000000, 0x000000, 0x2bc501, - 0x000000, 0x2bc602, 0x000000, 0x000000, 0x2bc802, 0x000000, 0x2bca03, 0x000000, - 0x2bcd11, 0x000000, 0x000000, 0x2bde3e, 0x000000, 0x000000, 0x000000, 0x2c1c02, - 0x2c1e01, 0x000000, 0x000000, 0x2c1f01, 0x2c2005, 0x2c2505, 0x000000, 0x000000, - 0x000000, 0x2c2a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x2c2c01, 0x2c2d01, - 0x000000, 0x2c2e02, 0x000000, 0x000000, 0x000000, 0x2c3001, 0x000000, 0x2c3114, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2c4504, 0x000000, 0x2c4901, 0x000000, - 0x000000, 0x000000, 0x2c4a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2c4b01, 0x000000, 0x2c4c01, 0x2c4d02, 0x000000, 0x2c4f01, 0x000000, 0x2c5003, - 0x000000, 0x000000, 0x000000, 0x2c5301, 0x2c5401, 0x000000, 0x000000, 0x2c5505, - 0x000000, 0x000000, 0x000000, 0x2c5a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2c5b01, 0x000000, 0x2c5c0d, 0x2c6901, 0x000000, 0x000000, - 0x2c6a03, 0x000000, 0x2c6d02, 0x2c6f01, 0x000000, 0x000000, 0x000000, 0x2c7001, - 0x000000, 0x000000, 0x2c7105, 0x2c7603, 0x000000, 0x2c790d, 0x2c8601, 0x000000, - 0x2c8706, 0x2c8d02, 0x000000, 0x000000, 0x000000, 0x2c8f01, 0x000000, 0x000000, - 0x2c9003, 0x2c9305, 0x000000, 0x000000, 0x000000, 0x000000, 0x2c9801, 0x000000, - 0x000000, 0x000000, 0x2c9903, 0x000000, 0x2c9c05, 0x000000, 0x2ca103, 0x2ca401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ca507, 0x000000, 0x2cac01, - 0x000000, 0x2cad02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2caf0d, - 0x2cbc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2cbd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2cbe01, 0x000000, 0x000000, 0x2cbf04, - 0x2cc301, 0x2cc402, 0x2cc606, 0x000000, 0x2ccc04, 0x000000, 0x2cd001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2cd101, 0x000000, 0x000000, 0x000000, 0x2cd201, - 0x000000, 0x2cd301, 0x2cd403, 0x2cd701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2cd803, 0x000000, 0x000000, 0x2cdb03, 0x000000, 0x000000, 0x2cde0a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2ce805, 0x000000, 0x000000, 0x2ced07, 0x000000, 0x2cf401, 0x000000, - 0x000000, 0x2cf501, 0x2cf602, 0x2cf802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2cfa01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2cfb04, 0x000000, 0x2cff01, 0x2d0008, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2d0801, 0x2d0901, 0x2d0a03, 0x2d0d09, 0x000000, 0x000000, - 0x2d1604, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d1a01, 0x000000, - 0x2d1b04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d1f04, 0x2d2301, - 0x000000, 0x2d2402, 0x000000, 0x000000, 0x2d2601, 0x000000, 0x2d2701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d2802, 0x000000, 0x000000, - 0x2d2a01, 0x2d2b01, 0x000000, 0x2d2c02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d2e02, 0x000000, 0x000000, 0x000000, 0x2d3005, 0x000000, 0x2d3501, 0x000000, - 0x2d3602, 0x000000, 0x000000, 0x000000, 0x2d3801, 0x000000, 0x2d3902, 0x000000, - 0x000000, 0x000000, 0x2d3b01, 0x2d3c01, 0x000000, 0x000000, 0x000000, 0x2d3d02, - 0x2d3f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d4201, 0x000000, 0x2d4303, 0x2d4604, 0x000000, 0x2d4a01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d4b01, 0x000000, - 0x2d4c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d4d03, 0x2d5001, 0x000000, - 0x000000, 0x000000, 0x2d5101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2d5201, 0x2d5302, 0x000000, - 0x2d5502, 0x000000, 0x000000, 0x2d5702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d5901, 0x000000, 0x000000, 0x2d5a02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d5c09, 0x000000, 0x2d6501, 0x000000, 0x000000, 0x000000, 0x2d6602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2d6801, 0x000000, 0x000000, 0x2d6901, 0x2d6a01, - 0x2d6b02, 0x2d6d09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d7607, 0x000000, 0x000000, 0x2d7d02, 0x000000, 0x2d7f01, 0x2d8001, 0x000000, - 0x2d8101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2d8201, 0x000000, 0x000000, 0x2d8301, 0x2d8403, 0x2d8715, - 0x000000, 0x000000, 0x2d9c02, 0x2d9e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2d9f01, 0x000000, 0x000000, 0x2da004, 0x000000, 0x2da403, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2da71c, 0x000000, - 0x000000, 0x000000, 0x2dc303, 0x000000, 0x2dc602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2dc803, 0x000000, 0x000000, 0x2dcb13, 0x2dde02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2de003, - 0x2de302, 0x2de501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2de601, - 0x000000, 0x000000, 0x000000, 0x2de702, 0x2de901, 0x000000, 0x2dea04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2dee01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2def01, 0x000000, 0x000000, - 0x000000, 0x2df005, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2df501, 0x2df605, 0x000000, 0x2dfb01, 0x2dfc01, 0x000000, 0x2dfd01, 0x000000, - 0x000000, 0x2dfe02, 0x000000, 0x2e0001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2e0102, - 0x2e0303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2e0601, 0x000000, 0x2e0701, 0x000000, 0x000000, 0x000000, 0x2e0801, 0x000000, - 0x000000, 0x000000, 0x2e0902, 0x000000, 0x000000, 0x000000, 0x000000, 0x2e0b01, - 0x000000, 0x000000, 0x2e0c02, 0x2e0e01, 0x2e0f03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2e1227, 0x2e3901, 0x2e3a01, 0x2e3b01, 0x000000, 0x000000, 0x2e3c01, - 0x000000, 0x000000, 0x000000, 0x2e3d08, 0x000000, 0x000000, 0x2e4505, 0x2e4a01, - 0x000000, 0x2e4b11, 0x000000, 0x2e5c02, 0x000000, 0x000000, 0x000000, 0x2e5e01, - 0x000000, 0x000000, 0x000000, 0x2e5f02, 0x2e6101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2e6201, 0x000000, 0x2e6301, 0x2e6406, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2e6a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2e6b01, 0x000000, 0x2e6c01, 0x000000, 0x2e6d01, 0x000000, 0x000000, - 0x2e6e07, 0x000000, 0x2e7501, 0x2e7602, 0x2e780c, 0x2e8401, 0x2e8502, 0x000000, - 0x2e8706, 0x2e8d02, 0x000000, 0x000000, 0x2e8f02, 0x000000, 0x2e9102, 0x2e9303, - 0x2e9601, 0x2e9701, 0x000000, 0x000000, 0x000000, 0x000000, 0x2e9805, 0x000000, - 0x2e9d07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2ea402, 0x2ea601, - 0x2ea701, 0x000000, 0x2ea803, 0x000000, 0x000000, 0x000000, 0x000000, 0x2eab01, - 0x2eac04, 0x000000, 0x000000, 0x000000, 0x000000, 0x2eb001, 0x000000, 0x2eb101, - 0x000000, 0x2eb201, 0x000000, 0x2eb301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2eb402, 0x000000, 0x000000, 0x2eb602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2eb811, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2ec901, 0x000000, 0x000000, 0x000000, 0x2eca01, - 0x2ecb06, 0x2ed101, 0x2ed205, 0x000000, 0x2ed701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2ed801, 0x000000, 0x000000, 0x000000, 0x2ed905, 0x000000, - 0x2ede05, 0x2ee301, 0x2ee401, 0x2ee505, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2eea01, 0x000000, 0x000000, 0x2eeb02, 0x2eed01, 0x000000, 0x000000, - 0x2eee04, 0x000000, 0x000000, 0x2ef209, 0x2efb01, 0x000000, 0x000000, 0x2efc03, - 0x000000, 0x000000, 0x2eff01, 0x2f0001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2f0107, 0x000000, 0x2f0802, 0x2f0a01, 0x000000, 0x000000, 0x2f0b02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f0d08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f1501, 0x2f1601, - 0x000000, 0x2f1704, 0x000000, 0x000000, 0x000000, 0x2f1b04, 0x2f1f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2f2002, 0x2f2201, 0x2f2306, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f2901, - 0x000000, 0x000000, 0x000000, 0x2f2a01, 0x2f2b03, 0x000000, 0x000000, 0x000000, - 0x2f2e02, 0x000000, 0x2f3005, 0x2f3501, 0x2f3601, 0x000000, 0x000000, 0x2f3701, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2f3803, 0x000000, 0x2f3b05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2f4001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x2f4104, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2f4501, 0x2f4601, 0x2f4707, 0x2f4e03, 0x000000, 0x000000, - 0x2f5102, 0x2f5302, 0x000000, 0x000000, 0x000000, 0x2f5501, 0x000000, 0x000000, - 0x000000, 0x2f5601, 0x2f5708, 0x2f5f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2f6101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f6201, - 0x000000, 0x000000, 0x000000, 0x2f6302, 0x2f6503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2f6802, 0x000000, 0x2f6a02, 0x000000, 0x2f6c01, 0x000000, 0x000000, - 0x2f6d02, 0x000000, 0x000000, 0x000000, 0x2f6f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2f7003, 0x000000, 0x2f7305, 0x000000, 0x2f7801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2f7911, 0x2f8a02, 0x2f8c02, 0x000000, 0x000000, - 0x000000, 0x2f8e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f9105, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f9601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x2f9702, - 0x000000, 0x000000, 0x000000, 0x2f9901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x2f9a01, 0x2f9b01, 0x000000, 0x000000, 0x2f9c07, 0x000000, 0x2fa301, - 0x000000, 0x2fa401, 0x000000, 0x000000, 0x2fa503, 0x000000, 0x2fa802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x2faa06, 0x000000, 0x2fb001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fb101, 0x2fb201, 0x2fb301, 0x2fb404, 0x000000, 0x2fb801, - 0x2fb904, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fbd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fbe06, 0x000000, 0x000000, 0x2fc404, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2fc801, 0x000000, 0x000000, 0x000000, 0x000000, 0x2fc902, - 0x000000, 0x000000, 0x2fcb06, 0x2fd101, 0x000000, 0x000000, 0x000000, 0x2fd201, - 0x000000, 0x000000, 0x000000, 0x2fd309, 0x2fdc01, 0x000000, 0x2fdd02, 0x2fdf01, - 0x000000, 0x2fe012, 0x000000, 0x000000, 0x2ff202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x2ff401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x2ff50b, 0x000000, 0x300001, 0x000000, 0x000000, 0x300102, 0x000000, 0x300301, - 0x300401, 0x000000, 0x000000, 0x300501, 0x000000, 0x300601, 0x000000, 0x000000, - 0x300701, 0x000000, 0x300801, 0x000000, 0x300903, 0x000000, 0x000000, 0x000000, - 0x000000, 0x300c08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x30141d, - 0x000000, 0x303102, 0x303301, 0x000000, 0x000000, 0x000000, 0x000000, 0x303401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x303501, 0x303601, 0x000000, 0x303701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x303801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x303902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x303b02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x303d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x303e04, 0x000000, 0x304201, 0x304301, 0x30440a, 0x000000, 0x000000, 0x304e03, - 0x305101, 0x305201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x305304, - 0x305703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x305a03, 0x000000, 0x305d01, 0x000000, 0x305e01, 0x000000, 0x000000, - 0x305f09, 0x000000, 0x000000, 0x000000, 0x000000, 0x306801, 0x000000, 0x000000, - 0x306904, 0x000000, 0x000000, 0x000000, 0x000000, 0x306d05, 0x307201, 0x000000, - 0x000000, 0x307306, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x307901, - 0x000000, 0x000000, 0x000000, 0x307a01, 0x000000, 0x000000, 0x000000, 0x307b08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x308301, 0x000000, 0x308402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x308602, 0x000000, 0x308804, 0x308c02, - 0x000000, 0x000000, 0x000000, 0x308e01, 0x308f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x309101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x309201, - 0x309301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x309401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x309507, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x309c05, 0x000000, 0x000000, 0x000000, 0x30a101, 0x30a201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x30a317, 0x30ba12, - 0x000000, 0x000000, 0x30cc01, 0x30cd01, 0x000000, 0x000000, 0x000000, 0x30ce01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x30cf06, 0x30d507, 0x30dc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x30dd02, 0x000000, 0x30df01, 0x30e001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x30e101, 0x000000, 0x000000, 0x000000, 0x30e205, - 0x000000, 0x30e704, 0x000000, 0x000000, 0x000000, 0x30eb03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x30ee01, 0x000000, - 0x000000, 0x000000, 0x30ef01, 0x000000, 0x000000, 0x000000, 0x30f001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x30f105, 0x000000, 0x30f601, 0x000000, - 0x000000, 0x30f702, 0x000000, 0x30f902, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x30fb08, 0x000000, 0x310302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x310501, 0x000000, 0x000000, 0x000000, 0x310601, 0x310702, 0x000000, 0x000000, - 0x000000, 0x310901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x310a07, 0x000000, 0x000000, 0x311103, 0x000000, 0x311401, - 0x000000, 0x311503, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x311802, 0x000000, - 0x000000, 0x000000, 0x311a03, 0x311d03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x312001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x312101, 0x312218, 0x313a05, 0x000000, 0x313f03, - 0x000000, 0x000000, 0x314201, 0x000000, 0x314303, 0x000000, 0x31460a, 0x000000, - 0x315002, 0x000000, 0x000000, 0x000000, 0x000000, 0x315213, 0x316502, 0x000000, - 0x316709, 0x000000, 0x000000, 0x31700d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x317d01, 0x000000, 0x000000, 0x317e02, 0x000000, 0x318004, - 0x318402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x318602, 0x000000, 0x318801, 0x000000, - 0x31890b, 0x319401, 0x000000, 0x319503, 0x000000, 0x319804, 0x000000, 0x319c02, - 0x000000, 0x000000, 0x000000, 0x319e01, 0x319f03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x31a21e, 0x31c002, 0x000000, 0x000000, 0x31c201, 0x000000, 0x000000, - 0x31c302, 0x000000, 0x000000, 0x31c501, 0x31c602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x31c801, 0x000000, - 0x31c901, 0x31ca01, 0x000000, 0x31cb0b, 0x000000, 0x000000, 0x31d608, 0x31de06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x31e401, 0x000000, 0x31e504, 0x31e901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x31ea01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x31eb0d, 0x31f81f, 0x000000, - 0x321701, 0x000000, 0x32180b, 0x000000, 0x322303, 0x000000, 0x000000, 0x000000, - 0x000000, 0x322603, 0x000000, 0x322901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x322a02, 0x322c01, 0x000000, 0x322d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x322e03, 0x000000, 0x000000, 0x323102, 0x323301, 0x323401, 0x000000, 0x000000, - 0x000000, 0x323501, 0x000000, 0x000000, 0x000000, 0x323601, 0x000000, 0x323702, - 0x000000, 0x323901, 0x000000, 0x000000, 0x323a03, 0x000000, 0x323d01, 0x000000, - 0x323e03, 0x000000, 0x000000, 0x324103, 0x000000, 0x324403, 0x324701, 0x324802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x324a02, 0x000000, 0x324c01, 0x000000, 0x000000, 0x324d06, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x325301, 0x325403, 0x325701, 0x000000, 0x325804, 0x000000, 0x000000, 0x000000, - 0x000000, 0x325c02, 0x000000, 0x000000, 0x000000, 0x325e01, 0x325f02, 0x326104, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x326507, - 0x000000, 0x326c01, 0x326d10, 0x000000, 0x327d02, 0x000000, 0x327f01, 0x000000, - 0x000000, 0x000000, 0x328001, 0x000000, 0x328101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x328201, 0x000000, 0x328301, 0x328401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x328508, 0x000000, 0x328d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x328f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x329102, 0x000000, 0x000000, - 0x329301, 0x000000, 0x000000, 0x329401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x329501, 0x000000, 0x000000, 0x000000, 0x000000, 0x329601, 0x000000, 0x329701, - 0x000000, 0x329801, 0x000000, 0x000000, 0x000000, 0x329904, 0x329d01, 0x329e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x329f04, 0x32a302, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x32a504, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32a901, 0x000000, 0x32aa01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32ab0a, 0x000000, - 0x000000, 0x32b502, 0x000000, 0x000000, 0x000000, 0x32b701, 0x32b801, 0x000000, - 0x32b90a, 0x32c301, 0x32c404, 0x32c801, 0x32c902, 0x000000, 0x000000, 0x000000, - 0x000000, 0x32cb01, 0x000000, 0x000000, 0x32cc02, 0x000000, 0x000000, 0x32ce02, - 0x32d008, 0x000000, 0x32d803, 0x000000, 0x000000, 0x000000, 0x32db01, 0x000000, - 0x32dc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x32dd02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x32df03, 0x32e201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x32e301, 0x000000, 0x000000, 0x32e403, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32e705, 0x000000, - 0x32ec03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32ef01, - 0x000000, 0x000000, 0x32f002, 0x000000, 0x000000, 0x000000, 0x32f201, 0x32f302, - 0x32f501, 0x000000, 0x000000, 0x000000, 0x000000, 0x32f602, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x32f805, 0x32fd02, 0x000000, - 0x32ff04, 0x000000, 0x000000, 0x330301, 0x330406, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x330a01, 0x000000, 0x000000, 0x330b03, 0x000000, 0x330e06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x331401, 0x331501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x331601, 0x331701, 0x331801, 0x000000, - 0x331903, 0x000000, 0x000000, 0x000000, 0x331c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x331d01, 0x000000, 0x331e01, 0x331f06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x332505, 0x000000, 0x332a01, - 0x000000, 0x332b01, 0x000000, 0x000000, 0x000000, 0x332c18, 0x000000, 0x334401, - 0x334502, 0x334701, 0x334801, 0x000000, 0x000000, 0x334901, 0x000000, 0x334a03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x334d10, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x335d12, 0x000000, 0x336f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x337001, 0x000000, - 0x000000, 0x337104, 0x000000, 0x000000, 0x000000, 0x000000, 0x337502, 0x000000, - 0x000000, 0x000000, 0x337701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x337801, 0x000000, 0x337905, 0x337e04, 0x338202, 0x000000, 0x000000, 0x000000, - 0x338401, 0x000000, 0x000000, 0x338501, 0x000000, 0x000000, 0x33860f, 0x000000, - 0x000000, 0x339501, 0x000000, 0x000000, 0x000000, 0x339605, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x339b07, 0x000000, 0x000000, 0x33a20d, 0x33af09, 0x000000, 0x000000, 0x000000, - 0x33b808, 0x000000, 0x33c004, 0x33c402, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x33c604, 0x33ca01, 0x000000, 0x33cb01, 0x33cc01, 0x000000, 0x33cd0a, - 0x000000, 0x33d704, 0x000000, 0x000000, 0x000000, 0x000000, 0x33db01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x33dc16, 0x33f202, 0x000000, 0x000000, 0x33f401, - 0x33f501, 0x000000, 0x000000, 0x33f602, 0x000000, 0x000000, 0x33f805, 0x000000, - 0x33fd01, 0x000000, 0x000000, 0x000000, 0x33fe0e, 0x000000, 0x000000, 0x000000, - 0x000000, 0x340c03, 0x000000, 0x340f01, 0x000000, 0x000000, 0x000000, 0x341001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x341101, 0x000000, - 0x000000, 0x341204, 0x000000, 0x341607, 0x000000, 0x000000, 0x341d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x341e0b, 0x000000, 0x342908, 0x000000, - 0x343104, 0x000000, 0x343501, 0x343602, 0x343802, 0x000000, 0x000000, 0x343a01, - 0x343b01, 0x000000, 0x343c01, 0x343d02, 0x000000, 0x343f04, 0x000000, 0x344301, - 0x344405, 0x344901, 0x000000, 0x344a01, 0x344b01, 0x000000, 0x344c02, 0x344e04, - 0x345206, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x345808, 0x346001, - 0x000000, 0x34610a, 0x000000, 0x000000, 0x000000, 0x000000, 0x346b02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x346d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x346e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x347002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x347201, 0x000000, 0x000000, 0x000000, - 0x347302, 0x000000, 0x000000, 0x347508, 0x347d01, 0x000000, 0x347e06, 0x000000, - 0x348403, 0x000000, 0x348701, 0x348802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x348a06, 0x000000, 0x349001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x349101, 0x349201, 0x000000, 0x349304, 0x000000, 0x000000, 0x000000, - 0x000000, 0x349701, 0x349801, 0x349904, 0x349d01, 0x000000, 0x349e01, 0x349f02, - 0x34a101, 0x34a201, 0x000000, 0x34a302, 0x000000, 0x000000, 0x34a501, 0x34a602, - 0x000000, 0x34a806, 0x000000, 0x000000, 0x000000, 0x000000, 0x34ae03, 0x000000, - 0x34b103, 0x000000, 0x34b401, 0x000000, 0x000000, 0x34b501, 0x000000, 0x000000, - 0x34b601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x34b701, - 0x34b803, 0x000000, 0x34bb10, 0x000000, 0x000000, 0x34cb06, 0x34d103, 0x000000, - 0x000000, 0x34d403, 0x34d702, 0x000000, 0x000000, 0x000000, 0x34d905, 0x34de02, - 0x000000, 0x34e002, 0x34e201, 0x000000, 0x34e303, 0x000000, 0x34e601, 0x000000, - 0x34e701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x34e802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x34ea02, 0x000000, - 0x000000, 0x000000, 0x34ec06, 0x34f201, 0x000000, 0x000000, 0x000000, 0x34f301, - 0x34f401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x34f505, 0x000000, 0x34fa01, 0x000000, 0x000000, 0x000000, 0x000000, 0x34fb02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x34fd03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x350002, - 0x000000, 0x000000, 0x350202, 0x000000, 0x000000, 0x000000, 0x000000, 0x350405, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x350903, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x350c05, 0x000000, 0x351109, 0x000000, 0x351a05, 0x000000, 0x351f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x352002, 0x352201, 0x000000, 0x352301, 0x352401, 0x352501, 0x35260a, 0x000000, - 0x000000, 0x353001, 0x353105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x353602, 0x000000, 0x353802, 0x353a02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x353c05, 0x000000, - 0x000000, 0x000000, 0x354104, 0x000000, 0x000000, 0x000000, 0x354510, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x355502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x355703, 0x000000, 0x355a01, 0x000000, 0x000000, 0x355b02, - 0x000000, 0x000000, 0x355d01, 0x000000, 0x000000, 0x000000, 0x355e01, 0x000000, - 0x355f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x356301, 0x000000, - 0x356402, 0x356601, 0x000000, 0x000000, 0x356703, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x356a0a, 0x357401, 0x000000, 0x357501, 0x000000, - 0x000000, 0x000000, 0x357605, 0x000000, 0x000000, 0x000000, 0x357b02, 0x357d03, - 0x358005, 0x000000, 0x000000, 0x000000, 0x358503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x358802, 0x000000, 0x000000, 0x000000, 0x000000, 0x358a07, - 0x000000, 0x000000, 0x000000, 0x359101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x359201, 0x000000, 0x359301, - 0x359402, 0x000000, 0x000000, 0x359605, 0x359b06, 0x35a101, 0x35a201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x35a302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x35a502, - 0x000000, 0x35a701, 0x000000, 0x000000, 0x35a801, 0x35a909, 0x35b204, 0x000000, - 0x35b601, 0x000000, 0x000000, 0x35b701, 0x000000, 0x000000, 0x000000, 0x35b804, - 0x000000, 0x35bc05, 0x000000, 0x000000, 0x35c101, 0x35c201, 0x000000, 0x35c301, - 0x35c401, 0x000000, 0x35c501, 0x000000, 0x000000, 0x35c601, 0x000000, 0x000000, - 0x000000, 0x35c701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x35c803, 0x000000, 0x000000, 0x35cb03, 0x000000, 0x35ce01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x35cf02, 0x35d109, 0x35da0a, 0x000000, 0x000000, 0x000000, 0x35e401, - 0x000000, 0x35e503, 0x000000, 0x35e803, 0x000000, 0x35eb02, 0x35ed0a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x35f701, 0x35f811, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x360902, 0x000000, 0x360b02, 0x000000, 0x000000, 0x360d01, - 0x000000, 0x000000, 0x360e01, 0x000000, 0x360f02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x361101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x361202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x36140d, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x362102, 0x000000, 0x000000, 0x362301, 0x000000, 0x000000, 0x362401, 0x000000, - 0x000000, 0x362501, 0x362605, 0x000000, 0x362b01, 0x000000, 0x362c01, 0x362d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x362f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x363005, - 0x363508, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x363d02, 0x000000, 0x363f01, 0x364001, 0x364101, - 0x000000, 0x000000, 0x364203, 0x364503, 0x000000, 0x364802, 0x364a01, 0x364b04, - 0x364f02, 0x000000, 0x000000, 0x365103, 0x000000, 0x000000, 0x000000, 0x365401, - 0x000000, 0x000000, 0x000000, 0x365501, 0x000000, 0x000000, 0x000000, 0x365601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x365705, 0x365c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x365d01, 0x000000, 0x365e01, 0x000000, 0x000000, - 0x365f01, 0x000000, 0x000000, 0x000000, 0x366001, 0x000000, 0x000000, 0x366102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x366303, - 0x000000, 0x366605, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x366b01, - 0x000000, 0x366c01, 0x000000, 0x366d01, 0x000000, 0x000000, 0x366e09, 0x000000, - 0x36770a, 0x000000, 0x000000, 0x000000, 0x368101, 0x000000, 0x000000, 0x368201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x368301, 0x000000, 0x36840a, 0x000000, - 0x368e02, 0x369001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x369114, 0x36a501, - 0x000000, 0x36a603, 0x36a901, 0x000000, 0x36aa01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x36ab03, 0x000000, 0x000000, 0x36ae13, 0x000000, 0x000000, 0x000000, - 0x36c101, 0x000000, 0x36c202, 0x000000, 0x36c414, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x36d802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x36da03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x36dd02, 0x000000, 0x000000, 0x000000, 0x36df01, 0x36e002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x36e201, 0x000000, 0x000000, 0x36e304, 0x36e707, 0x000000, 0x36ee01, - 0x000000, 0x36ef02, 0x36f101, 0x000000, 0x000000, 0x36f201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x36f304, - 0x000000, 0x000000, 0x000000, 0x36f702, 0x000000, 0x36f901, 0x36fa01, 0x000000, - 0x36fb03, 0x36fe06, 0x370401, 0x370501, 0x370606, 0x370c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x370e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x370f01, 0x371001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x371104, 0x000000, 0x371501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x371601, 0x000000, 0x000000, 0x000000, 0x371701, 0x000000, - 0x000000, 0x371802, 0x000000, 0x000000, 0x000000, 0x371a01, 0x371b01, 0x000000, - 0x000000, 0x371c08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x372401, 0x000000, 0x000000, 0x000000, 0x000000, 0x372501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x372601, 0x000000, 0x000000, 0x372701, - 0x000000, 0x000000, 0x372801, 0x000000, 0x372905, 0x372e01, 0x000000, 0x372f08, - 0x373702, 0x000000, 0x000000, 0x373902, 0x000000, 0x373b01, 0x000000, 0x000000, - 0x000000, 0x373c01, 0x373d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x374103, - 0x000000, 0x000000, 0x374402, 0x000000, 0x374601, 0x000000, 0x000000, 0x000000, - 0x374701, 0x000000, 0x000000, 0x374801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x374902, 0x000000, 0x374b01, - 0x374c02, 0x000000, 0x000000, 0x374e02, 0x000000, 0x375001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x375101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x37520a, 0x000000, 0x000000, 0x375c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x375d02, 0x000000, 0x000000, 0x375f02, 0x000000, - 0x000000, 0x376101, 0x000000, 0x000000, 0x376202, 0x376401, 0x000000, 0x000000, - 0x376503, 0x376802, 0x376a03, 0x000000, 0x376d07, 0x000000, 0x000000, 0x377401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x377501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x377601, 0x377704, 0x000000, 0x000000, 0x000000, - 0x377b04, 0x000000, 0x000000, 0x377f17, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x379603, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x379901, 0x000000, 0x000000, 0x379a05, 0x000000, 0x000000, 0x000000, - 0x379f01, 0x37a005, 0x000000, 0x000000, 0x000000, 0x37a501, 0x000000, 0x000000, - 0x000000, 0x37a603, 0x000000, 0x37a901, 0x000000, 0x000000, 0x37aa03, 0x000000, - 0x000000, 0x37ad02, 0x000000, 0x000000, 0x37af04, 0x000000, 0x000000, 0x000000, - 0x37b301, 0x000000, 0x37b401, 0x000000, 0x000000, 0x000000, 0x000000, 0x37b505, - 0x37ba02, 0x37bc08, 0x000000, 0x000000, 0x37c401, 0x000000, 0x000000, 0x37c501, - 0x000000, 0x37c603, 0x37c901, 0x000000, 0x000000, 0x000000, 0x37ca01, 0x000000, - 0x000000, 0x000000, 0x37cb01, 0x37cc01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x37cd02, 0x000000, 0x000000, 0x000000, 0x37cf01, 0x000000, 0x000000, 0x000000, - 0x37d001, 0x000000, 0x37d103, 0x000000, 0x37d408, 0x37dc01, 0x37dd02, 0x37df01, - 0x37e002, 0x000000, 0x37e201, 0x000000, 0x37e301, 0x37e402, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x37e601, 0x37e705, 0x000000, 0x000000, 0x37ec01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x37ed02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x37ef01, 0x000000, 0x000000, 0x000000, 0x000000, 0x37f001, - 0x37f104, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x37f503, 0x37f801, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x37f901, 0x37fa01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x37fb01, 0x000000, 0x000000, 0x000000, - 0x37fc04, 0x000000, 0x000000, 0x380003, 0x380301, 0x000000, 0x380401, 0x000000, - 0x000000, 0x380503, 0x000000, 0x380801, 0x380901, 0x000000, 0x000000, 0x380a0f, - 0x000000, 0x381902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x381b01, - 0x381c06, 0x382202, 0x000000, 0x382401, 0x000000, 0x000000, 0x382505, 0x000000, - 0x382a15, 0x000000, 0x383f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x384004, 0x000000, 0x000000, 0x384401, 0x000000, 0x384502, 0x000000, 0x384701, - 0x384808, 0x000000, 0x000000, 0x000000, 0x385007, 0x000000, 0x000000, 0x385706, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x385d01, 0x000000, 0x000000, 0x000000, 0x385e04, 0x000000, 0x000000, - 0x386205, 0x000000, 0x386702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x386901, 0x000000, 0x000000, 0x386a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x386d08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x387503, 0x000000, 0x387803, 0x000000, 0x387b06, 0x000000, - 0x000000, 0x388101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x388202, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x388408, 0x000000, - 0x388c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x388d04, - 0x389101, 0x000000, 0x000000, 0x000000, 0x389202, 0x000000, 0x000000, 0x000000, - 0x389401, 0x389501, 0x000000, 0x000000, 0x000000, 0x389601, 0x389701, 0x389803, - 0x389b01, 0x389c01, 0x389d01, 0x389e01, 0x389f01, 0x38a002, 0x000000, 0x38a202, - 0x000000, 0x38a401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x38a505, 0x000000, 0x38aa05, 0x38af01, - 0x38b001, 0x38b101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x38b20b, 0x38bd04, 0x38c107, - 0x000000, 0x38c807, 0x000000, 0x38cf03, 0x000000, 0x38d201, 0x000000, 0x000000, - 0x38d302, 0x38d501, 0x38d601, 0x000000, 0x000000, 0x38d701, 0x000000, 0x000000, - 0x000000, 0x38d801, 0x000000, 0x38d902, 0x000000, 0x000000, 0x000000, 0x000000, - 0x38db08, 0x38e301, 0x000000, 0x000000, 0x38e401, 0x38e502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x38e701, 0x000000, 0x000000, 0x38e802, - 0x000000, 0x000000, 0x000000, 0x38ea05, 0x38ef01, 0x000000, 0x000000, 0x38f001, - 0x38f101, 0x38f201, 0x000000, 0x000000, 0x38f302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x38f501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x38f604, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x38fa01, 0x000000, 0x38fb0c, 0x000000, - 0x000000, 0x390701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x390803, 0x000000, - 0x000000, 0x390b01, 0x390c06, 0x391202, 0x000000, 0x391402, 0x000000, 0x000000, - 0x000000, 0x000000, 0x39160c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x392201, 0x000000, 0x392303, 0x000000, 0x000000, 0x000000, 0x000000, - 0x392602, 0x000000, 0x392801, 0x392901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x392a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x392b03, 0x000000, 0x000000, 0x392e03, 0x393102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x393301, 0x000000, 0x000000, 0x000000, 0x000000, 0x393401, - 0x393507, 0x000000, 0x393c01, 0x000000, 0x000000, 0x393d04, 0x000000, 0x394103, - 0x000000, 0x394404, 0x000000, 0x000000, 0x000000, 0x394803, 0x000000, 0x000000, - 0x000000, 0x394b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x394c01, 0x000000, 0x000000, 0x394d0a, 0x000000, - 0x000000, 0x000000, 0x395701, 0x000000, 0x000000, 0x395801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x395901, 0x395a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x395d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x395e0a, 0x396802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x396a06, 0x397006, 0x397601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x397701, 0x000000, 0x000000, 0x000000, 0x397806, 0x000000, 0x000000, - 0x000000, 0x000000, 0x397e01, 0x000000, 0x397f01, 0x398005, 0x398502, 0x000000, - 0x000000, 0x000000, 0x398701, 0x398802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x398a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x398c03, 0x398f01, 0x399003, 0x000000, 0x000000, 0x399302, 0x399502, 0x000000, - 0x000000, 0x000000, 0x399709, 0x39a002, 0x000000, 0x000000, 0x000000, 0x000000, - 0x39a203, 0x39a502, 0x39a701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x39a801, 0x39a903, 0x39ac06, 0x39b201, 0x000000, 0x39b301, 0x000000, 0x39b401, - 0x39b501, 0x000000, 0x000000, 0x39b601, 0x000000, 0x000000, 0x39b701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x39b802, 0x000000, 0x39ba03, 0x000000, 0x000000, - 0x39bd03, 0x000000, 0x000000, 0x39c001, 0x39c102, 0x39c307, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x39ca03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x39cd05, 0x000000, 0x39d201, 0x39d302, 0x39d503, 0x000000, - 0x000000, 0x000000, 0x39d801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x39d901, 0x000000, 0x000000, 0x000000, 0x000000, 0x39da01, 0x000000, - 0x39db03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39de01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39df02, - 0x000000, 0x39e101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x39e201, 0x000000, 0x39e303, 0x000000, 0x39e601, 0x000000, 0x000000, 0x000000, - 0x39e702, 0x000000, 0x000000, 0x39e901, 0x39ea03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x39ed03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39f00c, - 0x000000, 0x39fc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x39fd01, - 0x000000, 0x000000, 0x39fe18, 0x3a1602, 0x000000, 0x3a1803, 0x000000, 0x3a1b01, - 0x000000, 0x3a1c01, 0x3a1d02, 0x3a1f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3a2001, 0x000000, 0x3a210c, 0x3a2d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3a2e0c, 0x000000, 0x3a3a01, 0x000000, 0x3a3b03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3a3e09, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3a470b, 0x000000, 0x000000, 0x3a5201, 0x000000, 0x3a5302, - 0x3a5501, 0x3a5601, 0x000000, 0x000000, 0x3a5709, 0x000000, 0x3a6002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3a6201, 0x000000, - 0x000000, 0x3a6301, 0x3a6402, 0x3a6601, 0x000000, 0x000000, 0x3a670c, 0x000000, - 0x000000, 0x000000, 0x3a7309, 0x3a7c11, 0x000000, 0x000000, 0x3a8d05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3a9203, 0x000000, 0x000000, 0x3a9503, 0x3a9801, - 0x000000, 0x000000, 0x3a9912, 0x3aab01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3aac01, 0x000000, 0x3aad01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3aae02, 0x000000, 0x000000, 0x3ab004, 0x3ab404, 0x3ab801, 0x000000, - 0x000000, 0x000000, 0x3ab901, 0x000000, 0x000000, 0x000000, 0x3aba08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3ac201, 0x3ac301, 0x000000, 0x000000, - 0x000000, 0x3ac401, 0x3ac502, 0x3ac702, 0x3ac90f, 0x000000, 0x3ad801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3ad909, 0x000000, 0x000000, 0x3ae207, 0x3ae902, - 0x3aeb01, 0x000000, 0x000000, 0x3aec01, 0x3aed02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3aef01, 0x000000, 0x000000, - 0x000000, 0x3af005, 0x000000, 0x000000, 0x000000, 0x000000, 0x3af502, 0x000000, - 0x3af701, 0x000000, 0x3af803, 0x000000, 0x3afb02, 0x000000, 0x000000, 0x3afd03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3b0001, 0x000000, 0x000000, 0x3b0103, 0x000000, 0x3b0404, 0x3b0802, 0x000000, - 0x000000, 0x000000, 0x3b0a03, 0x000000, 0x3b0d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b0e01, 0x000000, 0x000000, 0x3b0f03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b1206, 0x3b1801, 0x000000, 0x000000, - 0x000000, 0x3b1901, 0x000000, 0x3b1a03, 0x000000, 0x000000, 0x3b1d01, 0x000000, - 0x3b1e02, 0x000000, 0x000000, 0x000000, 0x3b2001, 0x3b2101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b2201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3b230e, 0x000000, 0x000000, 0x3b3108, 0x3b3907, 0x000000, - 0x3b4001, 0x3b4105, 0x000000, 0x3b4602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b4801, 0x000000, 0x3b4901, 0x3b4a04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b4e02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3b5002, 0x3b5207, 0x000000, 0x3b5901, 0x3b5a01, 0x3b5b08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3b6302, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b6501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3b6606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3b6c01, 0x000000, 0x3b6d12, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3b7f02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3b8104, 0x000000, 0x3b8502, 0x3b8708, 0x000000, 0x3b8f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3b9101, 0x3b9201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3b9303, 0x000000, 0x000000, - 0x000000, 0x3b9607, 0x3b9d04, 0x3ba101, 0x000000, 0x000000, 0x000000, 0x3ba20a, - 0x000000, 0x000000, 0x000000, 0x3bac02, 0x3bae01, 0x000000, 0x000000, 0x000000, - 0x3baf01, 0x3bb001, 0x3bb103, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bb404, 0x000000, 0x000000, 0x000000, 0x000000, 0x3bb802, 0x000000, 0x000000, - 0x3bba05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bbf01, 0x3bc007, 0x000000, 0x000000, 0x3bc702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3bc901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bca01, 0x3bcb01, 0x000000, 0x3bcc02, 0x000000, 0x000000, 0x3bce01, 0x000000, - 0x000000, 0x3bcf01, 0x3bd001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3bd103, - 0x3bd401, 0x000000, 0x000000, 0x000000, 0x3bd501, 0x3bd601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3bd701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3bd803, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3bdb01, 0x000000, 0x3bdc01, 0x3bdd04, 0x000000, 0x3be104, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3be501, 0x000000, 0x3be606, 0x000000, 0x3bec01, - 0x000000, 0x000000, 0x3bed01, 0x000000, 0x000000, 0x3bee01, 0x3bef01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3bf002, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bf201, 0x000000, 0x000000, 0x3bf301, 0x3bf401, 0x3bf506, 0x000000, 0x3bfb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3bfc01, 0x000000, 0x3bfd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3bfe01, 0x3bff04, 0x3c0310, 0x000000, 0x3c130c, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3c1f01, 0x000000, 0x000000, 0x3c2002, - 0x000000, 0x3c2201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3c2301, 0x000000, 0x000000, 0x3c2401, 0x3c2501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3c2601, 0x000000, 0x3c2702, 0x000000, 0x000000, 0x000000, 0x3c2903, 0x000000, - 0x3c2c05, 0x3c3101, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c3201, 0x000000, - 0x000000, 0x000000, 0x3c3304, 0x000000, 0x3c370c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3c4307, 0x000000, 0x3c4a03, 0x000000, - 0x000000, 0x3c4d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c4e01, 0x000000, - 0x000000, 0x000000, 0x3c4f01, 0x000000, 0x000000, 0x000000, 0x3c5008, 0x3c5802, - 0x3c5a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3c5b03, 0x000000, 0x000000, 0x3c5e01, 0x000000, 0x000000, 0x000000, 0x3c5f02, - 0x000000, 0x000000, 0x3c6102, 0x000000, 0x3c6301, 0x3c6401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3c6502, 0x3c6701, 0x000000, 0x3c6801, 0x000000, - 0x000000, 0x3c6901, 0x000000, 0x000000, 0x3c6a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3c6b0d, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c7803, - 0x000000, 0x000000, 0x3c7b01, 0x000000, 0x3c7c01, 0x3c7d01, 0x000000, 0x000000, - 0x000000, 0x3c7e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3c7f04, - 0x000000, 0x3c8306, 0x3c8901, 0x000000, 0x000000, 0x000000, 0x3c8a01, 0x000000, - 0x000000, 0x000000, 0x3c8b01, 0x000000, 0x3c8c0b, 0x000000, 0x000000, 0x3c970a, - 0x000000, 0x3ca102, 0x000000, 0x000000, 0x000000, 0x3ca301, 0x000000, 0x3ca401, - 0x3ca501, 0x000000, 0x000000, 0x3ca612, 0x000000, 0x000000, 0x3cb801, 0x3cb902, - 0x000000, 0x3cbb04, 0x3cbf01, 0x000000, 0x3cc001, 0x000000, 0x000000, 0x000000, - 0x3cc101, 0x000000, 0x3cc202, 0x000000, 0x3cc408, 0x3ccc08, 0x3cd404, 0x3cd801, - 0x3cd904, 0x000000, 0x3cdd01, 0x000000, 0x3cde03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3ce102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3ce301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ce404, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ce801, - 0x3ce901, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cea01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3ceb01, 0x000000, 0x000000, 0x000000, - 0x3cec03, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cef01, 0x000000, 0x000000, - 0x3cf001, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cf101, 0x3cf201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3cf305, 0x000000, 0x3cf803, - 0x000000, 0x000000, 0x3cfb01, 0x000000, 0x000000, 0x3cfc02, 0x000000, 0x000000, - 0x3cfe02, 0x3d0001, 0x3d0102, 0x000000, 0x000000, 0x3d0310, 0x000000, 0x3d1301, - 0x3d140c, 0x000000, 0x000000, 0x3d2001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3d2101, 0x000000, 0x000000, 0x3d2205, 0x000000, - 0x000000, 0x000000, 0x3d2702, 0x000000, 0x3d2906, 0x000000, 0x000000, 0x000000, - 0x3d2f01, 0x000000, 0x000000, 0x3d3003, 0x000000, 0x000000, 0x3d3301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3d3405, 0x000000, 0x000000, 0x3d3901, - 0x000000, 0x000000, 0x3d3a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d3b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3d3c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3d3d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d3e02, 0x000000, - 0x000000, 0x3d4005, 0x000000, 0x3d4501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3d4601, 0x000000, 0x3d4702, 0x000000, 0x000000, 0x3d4907, 0x000000, 0x000000, - 0x000000, 0x3d5002, 0x000000, 0x3d5201, 0x3d5301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d5401, 0x000000, - 0x3d5501, 0x3d5601, 0x000000, 0x3d5701, 0x000000, 0x3d5802, 0x000000, 0x3d5a02, - 0x000000, 0x3d5c03, 0x000000, 0x3d5f04, 0x3d6301, 0x000000, 0x3d6401, 0x000000, - 0x3d6502, 0x3d6704, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d6b01, - 0x000000, 0x000000, 0x000000, 0x3d6c01, 0x000000, 0x3d6d0e, 0x000000, 0x000000, - 0x000000, 0x3d7b05, 0x000000, 0x3d8001, 0x3d8101, 0x000000, 0x000000, 0x3d8201, - 0x000000, 0x3d8301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3d8403, - 0x000000, 0x000000, 0x000000, 0x3d8701, 0x000000, 0x3d8806, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3d8e06, 0x000000, 0x000000, 0x000000, - 0x3d9402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3d9604, 0x000000, 0x000000, 0x000000, 0x3d9a0d, 0x000000, - 0x000000, 0x3da701, 0x000000, 0x000000, 0x000000, 0x000000, 0x3da805, 0x3dad01, - 0x3dae01, 0x000000, 0x000000, 0x3daf0f, 0x000000, 0x000000, 0x000000, 0x3dbe04, - 0x000000, 0x3dc207, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3dc901, 0x000000, - 0x000000, 0x000000, 0x3dca02, 0x000000, 0x000000, 0x000000, 0x000000, 0x3dcc01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3dcd02, 0x3dcf03, 0x000000, - 0x000000, 0x3dd202, 0x000000, 0x000000, 0x3dd402, 0x3dd601, 0x000000, 0x3dd701, - 0x000000, 0x000000, 0x3dd802, 0x000000, 0x3dda03, 0x3ddd01, 0x3dde04, 0x3de201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3de301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3de406, 0x3dea05, 0x3def02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3df102, 0x3df301, 0x000000, 0x3df403, 0x000000, 0x000000, - 0x000000, 0x3df701, 0x000000, 0x000000, 0x000000, 0x000000, 0x3df801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3df906, 0x000000, 0x3dff04, - 0x000000, 0x000000, 0x3e0301, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e0401, - 0x3e0505, 0x3e0a02, 0x3e0c03, 0x000000, 0x000000, 0x3e0f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3e1001, 0x3e1102, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e1301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e1401, 0x000000, 0x000000, - 0x3e1501, 0x000000, 0x000000, 0x000000, 0x3e1601, 0x000000, 0x3e1701, 0x3e1801, - 0x000000, 0x3e1903, 0x3e1c01, 0x3e1d09, 0x000000, 0x3e2604, 0x3e2a01, 0x000000, - 0x3e2b08, 0x000000, 0x3e330b, 0x3e3e02, 0x000000, 0x3e400d, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3e4d08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3e5503, 0x000000, 0x000000, 0x000000, 0x3e5805, - 0x000000, 0x000000, 0x3e5d01, 0x000000, 0x3e5e0a, 0x000000, 0x000000, 0x3e6801, - 0x000000, 0x000000, 0x3e6903, 0x000000, 0x000000, 0x3e6c01, 0x3e6d01, 0x3e6e03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3e7104, - 0x000000, 0x000000, 0x000000, 0x3e7501, 0x000000, 0x3e7604, 0x3e7a03, 0x3e7d01, - 0x000000, 0x3e7e01, 0x000000, 0x3e7f08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3e8701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3e8802, 0x3e8a02, 0x000000, 0x3e8c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3e8d01, 0x000000, 0x000000, 0x3e8e08, 0x3e9601, 0x3e9701, 0x3e9801, 0x000000, - 0x000000, 0x3e9904, 0x000000, 0x3e9d02, 0x000000, 0x3e9f01, 0x000000, 0x3ea002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ea201, 0x3ea301, - 0x3ea402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ea602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3ea802, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x3eaa01, 0x3eab03, 0x000000, 0x000000, 0x3eae01, 0x000000, 0x000000, - 0x000000, 0x3eaf01, 0x000000, 0x000000, 0x3eb001, 0x3eb102, 0x3eb303, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x3eb601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3eb702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3eb902, 0x3ebb01, 0x3ebc02, - 0x000000, 0x000000, 0x3ebe01, 0x000000, 0x000000, 0x3ebf03, 0x000000, 0x000000, - 0x000000, 0x3ec201, 0x3ec301, 0x000000, 0x000000, 0x3ec409, 0x3ecd01, 0x000000, - 0x000000, 0x000000, 0x3ece01, 0x000000, 0x000000, 0x000000, 0x3ecf01, 0x000000, - 0x3ed007, 0x000000, 0x000000, 0x000000, 0x3ed701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3ed804, 0x3edc04, 0x000000, 0x3ee006, 0x000000, 0x3ee601, 0x000000, 0x3ee701, - 0x3ee897, 0x000000, 0x000000, 0x3f7f03, 0x000000, 0x000000, 0x3f8201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3f8301, 0x3f8401, - 0x000000, 0x000000, 0x3f8501, 0x000000, 0x000000, 0x3f8605, 0x000000, 0x3f8b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3f8c01, - 0x000000, 0x000000, 0x3f8d03, 0x3f9001, 0x000000, 0x3f9101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3f9201, 0x3f9301, 0x3f9403, 0x3f9701, 0x000000, 0x000000, - 0x000000, 0x3f9803, 0x3f9b02, 0x000000, 0x000000, 0x000000, 0x3f9d03, 0x000000, - 0x3fa001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3fa101, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fa201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fa301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3fa402, 0x3fa602, 0x3fa805, 0x000000, 0x3fad02, 0x000000, 0x3faf01, 0x000000, - 0x3fb001, 0x000000, 0x3fb101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fb201, - 0x3fb304, 0x3fb701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x3fb802, 0x3fba03, 0x000000, 0x3fbd03, 0x000000, 0x000000, 0x000000, 0x3fc005, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fc507, - 0x3fcc03, 0x3fcf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fd003, 0x3fd305, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fd801, 0x000000, 0x000000, - 0x3fd901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3fda01, 0x000000, 0x000000, 0x3fdb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3fdc01, 0x000000, 0x000000, 0x000000, 0x3fdd07, 0x000000, - 0x3fe402, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fe601, 0x3fe702, 0x000000, - 0x000000, 0x000000, 0x000000, 0x3fe901, 0x3fea01, 0x3feb01, 0x3fec01, 0x000000, - 0x000000, 0x3fed01, 0x000000, 0x000000, 0x000000, 0x000000, 0x3fee01, 0x3fef01, - 0x000000, 0x3ff005, 0x3ff502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x3ff702, 0x000000, 0x000000, 0x000000, 0x000000, 0x3ff901, - 0x3ffa01, 0x000000, 0x3ffb01, 0x000000, 0x000000, 0x000000, 0x3ffc02, 0x3ffe07, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x400509, 0x000000, 0x000000, - 0x000000, 0x400e03, 0x000000, 0x401102, 0x401302, 0x401501, 0x401602, 0x000000, - 0x000000, 0x000000, 0x401802, 0x401a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x401b01, 0x000000, 0x401c02, 0x401e08, 0x402601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x402704, 0x000000, 0x000000, 0x000000, 0x402b06, 0x403101, - 0x40320e, 0x404001, 0x000000, 0x404101, 0x404202, 0x000000, 0x000000, 0x000000, - 0x404401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x404502, 0x000000, 0x000000, 0x404702, 0x404901, 0x000000, 0x000000, 0x404a01, - 0x000000, 0x000000, 0x404b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x404d01, - 0x000000, 0x404e03, 0x000000, 0x000000, 0x40510d, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x405e01, 0x000000, 0x000000, 0x405f01, 0x000000, 0x406003, - 0x406301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x406404, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x406802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x406a07, 0x000000, 0x000000, 0x407105, 0x000000, 0x000000, 0x407602, 0x000000, - 0x407801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x407902, 0x000000, 0x000000, 0x000000, 0x407b01, 0x407c02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x407e02, - 0x408003, 0x000000, 0x000000, 0x000000, 0x408301, 0x000000, 0x408402, 0x000000, - 0x40860a, 0x000000, 0x409002, 0x000000, 0x000000, 0x409203, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x409507, 0x000000, 0x000000, 0x409c01, - 0x409d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x409e04, 0x40a201, 0x40a303, 0x000000, 0x000000, 0x000000, - 0x40a601, 0x000000, 0x40a701, 0x000000, 0x000000, 0x000000, 0x40a805, 0x000000, - 0x000000, 0x40ad04, 0x000000, 0x000000, 0x40b103, 0x40b405, 0x000000, 0x000000, - 0x000000, 0x40b903, 0x000000, 0x000000, 0x000000, 0x40bc0c, 0x40c801, 0x000000, - 0x000000, 0x000000, 0x40c901, 0x40ca08, 0x40d201, 0x000000, 0x40d302, 0x000000, - 0x40d502, 0x000000, 0x000000, 0x000000, 0x40d701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x40d802, 0x000000, 0x000000, 0x000000, 0x000000, 0x40da01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x40db08, - 0x40e301, 0x000000, 0x000000, 0x000000, 0x000000, 0x40e405, 0x000000, 0x40e916, - 0x000000, 0x000000, 0x000000, 0x40ff01, 0x000000, 0x000000, 0x410004, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x410401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x410505, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x410a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x410c01, 0x410d01, - 0x000000, 0x000000, 0x000000, 0x410e01, 0x000000, 0x000000, 0x410f0b, 0x411a04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x411e01, 0x000000, 0x411f01, 0x000000, - 0x000000, 0x000000, 0x412003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x41230a, 0x000000, 0x412d03, 0x000000, 0x000000, 0x000000, 0x000000, 0x413001, - 0x000000, 0x413102, 0x000000, 0x413301, 0x000000, 0x413401, 0x000000, 0x413502, - 0x000000, 0x413709, 0x000000, 0x000000, 0x000000, 0x414002, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x414202, 0x000000, 0x000000, 0x000000, - 0x414402, 0x000000, 0x000000, 0x000000, 0x000000, 0x414601, 0x000000, 0x414701, - 0x414802, 0x000000, 0x000000, 0x000000, 0x414a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x414b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x414d06, 0x415302, 0x000000, 0x000000, 0x415501, - 0x415601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x415701, 0x000000, 0x415801, 0x000000, 0x000000, 0x415901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x415a01, 0x000000, 0x000000, 0x000000, 0x415b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x415d04, 0x416105, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x416602, 0x000000, - 0x000000, 0x416804, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x416c03, - 0x000000, 0x416f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x417302, 0x000000, - 0x000000, 0x417501, 0x000000, 0x417601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x417702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x417907, 0x000000, 0x418001, 0x000000, 0x418102, 0x000000, 0x418305, - 0x000000, 0x000000, 0x000000, 0x418803, 0x418b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x418c01, 0x000000, 0x000000, 0x418d02, 0x000000, - 0x418f01, 0x000000, 0x000000, 0x419002, 0x419205, 0x419702, 0x000000, 0x000000, - 0x419904, 0x000000, 0x000000, 0x000000, 0x419d0b, 0x000000, 0x000000, 0x41a805, - 0x000000, 0x000000, 0x41ad02, 0x41af01, 0x41b002, 0x000000, 0x41b201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x41b310, 0x000000, 0x000000, 0x41c303, 0x41c602, 0x000000, 0x000000, - 0x41c80a, 0x41d206, 0x41d801, 0x000000, 0x000000, 0x41d901, 0x41da01, 0x000000, - 0x000000, 0x41db02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x41dd01, 0x000000, 0x41de01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x41df0c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x41eb05, 0x000000, 0x41f001, 0x41f103, - 0x000000, 0x41f401, 0x41f501, 0x000000, 0x41f602, 0x000000, 0x000000, 0x000000, - 0x41f802, 0x41fa03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x41fd01, - 0x41fe02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x420001, 0x000000, 0x42010f, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42100b, 0x000000, 0x000000, 0x421b01, - 0x421c01, 0x421d01, 0x000000, 0x000000, 0x421e0a, 0x000000, 0x000000, 0x000000, - 0x422801, 0x422902, 0x000000, 0x000000, 0x000000, 0x422b01, 0x422c01, 0x000000, - 0x000000, 0x000000, 0x422d03, 0x423001, 0x000000, 0x423103, 0x423401, 0x423502, - 0x000000, 0x000000, 0x000000, 0x423703, 0x423a0a, 0x000000, 0x000000, 0x000000, - 0x424404, 0x000000, 0x424806, 0x000000, 0x000000, 0x424e01, 0x000000, 0x000000, - 0x424f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x425103, 0x000000, 0x000000, - 0x425402, 0x000000, 0x425606, 0x425c01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x425d01, 0x000000, 0x000000, 0x425e02, 0x000000, 0x000000, 0x000000, 0x426001, - 0x000000, 0x426102, 0x426304, 0x426702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x426902, 0x426b02, 0x000000, 0x426d01, 0x000000, 0x000000, 0x426e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x426f05, 0x427401, 0x427507, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x427c0a, 0x000000, 0x428602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x428803, 0x428b02, 0x000000, 0x428d01, 0x000000, 0x000000, 0x428e06, 0x000000, - 0x429401, 0x000000, 0x000000, 0x429501, 0x429601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x429701, 0x000000, 0x429801, 0x429901, 0x000000, 0x429a02, 0x429c01, - 0x000000, 0x429d01, 0x000000, 0x429e08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x42a601, 0x000000, 0x000000, 0x42a701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42a803, 0x000000, 0x000000, 0x42ab04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42af01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42b001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42b106, - 0x000000, 0x42b701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42b802, - 0x42ba01, 0x42bb01, 0x000000, 0x000000, 0x000000, 0x42bc07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x42c301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x42c402, 0x000000, 0x42c607, 0x42cd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42ce02, 0x000000, - 0x000000, 0x42d002, 0x000000, 0x42d207, 0x000000, 0x000000, 0x000000, 0x000000, - 0x42d901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42da0a, 0x42e402, - 0x42e601, 0x000000, 0x000000, 0x42e701, 0x000000, 0x000000, 0x000000, 0x42e801, - 0x42e901, 0x000000, 0x42ea01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x42eb03, 0x42ee0a, 0x42f801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x42f901, 0x000000, 0x42fa01, 0x000000, 0x42fb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x42fc01, 0x42fd01, - 0x000000, 0x42fe02, 0x430002, 0x000000, 0x430208, 0x000000, 0x000000, 0x000000, - 0x000000, 0x430a08, 0x431203, 0x000000, 0x431505, 0x000000, 0x000000, 0x000000, - 0x000000, 0x431a03, 0x000000, 0x000000, 0x431d03, 0x432001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x432102, 0x000000, 0x000000, 0x432301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x432402, 0x432603, - 0x000000, 0x432901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x432a01, 0x432b07, 0x433201, 0x433301, 0x000000, - 0x000000, 0x43340c, 0x434001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x434101, 0x000000, 0x000000, 0x000000, 0x000000, 0x434201, 0x000000, 0x434301, - 0x000000, 0x434409, 0x000000, 0x000000, 0x434d06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x435302, 0x000000, 0x435501, 0x435602, 0x000000, 0x000000, - 0x000000, 0x435803, 0x435b01, 0x000000, 0x000000, 0x435c03, 0x000000, 0x435f03, - 0x000000, 0x000000, 0x436201, 0x000000, 0x43630c, 0x000000, 0x000000, 0x436f02, - 0x000000, 0x437102, 0x000000, 0x000000, 0x000000, 0x437303, 0x000000, 0x000000, - 0x000000, 0x000000, 0x437601, 0x437701, 0x000000, 0x437816, 0x000000, 0x438e07, - 0x000000, 0x439503, 0x000000, 0x439801, 0x000000, 0x000000, 0x000000, 0x439902, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x439b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x439c01, 0x000000, 0x439d03, 0x43a001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x43a101, 0x43a202, 0x000000, 0x43a401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x43a502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x43a70e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43b50a, - 0x000000, 0x43bf04, 0x43c302, 0x000000, 0x000000, 0x000000, 0x43c501, 0x43c602, - 0x000000, 0x000000, 0x43c801, 0x000000, 0x000000, 0x43c901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43ca01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43cb01, 0x43cc02, - 0x000000, 0x000000, 0x43ce0c, 0x000000, 0x000000, 0x000000, 0x43da01, 0x000000, - 0x43db15, 0x000000, 0x000000, 0x000000, 0x43f001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x43f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x43f204, - 0x000000, 0x000000, 0x43f602, 0x000000, 0x000000, 0x000000, 0x43f810, 0x440801, - 0x000000, 0x440901, 0x000000, 0x440a03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x440d01, 0x440e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x440f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x441301, 0x441404, - 0x441804, 0x000000, 0x000000, 0x000000, 0x441c04, 0x000000, 0x000000, 0x442001, - 0x000000, 0x000000, 0x44210b, 0x000000, 0x000000, 0x442c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x442d02, 0x442f06, - 0x443504, 0x000000, 0x000000, 0x443902, 0x000000, 0x000000, 0x443b01, 0x000000, - 0x000000, 0x443c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x443d05, 0x000000, - 0x444204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x444604, 0x000000, - 0x000000, 0x000000, 0x444a01, 0x444b01, 0x000000, 0x444c01, 0x000000, 0x444d05, - 0x000000, 0x445201, 0x445301, 0x000000, 0x000000, 0x445401, 0x000000, 0x445501, - 0x445601, 0x000000, 0x000000, 0x000000, 0x445701, 0x000000, 0x000000, 0x000000, - 0x445805, 0x000000, 0x000000, 0x000000, 0x445d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x445e02, 0x000000, 0x446002, 0x000000, 0x446205, 0x000000, - 0x000000, 0x000000, 0x446701, 0x446801, 0x446901, 0x000000, 0x000000, 0x446a04, - 0x000000, 0x000000, 0x000000, 0x446e03, 0x000000, 0x000000, 0x000000, 0x447101, - 0x000000, 0x000000, 0x447204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x447601, 0x000000, 0x000000, 0x000000, - 0x447706, 0x000000, 0x000000, 0x000000, 0x447d02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x447f03, 0x000000, 0x000000, 0x000000, 0x448201, 0x000000, 0x448303, - 0x448606, 0x448c07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x449302, 0x000000, 0x000000, 0x449501, 0x000000, 0x449601, - 0x000000, 0x000000, 0x449703, 0x000000, 0x000000, 0x000000, 0x449a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x449b01, 0x000000, 0x000000, - 0x449c01, 0x449d01, 0x000000, 0x449e02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x44a001, 0x44a105, 0x000000, 0x44a606, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x44ac01, 0x000000, 0x000000, 0x000000, 0x44ad01, 0x44ae03, 0x000000, - 0x44b101, 0x000000, 0x000000, 0x44b201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x44b308, 0x000000, 0x000000, 0x000000, 0x000000, - 0x44bb01, 0x44bc01, 0x000000, 0x000000, 0x44bd02, 0x44bf01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x44c003, 0x000000, 0x000000, 0x000000, - 0x44c301, 0x000000, 0x000000, 0x44c402, 0x000000, 0x000000, 0x44c605, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x44cb06, 0x000000, 0x000000, 0x44d103, 0x000000, 0x44d401, - 0x44d501, 0x000000, 0x000000, 0x000000, 0x000000, 0x44d601, 0x000000, 0x000000, - 0x44d706, 0x000000, 0x000000, 0x44dd01, 0x000000, 0x000000, 0x44de02, 0x44e001, - 0x44e101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x44e201, 0x000000, 0x000000, 0x44e301, 0x000000, 0x000000, 0x44e401, 0x000000, - 0x44e502, 0x000000, 0x44e701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x44e802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x44ea02, 0x000000, 0x000000, 0x000000, 0x000000, 0x44ec01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x44ed10, 0x44fd01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x44fe01, 0x44ff01, 0x000000, 0x450001, 0x450103, 0x000000, 0x000000, - 0x000000, 0x450402, 0x450602, 0x450806, 0x000000, 0x450e05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x451302, 0x000000, 0x000000, - 0x000000, 0x45151c, 0x000000, 0x453106, 0x000000, 0x000000, 0x453702, 0x453904, - 0x453d02, 0x000000, 0x000000, 0x453f01, 0x000000, 0x000000, 0x454003, 0x000000, - 0x000000, 0x000000, 0x454301, 0x000000, 0x454401, 0x000000, 0x454501, 0x000000, - 0x000000, 0x000000, 0x454602, 0x000000, 0x000000, 0x000000, 0x000000, 0x454802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x454a02, 0x000000, 0x000000, 0x000000, - 0x454c01, 0x454d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x454e01, 0x454f01, - 0x455004, 0x000000, 0x000000, 0x000000, 0x455401, 0x000000, 0x455501, 0x455601, - 0x455702, 0x455907, 0x456001, 0x456101, 0x000000, 0x456203, 0x000000, 0x456506, - 0x000000, 0x456b03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x456e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x456f01, - 0x000000, 0x000000, 0x457001, 0x000000, 0x000000, 0x457101, 0x457203, 0x000000, - 0x457501, 0x457601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x457725, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x459c01, 0x000000, 0x000000, 0x000000, - 0x459d01, 0x000000, 0x000000, 0x000000, 0x459e02, 0x45a001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x45a105, 0x45a601, 0x45a701, 0x45a80c, 0x000000, - 0x000000, 0x45b401, 0x000000, 0x000000, 0x000000, 0x45b502, 0x000000, 0x000000, - 0x000000, 0x45b702, 0x45b904, 0x45bd01, 0x000000, 0x45be04, 0x000000, 0x000000, - 0x45c201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x45c301, - 0x45c409, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x45cd01, 0x45ce01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x45cf07, 0x000000, 0x000000, 0x000000, - 0x45d602, 0x000000, 0x000000, 0x000000, 0x45d802, 0x45da01, 0x000000, 0x45db01, - 0x000000, 0x45dc01, 0x000000, 0x000000, 0x45dd01, 0x000000, 0x000000, 0x45de04, - 0x45e23e, 0x462001, 0x000000, 0x000000, 0x000000, 0x000000, 0x462101, 0x000000, - 0x000000, 0x46220d, 0x000000, 0x462f04, 0x000000, 0x000000, 0x463302, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x463502, 0x000000, 0x000000, 0x000000, - 0x000000, 0x463702, 0x463905, 0x000000, 0x000000, 0x463e14, 0x000000, 0x000000, - 0x000000, 0x000000, 0x465204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x465602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x465801, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x465902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x465b02, 0x000000, 0x000000, - 0x465d01, 0x000000, 0x000000, 0x000000, 0x465e01, 0x000000, 0x000000, 0x000000, - 0x465f01, 0x000000, 0x46600d, 0x000000, 0x000000, 0x000000, 0x466d01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x466e05, 0x000000, - 0x000000, 0x467301, 0x467401, 0x46750b, 0x000000, 0x000000, 0x468007, 0x468701, - 0x000000, 0x468801, 0x468901, 0x000000, 0x468a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x468d02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x468f03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x469201, 0x000000, 0x000000, 0x000000, 0x469307, - 0x000000, 0x000000, 0x469a03, 0x000000, 0x000000, 0x469d0f, 0x46ac01, 0x46ad03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x46b001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x46b102, 0x46b308, - 0x000000, 0x000000, 0x000000, 0x46bb03, 0x000000, 0x46be01, 0x000000, 0x000000, - 0x46bf01, 0x000000, 0x46c002, 0x000000, 0x000000, 0x46c201, 0x46c302, 0x000000, - 0x46c503, 0x000000, 0x000000, 0x000000, 0x000000, 0x46c802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x46ca01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x46cb01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x46cc01, 0x46cd01, 0x000000, 0x46ce01, 0x000000, 0x000000, 0x46cf07, - 0x46d60f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x46e501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x46e601, 0x46e704, 0x000000, 0x000000, 0x46eb08, 0x46f302, 0x000000, 0x46f505, - 0x46fa01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x46fb0b, 0x470601, 0x000000, 0x470701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x470802, 0x000000, 0x470a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x470b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x470c01, 0x000000, 0x000000, 0x470d01, 0x000000, - 0x000000, 0x470e01, 0x470f02, 0x000000, 0x000000, 0x471101, 0x471201, 0x471301, - 0x000000, 0x000000, 0x000000, 0x471406, 0x000000, 0x471a01, 0x000000, 0x471b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x471c02, 0x000000, 0x000000, 0x000000, - 0x471e01, 0x471f06, 0x000000, 0x000000, 0x472501, 0x000000, 0x000000, 0x000000, - 0x472601, 0x472704, 0x000000, 0x000000, 0x000000, 0x472b02, 0x000000, 0x000000, - 0x472d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x472e02, 0x000000, - 0x473006, 0x473603, 0x000000, 0x473901, 0x000000, 0x473a05, 0x000000, 0x000000, - 0x000000, 0x000000, 0x473f01, 0x000000, 0x000000, 0x474001, 0x474101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x474208, 0x474a02, 0x000000, 0x474c01, - 0x000000, 0x474d0c, 0x000000, 0x000000, 0x000000, 0x475903, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x475c01, 0x475d01, 0x475e02, 0x476008, - 0x476801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x476901, 0x000000, 0x476a01, - 0x000000, 0x476b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x476c02, 0x000000, 0x476e02, 0x477001, 0x000000, 0x000000, 0x477112, 0x000000, - 0x000000, 0x000000, 0x000000, 0x478302, 0x000000, 0x000000, 0x000000, 0x478501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x478601, 0x000000, 0x478701, 0x478802, - 0x000000, 0x478a01, 0x000000, 0x000000, 0x478b04, 0x478f0b, 0x000000, 0x479a01, - 0x000000, 0x479b04, 0x000000, 0x479f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x47a003, 0x000000, 0x47a301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x47a403, 0x000000, 0x47a701, 0x47a801, - 0x000000, 0x47a902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x47ab03, - 0x000000, 0x47ae05, 0x000000, 0x000000, 0x47b301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x47b40a, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x47be01, 0x000000, 0x000000, 0x000000, 0x47bf01, 0x000000, 0x47c001, - 0x000000, 0x47c101, 0x47c242, 0x000000, 0x000000, 0x000000, 0x480407, 0x480b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x480c05, 0x481101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x481201, 0x000000, 0x481301, 0x000000, - 0x000000, 0x000000, 0x481402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x481601, 0x000000, 0x000000, 0x000000, 0x481701, 0x000000, 0x481803, 0x000000, - 0x481b01, 0x000000, 0x000000, 0x481c05, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x482101, 0x000000, 0x000000, 0x482206, - 0x000000, 0x000000, 0x000000, 0x000000, 0x482803, 0x000000, 0x000000, 0x000000, - 0x482b01, 0x000000, 0x482c01, 0x000000, 0x000000, 0x000000, 0x482d01, 0x482e01, - 0x482f05, 0x000000, 0x000000, 0x000000, 0x483401, 0x000000, 0x000000, 0x000000, - 0x483502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x483702, - 0x483901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x483a04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x483e01, 0x000000, 0x000000, - 0x483f09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x484810, - 0x000000, 0x485801, 0x000000, 0x485901, 0x485a02, 0x000000, 0x000000, 0x000000, - 0x485c01, 0x485d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x485e05, - 0x000000, 0x000000, 0x000000, 0x000000, 0x486301, 0x486401, 0x000000, 0x486501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x486602, 0x486801, - 0x000000, 0x486902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x486b01, 0x486c01, 0x486d01, 0x486e03, 0x000000, 0x487107, 0x000000, 0x000000, - 0x000000, 0x000000, 0x487803, 0x487b02, 0x000000, 0x000000, 0x487d0b, 0x000000, - 0x000000, 0x488802, 0x488a01, 0x000000, 0x000000, 0x000000, 0x488b02, 0x000000, - 0x488d0c, 0x000000, 0x000000, 0x000000, 0x000000, 0x489902, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x489b01, 0x000000, 0x000000, 0x489c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x489d02, 0x000000, 0x489f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x48a102, 0x000000, 0x000000, 0x000000, - 0x48a301, 0x000000, 0x000000, 0x48a401, 0x48a503, 0x000000, 0x000000, 0x48a801, - 0x000000, 0x000000, 0x000000, 0x000000, 0x48a901, 0x000000, 0x000000, 0x000000, - 0x48aa01, 0x48ab01, 0x000000, 0x48ac03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x48af03, 0x000000, 0x000000, 0x48b201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x48b304, 0x000000, 0x48b701, - 0x000000, 0x000000, 0x48b802, 0x48ba09, 0x000000, 0x000000, 0x000000, 0x48c301, - 0x000000, 0x000000, 0x000000, 0x48c401, 0x000000, 0x000000, 0x48c501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x48c601, 0x000000, - 0x48c703, 0x000000, 0x000000, 0x48ca02, 0x48cc04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x48d002, 0x48d205, 0x48d704, 0x000000, 0x48db01, - 0x000000, 0x000000, 0x48dc02, 0x000000, 0x48de01, 0x48df01, 0x000000, 0x000000, - 0x000000, 0x48e009, 0x000000, 0x000000, 0x48e908, 0x48f103, 0x000000, 0x000000, - 0x000000, 0x000000, 0x48f407, 0x48fb01, 0x48fc01, 0x000000, 0x000000, 0x48fd04, - 0x000000, 0x000000, 0x490105, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x490601, 0x490701, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x490803, 0x000000, - 0x000000, 0x490b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x490d06, 0x000000, 0x491301, 0x000000, 0x000000, 0x491401, 0x000000, 0x491501, - 0x000000, 0x000000, 0x491603, 0x000000, 0x491904, 0x000000, 0x000000, 0x491d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x491e03, 0x000000, - 0x000000, 0x492104, 0x000000, 0x492505, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x492a08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x493202, - 0x493401, 0x000000, 0x000000, 0x493501, 0x000000, 0x493601, 0x493702, 0x493902, - 0x493b04, 0x000000, 0x493f01, 0x494001, 0x000000, 0x000000, 0x494109, 0x494a02, - 0x000000, 0x494c01, 0x000000, 0x000000, 0x000000, 0x494d03, 0x000000, 0x000000, - 0x000000, 0x495004, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x495405, - 0x495901, 0x495a02, 0x495c03, 0x000000, 0x000000, 0x495f03, 0x496201, 0x000000, - 0x496305, 0x000000, 0x496802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x496a05, 0x000000, 0x000000, 0x496f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x497003, 0x497302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x497505, 0x000000, 0x000000, 0x000000, 0x497a04, - 0x497e01, 0x497f09, 0x000000, 0x000000, 0x000000, 0x000000, 0x498802, 0x000000, - 0x000000, 0x498a02, 0x498c01, 0x000000, 0x000000, 0x498d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x498e01, 0x000000, 0x000000, 0x498f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x499007, 0x000000, 0x499701, 0x000000, 0x499801, 0x000000, - 0x499901, 0x000000, 0x000000, 0x000000, 0x000000, 0x499a01, 0x000000, 0x499b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x499c01, 0x499d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x499f05, 0x000000, 0x000000, 0x000000, 0x49a407, - 0x49ab02, 0x000000, 0x000000, 0x49ad04, 0x49b101, 0x000000, 0x000000, 0x49b202, - 0x49b405, 0x000000, 0x000000, 0x49b907, 0x49c00a, 0x49ca01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x49cb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x49ce01, 0x000000, 0x49cf04, 0x000000, 0x000000, 0x000000, 0x49d301, - 0x000000, 0x000000, 0x000000, 0x49d401, 0x000000, 0x49d50d, 0x49e201, 0x49e303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x49e601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x49e701, 0x000000, - 0x000000, 0x000000, 0x49e808, 0x49f001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x49f102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x49f302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x49f508, 0x49fd09, 0x000000, 0x000000, - 0x000000, 0x4a0606, 0x4a0c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a0d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4a0e01, 0x4a0f01, 0x000000, 0x000000, - 0x4a1001, 0x000000, 0x000000, 0x4a1101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4a1201, 0x4a1301, 0x000000, 0x000000, 0x000000, 0x4a1402, 0x000000, 0x4a1601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4a1701, 0x000000, 0x4a1801, 0x000000, 0x4a1903, 0x4a1c03, 0x4a1f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a2004, 0x000000, - 0x000000, 0x000000, 0x4a2409, 0x000000, 0x000000, 0x000000, 0x4a2d08, 0x000000, - 0x4a3501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a3604, 0x4a3a02, - 0x000000, 0x000000, 0x4a3c01, 0x000000, 0x000000, 0x000000, 0x4a3d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a3f03, 0x4a4207, 0x000000, - 0x000000, 0x4a4901, 0x000000, 0x000000, 0x4a4a05, 0x000000, 0x4a4f07, 0x000000, - 0x4a5601, 0x4a5707, 0x000000, 0x4a5e02, 0x000000, 0x4a6009, 0x4a6901, 0x000000, - 0x000000, 0x000000, 0x4a6a04, 0x4a6e01, 0x4a6f03, 0x000000, 0x4a7204, 0x4a7601, - 0x4a7718, 0x000000, 0x000000, 0x4a8f05, 0x000000, 0x000000, 0x000000, 0x4a9401, - 0x4a9501, 0x000000, 0x000000, 0x000000, 0x000000, 0x4a9601, 0x000000, 0x4a9701, - 0x000000, 0x000000, 0x000000, 0x4a9801, 0x000000, 0x000000, 0x4a9901, 0x000000, - 0x4a9a01, 0x4a9b03, 0x000000, 0x000000, 0x4a9e08, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4aa601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4aa704, 0x000000, 0x000000, 0x000000, 0x4aab01, - 0x4aac04, 0x000000, 0x4ab001, 0x4ab101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4ab201, 0x4ab301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4ab401, 0x4ab502, 0x000000, 0x4ab701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4ab801, 0x4ab901, 0x4aba01, 0x4abb0e, 0x000000, 0x000000, 0x4ac901, - 0x000000, 0x000000, 0x4aca09, 0x4ad302, 0x4ad518, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4aed03, 0x4af002, 0x000000, - 0x000000, 0x4af206, 0x000000, 0x000000, 0x000000, 0x4af801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4af903, 0x000000, 0x4afc01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4afd04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b0101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b0202, 0x000000, - 0x4b0405, 0x4b0903, 0x000000, 0x000000, 0x000000, 0x4b0c05, 0x000000, 0x4b1105, - 0x000000, 0x000000, 0x000000, 0x4b1606, 0x4b1c01, 0x000000, 0x000000, 0x4b1d01, - 0x000000, 0x000000, 0x4b1e01, 0x4b1f01, 0x4b2006, 0x4b2601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4b2708, 0x000000, 0x4b2f01, 0x4b3005, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4b3502, 0x000000, 0x4b3702, 0x4b3901, 0x4b3a02, - 0x000000, 0x000000, 0x4b3c05, 0x000000, 0x4b4106, 0x000000, 0x000000, 0x000000, - 0x4b4706, 0x000000, 0x4b4d03, 0x4b5001, 0x4b5101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4b5201, 0x000000, 0x000000, 0x4b5301, 0x000000, 0x000000, 0x4b5402, - 0x4b5601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b5703, - 0x4b5a01, 0x000000, 0x4b5b05, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b6001, - 0x000000, 0x4b6104, 0x000000, 0x000000, 0x000000, 0x000000, 0x4b6501, 0x4b6601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4b6701, 0x4b6809, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4b7101, 0x000000, 0x000000, 0x4b7206, 0x000000, 0x000000, - 0x4b7801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4b790b, 0x000000, 0x4b8401, 0x000000, 0x4b8501, 0x4b8601, 0x000000, 0x4b8701, - 0x4b8809, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4b9107, 0x000000, 0x000000, 0x4b9801, - 0x000000, 0x4b9908, 0x4ba104, 0x000000, 0x4ba501, 0x4ba602, 0x000000, 0x000000, - 0x4ba806, 0x000000, 0x4bae02, 0x000000, 0x4bb003, 0x4bb308, 0x4bbb01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4bbc01, 0x4bbd02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4bbf0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4bc90a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4bd301, 0x000000, 0x000000, 0x4bd409, 0x4bdd02, 0x000000, 0x4bdf01, - 0x000000, 0x000000, 0x000000, 0x4be003, 0x000000, 0x000000, 0x000000, 0x4be303, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4be601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4be710, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4bf70b, 0x4c0202, 0x000000, 0x000000, 0x4c0401, 0x000000, 0x4c0501, 0x4c0604, - 0x000000, 0x4c0a07, 0x4c1108, 0x4c190c, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c2507, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c2c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c2d02, 0x4c2f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4c3001, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c3101, 0x4c3201, - 0x000000, 0x000000, 0x000000, 0x4c3303, 0x000000, 0x000000, 0x4c3603, 0x000000, - 0x000000, 0x4c3901, 0x000000, 0x4c3a01, 0x000000, 0x4c3b02, 0x000000, 0x4c3d0c, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4c4907, 0x000000, 0x4c5001, 0x4c5105, 0x000000, 0x4c5603, - 0x4c5901, 0x000000, 0x4c5a04, 0x4c5e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4c5f01, 0x4c6002, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c6201, 0x000000, 0x000000, 0x4c6304, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c6701, 0x4c6801, 0x000000, 0x000000, 0x4c6903, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4c6c02, 0x4c6e01, 0x000000, 0x4c6f01, 0x000000, - 0x000000, 0x000000, 0x4c7001, 0x4c7108, 0x000000, 0x4c7902, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4c7b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c7c03, - 0x4c7f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4c8001, 0x4c8101, 0x000000, 0x000000, 0x000000, 0x4c8201, 0x4c8301, 0x000000, - 0x4c8403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c8701, - 0x4c8806, 0x4c8e01, 0x000000, 0x4c8f04, 0x000000, 0x000000, 0x4c9301, 0x000000, - 0x000000, 0x4c9401, 0x000000, 0x4c9502, 0x4c9702, 0x4c9903, 0x000000, 0x4c9c01, - 0x4c9d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4c9f01, - 0x4ca001, 0x000000, 0x000000, 0x4ca101, 0x000000, 0x000000, 0x4ca201, 0x000000, - 0x000000, 0x000000, 0x4ca301, 0x4ca40a, 0x4cae01, 0x000000, 0x000000, 0x4caf02, - 0x4cb102, 0x4cb307, 0x000000, 0x4cba01, 0x000000, 0x000000, 0x4cbb0e, 0x4cc901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4cca10, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4cda02, 0x4cdc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x4cde04, 0x000000, - 0x4ce201, 0x000000, 0x4ce303, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4ce601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4ce701, 0x4ce803, 0x4ceb03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4cee02, 0x4cf001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4cf101, 0x4cf201, 0x000000, 0x000000, 0x4cf302, - 0x000000, 0x4cf501, 0x000000, 0x000000, 0x4cf601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4cf704, 0x4cfb02, 0x000000, 0x4cfd03, 0x000000, - 0x4d0002, 0x000000, 0x000000, 0x000000, 0x4d0203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d0502, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d0702, 0x000000, 0x4d0903, 0x000000, 0x000000, 0x4d0c05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4d1101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4d1203, 0x000000, 0x4d1501, 0x4d1604, 0x4d1a01, 0x000000, - 0x000000, 0x4d1b01, 0x000000, 0x4d1c05, 0x000000, 0x000000, 0x000000, 0x4d2101, - 0x000000, 0x000000, 0x4d2218, 0x000000, 0x4d3a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d3b03, 0x4d3e03, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d4101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4d4201, 0x000000, 0x000000, 0x4d430a, 0x4d4d01, - 0x000000, 0x4d4e01, 0x000000, 0x000000, 0x4d4f01, 0x000000, 0x000000, 0x000000, - 0x4d5003, 0x000000, 0x000000, 0x4d5301, 0x4d5402, 0x000000, 0x000000, 0x000000, - 0x4d5602, 0x000000, 0x000000, 0x000000, 0x4d5802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d5a01, 0x000000, 0x4d5b01, 0x000000, 0x4d5c02, 0x000000, 0x000000, - 0x4d5e01, 0x000000, 0x000000, 0x000000, 0x4d5f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4d6007, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d6705, 0x000000, 0x4d6c01, - 0x000000, 0x4d6d08, 0x4d7501, 0x4d7602, 0x000000, 0x000000, 0x000000, 0x4d7805, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4d7d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d7e04, - 0x000000, 0x000000, 0x4d8202, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d8402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4d8601, 0x000000, 0x000000, 0x4d8701, - 0x000000, 0x4d8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x4d8a03, 0x000000, 0x000000, 0x000000, 0x4d8d0a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4d9701, - 0x000000, 0x4d9801, 0x000000, 0x4d9902, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4d9b02, 0x000000, 0x000000, 0x4d9d01, 0x000000, - 0x000000, 0x4d9e01, 0x000000, 0x000000, 0x4d9f01, 0x4da002, 0x4da205, 0x000000, - 0x4da702, 0x4da902, 0x4dab01, 0x000000, 0x000000, 0x4dac01, 0x4dad02, 0x4daf02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4db102, 0x4db301, 0x4db401, 0x000000, - 0x000000, 0x4db501, 0x000000, 0x000000, 0x000000, 0x4db601, 0x000000, 0x4db706, - 0x4dbd01, 0x000000, 0x000000, 0x4dbe02, 0x000000, 0x000000, 0x4dc001, 0x000000, - 0x000000, 0x000000, 0x4dc102, 0x000000, 0x4dc301, 0x000000, 0x4dc402, 0x4dc602, - 0x000000, 0x000000, 0x000000, 0x4dc807, 0x4dcf12, 0x000000, 0x4de101, 0x4de201, - 0x4de302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4de501, 0x000000, 0x4de602, 0x000000, 0x4de806, 0x000000, 0x000000, 0x000000, - 0x4dee01, 0x4def02, 0x4df106, 0x4df705, 0x000000, 0x4dfc06, 0x000000, 0x4e0204, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e0601, 0x000000, 0x4e070e, - 0x000000, 0x4e1501, 0x000000, 0x000000, 0x4e1602, 0x000000, 0x4e1802, 0x000000, - 0x4e1a03, 0x000000, 0x000000, 0x000000, 0x4e1d01, 0x4e1e02, 0x4e2002, 0x000000, - 0x4e2202, 0x4e2406, 0x000000, 0x4e2a01, 0x4e2b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4e2d06, 0x000000, 0x4e3301, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4e3402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4e3601, 0x4e3701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e3802, - 0x000000, 0x000000, 0x4e3a02, 0x000000, 0x000000, 0x4e3c03, 0x000000, 0x000000, - 0x4e3f0c, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e4b01, 0x4e4c03, 0x000000, - 0x4e4f01, 0x4e5001, 0x000000, 0x000000, 0x4e5102, 0x000000, 0x4e5302, 0x000000, - 0x000000, 0x4e5503, 0x4e5802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4e5a02, 0x000000, 0x000000, 0x4e5c01, - 0x000000, 0x4e5d02, 0x000000, 0x4e5f02, 0x000000, 0x000000, 0x4e6101, 0x000000, - 0x000000, 0x4e6202, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e6401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e6501, 0x4e6601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4e6701, 0x000000, 0x000000, 0x4e6801, 0x4e6901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4e6a03, 0x000000, 0x4e6d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4e6f01, 0x000000, 0x4e700e, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4e7e03, 0x000000, 0x4e8109, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e8a05, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4e8f01, - 0x000000, 0x000000, 0x000000, 0x4e9001, 0x4e9101, 0x000000, 0x000000, 0x000000, - 0x4e9208, 0x4e9a01, 0x4e9b07, 0x000000, 0x000000, 0x000000, 0x4ea202, 0x4ea401, - 0x4ea502, 0x000000, 0x000000, 0x000000, 0x000000, 0x4ea701, 0x000000, 0x000000, - 0x4ea801, 0x4ea90c, 0x4eb502, 0x000000, 0x4eb701, 0x000000, 0x000000, 0x000000, - 0x4eb801, 0x000000, 0x000000, 0x4eb904, 0x000000, 0x000000, 0x000000, 0x4ebd05, - 0x000000, 0x4ec201, 0x000000, 0x000000, 0x4ec302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4ec502, 0x000000, 0x4ec702, 0x000000, - 0x4ec905, 0x000000, 0x4ece03, 0x000000, 0x000000, 0x4ed12d, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4efe01, 0x000000, 0x000000, 0x000000, 0x000000, 0x4eff02, - 0x000000, 0x4f0104, 0x000000, 0x000000, 0x4f0501, 0x000000, 0x4f0601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f0701, 0x000000, 0x000000, 0x4f0801, 0x4f090a, - 0x000000, 0x4f1303, 0x000000, 0x4f1602, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4f1801, 0x000000, 0x000000, 0x000000, 0x4f1901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f1a02, 0x000000, 0x4f1c01, 0x000000, 0x4f1d02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f1f08, 0x000000, 0x000000, 0x4f2702, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f290c, 0x000000, 0x000000, 0x000000, - 0x4f3501, 0x000000, 0x000000, 0x4f3603, 0x4f3901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4f3a01, 0x000000, 0x4f3b01, 0x000000, 0x4f3c02, 0x000000, - 0x4f3e03, 0x4f4102, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f4301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f4404, 0x4f4802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f4a01, 0x000000, 0x4f4b03, 0x4f4e04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f5201, 0x000000, 0x000000, - 0x4f5301, 0x000000, 0x4f5401, 0x000000, 0x4f5502, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4f5702, 0x000000, 0x000000, 0x000000, 0x4f5901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f5a01, 0x4f5b06, 0x000000, 0x4f6111, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f7203, 0x000000, - 0x000000, 0x000000, 0x4f750a, 0x000000, 0x000000, 0x000000, 0x000000, 0x4f7f0a, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4f8903, 0x000000, 0x000000, 0x4f8c0a, 0x000000, 0x4f9602, - 0x4f9801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4f9901, 0x4f9a01, 0x000000, 0x4f9b01, - 0x000000, 0x000000, 0x4f9c01, 0x000000, 0x4f9d01, 0x000000, 0x4f9e05, 0x000000, - 0x4fa302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4fa502, - 0x4fa701, 0x4fa802, 0x000000, 0x000000, 0x4faa01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x4fab02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4fad11, 0x4fbe02, 0x000000, 0x000000, 0x000000, - 0x4fc003, 0x000000, 0x000000, 0x4fc306, 0x000000, 0x000000, 0x4fc902, 0x4fcb03, - 0x000000, 0x4fce01, 0x000000, 0x000000, 0x4fcf01, 0x000000, 0x4fd001, 0x4fd101, - 0x4fd205, 0x000000, 0x000000, 0x000000, 0x000000, 0x4fd702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4fd901, 0x000000, 0x4fda03, 0x000000, 0x4fdd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x4fdf03, 0x000000, 0x4fe201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x4fe301, 0x4fe401, 0x000000, 0x000000, 0x4fe503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x4fe801, 0x000000, 0x4fe907, 0x000000, 0x000000, - 0x000000, 0x4ff004, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4ff404, - 0x000000, 0x000000, 0x000000, 0x4ff803, 0x000000, 0x4ffb01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x4ffc08, 0x000000, - 0x000000, 0x500401, 0x000000, 0x000000, 0x500501, 0x000000, 0x000000, 0x500609, - 0x000000, 0x500f01, 0x000000, 0x501001, 0x000000, 0x000000, 0x501101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x501201, 0x501301, 0x000000, 0x501413, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x502707, 0x502e02, 0x000000, 0x50300a, 0x000000, 0x000000, - 0x000000, 0x000000, 0x503a01, 0x000000, 0x000000, 0x503b03, 0x000000, 0x000000, - 0x000000, 0x503e03, 0x000000, 0x000000, 0x000000, 0x504102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x50430f, 0x000000, 0x000000, 0x505201, 0x000000, - 0x000000, 0x505302, 0x000000, 0x505517, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x506c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x506d03, 0x000000, - 0x000000, 0x507001, 0x507101, 0x000000, 0x000000, 0x000000, 0x000000, 0x507202, - 0x000000, 0x507401, 0x507514, 0x000000, 0x000000, 0x000000, 0x508902, 0x508b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x508c06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x509201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x509301, - 0x000000, 0x000000, 0x000000, 0x509401, 0x000000, 0x509509, 0x000000, 0x000000, - 0x509e44, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x50e202, 0x000000, - 0x000000, 0x50e404, 0x000000, 0x000000, 0x000000, 0x50e801, 0x50e90a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x50f301, 0x50f401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x50f502, 0x50f701, 0x50f804, 0x000000, 0x50fc01, 0x000000, - 0x50fd01, 0x000000, 0x50fe01, 0x50ff01, 0x000000, 0x510007, 0x000000, 0x000000, - 0x510701, 0x000000, 0x510803, 0x000000, 0x510b01, 0x000000, 0x000000, 0x510c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x510d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x511107, 0x000000, 0x000000, - 0x000000, 0x511802, 0x000000, 0x000000, 0x511a03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x511d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x511e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x511f01, 0x000000, 0x512008, 0x512808, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x513001, 0x000000, 0x000000, 0x000000, 0x513109, 0x513a06, - 0x514001, 0x000000, 0x514105, 0x000000, 0x514601, 0x000000, 0x000000, 0x514702, - 0x000000, 0x000000, 0x514901, 0x000000, 0x000000, 0x514a01, 0x000000, 0x514b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x514c05, 0x000000, 0x000000, - 0x515102, 0x515301, 0x515401, 0x000000, 0x000000, 0x000000, 0x515501, 0x000000, - 0x515603, 0x000000, 0x000000, 0x000000, 0x515903, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x515c01, 0x515d01, 0x515e01, 0x000000, - 0x515f04, 0x516303, 0x000000, 0x000000, 0x516601, 0x000000, 0x000000, 0x516702, - 0x516901, 0x000000, 0x516a01, 0x000000, 0x516b0a, 0x000000, 0x517501, 0x000000, - 0x000000, 0x000000, 0x517601, 0x000000, 0x000000, 0x000000, 0x000000, 0x51770d, - 0x000000, 0x000000, 0x000000, 0x518402, 0x000000, 0x000000, 0x518602, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x518803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x518b04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x518f02, 0x000000, 0x000000, 0x519101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x519201, 0x519306, 0x000000, 0x000000, 0x519901, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x519a0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x51a801, 0x000000, - 0x51a904, 0x51ad02, 0x000000, 0x000000, 0x51af03, 0x51b201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x51b301, 0x000000, 0x51b402, 0x000000, 0x51b601, - 0x51b702, 0x51b905, 0x000000, 0x51be01, 0x000000, 0x51bf01, 0x51c001, 0x51c105, - 0x000000, 0x000000, 0x51c604, 0x000000, 0x000000, 0x51ca02, 0x000000, 0x000000, - 0x51cc02, 0x000000, 0x000000, 0x000000, 0x51ce03, 0x000000, 0x000000, 0x000000, - 0x51d101, 0x51d203, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x51d504, - 0x000000, 0x51d901, 0x000000, 0x000000, 0x51da09, 0x51e303, 0x000000, 0x000000, - 0x51e606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x51ec02, 0x51ee09, - 0x000000, 0x000000, 0x000000, 0x51f703, 0x000000, 0x51fa01, 0x51fb01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x51fc06, 0x000000, 0x000000, 0x000000, - 0x520203, 0x000000, 0x520501, 0x000000, 0x520601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x520701, 0x520807, 0x000000, 0x000000, 0x000000, 0x000000, 0x520f02, - 0x000000, 0x521106, 0x000000, 0x521701, 0x000000, 0x000000, 0x000000, 0x521801, - 0x521903, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x521c05, 0x522101, - 0x522201, 0x522301, 0x000000, 0x000000, 0x522401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x522501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x522601, 0x522705, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x522c01, - 0x000000, 0x000000, 0x522d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x522e02, 0x000000, 0x523005, 0x000000, - 0x523501, 0x523602, 0x000000, 0x000000, 0x000000, 0x523804, 0x523c04, 0x000000, - 0x000000, 0x524007, 0x524701, 0x524801, 0x000000, 0x000000, 0x524901, 0x524a02, - 0x000000, 0x000000, 0x000000, 0x524c02, 0x000000, 0x000000, 0x000000, 0x524e01, - 0x524f01, 0x000000, 0x000000, 0x525001, 0x000000, 0x525104, 0x000000, 0x000000, - 0x525501, 0x000000, 0x000000, 0x000000, 0x000000, 0x525601, 0x000000, 0x000000, - 0x525701, 0x525805, 0x000000, 0x000000, 0x525d01, 0x525e02, 0x000000, 0x526002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x526202, - 0x000000, 0x526401, 0x000000, 0x526501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x526601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x526702, 0x000000, 0x526901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x526a01, 0x000000, 0x000000, 0x526b01, - 0x526c01, 0x526d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x526e01, - 0x000000, 0x526f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x527003, - 0x527301, 0x527403, 0x000000, 0x000000, 0x527701, 0x527802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x527a07, 0x528101, 0x528202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x528404, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x528802, 0x528a03, 0x000000, - 0x000000, 0x528d03, 0x000000, 0x000000, 0x000000, 0x529005, 0x529501, 0x000000, - 0x529601, 0x000000, 0x000000, 0x529701, 0x000000, 0x529801, 0x529906, 0x000000, - 0x529f02, 0x52a101, 0x52a201, 0x52a304, 0x000000, 0x000000, 0x000000, 0x52a701, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x52a803, 0x000000, - 0x52ab02, 0x000000, 0x52ad04, 0x000000, 0x000000, 0x000000, 0x000000, 0x52b101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x52b201, 0x000000, 0x000000, 0x52b302, - 0x000000, 0x52b501, 0x000000, 0x52b601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x52b703, 0x52ba09, 0x52c301, 0x000000, 0x000000, 0x000000, 0x52c401, - 0x000000, 0x000000, 0x52c502, 0x000000, 0x000000, 0x000000, 0x52c701, 0x000000, - 0x000000, 0x52c805, 0x000000, 0x000000, 0x000000, 0x52cd0e, 0x000000, 0x52db01, - 0x000000, 0x000000, 0x52dc02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x52de01, 0x52df07, 0x000000, 0x000000, 0x52e602, 0x52e801, 0x000000, - 0x52e901, 0x000000, 0x000000, 0x000000, 0x000000, 0x52ea01, 0x52eb01, 0x000000, - 0x000000, 0x52ec01, 0x000000, 0x000000, 0x000000, 0x000000, 0x52ed06, 0x52f301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x52f401, 0x000000, 0x000000, - 0x52f501, 0x52f611, 0x000000, 0x000000, 0x000000, 0x000000, 0x530701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x530802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x530a04, 0x000000, 0x000000, 0x000000, - 0x530e09, 0x000000, 0x531702, 0x000000, 0x531908, 0x000000, 0x532101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x53220b, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x532d03, 0x000000, 0x000000, 0x533001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x533101, 0x000000, 0x000000, 0x000000, 0x533201, 0x000000, 0x533302, 0x53350e, - 0x000000, 0x534302, 0x000000, 0x534504, 0x534901, 0x534a01, 0x000000, 0x534b02, - 0x000000, 0x534d01, 0x000000, 0x000000, 0x000000, 0x534e01, 0x534f18, 0x000000, - 0x000000, 0x000000, 0x536702, 0x000000, 0x000000, 0x536907, 0x537001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x537101, 0x000000, 0x000000, 0x000000, - 0x537203, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x537501, 0x000000, 0x000000, 0x537605, 0x537b02, 0x537d01, - 0x000000, 0x000000, 0x000000, 0x537e02, 0x538001, 0x000000, 0x538102, 0x000000, - 0x000000, 0x000000, 0x538301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x538401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x538501, 0x000000, 0x538601, 0x000000, - 0x000000, 0x538701, 0x000000, 0x000000, 0x538804, 0x000000, 0x000000, 0x000000, - 0x000000, 0x538c01, 0x538d07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x539401, 0x539501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x539601, 0x000000, 0x539702, 0x000000, - 0x000000, 0x000000, 0x000000, 0x539901, 0x000000, 0x000000, 0x000000, 0x539a01, - 0x539b01, 0x000000, 0x539c01, 0x539d01, 0x000000, 0x000000, 0x000000, 0x539e01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x539f01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x53a00c, 0x000000, 0x53ac01, 0x000000, 0x53ad03, 0x000000, 0x000000, - 0x000000, 0x53b003, 0x53b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x53b404, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x53b801, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x53b909, 0x000000, 0x53c201, 0x000000, 0x53c305, 0x53c803, 0x000000, 0x53cb01, - 0x000000, 0x53cc01, 0x53cd03, 0x000000, 0x000000, 0x000000, 0x53d001, 0x000000, - 0x000000, 0x53d102, 0x000000, 0x000000, 0x000000, 0x53d301, 0x53d403, 0x000000, - 0x000000, 0x53d709, 0x000000, 0x000000, 0x000000, 0x53e005, 0x53e501, 0x000000, - 0x000000, 0x53e602, 0x000000, 0x000000, 0x53e802, 0x53ea01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x53eb01, 0x000000, - 0x000000, 0x53ec01, 0x53ed02, 0x000000, 0x000000, 0x53ef23, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x541202, 0x000000, 0x000000, 0x541401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x541503, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x541801, 0x541901, - 0x000000, 0x000000, 0x541a02, 0x000000, 0x000000, 0x541c06, 0x000000, 0x000000, - 0x542219, 0x543b03, 0x000000, 0x543e08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x544602, 0x000000, 0x000000, 0x000000, - 0x000000, 0x54480e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54560d, - 0x000000, 0x000000, 0x546301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x546401, 0x000000, 0x54650b, 0x000000, - 0x000000, 0x547001, 0x547101, 0x547201, 0x547303, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x547608, 0x000000, 0x000000, 0x000000, 0x000000, 0x547e04, - 0x000000, 0x548204, 0x000000, 0x000000, 0x000000, 0x000000, 0x548607, 0x548d07, - 0x549409, 0x549d01, 0x000000, 0x000000, 0x549e01, 0x549f02, 0x000000, 0x54a101, - 0x000000, 0x000000, 0x54a203, 0x000000, 0x54a502, 0x54a701, 0x54a801, 0x000000, - 0x54a909, 0x54b201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54b30a, - 0x000000, 0x54bd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x54be05, 0x54c303, - 0x000000, 0x54c601, 0x000000, 0x54c705, 0x000000, 0x000000, 0x54cc01, 0x000000, - 0x000000, 0x000000, 0x54cd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x54ce01, 0x000000, 0x000000, 0x000000, 0x54cf05, - 0x000000, 0x54d40d, 0x000000, 0x54e101, 0x000000, 0x000000, 0x000000, 0x54e202, - 0x54e404, 0x000000, 0x000000, 0x000000, 0x000000, 0x54e804, 0x54ec01, 0x54ed05, - 0x000000, 0x54f202, 0x000000, 0x000000, 0x000000, 0x54f401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x54f502, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x54f701, 0x000000, 0x000000, 0x000000, 0x000000, 0x54f802, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54fa01, 0x54fb01, 0x000000, - 0x54fc03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x54ff03, - 0x000000, 0x000000, 0x550201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x550302, 0x000000, 0x000000, 0x550501, - 0x000000, 0x000000, 0x550606, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x550c01, 0x000000, 0x550d01, 0x000000, - 0x000000, 0x550e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x550f01, 0x000000, - 0x000000, 0x551003, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x551307, 0x551a01, 0x551b03, 0x551e06, 0x000000, - 0x000000, 0x000000, 0x552408, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x552c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x552d01, 0x000000, 0x552e02, - 0x553001, 0x000000, 0x553101, 0x553206, 0x000000, 0x553802, 0x553a01, 0x553b03, - 0x000000, 0x553e01, 0x000000, 0x553f01, 0x000000, 0x000000, 0x554001, 0x000000, - 0x000000, 0x554106, 0x554701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x55480f, 0x555701, 0x555812, 0x000000, 0x000000, 0x556a03, 0x556d01, 0x556e02, - 0x557001, 0x000000, 0x000000, 0x000000, 0x557101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x557203, 0x000000, - 0x557501, 0x000000, 0x000000, 0x000000, 0x557602, 0x000000, 0x557805, 0x557d01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x557e01, 0x000000, 0x000000, 0x557f06, - 0x558501, 0x558602, 0x558804, 0x000000, 0x558c03, 0x000000, 0x558f02, 0x000000, - 0x000000, 0x559103, 0x000000, 0x000000, 0x000000, 0x559401, 0x559501, 0x559601, - 0x000000, 0x000000, 0x559701, 0x000000, 0x000000, 0x559801, 0x559901, 0x559a04, - 0x000000, 0x559e02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x55a001, 0x000000, 0x000000, 0x55a10b, 0x55ac06, 0x55b205, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x55b701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x55b802, 0x000000, 0x55ba02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55bc01, 0x000000, 0x000000, - 0x000000, 0x55bd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55be01, - 0x000000, 0x55bf02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x55c103, 0x55c401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x55c501, 0x000000, 0x55c603, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x55c901, 0x55ca01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x55cb01, 0x55cc04, 0x000000, 0x000000, - 0x55d001, 0x55d104, 0x000000, 0x000000, 0x000000, 0x55d506, 0x000000, 0x000000, - 0x55db01, 0x55dc01, 0x000000, 0x55dd03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x55e003, 0x000000, 0x55e304, 0x000000, 0x55e707, 0x000000, 0x55ee02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55f001, 0x000000, - 0x55f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55f201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x55f304, 0x000000, 0x000000, - 0x000000, 0x55f701, 0x000000, 0x55f806, 0x55fe01, 0x000000, 0x000000, 0x55ff01, - 0x000000, 0x000000, 0x000000, 0x560002, 0x560201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x560301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x560410, 0x561402, 0x000000, 0x561601, 0x000000, 0x000000, 0x000000, - 0x561708, 0x000000, 0x000000, 0x000000, 0x561f01, 0x562004, 0x000000, 0x000000, - 0x562402, 0x562601, 0x562703, 0x562a01, 0x000000, 0x000000, 0x562b01, 0x562c03, - 0x000000, 0x000000, 0x562f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x563107, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x563801, - 0x000000, 0x000000, 0x000000, 0x563901, 0x563a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x563b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x563c07, 0x56430f, 0x565205, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x565703, 0x000000, 0x000000, 0x565a01, 0x000000, - 0x565b01, 0x000000, 0x565c01, 0x000000, 0x565d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x565e08, 0x566601, 0x000000, 0x566702, - 0x566903, 0x000000, 0x000000, 0x000000, 0x000000, 0x566c03, 0x000000, 0x000000, - 0x000000, 0x566f01, 0x56700c, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x567c01, 0x000000, 0x000000, 0x000000, 0x567d02, 0x000000, 0x000000, - 0x567f02, 0x568102, 0x000000, 0x568301, 0x568402, 0x568603, 0x568908, 0x000000, - 0x000000, 0x000000, 0x569102, 0x000000, 0x000000, 0x000000, 0x000000, 0x56930d, - 0x56a002, 0x000000, 0x000000, 0x000000, 0x000000, 0x56a203, 0x000000, 0x56a501, - 0x56a601, 0x000000, 0x000000, 0x56a704, 0x56ab02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x56ad04, 0x000000, 0x56b107, - 0x56b807, 0x000000, 0x000000, 0x56bf01, 0x000000, 0x56c003, 0x000000, 0x56c303, - 0x000000, 0x000000, 0x56c608, 0x000000, 0x56ce08, 0x56d601, 0x000000, 0x000000, - 0x56d702, 0x000000, 0x56d901, 0x000000, 0x000000, 0x56da01, 0x56db01, 0x000000, - 0x56dc03, 0x000000, 0x56df01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x56e001, 0x000000, 0x000000, 0x000000, 0x56e104, 0x56e501, 0x56e60c, 0x000000, - 0x000000, 0x000000, 0x56f209, 0x56fb01, 0x000000, 0x56fc01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x56fd01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x56fe01, 0x000000, 0x56ff05, 0x000000, 0x570401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x570502, 0x570703, 0x570a03, 0x570d01, - 0x000000, 0x000000, 0x570e02, 0x571001, 0x000000, 0x000000, 0x571103, 0x000000, - 0x571402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x571606, 0x000000, 0x571c01, 0x571d03, 0x000000, - 0x000000, 0x000000, 0x572003, 0x000000, 0x572307, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x572a02, - 0x000000, 0x000000, 0x000000, 0x572c11, 0x000000, 0x573d01, 0x000000, 0x000000, - 0x000000, 0x573e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x573f02, - 0x000000, 0x574106, 0x574703, 0x000000, 0x574a02, 0x574c01, 0x000000, 0x574d07, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x575401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x575501, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x575601, 0x575701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x575805, 0x575d03, 0x000000, 0x000000, 0x576001, 0x000000, - 0x576103, 0x576402, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x576602, - 0x000000, 0x576801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x576903, - 0x000000, 0x000000, 0x000000, 0x000000, 0x576c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x576d01, 0x000000, 0x576e08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x577601, 0x000000, 0x000000, - 0x577703, 0x577a01, 0x577b06, 0x578103, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x578401, 0x000000, 0x000000, 0x578502, 0x000000, 0x000000, 0x578701, - 0x000000, 0x000000, 0x578801, 0x57890e, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x579702, 0x000000, 0x000000, 0x000000, 0x000000, 0x579901, - 0x000000, 0x000000, 0x000000, 0x579a01, 0x000000, 0x579b04, 0x000000, 0x579f03, - 0x000000, 0x57a207, 0x57a901, 0x57aa01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x57ab02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x57ad08, 0x000000, - 0x57b501, 0x000000, 0x57b60a, 0x000000, 0x000000, 0x000000, 0x57c005, 0x000000, - 0x57c501, 0x000000, 0x57c601, 0x000000, 0x000000, 0x000000, 0x000000, 0x57c701, - 0x57c80e, 0x000000, 0x57d601, 0x000000, 0x000000, 0x000000, 0x57d701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x57d80a, 0x000000, 0x000000, 0x57e20f, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x57f101, 0x000000, 0x000000, - 0x57f201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x57f301, 0x000000, 0x000000, 0x000000, 0x57f403, 0x57f70e, 0x000000, 0x000000, - 0x000000, 0x580501, 0x000000, 0x000000, 0x580601, 0x000000, 0x000000, 0x580704, - 0x000000, 0x580b0d, 0x581802, 0x000000, 0x581a06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x582001, 0x000000, 0x000000, 0x582104, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x582501, 0x000000, 0x000000, 0x000000, 0x000000, 0x582601, 0x582707, 0x000000, - 0x000000, 0x582e04, 0x000000, 0x583203, 0x000000, 0x583501, 0x583602, 0x583801, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x583901, 0x000000, 0x000000, - 0x583a03, 0x000000, 0x000000, 0x583d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x583e01, 0x000000, 0x583f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x584009, 0x000000, 0x584902, 0x000000, 0x000000, 0x584b05, 0x000000, - 0x000000, 0x585009, 0x000000, 0x000000, 0x585901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x585a05, 0x000000, 0x585f01, 0x58600d, 0x000000, - 0x000000, 0x586d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x586e01, - 0x000000, 0x000000, 0x586f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x587301, 0x000000, 0x587402, 0x587605, 0x000000, 0x000000, - 0x000000, 0x000000, 0x587b01, 0x587c01, 0x000000, 0x000000, 0x000000, 0x587d01, - 0x000000, 0x587e01, 0x000000, 0x000000, 0x000000, 0x587f11, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x589002, 0x589201, 0x589302, 0x000000, 0x000000, 0x589501, 0x58960c, 0x000000, - 0x58a202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x58a403, 0x000000, 0x000000, 0x58a703, 0x000000, 0x58aa08, 0x58b201, 0x58b30a, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x58bd01, 0x000000, 0x58be04, 0x000000, 0x000000, 0x000000, 0x000000, 0x58c201, - 0x000000, 0x000000, 0x000000, 0x58c301, 0x58c401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58c502, 0x58c701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x58c802, 0x000000, 0x000000, - 0x58ca01, 0x000000, 0x000000, 0x000000, 0x000000, 0x58cb03, 0x58ce01, 0x58cf03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x58d20a, 0x000000, 0x58dc02, 0x000000, - 0x000000, 0x58de07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x58e502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58e704, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x58eb01, 0x58ec01, 0x58ed02, 0x000000, 0x58ef01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58f001, 0x58f101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x58f201, 0x000000, 0x000000, 0x58f303, 0x58f601, - 0x000000, 0x58f701, 0x58f803, 0x58fb02, 0x000000, 0x000000, 0x58fd02, 0x58ff03, - 0x000000, 0x590202, 0x000000, 0x590407, 0x590b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x590d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x591101, 0x000000, 0x591201, 0x591301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x591405, - 0x000000, 0x000000, 0x591901, 0x591a03, 0x591d02, 0x591f09, 0x000000, 0x592801, - 0x592905, 0x000000, 0x592e02, 0x593001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x593102, 0x000000, 0x593302, - 0x593501, 0x000000, 0x593601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x593707, 0x000000, 0x593e09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x594701, 0x594801, 0x000000, 0x594901, 0x594a03, 0x000000, 0x000000, 0x594d02, - 0x000000, 0x000000, 0x594f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x595001, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x595101, 0x000000, 0x595201, 0x595301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x595402, 0x000000, 0x595601, 0x000000, 0x595701, - 0x000000, 0x595808, 0x596001, 0x596102, 0x596301, 0x596401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x596501, 0x596607, 0x000000, - 0x596d01, 0x000000, 0x596e05, 0x000000, 0x000000, 0x000000, 0x597301, 0x000000, - 0x597403, 0x000000, 0x000000, 0x000000, 0x000000, 0x597701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x597802, 0x597a08, 0x000000, 0x000000, 0x000000, 0x598202, - 0x598401, 0x000000, 0x000000, 0x598502, 0x000000, 0x000000, 0x000000, 0x598709, - 0x000000, 0x000000, 0x000000, 0x599001, 0x59910b, 0x000000, 0x000000, 0x000000, - 0x599c01, 0x599d01, 0x000000, 0x000000, 0x000000, 0x599e01, 0x000000, 0x000000, - 0x000000, 0x599f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x59a101, 0x000000, 0x59a207, 0x000000, 0x000000, 0x59a902, 0x000000, - 0x59ab06, 0x000000, 0x000000, 0x59b101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x59b201, 0x000000, 0x000000, 0x59b301, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x59b403, 0x000000, - 0x59b701, 0x000000, 0x000000, 0x000000, 0x59b801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x59b901, 0x000000, 0x59ba07, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x59c101, 0x000000, 0x000000, 0x59c208, 0x000000, 0x59ca02, - 0x000000, 0x000000, 0x59cc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x59cd0f, 0x000000, 0x59dc01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x59dd01, 0x59de01, 0x59df0f, 0x000000, 0x000000, - 0x59ee01, 0x59ef05, 0x59f401, 0x000000, 0x000000, 0x000000, 0x000000, 0x59f502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x59f703, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x59fa03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x59fd0a, 0x000000, 0x000000, 0x000000, 0x5a0701, 0x000000, 0x5a0803, 0x5a0b01, - 0x5a0c07, 0x5a1301, 0x5a1402, 0x000000, 0x5a1604, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5a1a01, 0x5a1b01, 0x000000, 0x000000, 0x000000, 0x5a1c04, 0x5a2036, - 0x000000, 0x000000, 0x000000, 0x5a5601, 0x000000, 0x5a5701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5a5809, 0x000000, 0x5a6103, 0x5a6408, 0x000000, - 0x5a6c01, 0x000000, 0x000000, 0x5a6d02, 0x000000, 0x000000, 0x000000, 0x5a6f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5a7103, 0x000000, 0x000000, 0x000000, 0x000000, 0x5a7402, 0x5a7601, 0x5a7714, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5a8b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5a8c07, 0x000000, 0x000000, 0x5a9301, 0x000000, 0x5a9406, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5a9a01, 0x000000, 0x000000, 0x5a9b03, 0x5a9e03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5aa102, 0x000000, 0x5aa303, 0x000000, 0x5aa602, 0x000000, 0x5aa801, - 0x5aa911, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5aba02, - 0x5abc01, 0x000000, 0x000000, 0x5abd04, 0x5ac104, 0x5ac507, 0x000000, 0x000000, - 0x000000, 0x5acc01, 0x5acd02, 0x5acf01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5ad005, 0x5ad50b, 0x000000, 0x000000, 0x000000, 0x5ae003, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5ae308, 0x000000, 0x5aeb01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5aec14, 0x000000, 0x5b0001, 0x000000, - 0x5b0101, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b0203, 0x000000, 0x5b0501, - 0x000000, 0x000000, 0x5b0609, 0x5b0f02, 0x000000, 0x000000, 0x5b1106, 0x000000, - 0x5b1704, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b1b01, 0x000000, 0x5b1c03, - 0x000000, 0x5b1f06, 0x000000, 0x5b2503, 0x000000, 0x000000, 0x000000, 0x5b2806, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5b2e01, 0x5b2f02, 0x5b3102, 0x000000, - 0x5b3305, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5b3802, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b3a01, 0x000000, - 0x5b3b02, 0x5b3d01, 0x000000, 0x000000, 0x000000, 0x5b3e01, 0x5b3f01, 0x000000, - 0x5b4006, 0x000000, 0x5b4602, 0x000000, 0x5b4804, 0x000000, 0x000000, 0x5b4c05, - 0x000000, 0x5b5101, 0x5b5203, 0x000000, 0x5b5501, 0x5b5604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5b5a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5b5b02, 0x5b5d03, 0x000000, 0x000000, 0x5b6005, - 0x5b6501, 0x000000, 0x000000, 0x000000, 0x5b6601, 0x000000, 0x000000, 0x000000, - 0x5b6701, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b680e, 0x000000, 0x000000, - 0x000000, 0x5b7601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5b7706, 0x000000, 0x5b7d15, 0x000000, 0x5b9201, 0x5b9304, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5b9706, 0x000000, 0x5b9d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5b9f02, 0x000000, 0x000000, - 0x5ba106, 0x5ba701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5ba805, 0x000000, 0x000000, 0x000000, 0x5bad01, 0x5bae01, 0x000000, 0x000000, - 0x5baf01, 0x000000, 0x000000, 0x000000, 0x5bb017, 0x5bc701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5bc802, 0x000000, - 0x5bca03, 0x000000, 0x000000, 0x5bcd01, 0x000000, 0x000000, 0x5bce0a, 0x000000, - 0x000000, 0x5bd802, 0x000000, 0x000000, 0x5bda02, 0x000000, 0x000000, 0x000000, - 0x5bdc01, 0x000000, 0x000000, 0x000000, 0x000000, 0x5bdd01, 0x5bde02, 0x5be003, - 0x5be301, 0x000000, 0x5be403, 0x5be70b, 0x5bf202, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5bf403, 0x000000, 0x000000, 0x5bf70c, 0x000000, 0x000000, - 0x5c0301, 0x000000, 0x000000, 0x5c0402, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5c0601, 0x000000, 0x5c0701, 0x000000, 0x000000, 0x5c0805, 0x000000, - 0x000000, 0x5c0d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c0f01, - 0x5c1001, 0x5c1101, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c1203, 0x000000, - 0x5c1501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5c1604, 0x000000, 0x5c1a02, 0x000000, - 0x000000, 0x5c1c06, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5c2209, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5c2b02, 0x5c2d04, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c3104, 0x5c3501, - 0x000000, 0x000000, 0x5c3601, 0x000000, 0x5c3706, 0x000000, 0x000000, 0x000000, - 0x5c3d02, 0x5c3f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c4101, - 0x000000, 0x000000, 0x5c4202, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c4405, - 0x5c4901, 0x000000, 0x5c4a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5c4c01, 0x000000, 0x5c4d04, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5c5102, 0x000000, 0x5c5302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5c5502, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c571b, - 0x5c7202, 0x000000, 0x5c740c, 0x000000, 0x000000, 0x000000, 0x5c8001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c8101, 0x000000, - 0x5c8201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5c8301, 0x000000, - 0x000000, 0x000000, 0x5c8404, 0x5c8804, 0x000000, 0x5c8c01, 0x5c8d06, 0x5c9302, - 0x000000, 0x5c9507, 0x000000, 0x5c9c03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5c9f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5ca101, 0x000000, 0x000000, 0x5ca203, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5ca502, 0x000000, 0x000000, 0x5ca702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5ca904, 0x000000, 0x000000, 0x000000, 0x5cad03, 0x5cb00c, 0x000000, - 0x5cbc05, 0x5cc102, 0x000000, 0x5cc301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5cc401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5cc501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5cc602, 0x000000, 0x5cc804, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ccc08, 0x5cd405, 0x000000, 0x000000, 0x000000, 0x5cd901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5cda01, - 0x000000, 0x5cdb09, 0x5ce40f, 0x000000, 0x000000, 0x5cf302, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5cf501, 0x000000, 0x5cf603, 0x000000, 0x000000, 0x000000, - 0x5cf904, 0x000000, 0x000000, 0x5cfd01, 0x000000, 0x5cfe01, 0x000000, 0x000000, - 0x5cff01, 0x000000, 0x5d000a, 0x000000, 0x5d0a02, 0x000000, 0x000000, 0x000000, - 0x5d0c06, 0x000000, 0x5d1202, 0x000000, 0x000000, 0x000000, 0x5d1401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d1502, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d1701, 0x5d1801, 0x5d1901, - 0x5d1a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d1c01, 0x5d1d08, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5d2501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5d2620, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5d4602, 0x5d4801, 0x000000, 0x000000, 0x5d4901, 0x5d4a0c, 0x5d5604, - 0x000000, 0x5d5a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d5c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d5d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5d5e02, 0x5d6001, 0x000000, 0x5d6101, 0x000000, - 0x5d620b, 0x5d6d01, 0x5d6e01, 0x5d6f02, 0x000000, 0x5d7102, 0x000000, 0x5d7303, - 0x000000, 0x5d7607, 0x000000, 0x5d7d03, 0x000000, 0x5d8004, 0x5d8401, 0x000000, - 0x5d8504, 0x5d8909, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5d9201, - 0x5d9302, 0x5d9501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5d9603, 0x000000, 0x5d9903, 0x5d9c01, 0x000000, 0x5d9d01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5d9e01, 0x5d9f05, 0x000000, 0x000000, 0x5da401, 0x000000, - 0x000000, 0x5da501, 0x000000, 0x000000, 0x000000, 0x000000, 0x5da601, 0x000000, - 0x5da701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5da803, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5dab04, - 0x000000, 0x000000, 0x5daf01, 0x000000, 0x5db002, 0x000000, 0x000000, 0x5db201, - 0x000000, 0x000000, 0x5db302, 0x5db501, 0x5db601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5db702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5db904, 0x000000, 0x000000, 0x000000, - 0x5dbd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5dbe04, 0x000000, 0x000000, 0x5dc201, 0x000000, 0x5dc302, - 0x000000, 0x5dc501, 0x000000, 0x000000, 0x000000, 0x5dc601, 0x000000, 0x000000, - 0x5dc701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5dc801, 0x000000, 0x000000, 0x5dc901, 0x000000, 0x000000, 0x5dca02, 0x000000, - 0x000000, 0x5dcc01, 0x5dcd01, 0x000000, 0x000000, 0x5dce01, 0x5dcf0b, 0x5dda01, - 0x000000, 0x5ddb01, 0x5ddc01, 0x000000, 0x5ddd03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5de001, 0x5de101, 0x000000, 0x5de201, 0x000000, 0x000000, - 0x5de308, 0x000000, 0x000000, 0x5deb04, 0x000000, 0x5def01, 0x5df00e, 0x5dfe04, - 0x5e0201, 0x000000, 0x5e0302, 0x5e0501, 0x000000, 0x000000, 0x5e0607, 0x5e0d09, - 0x5e1603, 0x000000, 0x5e1905, 0x000000, 0x000000, 0x000000, 0x5e1e03, 0x000000, - 0x5e2103, 0x5e2403, 0x5e2702, 0x5e2901, 0x000000, 0x5e2a01, 0x000000, 0x000000, - 0x000000, 0x5e2b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x5e2d01, 0x5e2e02, - 0x000000, 0x5e3002, 0x000000, 0x000000, 0x5e3205, 0x5e3704, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5e3b01, 0x000000, 0x5e3c01, 0x000000, - 0x5e3d01, 0x000000, 0x5e3e08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5e4601, 0x000000, 0x000000, 0x5e4701, 0x000000, 0x5e4805, 0x5e4d04, 0x000000, - 0x000000, 0x000000, 0x5e5101, 0x000000, 0x000000, 0x5e5202, 0x5e5405, 0x5e5909, - 0x000000, 0x5e6202, 0x000000, 0x000000, 0x000000, 0x5e6401, 0x5e6501, 0x5e6602, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5e6801, 0x5e6905, 0x5e6e03, 0x000000, 0x000000, 0x000000, - 0x5e7101, 0x000000, 0x000000, 0x5e7202, 0x000000, 0x000000, 0x5e7403, 0x000000, - 0x5e770d, 0x5e8404, 0x000000, 0x5e8803, 0x5e8b02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5e8d06, 0x5e9308, 0x5e9b04, 0x000000, 0x000000, - 0x000000, 0x5e9f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ea108, 0x000000, 0x5ea901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5eaa01, 0x000000, 0x5eab03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5eae01, 0x5eaf01, 0x5eb007, - 0x000000, 0x000000, 0x5eb701, 0x000000, 0x000000, 0x5eb802, 0x000000, 0x5eba02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5ebc0f, 0x000000, - 0x5ecb01, 0x000000, 0x000000, 0x000000, 0x5ecc02, 0x000000, 0x5ece01, 0x5ecf01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5ed001, 0x000000, 0x000000, 0x5ed105, - 0x000000, 0x000000, 0x5ed601, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ed70d, 0x000000, 0x5ee401, 0x5ee502, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5ee71b, 0x000000, 0x000000, 0x5f0206, - 0x000000, 0x000000, 0x000000, 0x5f0801, 0x5f0901, 0x5f0a08, 0x5f120c, 0x000000, - 0x5f1e12, 0x000000, 0x000000, 0x5f3001, 0x5f3101, 0x000000, 0x000000, 0x000000, - 0x5f3201, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f3301, 0x5f3401, 0x5f3504, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f3901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5f3a02, 0x000000, 0x5f3c02, 0x000000, 0x5f3e06, 0x5f4401, - 0x000000, 0x5f4504, 0x000000, 0x000000, 0x5f4901, 0x5f4a05, 0x5f4f01, 0x000000, - 0x000000, 0x000000, 0x5f5001, 0x5f5104, 0x000000, 0x5f5505, 0x000000, 0x000000, - 0x000000, 0x5f5a04, 0x000000, 0x000000, 0x000000, 0x5f5e01, 0x000000, 0x5f5f01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f6002, 0x000000, 0x5f6203, - 0x000000, 0x5f6501, 0x000000, 0x5f6605, 0x5f6b07, 0x000000, 0x5f7204, 0x000000, - 0x000000, 0x000000, 0x5f7601, 0x000000, 0x000000, 0x000000, 0x5f7702, 0x5f7904, - 0x5f7d01, 0x000000, 0x000000, 0x000000, 0x5f7e01, 0x5f7f01, 0x5f8003, 0x5f8301, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5f8404, 0x5f8801, 0x000000, 0x000000, - 0x5f8901, 0x5f8a01, 0x5f8b05, 0x000000, 0x5f9005, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5f9501, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5f9602, - 0x000000, 0x5f9801, 0x5f9901, 0x5f9a01, 0x5f9b02, 0x000000, 0x5f9d02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5f9f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5fa001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x5fa103, 0x5fa401, 0x000000, 0x000000, 0x000000, 0x000000, 0x5fa502, - 0x000000, 0x000000, 0x000000, 0x5fa706, 0x000000, 0x000000, 0x000000, 0x5fad03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5fb001, 0x000000, 0x000000, 0x5fb101, - 0x000000, 0x000000, 0x000000, 0x5fb207, 0x5fb901, 0x000000, 0x000000, 0x000000, - 0x5fba04, 0x000000, 0x000000, 0x5fbe02, 0x000000, 0x000000, 0x5fc001, 0x5fc103, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x5fc401, 0x000000, 0x5fc502, - 0x000000, 0x5fc701, 0x000000, 0x5fc803, 0x5fcb01, 0x5fcc02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5fce01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5fcf09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x5fd802, 0x5fda01, 0x000000, 0x5fdb08, 0x000000, - 0x000000, 0x000000, 0x5fe301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5fe401, 0x5fe503, 0x000000, 0x000000, 0x000000, 0x5fe801, 0x5fe901, 0x000000, - 0x5fea01, 0x000000, 0x5feb02, 0x000000, 0x5fed02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5fef01, 0x000000, 0x000000, 0x000000, 0x5ff001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x5ff105, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x5ff602, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x5ff805, 0x000000, 0x000000, 0x000000, 0x5ffd01, 0x000000, 0x5ffe02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x600004, 0x600403, 0x000000, 0x600701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x600801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x600901, 0x000000, 0x000000, 0x600a01, 0x000000, 0x600b02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x600d01, 0x600e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x600f02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x601102, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x601301, - 0x601405, 0x000000, 0x000000, 0x000000, 0x000000, 0x601901, 0x601a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x601b01, 0x000000, 0x000000, 0x601c05, 0x000000, - 0x602101, 0x000000, 0x000000, 0x602201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x602303, 0x602601, 0x602708, 0x602f03, 0x000000, 0x000000, 0x000000, 0x60320b, - 0x000000, 0x603d01, 0x603e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x603f0f, - 0x000000, 0x000000, 0x000000, 0x604e01, 0x604f01, 0x605005, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x605501, 0x000000, - 0x605601, 0x605701, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x605802, - 0x000000, 0x000000, 0x000000, 0x000000, 0x605a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x605b01, 0x605c01, 0x000000, 0x605d04, 0x606101, - 0x000000, 0x000000, 0x000000, 0x606203, 0x000000, 0x606501, 0x000000, 0x000000, - 0x606602, 0x000000, 0x000000, 0x000000, 0x606802, 0x000000, 0x606a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x606b01, 0x000000, 0x606c01, 0x000000, 0x000000, - 0x606d02, 0x000000, 0x000000, 0x606f01, 0x607001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x607101, 0x607206, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x607801, 0x000000, 0x60790b, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x608401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x608502, 0x000000, 0x608701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x608801, 0x608901, 0x000000, 0x608a01, - 0x000000, 0x608b02, 0x608d01, 0x000000, 0x608e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x608f05, 0x000000, 0x000000, 0x60940d, 0x000000, 0x000000, 0x60a10b, - 0x000000, 0x60ac01, 0x60ad02, 0x000000, 0x000000, 0x000000, 0x60af01, 0x000000, - 0x000000, 0x000000, 0x60b005, 0x000000, 0x000000, 0x000000, 0x60b504, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60b901, 0x000000, 0x60ba01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x60bb01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60bc02, 0x60be01, 0x60bf04, 0x000000, - 0x60c301, 0x000000, 0x000000, 0x000000, 0x000000, 0x60c404, 0x000000, 0x000000, - 0x000000, 0x000000, 0x60c808, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x60d001, 0x000000, 0x60d102, 0x60d301, 0x000000, 0x000000, 0x000000, 0x60d405, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60d904, 0x60dd01, 0x000000, 0x60de01, - 0x60df03, 0x000000, 0x000000, 0x000000, 0x60e201, 0x000000, 0x60e302, 0x60e501, - 0x000000, 0x60e603, 0x000000, 0x000000, 0x000000, 0x60e911, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x60fa01, 0x60fb07, 0x000000, 0x610201, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x610303, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x610604, 0x000000, 0x610a01, 0x610b03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x610e01, 0x000000, 0x000000, 0x610f01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x611001, 0x000000, 0x611101, 0x611201, - 0x000000, 0x000000, 0x000000, 0x611301, 0x000000, 0x611401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x611501, - 0x000000, 0x61160d, 0x000000, 0x000000, 0x61230f, 0x000000, 0x000000, 0x000000, - 0x613201, 0x000000, 0x000000, 0x000000, 0x61330b, 0x000000, 0x613e02, 0x614002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x614201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x61430d, 0x000000, 0x615001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x615103, 0x000000, 0x000000, 0x61540d, - 0x616101, 0x616201, 0x000000, 0x000000, 0x000000, 0x616307, 0x000000, 0x000000, - 0x616a03, 0x000000, 0x000000, 0x616d03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x617005, 0x617501, 0x000000, - 0x617602, 0x000000, 0x000000, 0x617801, 0x000000, 0x000000, 0x000000, 0x617905, - 0x000000, 0x617e02, 0x000000, 0x000000, 0x000000, 0x618001, 0x000000, 0x000000, - 0x618102, 0x000000, 0x618304, 0x618702, 0x618902, 0x618b04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x618f01, 0x000000, 0x000000, 0x000000, 0x619005, - 0x000000, 0x619501, 0x000000, 0x000000, 0x619601, 0x000000, 0x000000, 0x619709, - 0x000000, 0x000000, 0x000000, 0x61a001, 0x000000, 0x000000, 0x000000, 0x61a107, - 0x000000, 0x000000, 0x61a802, 0x000000, 0x000000, 0x000000, 0x61aa0f, 0x000000, - 0x000000, 0x61b905, 0x000000, 0x000000, 0x61be0b, 0x000000, 0x000000, 0x000000, - 0x61c901, 0x000000, 0x000000, 0x61ca01, 0x61cb01, 0x000000, 0x61cc02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x61ce01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x61cf02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x61d101, 0x000000, 0x000000, 0x61d202, - 0x61d404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x61d802, - 0x000000, 0x000000, 0x61da01, 0x000000, 0x61db01, 0x61dc01, 0x000000, 0x000000, - 0x61dd01, 0x000000, 0x000000, 0x000000, 0x61de02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x61e002, 0x61e201, 0x000000, 0x000000, 0x61e304, 0x61e701, 0x000000, - 0x61e804, 0x61ec01, 0x61ed02, 0x000000, 0x000000, 0x000000, 0x000000, 0x61ef01, - 0x000000, 0x61f011, 0x000000, 0x620102, 0x000000, 0x000000, 0x620301, 0x620408, - 0x620c04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x621003, - 0x621305, 0x000000, 0x000000, 0x621802, 0x000000, 0x000000, 0x621a01, 0x621b01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x621c03, 0x000000, - 0x000000, 0x000000, 0x621f01, 0x622004, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x622401, 0x000000, 0x000000, 0x000000, 0x622504, - 0x000000, 0x622904, 0x622d05, 0x000000, 0x623204, 0x000000, 0x623608, 0x000000, - 0x000000, 0x000000, 0x623e0a, 0x000000, 0x624802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x624a0b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x625501, 0x000000, 0x625620, 0x000000, 0x627602, 0x000000, 0x000000, 0x000000, - 0x627804, 0x000000, 0x000000, 0x000000, 0x000000, 0x627c06, 0x000000, 0x628204, - 0x000000, 0x628602, 0x000000, 0x628802, 0x000000, 0x000000, 0x000000, 0x628a01, - 0x000000, 0x000000, 0x000000, 0x628b01, 0x000000, 0x000000, 0x000000, 0x628c02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x628e02, - 0x629004, 0x000000, 0x000000, 0x000000, 0x000000, 0x629402, 0x629604, 0x000000, - 0x000000, 0x000000, 0x629a09, 0x000000, 0x000000, 0x000000, 0x62a305, 0x000000, - 0x62a801, 0x62a902, 0x000000, 0x000000, 0x000000, 0x000000, 0x62ab05, 0x62b003, - 0x000000, 0x62b305, 0x000000, 0x000000, 0x62b833, 0x62eb01, 0x000000, 0x62ec01, - 0x000000, 0x62ed01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x62ee01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x62ef04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x62f301, - 0x000000, 0x000000, 0x000000, 0x62f403, 0x000000, 0x000000, 0x000000, 0x62f701, - 0x62f801, 0x62f905, 0x000000, 0x000000, 0x62fe07, 0x000000, 0x630502, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x630702, 0x000000, - 0x630915, 0x000000, 0x631e04, 0x000000, 0x632205, 0x000000, 0x000000, 0x000000, - 0x000000, 0x632702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x632902, 0x000000, 0x632b02, 0x000000, 0x632d09, - 0x000000, 0x000000, 0x633602, 0x000000, 0x000000, 0x633801, 0x000000, 0x000000, - 0x000000, 0x633905, 0x000000, 0x000000, 0x000000, 0x633e06, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x634402, 0x634602, 0x000000, 0x000000, 0x634802, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x634a02, 0x000000, 0x000000, - 0x000000, 0x634c03, 0x000000, 0x000000, 0x000000, 0x634f09, 0x000000, 0x000000, - 0x000000, 0x000000, 0x635802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x635a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x635b01, 0x000000, 0x000000, 0x000000, 0x635c03, - 0x000000, 0x000000, 0x635f02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x636101, 0x000000, 0x000000, 0x636203, 0x000000, 0x636503, 0x000000, - 0x000000, 0x636801, 0x000000, 0x000000, 0x000000, 0x636902, 0x000000, 0x000000, - 0x000000, 0x000000, 0x636b01, 0x000000, 0x636c01, 0x636d01, 0x636e01, 0x000000, - 0x000000, 0x000000, 0x636f01, 0x000000, 0x637002, 0x000000, 0x000000, 0x000000, - 0x637202, 0x000000, 0x637407, 0x000000, 0x637b01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x637c02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x637e03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x638101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x638202, 0x000000, 0x000000, 0x000000, 0x000000, 0x638406, - 0x000000, 0x000000, 0x000000, 0x000000, 0x638a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x638b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x638c0c, - 0x000000, 0x639801, 0x000000, 0x000000, 0x639906, 0x000000, 0x639f06, 0x000000, - 0x63a502, 0x000000, 0x63a701, 0x000000, 0x000000, 0x63a801, 0x63a903, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x63ac01, 0x63ad01, 0x63ae01, - 0x000000, 0x63af01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x63b001, 0x000000, 0x63b105, 0x63b607, 0x63bd02, 0x000000, 0x63bf01, - 0x000000, 0x63c00b, 0x000000, 0x000000, 0x63cb02, 0x63cd01, 0x000000, 0x000000, - 0x63ce01, 0x000000, 0x63cf02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x63d101, 0x000000, 0x63d201, 0x000000, 0x63d301, 0x63d40b, 0x63df02, 0x000000, - 0x000000, 0x000000, 0x63e101, 0x63e203, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x63e505, 0x000000, 0x000000, 0x000000, 0x000000, 0x63ea02, - 0x000000, 0x000000, 0x000000, 0x63ec01, 0x000000, 0x000000, 0x000000, 0x63ed06, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x63f301, 0x000000, 0x000000, 0x000000, 0x000000, 0x63f401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x63f501, 0x000000, 0x63f601, 0x63f701, 0x63f801, - 0x000000, 0x63f902, 0x000000, 0x000000, 0x000000, 0x63fb01, 0x000000, 0x63fc12, - 0x640e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x641101, 0x000000, - 0x000000, 0x000000, 0x000000, 0x641204, 0x641606, 0x000000, 0x000000, 0x641c02, - 0x000000, 0x000000, 0x641e04, 0x000000, 0x000000, 0x000000, 0x642201, 0x64230d, - 0x000000, 0x000000, 0x643005, 0x000000, 0x000000, 0x000000, 0x000000, 0x643507, - 0x000000, 0x000000, 0x000000, 0x643c02, 0x643e08, 0x000000, 0x000000, 0x644607, - 0x000000, 0x000000, 0x644d14, 0x646101, 0x000000, 0x646203, 0x646501, 0x646601, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x646702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x646904, 0x000000, - 0x000000, 0x646d01, 0x000000, 0x646e01, 0x000000, 0x646f03, 0x000000, 0x647201, - 0x647301, 0x647401, 0x000000, 0x000000, 0x64750a, 0x647f04, 0x648302, 0x000000, - 0x000000, 0x000000, 0x648503, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x648802, 0x000000, 0x000000, 0x648a01, - 0x000000, 0x000000, 0x000000, 0x648b01, 0x000000, 0x648c04, 0x649001, 0x000000, - 0x649102, 0x000000, 0x649318, 0x64ab06, 0x64b102, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x64b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x64b401, - 0x000000, 0x64b502, 0x64b701, 0x64b804, 0x000000, 0x000000, 0x000000, 0x64bc08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x64c404, 0x64c807, - 0x000000, 0x000000, 0x000000, 0x64cf01, 0x64d002, 0x000000, 0x000000, 0x64d203, - 0x64d501, 0x64d602, 0x000000, 0x000000, 0x64d803, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x64db0c, 0x000000, 0x000000, - 0x000000, 0x000000, 0x64e701, 0x64e80d, 0x000000, 0x000000, 0x000000, 0x64f501, - 0x000000, 0x000000, 0x000000, 0x64f601, 0x64f701, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x64f801, 0x64f901, - 0x000000, 0x000000, 0x64fa01, 0x000000, 0x000000, 0x64fb0a, 0x000000, 0x650501, - 0x000000, 0x000000, 0x000000, 0x650602, 0x650802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x650a01, 0x650b01, 0x000000, 0x650c05, - 0x651101, 0x000000, 0x651201, 0x000000, 0x651301, 0x651401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x651518, 0x652d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x652e01, 0x652f01, 0x653003, 0x000000, 0x000000, - 0x000000, 0x653301, 0x653401, 0x000000, 0x000000, 0x000000, 0x000000, 0x653502, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x653701, - 0x000000, 0x653801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x653902, 0x000000, 0x000000, 0x653b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x653c0a, 0x654601, 0x000000, 0x000000, 0x000000, - 0x000000, 0x654702, 0x000000, 0x000000, 0x654903, 0x000000, 0x000000, 0x000000, - 0x654c05, 0x000000, 0x000000, 0x655104, 0x655503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x655805, 0x000000, 0x655d06, 0x000000, - 0x656305, 0x000000, 0x000000, 0x656801, 0x656901, 0x000000, 0x000000, 0x656a01, - 0x000000, 0x656b01, 0x656c01, 0x656d01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x656e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x656f01, 0x000000, - 0x000000, 0x000000, 0x657002, 0x657202, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x657402, 0x657603, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x657903, 0x000000, 0x657c01, 0x000000, 0x000000, 0x000000, - 0x657d02, 0x000000, 0x000000, 0x000000, 0x657f09, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x658809, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x659103, 0x000000, 0x000000, 0x000000, 0x659401, 0x000000, - 0x000000, 0x000000, 0x659501, 0x659607, 0x000000, 0x000000, 0x659d01, 0x659e01, - 0x659f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x65a001, - 0x65a102, 0x65a302, 0x000000, 0x65a501, 0x65a601, 0x000000, 0x000000, 0x000000, - 0x65a704, 0x65ab01, 0x000000, 0x65ac04, 0x65b001, 0x65b10a, 0x65bb02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x65bd01, 0x000000, 0x000000, 0x65be02, - 0x000000, 0x000000, 0x65c001, 0x000000, 0x65c101, 0x000000, 0x65c202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x65c401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x65c505, 0x65ca01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x65cb06, 0x000000, 0x65d101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x65d202, 0x000000, 0x65d402, 0x000000, 0x000000, 0x65d602, 0x000000, 0x000000, - 0x000000, 0x65d801, 0x000000, 0x65d903, 0x65dc01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x65dd01, 0x000000, 0x000000, 0x000000, 0x65de0b, 0x000000, 0x65e904, - 0x000000, 0x000000, 0x65ed01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x65ee01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x65ef05, - 0x65f406, 0x000000, 0x65fa0f, 0x660902, 0x000000, 0x660b01, 0x000000, 0x000000, - 0x660c0b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x661705, - 0x661c0e, 0x662a09, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x663302, 0x663501, 0x000000, 0x000000, 0x000000, - 0x663603, 0x000000, 0x663901, 0x663a01, 0x000000, 0x000000, 0x663b02, 0x000000, - 0x000000, 0x663d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x663e01, - 0x000000, 0x000000, 0x000000, 0x663f01, 0x664090, 0x000000, 0x66d001, 0x66d101, - 0x000000, 0x66d201, 0x000000, 0x000000, 0x66d301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x66d406, 0x000000, 0x66da04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x66de0f, 0x000000, 0x000000, - 0x000000, 0x66ed1d, 0x000000, 0x000000, 0x000000, 0x670a03, 0x000000, 0x000000, - 0x670d01, 0x670e02, 0x671007, 0x000000, 0x000000, 0x67170e, 0x672505, 0x000000, - 0x000000, 0x000000, 0x000000, 0x672a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x672b08, 0x000000, 0x000000, 0x673303, 0x000000, 0x000000, 0x673601, - 0x000000, 0x673702, 0x673906, 0x673f03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x674201, 0x000000, 0x674305, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x674803, 0x000000, 0x674b02, 0x000000, - 0x000000, 0x000000, 0x674d01, 0x000000, 0x000000, 0x000000, 0x000000, 0x674e02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x675001, 0x000000, 0x675102, 0x675301, - 0x000000, 0x675401, 0x675501, 0x000000, 0x000000, 0x000000, 0x675601, 0x000000, - 0x000000, 0x000000, 0x675702, 0x000000, 0x000000, 0x675902, 0x000000, 0x000000, - 0x675b03, 0x000000, 0x675e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x675f06, 0x676503, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x676801, 0x000000, - 0x000000, 0x676901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x676a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x676c08, 0x000000, 0x677401, 0x000000, 0x000000, 0x677501, 0x000000, - 0x677601, 0x000000, 0x000000, 0x677705, 0x677c01, 0x677d01, 0x000000, 0x000000, - 0x677e02, 0x000000, 0x678007, 0x678702, 0x678901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x678a02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x678c01, 0x000000, 0x000000, 0x678d02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x678f01, 0x000000, 0x679002, 0x679203, 0x000000, 0x000000, 0x000000, - 0x679501, 0x000000, 0x000000, 0x000000, 0x679605, 0x000000, 0x679b02, 0x679d01, - 0x000000, 0x000000, 0x000000, 0x679e05, 0x000000, 0x67a301, 0x000000, 0x67a404, - 0x67a815, 0x67bd01, 0x000000, 0x000000, 0x000000, 0x67be0c, 0x000000, 0x000000, - 0x000000, 0x67ca02, 0x000000, 0x000000, 0x67cc0f, 0x000000, 0x67db05, 0x000000, - 0x67e00a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x67ea01, - 0x000000, 0x67eb02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x67ed01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x67ee02, 0x67f002, 0x67f203, 0x67f502, - 0x000000, 0x000000, 0x000000, 0x67f704, 0x67fb01, 0x000000, 0x67fc06, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x680202, 0x000000, 0x680401, 0x000000, - 0x000000, 0x680502, 0x000000, 0x000000, 0x68070b, 0x681201, 0x000000, 0x000000, - 0x000000, 0x681302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x681501, 0x681603, 0x000000, 0x000000, 0x000000, - 0x681906, 0x000000, 0x000000, 0x681f07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x682607, 0x682d01, 0x682e0e, 0x000000, 0x000000, 0x000000, 0x683c01, 0x683d01, - 0x683e02, 0x000000, 0x684037, 0x000000, 0x000000, 0x000000, 0x000000, 0x687701, - 0x000000, 0x687802, 0x000000, 0x687a01, 0x687b01, 0x000000, 0x687c01, 0x687d01, - 0x687e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x687f03, 0x688201, 0x000000, - 0x000000, 0x000000, 0x68830d, 0x689005, 0x000000, 0x000000, 0x000000, 0x689501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x689602, 0x000000, 0x689801, - 0x689908, 0x000000, 0x68a101, 0x000000, 0x000000, 0x000000, 0x68a201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x68a301, 0x000000, 0x000000, 0x68a402, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x68a601, 0x000000, 0x68a701, - 0x68a801, 0x000000, 0x000000, 0x000000, 0x68a903, 0x000000, 0x68ac01, 0x68ad02, - 0x000000, 0x000000, 0x000000, 0x68af03, 0x000000, 0x000000, 0x68b201, 0x000000, - 0x68b301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x68b403, 0x000000, 0x000000, 0x68b701, 0x000000, 0x000000, - 0x68b803, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x68bb0d, 0x000000, 0x68c801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x68c901, 0x000000, 0x000000, 0x68ca02, 0x68cc05, 0x68d101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x68d20e, 0x000000, 0x000000, 0x68e002, - 0x000000, 0x68e201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x68e301, 0x000000, 0x68e404, 0x68e801, 0x000000, - 0x68e901, 0x000000, 0x68ea11, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x68fb02, 0x000000, 0x68fd04, 0x690101, 0x690207, 0x000000, - 0x000000, 0x000000, 0x000000, 0x690904, 0x690d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x690e01, 0x690f04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x69130b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x691e02, 0x692001, 0x692101, 0x692201, 0x692303, 0x692602, 0x000000, 0x000000, - 0x000000, 0x692801, 0x692903, 0x000000, 0x000000, 0x692c03, 0x000000, 0x000000, - 0x000000, 0x692f01, 0x000000, 0x000000, 0x693001, 0x693101, 0x000000, 0x000000, - 0x000000, 0x693201, 0x000000, 0x693301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x693404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x693806, 0x000000, 0x000000, 0x693e01, 0x000000, 0x000000, 0x693f02, 0x000000, - 0x000000, 0x000000, 0x69410a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x694b02, 0x000000, 0x694d05, 0x000000, 0x000000, 0x695202, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x695404, - 0x000000, 0x695801, 0x695902, 0x695b01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x695c01, 0x000000, 0x695d04, 0x000000, 0x696102, 0x000000, 0x696302, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x696504, 0x000000, - 0x696901, 0x696a03, 0x000000, 0x696d0d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x697a03, 0x697d01, 0x000000, 0x000000, 0x697e03, 0x698102, 0x698301, 0x698401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x698501, 0x698603, 0x698901, 0x000000, 0x698a06, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x699001, 0x000000, 0x000000, 0x000000, 0x699103, 0x000000, - 0x000000, 0x000000, 0x000000, 0x699401, 0x699501, 0x699603, 0x699902, 0x000000, - 0x000000, 0x699b01, 0x699c01, 0x000000, 0x000000, 0x000000, 0x699d04, 0x69a102, - 0x000000, 0x000000, 0x000000, 0x69a301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x69a401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x69a501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x69a602, 0x69a801, 0x000000, 0x69a901, 0x000000, 0x000000, - 0x000000, 0x69aa01, 0x69ab03, 0x000000, 0x69ae01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x69af02, 0x69b101, 0x69b202, 0x000000, 0x69b403, 0x000000, 0x69b705, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x69bc01, 0x000000, 0x000000, 0x69bd02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x69bf04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x69c302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x69c501, 0x000000, - 0x69c602, 0x000000, 0x000000, 0x000000, 0x69c801, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69c901, 0x000000, 0x69ca03, 0x69cd01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69ce01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x69cf02, 0x69d104, 0x000000, 0x69d501, 0x000000, 0x000000, 0x69d604, - 0x000000, 0x69da03, 0x69dd01, 0x000000, 0x000000, 0x000000, 0x69de02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69e001, 0x000000, 0x000000, 0x000000, 0x69e101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x69e201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x69e309, 0x69ec01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x69ed06, 0x000000, 0x000000, 0x69f302, 0x000000, 0x69f504, 0x000000, - 0x000000, 0x69f901, 0x69fa10, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6a0a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a0b01, 0x6a0c01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6a0d01, 0x6a0e01, 0x000000, 0x6a0f07, - 0x000000, 0x6a1605, 0x000000, 0x000000, 0x000000, 0x6a1b0b, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a260e, 0x000000, 0x6a3402, - 0x000000, 0x000000, 0x6a3602, 0x000000, 0x6a3802, 0x000000, 0x6a3a03, 0x000000, - 0x6a3d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a3f02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6a4101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6a4201, 0x000000, 0x000000, 0x6a4302, 0x000000, 0x000000, 0x6a4501, 0x000000, - 0x6a4602, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a4804, 0x000000, 0x000000, - 0x000000, 0x6a4c03, 0x000000, 0x000000, 0x6a4f03, 0x6a5201, 0x6a5302, 0x6a5501, - 0x6a5601, 0x000000, 0x6a5701, 0x000000, 0x6a5801, 0x6a5907, 0x000000, 0x000000, - 0x6a6002, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a6202, 0x000000, 0x6a6401, - 0x000000, 0x6a6501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6a6603, 0x000000, 0x6a6901, 0x6a6a07, 0x000000, 0x6a7101, 0x000000, 0x000000, - 0x000000, 0x6a7202, 0x000000, 0x6a7401, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6a7501, 0x6a7603, 0x6a7901, 0x000000, 0x000000, 0x000000, 0x6a7a08, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6a8209, 0x000000, - 0x6a8b02, 0x6a8d12, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6a9f01, 0x6aa004, 0x6aa401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6aa50a, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6aaf01, 0x6ab005, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6ab502, 0x000000, 0x6ab709, 0x000000, 0x6ac001, 0x000000, - 0x6ac101, 0x6ac201, 0x000000, 0x6ac308, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6acb08, 0x000000, 0x000000, 0x000000, 0x6ad302, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6ad501, 0x000000, 0x6ad604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6ada03, 0x000000, 0x000000, 0x6add01, 0x6ade02, 0x6ae004, - 0x000000, 0x000000, 0x000000, 0x6ae402, 0x000000, 0x6ae609, 0x000000, 0x6aef02, - 0x6af101, 0x000000, 0x000000, 0x6af211, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6b0301, 0x000000, 0x6b0407, 0x6b0b04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6b0f2d, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b3c03, 0x000000, 0x000000, 0x000000, 0x6b3f02, 0x000000, 0x000000, 0x000000, - 0x6b4101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b4201, 0x000000, 0x000000, 0x000000, 0x6b4301, 0x000000, 0x000000, 0x6b4404, - 0x000000, 0x6b4802, 0x6b4a02, 0x000000, 0x000000, 0x6b4c01, 0x000000, 0x6b4d01, - 0x000000, 0x6b4e06, 0x000000, 0x6b5405, 0x6b5902, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6b5b01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6b5c08, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b6401, 0x000000, 0x6b6508, 0x6b6d09, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6b7615, 0x6b8b01, 0x000000, 0x000000, 0x000000, 0x6b8c0c, 0x6b9801, 0x000000, - 0x000000, 0x000000, 0x6b9901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6b9a02, 0x000000, 0x000000, - 0x6b9c01, 0x6b9d01, 0x000000, 0x6b9e04, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6ba210, 0x000000, 0x000000, 0x6bb202, 0x000000, - 0x6bb401, 0x6bb501, 0x6bb602, 0x6bb801, 0x000000, 0x6bb901, 0x000000, 0x000000, - 0x6bba06, 0x6bc001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6bc102, - 0x000000, 0x000000, 0x6bc301, 0x6bc407, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6bcb04, 0x000000, 0x000000, 0x6bcf08, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6bd702, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6bd908, 0x000000, 0x000000, 0x000000, 0x6be102, - 0x000000, 0x000000, 0x6be30b, 0x000000, 0x000000, 0x000000, 0x6bee01, 0x000000, - 0x000000, 0x6bef02, 0x6bf102, 0x000000, 0x6bf302, 0x6bf505, 0x000000, 0x000000, - 0x000000, 0x6bfa01, 0x000000, 0x6bfb05, 0x6c0002, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6c0209, 0x6c0b01, 0x000000, 0x6c0c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6c0d02, 0x000000, 0x000000, - 0x6c0f01, 0x000000, 0x6c1004, 0x000000, 0x000000, 0x000000, 0x6c1402, 0x000000, - 0x6c1602, 0x000000, 0x000000, 0x000000, 0x6c1801, 0x6c1908, 0x000000, 0x000000, - 0x000000, 0x6c211d, 0x000000, 0x000000, 0x000000, 0x6c3e01, 0x000000, 0x6c3f01, - 0x6c4006, 0x6c4601, 0x6c4708, 0x000000, 0x000000, 0x6c4f01, 0x000000, 0x6c5002, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6c5201, 0x000000, 0x000000, 0x6c5301, 0x000000, 0x6c5405, 0x000000, - 0x6c5904, 0x000000, 0x000000, 0x000000, 0x6c5d01, 0x000000, 0x000000, 0x000000, - 0x6c5e01, 0x6c5f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6c6001, 0x6c6101, 0x000000, 0x000000, 0x000000, 0x6c6201, 0x6c6303, 0x6c6601, - 0x6c6710, 0x000000, 0x000000, 0x000000, 0x6c7702, 0x6c7904, 0x000000, 0x000000, - 0x000000, 0x6c7d01, 0x6c7e01, 0x000000, 0x6c7f01, 0x6c8004, 0x000000, 0x000000, - 0x6c8403, 0x000000, 0x6c8702, 0x000000, 0x6c8905, 0x000000, 0x000000, 0x6c8e01, - 0x000000, 0x6c8f01, 0x6c900b, 0x6c9b08, 0x000000, 0x6ca301, 0x6ca401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6ca50b, - 0x000000, 0x6cb002, 0x000000, 0x6cb201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6cb321, 0x6cd401, 0x6cd502, 0x000000, 0x000000, 0x000000, 0x6cd701, 0x000000, - 0x000000, 0x000000, 0x6cd813, 0x6ceb05, 0x000000, 0x6cf001, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6cf101, 0x000000, 0x6cf201, 0x000000, 0x000000, - 0x000000, 0x6cf305, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6cf801, - 0x6cf901, 0x000000, 0x000000, 0x6cfa02, 0x000000, 0x000000, 0x000000, 0x6cfc04, - 0x6d000f, 0x000000, 0x000000, 0x6d0f01, 0x000000, 0x000000, 0x6d1001, 0x000000, - 0x6d1109, 0x000000, 0x000000, 0x000000, 0x6d1a03, 0x6d1d07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6d2401, 0x000000, 0x6d2503, 0x000000, 0x6d2802, 0x000000, 0x6d2a07, 0x6d3106, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6d3703, 0x6d3a01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6d3b01, 0x6d3c02, - 0x000000, 0x000000, 0x000000, 0x6d3e02, 0x000000, 0x6d4006, 0x6d4601, 0x000000, - 0x6d4701, 0x6d4804, 0x000000, 0x6d4c02, 0x000000, 0x6d4e44, 0x6d9201, 0x6d9304, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6d9702, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6d9901, 0x6d9a02, 0x000000, 0x000000, - 0x6d9c02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6d9e03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6da103, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6da401, 0x6da502, - 0x6da701, 0x000000, 0x6da801, 0x000000, 0x000000, 0x6da901, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6daa03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6dad07, 0x000000, 0x000000, 0x000000, 0x000000, 0x6db401, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6db502, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6db702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6db907, 0x000000, 0x6dc011, 0x6dd101, - 0x6dd201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6dd302, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6dd50b, 0x000000, - 0x6de002, 0x000000, 0x6de204, 0x000000, 0x000000, 0x6de605, 0x000000, 0x000000, - 0x000000, 0x6deb01, 0x6dec05, 0x000000, 0x000000, 0x000000, 0x6df106, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6df703, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6dfa02, 0x6dfc04, 0x6e0005, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e0501, - 0x000000, 0x6e0605, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e0b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6e0c02, 0x000000, 0x000000, 0x6e0e03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6e110a, 0x6e1b02, 0x000000, 0x6e1d01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6e1e02, 0x000000, 0x6e200d, 0x6e2d01, 0x000000, 0x000000, - 0x6e2e02, 0x6e3002, 0x000000, 0x6e3202, 0x000000, 0x6e3402, 0x000000, 0x000000, - 0x000000, 0x6e3601, 0x6e3701, 0x6e3805, 0x000000, 0x6e3d01, 0x000000, 0x6e3e02, - 0x6e4001, 0x000000, 0x000000, 0x000000, 0x6e4101, 0x000000, 0x6e4202, 0x6e4403, - 0x6e4703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6e4a06, 0x000000, 0x6e5001, 0x000000, 0x000000, 0x6e5101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6e5202, 0x000000, 0x000000, 0x000000, - 0x6e5403, 0x000000, 0x000000, 0x000000, 0x6e5702, 0x6e5901, 0x000000, 0x6e5a01, - 0x6e5b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e5c01, - 0x000000, 0x000000, 0x6e5d01, 0x6e5e01, 0x000000, 0x000000, 0x6e5f02, 0x000000, - 0x000000, 0x6e6101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e6201, - 0x000000, 0x000000, 0x6e6301, 0x000000, 0x000000, 0x6e6401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6e6501, 0x6e6601, 0x000000, 0x000000, 0x6e6702, 0x000000, - 0x000000, 0x000000, 0x6e6902, 0x000000, 0x6e6b01, 0x6e6c01, 0x000000, 0x6e6d02, - 0x6e6f02, 0x6e7103, 0x000000, 0x6e7401, 0x6e7501, 0x000000, 0x000000, 0x000000, - 0x6e7601, 0x000000, 0x6e7701, 0x6e7802, 0x6e7a09, 0x000000, 0x6e8302, 0x000000, - 0x6e8503, 0x000000, 0x6e8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e8a01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e8b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6e8c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6e8d01, 0x6e8e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6e8f01, 0x000000, 0x000000, 0x6e9007, 0x000000, 0x6e9701, 0x000000, - 0x6e9801, 0x6e9901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x6e9a05, 0x000000, 0x000000, 0x000000, 0x6e9f01, 0x6ea007, 0x000000, 0x000000, - 0x6ea701, 0x000000, 0x000000, 0x000000, 0x6ea809, 0x6eb101, 0x000000, 0x6eb205, - 0x000000, 0x000000, 0x6eb703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6eba01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6ebb3f, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x6efa01, 0x000000, 0x6efb01, 0x6efc03, 0x000000, 0x6eff04, - 0x000000, 0x000000, 0x000000, 0x6f0301, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6f0402, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f0601, 0x000000, - 0x000000, 0x000000, 0x6f0704, 0x000000, 0x000000, 0x6f0b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6f0c02, 0x000000, 0x000000, 0x000000, 0x6f0e03, - 0x6f1118, 0x000000, 0x6f2906, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f2f01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6f3002, 0x000000, 0x6f3204, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6f3603, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6f3906, 0x000000, 0x6f3f01, 0x000000, 0x6f4004, 0x000000, 0x000000, - 0x6f4401, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f4502, 0x6f4701, 0x000000, - 0x000000, 0x6f4803, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f4b03, 0x000000, - 0x000000, 0x000000, 0x6f4e02, 0x000000, 0x6f5002, 0x000000, 0x6f5201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x6f5302, 0x000000, 0x000000, 0x6f5501, 0x6f5605, - 0x000000, 0x000000, 0x000000, 0x6f5b02, 0x000000, 0x000000, 0x000000, 0x6f5d02, - 0x000000, 0x000000, 0x6f5f01, 0x6f6001, 0x6f6107, 0x6f6805, 0x000000, 0x6f6d01, - 0x000000, 0x6f6e01, 0x6f6f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f7003, - 0x000000, 0x000000, 0x6f7305, 0x000000, 0x000000, 0x6f7801, 0x6f7901, 0x000000, - 0x000000, 0x000000, 0x6f7a09, 0x000000, 0x6f8305, 0x000000, 0x6f8801, 0x6f8906, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x6f8f03, 0x6f9201, 0x000000, 0x000000, - 0x6f9301, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9401, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9502, 0x6f9701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9801, 0x000000, 0x000000, - 0x000000, 0x6f9902, 0x000000, 0x6f9b01, 0x6f9c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6f9e01, 0x000000, 0x000000, 0x000000, 0x000000, 0x6f9f05, 0x6fa407, - 0x6fab01, 0x000000, 0x000000, 0x6fac01, 0x000000, 0x000000, 0x000000, 0x6fad05, - 0x6fb203, 0x000000, 0x6fb503, 0x000000, 0x000000, 0x6fb804, 0x000000, 0x000000, - 0x6fbc09, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fc501, 0x6fc604, 0x6fca01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fcb06, 0x000000, - 0x6fd102, 0x000000, 0x000000, 0x6fd303, 0x000000, 0x6fd601, 0x000000, 0x6fd703, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fda02, 0x000000, - 0x000000, 0x000000, 0x6fdc01, 0x6fdd01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x6fde04, 0x000000, 0x6fe209, 0x000000, 0x000000, 0x6feb0a, 0x000000, - 0x000000, 0x000000, 0x6ff508, 0x000000, 0x6ffd01, 0x6ffe01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x6fff01, - 0x700002, 0x700201, 0x70030f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x701204, 0x000000, 0x000000, 0x000000, 0x701601, 0x000000, - 0x000000, 0x000000, 0x701701, 0x000000, 0x701801, 0x701907, 0x000000, 0x702002, - 0x000000, 0x702201, 0x702302, 0x702501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x702611, 0x703708, 0x000000, 0x000000, 0x000000, - 0x703f01, 0x000000, 0x000000, 0x000000, 0x704001, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x704101, 0x000000, - 0x704202, 0x000000, 0x704401, 0x000000, 0x000000, 0x704503, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x704804, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x704c01, 0x704d02, 0x704f02, 0x705102, 0x705301, 0x000000, 0x705402, 0x000000, - 0x000000, 0x000000, 0x000000, 0x705601, 0x705702, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x705902, 0x000000, 0x000000, 0x000000, 0x705b02, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x705d01, 0x000000, - 0x705e01, 0x705f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x706001, 0x706101, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x706201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x706301, 0x000000, 0x706409, - 0x000000, 0x706d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x706f01, 0x000000, 0x707001, 0x000000, 0x707101, 0x000000, 0x000000, 0x000000, - 0x70720a, 0x000000, 0x000000, 0x000000, 0x707c02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x707e02, 0x000000, 0x000000, 0x708001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x708103, 0x000000, 0x708401, 0x000000, 0x000000, - 0x708501, 0x000000, 0x000000, 0x708601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x708702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x708902, 0x708b04, 0x000000, 0x000000, 0x708f03, 0x709202, 0x000000, - 0x000000, 0x709405, 0x000000, 0x709910, 0x000000, 0x000000, 0x000000, 0x70a90a, - 0x70b301, 0x000000, 0x000000, 0x70b401, 0x000000, 0x70b501, 0x70b602, 0x000000, - 0x000000, 0x000000, 0x70b801, 0x000000, 0x000000, 0x000000, 0x70b909, 0x000000, - 0x70c201, 0x70c301, 0x70c405, 0x000000, 0x000000, 0x000000, 0x70c906, 0x70cf02, - 0x70d108, 0x70d902, 0x70db03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x70de03, 0x000000, 0x000000, 0x000000, 0x70e101, 0x70e201, - 0x000000, 0x000000, 0x000000, 0x70e304, 0x000000, 0x000000, 0x70e702, 0x000000, - 0x70e901, 0x000000, 0x000000, 0x000000, 0x000000, 0x70ea01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x70eb02, 0x000000, 0x000000, 0x000000, - 0x70ed04, 0x000000, 0x70f101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x70f201, 0x70f303, 0x70f601, 0x000000, 0x000000, 0x70f701, - 0x000000, 0x70f803, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x70fb02, 0x000000, 0x000000, 0x000000, 0x000000, 0x70fd03, - 0x710001, 0x000000, 0x000000, 0x000000, 0x710106, 0x000000, 0x710703, 0x000000, - 0x710a03, 0x000000, 0x000000, 0x000000, 0x000000, 0x710d0e, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x711b0a, 0x000000, 0x000000, 0x000000, - 0x712501, 0x000000, 0x000000, 0x000000, 0x000000, 0x712601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x712703, - 0x000000, 0x712a04, 0x000000, 0x712e01, 0x712f06, 0x000000, 0x713501, 0x713601, - 0x000000, 0x000000, 0x713705, 0x713c07, 0x714301, 0x714401, 0x714501, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x714601, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x714701, 0x000000, 0x714808, 0x000000, 0x000000, - 0x000000, 0x715002, 0x000000, 0x000000, 0x71520a, 0x000000, 0x000000, 0x715c03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x715f01, 0x000000, 0x716001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x71610a, 0x000000, 0x000000, 0x000000, - 0x716b01, 0x000000, 0x000000, 0x000000, 0x716c01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x716d07, 0x000000, 0x717402, 0x000000, 0x717604, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x717a03, - 0x000000, 0x000000, 0x000000, 0x717d02, 0x717f06, 0x718508, 0x000000, 0x718d0c, - 0x719901, 0x000000, 0x000000, 0x000000, 0x719a01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x719b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x719c03, 0x719f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x71a107, 0x71a806, 0x000000, 0x000000, 0x000000, - 0x71ae02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x71b002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x71b202, - 0x000000, 0x71b406, 0x000000, 0x000000, 0x000000, 0x71ba05, 0x000000, 0x000000, - 0x71bf12, 0x000000, 0x000000, 0x71d102, 0x71d30c, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x71df08, 0x000000, - 0x71e70e, 0x71f502, 0x000000, 0x71f704, 0x000000, 0x000000, 0x71fb01, 0x000000, - 0x71fc2f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x722b01, 0x000000, 0x000000, 0x722c01, 0x000000, 0x000000, 0x722d04, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x723107, 0x000000, 0x000000, 0x000000, 0x723804, 0x000000, - 0x723c03, 0x000000, 0x723f02, 0x000000, 0x724106, 0x724718, 0x725f02, 0x000000, - 0x726103, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x726401, 0x000000, 0x000000, 0x726505, 0x726a01, 0x726b02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x726d01, 0x000000, 0x726e01, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x726f01, 0x727001, 0x727102, 0x727302, 0x000000, 0x727502, - 0x000000, 0x000000, 0x727703, 0x727a05, 0x000000, 0x727f0a, 0x000000, 0x000000, - 0x000000, 0x728901, 0x000000, 0x000000, 0x728a01, 0x000000, 0x000000, 0x728b02, - 0x728d02, 0x728f07, 0x000000, 0x729603, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x729901, 0x729a02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x729c02, 0x729e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x729f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x72a001, 0x000000, - 0x000000, 0x000000, 0x000000, 0x72a101, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x72a201, 0x72a301, 0x72a405, 0x000000, - 0x000000, 0x72a901, 0x000000, 0x000000, 0x72aa02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x72ac07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x72b301, 0x000000, 0x72b401, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x72b502, 0x000000, 0x000000, 0x72b70a, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x72c103, 0x000000, 0x72c405, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x72c903, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x72cc01, 0x000000, 0x000000, 0x000000, 0x72cd01, 0x000000, - 0x000000, 0x72ce06, 0x72d401, 0x000000, 0x72d50e, 0x72e302, 0x72e504, 0x72e901, - 0x72ea01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x72eb03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x72ee0c, 0x000000, 0x000000, 0x000000, 0x72fa02, 0x000000, 0x000000, 0x000000, - 0x72fc02, 0x000000, 0x000000, 0x72fe02, 0x000000, 0x730002, 0x000000, 0x000000, - 0x000000, 0x000000, 0x730203, 0x000000, 0x730504, 0x730902, 0x730b04, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x730f05, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x731403, 0x000000, 0x000000, 0x000000, 0x731704, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x731b05, - 0x000000, 0x73200d, 0x000000, 0x000000, 0x000000, 0x732d04, 0x000000, 0x000000, - 0x000000, 0x733101, 0x000000, 0x000000, 0x000000, 0x733201, 0x733305, 0x000000, - 0x000000, 0x733801, 0x000000, 0x000000, 0x000000, 0x733901, 0x000000, 0x733a03, - 0x000000, 0x733d03, 0x734004, 0x000000, 0x734401, 0x000000, 0x000000, 0x000000, - 0x734502, 0x000000, 0x000000, 0x000000, 0x734704, 0x000000, 0x000000, 0x000000, - 0x734b02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x734d01, 0x000000, 0x734e01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x734f01, 0x735008, 0x735801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x735901, 0x000000, 0x000000, 0x735a07, - 0x736102, 0x000000, 0x736302, 0x000000, 0x000000, 0x000000, 0x736501, 0x000000, - 0x736601, 0x736703, 0x736a01, 0x000000, 0x000000, 0x736b01, 0x000000, 0x000000, - 0x000000, 0x736c01, 0x000000, 0x000000, 0x000000, 0x736d02, 0x000000, 0x000000, - 0x736f06, 0x000000, 0x000000, 0x000000, 0x000000, 0x737503, 0x737801, 0x000000, - 0x737902, 0x737b01, 0x000000, 0x000000, 0x737c01, 0x000000, 0x000000, 0x737d0c, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x738906, 0x738f02, 0x739105, 0x739602, 0x000000, 0x000000, - 0x000000, 0x000000, 0x739801, 0x739903, 0x000000, 0x000000, 0x739c10, 0x000000, - 0x000000, 0x73ac01, 0x000000, 0x73ad01, 0x000000, 0x73ae01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x73af01, 0x73b008, 0x000000, 0x000000, 0x73b807, 0x000000, - 0x000000, 0x000000, 0x73bf01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x73c001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x73c101, 0x73c202, 0x73c401, 0x000000, 0x73c503, 0x000000, 0x73c802, 0x73ca01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73cb01, 0x000000, - 0x73cc04, 0x000000, 0x73d001, 0x000000, 0x000000, 0x000000, 0x73d103, 0x000000, - 0x73d403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73d703, - 0x73da01, 0x000000, 0x000000, 0x73db01, 0x000000, 0x000000, 0x000000, 0x73dc03, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73df07, 0x000000, 0x000000, - 0x000000, 0x73e602, 0x73e802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x73ea02, 0x000000, 0x73ec02, 0x73ee05, 0x000000, 0x000000, - 0x73f301, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x73f402, 0x000000, - 0x000000, 0x000000, 0x73f601, 0x000000, 0x000000, 0x000000, 0x73f701, 0x000000, - 0x73f801, 0x73f90a, 0x740301, 0x000000, 0x740401, 0x000000, 0x000000, 0x000000, - 0x740504, 0x000000, 0x74090e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x741701, 0x000000, 0x741806, 0x000000, 0x741e06, 0x000000, - 0x742401, 0x742510, 0x000000, 0x74350b, 0x744002, 0x000000, 0x744201, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x744301, 0x000000, 0x000000, 0x744406, - 0x000000, 0x000000, 0x000000, 0x744a01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x744b01, 0x000000, 0x000000, 0x000000, 0x744c01, 0x744d01, 0x744e2f, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x747d02, 0x000000, 0x000000, 0x000000, 0x747f01, 0x000000, - 0x748002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x748202, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x748403, - 0x000000, 0x748702, 0x748901, 0x000000, 0x000000, 0x748a02, 0x000000, 0x000000, - 0x748c01, 0x748d05, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x749201, 0x000000, 0x000000, 0x000000, - 0x000000, 0x749301, 0x749404, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x749814, 0x000000, 0x000000, 0x74ac03, - 0x74af12, 0x74c10f, 0x74d002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x74d20e, 0x74e001, 0x000000, 0x74e101, 0x000000, 0x000000, 0x74e203, 0x74e512, - 0x74f702, 0x74f901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x74fa01, 0x74fb03, 0x000000, 0x000000, 0x000000, 0x74fe02, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x750003, 0x000000, 0x000000, 0x750301, - 0x000000, 0x750405, 0x000000, 0x000000, 0x750909, 0x000000, 0x000000, 0x000000, - 0x000000, 0x751201, 0x000000, 0x000000, 0x000000, 0x751306, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x751901, 0x000000, 0x751a0d, 0x75270f, 0x753601, - 0x753702, 0x753903, 0x000000, 0x000000, 0x000000, 0x753c01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x753d02, 0x753f01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x754006, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x754608, 0x754e02, 0x000000, - 0x000000, 0x755001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x755104, 0x000000, 0x755501, 0x000000, - 0x755601, 0x000000, 0x75571b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x757201, 0x757301, 0x000000, 0x000000, 0x000000, 0x757403, 0x000000, - 0x757701, 0x000000, 0x000000, 0x000000, 0x757802, 0x000000, 0x000000, 0x000000, - 0x000000, 0x757a04, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x757e01, 0x000000, 0x000000, 0x757f02, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x758102, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x758306, 0x758901, 0x000000, - 0x000000, 0x758a07, 0x000000, 0x000000, 0x000000, 0x000000, 0x759114, 0x75a501, - 0x000000, 0x75a602, 0x000000, 0x75a809, 0x75b101, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x75b201, 0x75b301, 0x75b402, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x75b601, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x75b701, - 0x000000, 0x000000, 0x75b801, 0x75b901, 0x000000, 0x000000, 0x000000, 0x75ba07, - 0x75c101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x75c201, 0x000000, - 0x000000, 0x75c303, 0x75c611, 0x000000, 0x000000, 0x000000, 0x75d704, 0x000000, - 0x75db01, 0x75dc07, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x75e301, 0x75e40b, 0x000000, 0x75ef02, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x75f102, 0x75f303, 0x000000, - 0x000000, 0x75f603, 0x000000, 0x000000, 0x75f901, 0x000000, 0x000000, 0x000000, - 0x000000, 0x75fa0a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x760403, 0x000000, 0x000000, 0x000000, - 0x760701, 0x000000, 0x000000, 0x760801, 0x000000, 0x000000, 0x000000, 0x760901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x760a01, 0x000000, 0x760b02, 0x000000, - 0x760d05, 0x761204, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x761602, - 0x000000, 0x000000, 0x761802, 0x761a03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x761d02, 0x000000, 0x761f03, 0x762202, 0x762405, 0x000000, 0x762902, 0x762b11, - 0x000000, 0x000000, 0x000000, 0x763c02, 0x000000, 0x000000, 0x763e01, 0x763f06, - 0x000000, 0x000000, 0x000000, 0x764502, 0x764702, 0x000000, 0x000000, 0x764902, - 0x000000, 0x764b0a, 0x000000, 0x765501, 0x000000, 0x000000, 0x000000, 0x000000, - 0x765601, 0x765702, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x765901, - 0x765a03, 0x765d02, 0x765f02, 0x76610a, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x766b01, 0x766c01, 0x000000, 0x000000, 0x000000, 0x766d01, - 0x000000, 0x000000, 0x000000, 0x766e01, 0x000000, 0x766f02, 0x767104, 0x767501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x767605, 0x000000, 0x767b10, - 0x768b01, 0x768c07, 0x000000, 0x000000, 0x769301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x769401, 0x000000, 0x769501, - 0x000000, 0x769601, 0x769705, 0x000000, 0x000000, 0x769c01, 0x769d0c, 0x76a901, - 0x000000, 0x000000, 0x000000, 0x000000, 0x76aa02, 0x000000, 0x000000, 0x76ac04, - 0x000000, 0x76b003, 0x000000, 0x76b309, 0x76bc04, 0x000000, 0x000000, 0x000000, - 0x76c002, 0x000000, 0x000000, 0x000000, 0x000000, 0x76c201, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x76c301, 0x000000, 0x000000, 0x76c401, 0x000000, - 0x76c502, 0x76c701, 0x000000, 0x76c801, 0x000000, 0x76c907, 0x000000, 0x000000, - 0x000000, 0x76d001, 0x000000, 0x000000, 0x76d101, 0x76d201, 0x000000, 0x76d304, - 0x000000, 0x76d703, 0x000000, 0x000000, 0x000000, 0x76da03, 0x76dd02, 0x76df01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x76e003, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x76e301, 0x000000, 0x76e401, 0x76e503, 0x000000, - 0x76e801, 0x76e903, 0x000000, 0x000000, 0x000000, 0x76ec07, 0x000000, 0x000000, - 0x000000, 0x000000, 0x76f304, 0x76f701, 0x76f801, 0x000000, 0x000000, 0x000000, - 0x76f906, 0x000000, 0x76ff03, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x770202, 0x000000, 0x770408, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x770c07, 0x000000, 0x000000, 0x771301, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x771401, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x771501, 0x77160a, 0x772001, 0x772107, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x772803, 0x000000, - 0x772b01, 0x000000, 0x000000, 0x000000, 0x772c01, 0x772d04, 0x000000, 0x773102, - 0x773307, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x773a01, 0x000000, 0x773b01, 0x000000, - 0x773c0c, 0x000000, 0x000000, 0x000000, 0x000000, 0x774801, 0x000000, 0x000000, - 0x77490f, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x775802, 0x000000, - 0x000000, 0x775a01, 0x775b02, 0x775d01, 0x775e01, 0x775f01, 0x000000, 0x000000, - 0x776001, 0x000000, 0x776101, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x776207, 0x776901, 0x776a0f, 0x000000, 0x777901, - 0x777a03, 0x000000, 0x000000, 0x777d04, 0x000000, 0x000000, 0x778111, 0x000000, - 0x000000, 0x000000, 0x000000, 0x779201, 0x77930b, 0x779e0b, 0x77a902, 0x000000, - 0x000000, 0x77ab04, 0x77af0f, 0x77be01, 0x77bf01, 0x000000, 0x77c001, 0x000000, - 0x000000, 0x77c10b, 0x77cc01, 0x000000, 0x77cd06, 0x000000, 0x77d302, 0x77d501, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x77d610, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x77e603, 0x000000, 0x000000, 0x77e902, 0x000000, - 0x000000, 0x000000, 0x000000, 0x77eb01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x77ec01, 0x000000, 0x77ed01, 0x77ee04, 0x000000, 0x000000, 0x000000, 0x000000, - 0x77f202, 0x000000, 0x000000, 0x000000, 0x77f401, 0x000000, 0x000000, 0x77f509, - 0x77fe0a, 0x780802, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x780a02, 0x000000, 0x000000, 0x780c01, 0x000000, - 0x000000, 0x000000, 0x780d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x780f01, 0x781003, 0x000000, 0x000000, 0x000000, 0x781303, 0x000000, 0x000000, - 0x000000, 0x781603, 0x000000, 0x781901, 0x000000, 0x781a01, 0x781b03, 0x000000, - 0x000000, 0x781e01, 0x781f01, 0x782001, 0x000000, 0x000000, 0x000000, 0x782106, - 0x000000, 0x000000, 0x782703, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x782a01, 0x000000, 0x782b02, 0x000000, 0x000000, 0x782d03, - 0x000000, 0x783001, 0x783101, 0x783203, 0x783503, 0x783802, 0x000000, 0x000000, - 0x783a01, 0x783b01, 0x783c09, 0x000000, 0x000000, 0x000000, 0x000000, 0x784502, - 0x000000, 0x000000, 0x000000, 0x784712, 0x000000, 0x000000, 0x000000, 0x000000, - 0x785902, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x785b07, 0x786204, 0x000000, 0x000000, 0x786601, 0x786701, 0x000000, 0x786802, - 0x000000, 0x786a01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x786b02, 0x000000, 0x000000, 0x786d04, 0x000000, 0x000000, 0x000000, 0x787101, - 0x000000, 0x787202, 0x000000, 0x787401, 0x787507, 0x000000, 0x787c01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x787d01, 0x787e02, 0x000000, 0x000000, - 0x788002, 0x000000, 0x788201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x788306, 0x788901, 0x000000, 0x000000, 0x788a06, 0x000000, 0x789001, 0x000000, - 0x000000, 0x789102, 0x000000, 0x000000, 0x789301, 0x000000, 0x000000, 0x78940c, - 0x000000, 0x000000, 0x000000, 0x78a002, 0x78a206, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x78a802, 0x000000, 0x78aa03, 0x000000, 0x000000, 0x000000, - 0x000000, 0x78ad01, 0x000000, 0x78ae02, 0x000000, 0x78b001, 0x000000, 0x78b106, - 0x000000, 0x000000, 0x000000, 0x78b702, 0x78b903, 0x000000, 0x78bc01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x78bd05, 0x000000, 0x000000, - 0x000000, 0x78c212, 0x78d409, 0x78dd01, 0x000000, 0x000000, 0x000000, 0x000000, - 0x78de02, 0x000000, 0x000000, 0x78e001, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x78e101, 0x000000, 0x000000, 0x78e208, 0x000000, 0x000000, - 0x78ea01, 0x78eb04, 0x000000, 0x000000, 0x78ef01, 0x000000, 0x000000, 0x78f001, - 0x78f104, 0x78f503, 0x000000, 0x000000, 0x78f805, 0x78fd02, 0x000000, 0x000000, - 0x000000, 0x78ff01, 0x000000, 0x000000, 0x790001, 0x000000, 0x790104, 0x79050c, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x791101, - 0x791203, 0x791502, 0x000000, 0x791701, 0x000000, 0x000000, 0x791802, 0x000000, - 0x000000, 0x791a02, 0x791c01, 0x000000, 0x000000, 0x791d05, 0x792203, 0x000000, - 0x000000, 0x792502, 0x000000, 0x792702, 0x000000, 0x000000, 0x000000, 0x000000, - 0x792902, 0x000000, 0x000000, 0x792b03, 0x792e01, 0x792f01, 0x793002, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x793201, 0x793301, 0x793403, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x793704, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x793b01, 0x793c01, 0x793d03, 0x000000, 0x000000, 0x000000, - 0x794002, 0x794202, 0x794402, 0x000000, 0x794601, 0x000000, 0x000000, 0x000000, - 0x794701, 0x000000, 0x794804, 0x000000, 0x000000, 0x000000, 0x794c01, 0x794d01, - 0x794e08, 0x000000, 0x000000, 0x795603, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x795902, 0x000000, 0x795b03, 0x795e01, 0x000000, 0x000000, 0x000000, - 0x795f01, 0x796002, 0x000000, 0x000000, 0x000000, 0x000000, 0x796201, 0x000000, - 0x000000, 0x796301, 0x000000, 0x000000, 0x000000, 0x796402, 0x796601, 0x000000, - 0x796707, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x796e37, 0x000000, 0x79a502, 0x000000, 0x79a701, - 0x000000, 0x000000, 0x79a801, 0x79a901, 0x79aa02, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x79ac02, 0x000000, 0x79ae01, 0x79af0a, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x79b909, 0x79c203, - 0x79c501, 0x79c601, 0x000000, 0x000000, 0x000000, 0x79c703, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x79ca07, 0x000000, 0x000000, - 0x000000, 0x79d106, 0x000000, 0x000000, 0x000000, 0x79d703, 0x79da01, 0x000000, - 0x000000, 0x79db02, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x79dd01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x79de06, 0x000000, 0x000000, 0x000000, 0x79e406, 0x000000, 0x000000, 0x000000, - 0x000000, 0x79ea04, 0x79ee10, 0x000000, 0x000000, 0x000000, 0x000000, 0x79fe01, - 0x000000, 0x79ff01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7a0003, 0x7a0311, 0x7a1401, 0x000000, - 0x7a1501, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a1602, - 0x000000, 0x000000, 0x7a1801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7a1901, 0x7a1a01, 0x000000, 0x000000, - 0x7a1b01, 0x000000, 0x7a1c01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a1d01, 0x7a1e01, 0x000000, 0x000000, 0x7a1f02, 0x000000, 0x7a2101, 0x000000, - 0x7a220e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a3001, 0x000000, - 0x7a3102, 0x000000, 0x7a3301, 0x000000, 0x000000, 0x7a3402, 0x7a3601, 0x7a3702, - 0x000000, 0x000000, 0x7a3902, 0x000000, 0x000000, 0x000000, 0x7a3b03, 0x7a3e04, - 0x000000, 0x7a4201, 0x000000, 0x7a4302, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7a4501, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a4601, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a4701, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x7a4803, 0x7a4b01, 0x7a4c06, 0x7a5202, 0x000000, - 0x7a5406, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a5a01, 0x000000, - 0x7a5b01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a5c02, 0x7a5e04, - 0x000000, 0x000000, 0x7a6202, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a6403, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a6701, 0x000000, - 0x000000, 0x7a6801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a6901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a6a03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a6d03, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7a7002, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x7a7201, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7a7302, 0x000000, 0x000000, 0x7a7501, 0x7a7601, 0x000000, - 0x7a7702, 0x000000, 0x000000, 0x7a7901, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7a7a01, 0x000000, 0x000000, 0x7a7b07, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a8209, 0x000000, - 0x7a8b01, 0x000000, 0x000000, 0x7a8c03, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7a8f0c, 0x000000, 0x7a9b01, - 0x000000, 0x7a9c03, 0x000000, 0x7a9f09, 0x000000, 0x7aa804, 0x000000, 0x7aac02, - 0x7aae01, 0x7aaf01, 0x000000, 0x7ab004, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7ab402, 0x7ab601, 0x000000, 0x000000, 0x000000, 0x7ab702, - 0x7ab904, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7abd01, - 0x7abe01, 0x000000, 0x000000, 0x7abf01, 0x000000, 0x7ac007, 0x7ac701, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7ac801, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7ac901, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7aca03, 0x000000, 0x000000, 0x000000, 0x000000, 0x7acd04, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7ad102, 0x000000, 0x7ad304, 0x000000, 0x7ad703, 0x000000, 0x000000, 0x7ada01, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7adb09, 0x000000, 0x7ae404, 0x7ae801, - 0x000000, 0x000000, 0x7ae901, 0x000000, 0x000000, 0x7aea01, 0x000000, 0x000000, - 0x7aeb01, 0x000000, 0x000000, 0x000000, 0x7aec04, 0x7af003, 0x000000, 0x7af30d, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7b0001, 0x7b0102, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b0301, 0x7b0401, 0x7b0507, - 0x000000, 0x000000, 0x000000, 0x000000, 0x7b0c03, 0x7b0f01, 0x7b1004, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7b1401, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b1501, 0x000000, 0x000000, - 0x7b1602, 0x000000, 0x000000, 0x7b1801, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b1908, 0x000000, 0x7b210e, - 0x7b2f03, 0x7b3201, 0x7b3301, 0x000000, 0x7b3405, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x7b3907, 0x7b4006, 0x7b4601, 0x000000, 0x000000, - 0x000000, 0x7b4701, 0x7b4801, 0x7b4902, 0x000000, 0x000000, 0x7b4b03, 0x7b4e02, - 0x000000, 0x7b5001, 0x000000, 0x000000, 0x000000, 0x7b5101, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7b5201, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7b5302, 0x7b5506, 0x7b5b01, 0x7b5c01, 0x000000, 0x000000, 0x7b5d02, - 0x7b5f01, 0x7b6001, 0x7b6109, 0x7b6a01, 0x000000, 0x7b6b01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7b6c02, 0x000000, 0x7b6e01, 0x000000, 0x7b6f01, 0x7b7002, - 0x000000, 0x000000, 0x7b7201, 0x7b7304, 0x000000, 0x000000, 0x7b7702, 0x7b7901, - 0x000000, 0x000000, 0x000000, 0x7b7a04, 0x000000, 0x7b7e01, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7b7f01, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x7b8001, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b8103, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b8401, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7b8503, 0x7b8802, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b8a0e, 0x000000, - 0x7b9801, 0x000000, 0x000000, 0x7b9901, 0x000000, 0x000000, 0x7b9a01, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x7b9b02, 0x000000, 0x7b9d02, 0x000000, 0x000000, 0x000000, 0x000000, 0x7b9f04, - 0x000000, 0x000000, 0x000000, 0x7ba305, 0x000000, 0x000000, 0x000000, 0x7ba813, - 0x000000, 0x000000, 0x7bbb0d, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x7bc802, 0x7bca01, 0x7bcb02, 0x000000, 0x7bcd02, 0x000000, - 0x000000, 0x000000, 0x7bcf06, 0x000000, 0x7bd501, 0x000000, 0x7bd602, 0x000000, -}; +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#include "static_dict_lut2.h" -} // namespace brotli - -#endif // BROTLI_ENC_DICTIONARY_LUT_H_ +#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */
diff --git a/third_party/brotli/enc/static_dict_lut2.h b/third_party/brotli/enc/static_dict_lut2.h deleted file mode 100644 index 4bdb9df..0000000 --- a/third_party/brotli/enc/static_dict_lut2.h +++ /dev/null
@@ -1,7934 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -static const DictWord kStaticDictionaryWords[] = { - { 8, 0, 1002 }, { 8, 0, 1015 }, { 4, 0, 683 }, { 4, 10, 325 }, - { 10, 10, 125 }, { 7, 11, 572 }, { 9, 11, 592 }, { 11, 11, 680 }, - { 11, 11, 842 }, { 11, 11, 924 }, { 12, 11, 356 }, { 12, 11, 550 }, - { 13, 11, 317 }, { 13, 11, 370 }, { 13, 11, 469 }, { 13, 11, 471 }, - { 14, 11, 397 }, { 18, 11, 69 }, { 18, 11, 145 }, { 6, 0, 1265 }, - { 8, 11, 534 }, { 6, 0, 1431 }, { 11, 0, 138 }, { 12, 0, 40 }, - { 4, 0, 155 }, { 7, 0, 1689 }, { 4, 10, 718 }, { 7, 10, 1216 }, - { 4, 0, 245 }, { 5, 0, 151 }, { 5, 0, 741 }, { 6, 0, 1147 }, - { 7, 0, 498 }, { 7, 0, 870 }, { 7, 0, 1542 }, { 12, 0, 213 }, - { 14, 0, 36 }, { 14, 0, 391 }, { 17, 0, 111 }, { 18, 0, 6 }, - { 18, 0, 46 }, { 18, 0, 151 }, { 19, 0, 36 }, { 20, 0, 32 }, - { 20, 0, 56 }, { 20, 0, 69 }, { 20, 0, 102 }, { 21, 0, 4 }, - { 22, 0, 8 }, { 22, 0, 10 }, { 22, 0, 14 }, { 22, 0, 31 }, - { 4, 0, 624 }, { 7, 0, 1752 }, { 5, 10, 124 }, { 5, 10, 144 }, - { 6, 10, 548 }, { 7, 10, 15 }, { 7, 10, 153 }, { 9, 10, 629 }, - { 6, 0, 503 }, { 9, 0, 586 }, { 13, 0, 468 }, { 14, 0, 66 }, - { 16, 0, 58 }, { 7, 10, 1531 }, { 8, 10, 416 }, { 9, 10, 275 }, - { 10, 10, 100 }, { 11, 10, 658 }, { 11, 10, 979 }, { 12, 10, 86 }, - { 14, 10, 207 }, { 15, 10, 20 }, { 15, 10, 25 }, { 5, 0, 603 }, - { 7, 0, 1212 }, { 9, 0, 565 }, { 14, 0, 301 }, { 5, 10, 915 }, - { 6, 10, 1783 }, { 7, 10, 211 }, { 7, 10, 1353 }, { 9, 10, 83 }, - { 10, 10, 376 }, { 10, 10, 431 }, { 11, 10, 543 }, { 12, 10, 664 }, - { 13, 10, 280 }, { 13, 10, 428 }, { 14, 10, 128 }, { 17, 10, 52 }, - { 17, 10, 81 }, { 4, 0, 492 }, { 5, 0, 451 }, { 7, 0, 835 }, - { 13, 0, 70 }, { 4, 0, 539 }, { 7, 11, 748 }, { 11, 11, 700 }, - { 7, 11, 1517 }, { 11, 11, 597 }, { 14, 11, 76 }, { 14, 11, 335 }, - { 20, 11, 33 }, { 6, 0, 113 }, { 7, 0, 436 }, { 4, 10, 338 }, - { 5, 10, 400 }, { 8, 0, 718 }, { 5, 11, 127 }, { 5, 11, 418 }, - { 6, 0, 1505 }, { 7, 0, 520 }, { 6, 11, 198 }, { 11, 10, 892 }, - { 12, 11, 83 }, { 4, 10, 221 }, { 5, 10, 659 }, { 5, 10, 989 }, - { 7, 10, 697 }, { 7, 10, 1211 }, { 10, 10, 284 }, { 7, 0, 1070 }, - { 5, 11, 276 }, { 6, 11, 55 }, { 7, 11, 1369 }, { 6, 0, 1515 }, - { 6, 11, 1752 }, { 8, 11, 726 }, { 10, 10, 507 }, { 15, 0, 78 }, - { 4, 10, 188 }, { 7, 10, 805 }, { 5, 10, 884 }, { 11, 10, 991 }, - { 5, 11, 764 }, { 6, 10, 1653 }, { 6, 11, 309 }, { 7, 11, 331 }, - { 10, 11, 550 }, { 7, 11, 1861 }, { 4, 11, 348 }, { 7, 11, 986 }, - { 7, 11, 1573 }, { 12, 0, 610 }, { 13, 0, 431 }, { 16, 0, 59 }, - { 9, 11, 799 }, { 12, 10, 166 }, { 6, 0, 1530 }, { 4, 0, 750 }, - { 4, 0, 307 }, { 5, 0, 964 }, { 6, 11, 194 }, { 7, 11, 133 }, - { 10, 11, 493 }, { 10, 11, 570 }, { 11, 11, 664 }, { 5, 11, 24 }, - { 5, 11, 569 }, { 6, 11, 3 }, { 6, 11, 119 }, { 6, 11, 143 }, - { 6, 11, 440 }, { 7, 11, 295 }, { 7, 11, 599 }, { 7, 11, 1686 }, - { 7, 11, 1854 }, { 8, 11, 424 }, { 9, 11, 43 }, { 9, 11, 584 }, - { 9, 11, 760 }, { 10, 11, 148 }, { 10, 11, 328 }, { 11, 11, 159 }, - { 11, 11, 253 }, { 11, 11, 506 }, { 12, 11, 487 }, { 12, 11, 531 }, - { 16, 11, 33 }, { 8, 10, 760 }, { 5, 11, 14 }, { 5, 11, 892 }, - { 6, 11, 283 }, { 7, 11, 234 }, { 8, 11, 537 }, { 7, 11, 1251 }, - { 4, 11, 126 }, { 8, 11, 635 }, { 19, 11, 34 }, { 4, 11, 316 }, - { 7, 11, 1561 }, { 6, 0, 999 }, { 6, 0, 1310 }, { 9, 11, 861 }, - { 4, 11, 64 }, { 5, 11, 352 }, { 5, 11, 720 }, { 6, 11, 368 }, - { 11, 11, 359 }, { 4, 0, 75 }, { 5, 0, 180 }, { 6, 0, 500 }, - { 7, 0, 58 }, { 7, 0, 710 }, { 10, 0, 645 }, { 8, 10, 770 }, - { 5, 0, 649 }, { 6, 0, 276 }, { 7, 0, 282 }, { 7, 0, 879 }, - { 7, 0, 924 }, { 8, 0, 459 }, { 9, 0, 599 }, { 9, 0, 754 }, - { 11, 0, 574 }, { 12, 0, 128 }, { 12, 0, 494 }, { 13, 0, 52 }, - { 13, 0, 301 }, { 15, 0, 30 }, { 15, 0, 132 }, { 4, 0, 200 }, - { 4, 10, 89 }, { 5, 10, 489 }, { 6, 10, 315 }, { 7, 10, 553 }, - { 7, 10, 1745 }, { 10, 10, 243 }, { 7, 11, 1050 }, { 7, 0, 1621 }, - { 6, 10, 1658 }, { 9, 10, 3 }, { 10, 10, 154 }, { 11, 10, 641 }, - { 13, 10, 85 }, { 13, 10, 201 }, { 13, 10, 346 }, { 6, 11, 175 }, - { 9, 11, 289 }, { 5, 11, 432 }, { 5, 11, 913 }, { 6, 0, 225 }, - { 9, 0, 211 }, { 7, 0, 718 }, { 8, 0, 687 }, { 11, 0, 374 }, - { 4, 10, 166 }, { 5, 10, 505 }, { 9, 0, 110 }, { 6, 10, 1670 }, - { 8, 0, 58 }, { 9, 0, 724 }, { 11, 0, 809 }, { 13, 0, 113 }, - { 17, 0, 72 }, { 6, 0, 345 }, { 7, 0, 1247 }, { 16, 11, 82 }, - { 5, 11, 931 }, { 6, 11, 1698 }, { 8, 0, 767 }, { 8, 0, 803 }, - { 9, 0, 301 }, { 9, 0, 903 }, { 11, 0, 203 }, { 6, 0, 1154 }, - { 7, 0, 1949 }, { 8, 0, 674 }, { 6, 0, 259 }, { 7, 0, 1275 }, - { 5, 11, 774 }, { 6, 11, 1637 }, { 6, 11, 1686 }, { 6, 11, 1751 }, - { 6, 0, 1231 }, { 7, 10, 445 }, { 8, 10, 307 }, { 8, 10, 704 }, - { 10, 10, 41 }, { 10, 10, 439 }, { 11, 10, 237 }, { 11, 10, 622 }, - { 12, 10, 201 }, { 8, 0, 254 }, { 6, 11, 260 }, { 7, 11, 1484 }, - { 11, 0, 277 }, { 7, 10, 1977 }, { 4, 10, 189 }, { 5, 10, 713 }, - { 6, 11, 573 }, { 8, 10, 57 }, { 10, 10, 371 }, { 4, 10, 552 }, - { 6, 11, 344 }, { 5, 0, 248 }, { 9, 0, 800 }, { 10, 0, 693 }, - { 11, 0, 482 }, { 11, 0, 734 }, { 11, 0, 789 }, { 6, 11, 240 }, - { 4, 0, 116 }, { 5, 0, 95 }, { 5, 0, 445 }, { 7, 0, 1688 }, - { 8, 0, 29 }, { 9, 0, 272 }, { 11, 0, 509 }, { 11, 0, 915 }, - { 4, 11, 292 }, { 4, 11, 736 }, { 5, 11, 871 }, { 6, 11, 171 }, - { 6, 11, 1689 }, { 7, 11, 1324 }, { 7, 11, 1944 }, { 9, 11, 415 }, - { 9, 11, 580 }, { 14, 11, 230 }, { 18, 11, 68 }, { 7, 0, 490 }, - { 13, 0, 100 }, { 15, 0, 75 }, { 7, 0, 1641 }, { 5, 0, 543 }, - { 7, 11, 209 }, { 8, 11, 661 }, { 10, 11, 42 }, { 11, 11, 58 }, - { 12, 11, 58 }, { 12, 11, 118 }, { 13, 11, 32 }, { 5, 0, 181 }, - { 8, 0, 41 }, { 6, 11, 63 }, { 7, 11, 920 }, { 5, 0, 657 }, - { 5, 11, 793 }, { 10, 0, 709 }, { 7, 0, 25 }, { 8, 0, 202 }, - { 10, 0, 536 }, { 5, 11, 665 }, { 7, 10, 1788 }, { 17, 10, 49 }, - { 9, 0, 423 }, { 12, 0, 89 }, { 5, 11, 67 }, { 6, 11, 62 }, - { 6, 11, 374 }, { 7, 11, 1391 }, { 8, 0, 113 }, { 9, 0, 877 }, - { 10, 0, 554 }, { 11, 0, 83 }, { 12, 0, 136 }, { 19, 0, 109 }, - { 9, 11, 790 }, { 12, 11, 47 }, { 10, 10, 661 }, { 4, 0, 963 }, - { 10, 0, 927 }, { 14, 0, 442 }, { 7, 10, 1945 }, { 5, 0, 976 }, - { 4, 0, 206 }, { 4, 11, 391 }, { 7, 11, 1169 }, { 6, 0, 2002 }, - { 6, 0, 696 }, { 6, 0, 1008 }, { 6, 0, 1170 }, { 4, 11, 271 }, - { 7, 0, 13 }, { 8, 0, 226 }, { 10, 0, 537 }, { 11, 0, 570 }, - { 11, 0, 605 }, { 11, 0, 799 }, { 11, 0, 804 }, { 12, 0, 85 }, - { 12, 0, 516 }, { 12, 0, 623 }, { 13, 0, 112 }, { 13, 0, 361 }, - { 14, 0, 77 }, { 14, 0, 78 }, { 17, 0, 28 }, { 19, 0, 110 }, - { 12, 11, 314 }, { 4, 0, 769 }, { 6, 0, 1544 }, { 4, 0, 551 }, - { 9, 0, 678 }, { 5, 10, 84 }, { 6, 10, 163 }, { 9, 0, 57 }, - { 9, 0, 459 }, { 10, 0, 425 }, { 11, 0, 119 }, { 12, 0, 184 }, - { 12, 0, 371 }, { 13, 0, 358 }, { 17, 0, 51 }, { 5, 0, 188 }, - { 5, 0, 814 }, { 8, 0, 10 }, { 9, 0, 421 }, { 9, 0, 729 }, - { 10, 0, 609 }, { 11, 0, 689 }, { 4, 11, 253 }, { 5, 10, 410 }, - { 5, 11, 544 }, { 7, 11, 300 }, { 9, 11, 340 }, { 6, 0, 624 }, - { 10, 11, 321 }, { 7, 0, 1941 }, { 18, 0, 130 }, { 5, 10, 322 }, - { 8, 10, 186 }, { 9, 10, 262 }, { 10, 10, 187 }, { 14, 10, 208 }, - { 5, 11, 53 }, { 5, 11, 541 }, { 6, 11, 94 }, { 6, 11, 499 }, - { 7, 11, 230 }, { 11, 11, 321 }, { 5, 10, 227 }, { 4, 0, 378 }, - { 4, 11, 920 }, { 5, 11, 25 }, { 5, 11, 790 }, { 6, 11, 457 }, - { 7, 11, 853 }, { 9, 0, 269 }, { 4, 0, 528 }, { 6, 0, 1146 }, - { 7, 10, 1395 }, { 8, 10, 486 }, { 9, 10, 236 }, { 9, 10, 878 }, - { 10, 10, 218 }, { 11, 10, 95 }, { 19, 10, 17 }, { 19, 10, 31 }, - { 7, 10, 2043 }, { 8, 10, 672 }, { 13, 10, 448 }, { 6, 0, 1105 }, - { 6, 0, 1616 }, { 6, 11, 1765 }, { 12, 11, 163 }, { 5, 10, 412 }, - { 5, 11, 822 }, { 4, 11, 634 }, { 6, 0, 656 }, { 6, 11, 1730 }, - { 6, 0, 1940 }, { 5, 0, 104 }, { 6, 0, 173 }, { 7, 0, 1631 }, - { 8, 10, 562 }, { 6, 11, 36 }, { 7, 11, 658 }, { 8, 11, 454 }, - { 19, 11, 86 }, { 5, 0, 457 }, { 6, 10, 1771 }, { 7, 0, 810 }, - { 8, 0, 138 }, { 8, 0, 342 }, { 9, 0, 84 }, { 10, 0, 193 }, - { 11, 0, 883 }, { 12, 0, 359 }, { 9, 0, 620 }, { 7, 10, 1190 }, - { 9, 10, 132 }, { 7, 11, 975 }, { 9, 11, 789 }, { 6, 0, 95 }, - { 6, 0, 1934 }, { 8, 0, 967 }, { 13, 11, 335 }, { 6, 0, 406 }, - { 10, 0, 409 }, { 10, 0, 447 }, { 11, 0, 44 }, { 12, 0, 100 }, - { 4, 10, 317 }, { 7, 10, 1279 }, { 4, 0, 477 }, { 6, 0, 1268 }, - { 6, 0, 1941 }, { 8, 0, 944 }, { 5, 10, 63 }, { 5, 10, 509 }, - { 4, 0, 629 }, { 4, 11, 104 }, { 4, 0, 246 }, { 5, 0, 375 }, - { 6, 0, 1636 }, { 4, 10, 288 }, { 7, 11, 1614 }, { 9, 0, 49 }, - { 10, 0, 774 }, { 8, 10, 89 }, { 8, 10, 620 }, { 11, 10, 628 }, - { 12, 10, 322 }, { 15, 10, 124 }, { 4, 0, 282 }, { 7, 0, 1034 }, - { 11, 0, 398 }, { 11, 0, 634 }, { 12, 0, 1 }, { 12, 0, 79 }, - { 12, 0, 544 }, { 14, 0, 237 }, { 17, 0, 10 }, { 18, 0, 20 }, - { 4, 0, 824 }, { 7, 11, 45 }, { 9, 11, 542 }, { 9, 11, 566 }, - { 10, 11, 728 }, { 5, 0, 118 }, { 5, 0, 499 }, { 6, 0, 476 }, - { 6, 0, 665 }, { 6, 0, 1176 }, { 6, 0, 1196 }, { 7, 0, 600 }, - { 7, 0, 888 }, { 7, 0, 1096 }, { 7, 0, 296 }, { 7, 0, 596 }, - { 8, 0, 560 }, { 8, 0, 586 }, { 9, 0, 612 }, { 11, 0, 304 }, - { 12, 0, 46 }, { 13, 0, 89 }, { 14, 0, 112 }, { 17, 0, 122 }, - { 5, 0, 894 }, { 6, 0, 1772 }, { 9, 0, 1009 }, { 10, 10, 120 }, - { 5, 11, 533 }, { 7, 11, 755 }, { 10, 11, 780 }, { 23, 10, 1 }, - { 6, 0, 1474 }, { 7, 11, 87 }, { 14, 11, 288 }, { 11, 0, 366 }, - { 9, 10, 461 }, { 7, 11, 988 }, { 7, 11, 1939 }, { 9, 11, 64 }, - { 9, 11, 502 }, { 12, 11, 7 }, { 12, 11, 34 }, { 13, 11, 12 }, - { 13, 11, 234 }, { 19, 11, 77 }, { 7, 0, 1599 }, { 7, 0, 1723 }, - { 8, 0, 79 }, { 8, 0, 106 }, { 8, 0, 190 }, { 8, 0, 302 }, - { 8, 0, 383 }, { 8, 0, 713 }, { 9, 0, 119 }, { 9, 0, 233 }, - { 9, 0, 419 }, { 9, 0, 471 }, { 10, 0, 181 }, { 10, 0, 406 }, - { 11, 0, 57 }, { 11, 0, 85 }, { 11, 0, 120 }, { 11, 0, 177 }, - { 11, 0, 296 }, { 11, 0, 382 }, { 11, 0, 454 }, { 11, 0, 758 }, - { 11, 0, 999 }, { 12, 0, 27 }, { 12, 0, 98 }, { 12, 0, 131 }, - { 12, 0, 245 }, { 12, 0, 312 }, { 12, 0, 446 }, { 12, 0, 454 }, - { 13, 0, 25 }, { 13, 0, 98 }, { 13, 0, 426 }, { 13, 0, 508 }, - { 14, 0, 70 }, { 14, 0, 163 }, { 14, 0, 272 }, { 14, 0, 277 }, - { 14, 0, 370 }, { 15, 0, 95 }, { 15, 0, 138 }, { 15, 0, 167 }, - { 17, 0, 38 }, { 20, 0, 96 }, { 7, 10, 1346 }, { 10, 0, 200 }, - { 19, 0, 2 }, { 23, 0, 22 }, { 7, 11, 141 }, { 6, 10, 85 }, - { 6, 0, 1759 }, { 10, 0, 372 }, { 17, 0, 16 }, { 8, 0, 943 }, - { 4, 11, 619 }, { 11, 11, 88 }, { 5, 11, 246 }, { 8, 11, 189 }, - { 9, 11, 355 }, { 9, 11, 512 }, { 10, 11, 124 }, { 10, 11, 453 }, - { 11, 11, 143 }, { 11, 11, 416 }, { 11, 11, 859 }, { 13, 11, 341 }, - { 5, 0, 258 }, { 6, 0, 719 }, { 6, 0, 1798 }, { 6, 0, 1839 }, - { 8, 0, 900 }, { 10, 0, 874 }, { 10, 0, 886 }, { 12, 0, 698 }, - { 12, 0, 732 }, { 12, 0, 770 }, { 16, 0, 106 }, { 18, 0, 163 }, - { 18, 0, 170 }, { 18, 0, 171 }, { 24, 0, 20 }, { 9, 0, 707 }, - { 11, 0, 326 }, { 11, 0, 339 }, { 12, 0, 423 }, { 12, 0, 502 }, - { 20, 0, 62 }, { 9, 11, 707 }, { 11, 11, 326 }, { 11, 11, 339 }, - { 12, 11, 423 }, { 12, 11, 502 }, { 20, 11, 62 }, { 5, 0, 30 }, - { 7, 0, 495 }, { 8, 0, 134 }, { 9, 0, 788 }, { 12, 0, 438 }, - { 5, 11, 678 }, { 5, 10, 279 }, { 6, 10, 235 }, { 7, 10, 468 }, - { 8, 10, 446 }, { 9, 10, 637 }, { 10, 10, 717 }, { 11, 10, 738 }, - { 12, 10, 514 }, { 5, 11, 35 }, { 6, 11, 287 }, { 7, 11, 862 }, - { 7, 11, 1886 }, { 10, 11, 179 }, { 7, 0, 1948 }, { 7, 0, 2004 }, - { 4, 11, 517 }, { 5, 10, 17 }, { 6, 10, 371 }, { 9, 10, 528 }, - { 4, 0, 115 }, { 5, 0, 669 }, { 6, 0, 407 }, { 8, 0, 311 }, - { 11, 0, 10 }, { 13, 0, 5 }, { 9, 0, 381 }, { 5, 0, 50 }, - { 6, 0, 439 }, { 7, 0, 780 }, { 7, 0, 1040 }, { 8, 11, 667 }, - { 11, 11, 403 }, { 18, 11, 83 }, { 5, 0, 1 }, { 6, 0, 81 }, - { 10, 0, 520 }, { 6, 0, 738 }, { 5, 0, 482 }, { 8, 0, 98 }, - { 9, 0, 172 }, { 10, 0, 360 }, { 10, 0, 700 }, { 10, 0, 822 }, - { 11, 0, 302 }, { 11, 0, 778 }, { 12, 0, 50 }, { 12, 0, 127 }, - { 12, 0, 396 }, { 13, 0, 62 }, { 13, 0, 328 }, { 14, 0, 122 }, - { 19, 0, 72 }, { 9, 11, 157 }, { 10, 11, 131 }, { 12, 11, 72 }, - { 7, 11, 714 }, { 7, 11, 539 }, { 5, 0, 2 }, { 6, 0, 512 }, - { 7, 0, 797 }, { 7, 0, 1494 }, { 8, 0, 253 }, { 8, 0, 589 }, - { 9, 0, 77 }, { 10, 0, 1 }, { 10, 0, 129 }, { 10, 0, 225 }, - { 11, 0, 118 }, { 11, 0, 226 }, { 11, 0, 251 }, { 11, 0, 430 }, - { 11, 0, 701 }, { 11, 0, 974 }, { 11, 0, 982 }, { 12, 0, 64 }, - { 12, 0, 260 }, { 12, 0, 488 }, { 12, 0, 690 }, { 5, 11, 394 }, - { 7, 11, 367 }, { 7, 11, 487 }, { 7, 11, 857 }, { 7, 11, 1713 }, - { 8, 11, 246 }, { 9, 11, 537 }, { 10, 11, 165 }, { 12, 11, 219 }, - { 12, 11, 561 }, { 8, 0, 557 }, { 5, 10, 779 }, { 5, 10, 807 }, - { 6, 10, 1655 }, { 6, 10, 1676 }, { 4, 10, 196 }, { 5, 10, 558 }, - { 5, 10, 949 }, { 11, 11, 827 }, { 12, 11, 56 }, { 14, 11, 34 }, - { 15, 11, 148 }, { 9, 0, 347 }, { 5, 0, 572 }, { 6, 0, 832 }, - { 4, 0, 12 }, { 7, 0, 504 }, { 7, 0, 522 }, { 7, 0, 809 }, - { 8, 0, 797 }, { 13, 0, 88 }, { 4, 10, 752 }, { 5, 11, 449 }, - { 7, 11, 86 }, { 8, 11, 103 }, { 17, 11, 69 }, { 7, 11, 2028 }, - { 10, 11, 641 }, { 5, 0, 528 }, { 6, 11, 1 }, { 14, 11, 2 }, - { 6, 0, 861 }, { 10, 0, 294 }, { 4, 10, 227 }, { 5, 10, 159 }, - { 5, 10, 409 }, { 7, 10, 80 }, { 10, 10, 479 }, { 12, 10, 418 }, - { 14, 10, 50 }, { 14, 10, 249 }, { 14, 10, 295 }, { 7, 10, 1470 }, - { 8, 10, 66 }, { 8, 10, 137 }, { 8, 10, 761 }, { 9, 10, 638 }, - { 11, 10, 80 }, { 11, 10, 212 }, { 11, 10, 368 }, { 11, 10, 418 }, - { 12, 10, 8 }, { 13, 10, 15 }, { 16, 10, 61 }, { 17, 10, 59 }, - { 19, 10, 28 }, { 20, 10, 84 }, { 20, 0, 109 }, { 7, 11, 1148 }, - { 6, 11, 277 }, { 7, 11, 1274 }, { 7, 11, 1386 }, { 7, 11, 1392 }, - { 12, 11, 129 }, { 18, 11, 87 }, { 6, 11, 187 }, { 7, 11, 39 }, - { 7, 11, 1203 }, { 8, 11, 380 }, { 8, 11, 542 }, { 14, 11, 117 }, - { 21, 11, 28 }, { 6, 0, 1187 }, { 5, 0, 266 }, { 9, 0, 290 }, - { 9, 0, 364 }, { 10, 0, 293 }, { 11, 0, 606 }, { 14, 0, 45 }, - { 6, 11, 297 }, { 7, 11, 793 }, { 11, 11, 938 }, { 4, 0, 50 }, - { 6, 0, 594 }, { 9, 0, 121 }, { 10, 0, 49 }, { 10, 0, 412 }, - { 11, 0, 834 }, { 8, 0, 748 }, { 7, 11, 464 }, { 8, 11, 438 }, - { 11, 11, 105 }, { 11, 11, 363 }, { 12, 11, 231 }, { 14, 11, 386 }, - { 15, 11, 102 }, { 20, 11, 75 }, { 4, 0, 466 }, { 13, 0, 399 }, - { 14, 0, 337 }, { 6, 10, 38 }, { 7, 10, 1220 }, { 8, 10, 185 }, - { 8, 10, 256 }, { 9, 10, 22 }, { 9, 10, 331 }, { 10, 10, 738 }, - { 11, 10, 205 }, { 11, 10, 540 }, { 11, 10, 746 }, { 13, 10, 465 }, - { 14, 10, 194 }, { 9, 0, 378 }, { 13, 0, 162 }, { 9, 0, 519 }, - { 4, 10, 159 }, { 6, 10, 115 }, { 7, 10, 252 }, { 7, 10, 257 }, - { 7, 10, 1928 }, { 8, 10, 69 }, { 9, 10, 384 }, { 10, 10, 91 }, - { 10, 10, 615 }, { 12, 10, 375 }, { 14, 10, 235 }, { 18, 10, 117 }, - { 19, 10, 123 }, { 5, 11, 604 }, { 5, 10, 911 }, { 8, 10, 278 }, - { 4, 0, 667 }, { 8, 0, 351 }, { 9, 0, 322 }, { 4, 10, 151 }, - { 7, 10, 1567 }, { 6, 0, 902 }, { 5, 10, 990 }, { 12, 0, 180 }, - { 5, 10, 194 }, { 7, 10, 1662 }, { 9, 10, 90 }, { 4, 0, 869 }, - { 6, 0, 1996 }, { 6, 0, 813 }, { 5, 10, 425 }, { 9, 11, 761 }, - { 4, 0, 260 }, { 5, 10, 971 }, { 5, 11, 20 }, { 6, 11, 298 }, - { 7, 11, 659 }, { 7, 11, 1366 }, { 9, 11, 219 }, { 4, 0, 39 }, - { 5, 0, 36 }, { 7, 0, 1843 }, { 8, 0, 407 }, { 11, 0, 144 }, - { 12, 0, 523 }, { 4, 0, 510 }, { 10, 0, 587 }, { 11, 10, 752 }, - { 7, 0, 29 }, { 7, 0, 66 }, { 7, 0, 1980 }, { 10, 0, 487 }, - { 10, 0, 809 }, { 13, 0, 260 }, { 14, 0, 82 }, { 18, 0, 63 }, - { 9, 10, 662 }, { 5, 10, 72 }, { 6, 10, 264 }, { 7, 10, 21 }, - { 7, 10, 46 }, { 7, 10, 2013 }, { 8, 10, 215 }, { 8, 10, 513 }, - { 10, 10, 266 }, { 11, 10, 22 }, { 6, 0, 570 }, { 6, 0, 565 }, - { 7, 0, 1667 }, { 4, 11, 439 }, { 10, 10, 95 }, { 11, 10, 603 }, - { 12, 11, 242 }, { 13, 10, 443 }, { 14, 10, 160 }, { 15, 10, 4 }, - { 6, 0, 1464 }, { 6, 10, 431 }, { 9, 0, 372 }, { 15, 0, 2 }, - { 19, 0, 10 }, { 19, 0, 18 }, { 5, 10, 874 }, { 6, 10, 1677 }, - { 15, 10, 0 }, { 4, 0, 787 }, { 6, 0, 380 }, { 12, 0, 399 }, - { 21, 0, 19 }, { 7, 10, 939 }, { 7, 10, 1172 }, { 7, 10, 1671 }, - { 9, 10, 540 }, { 10, 10, 696 }, { 11, 10, 265 }, { 11, 10, 732 }, - { 11, 10, 928 }, { 11, 10, 937 }, { 13, 10, 438 }, { 9, 0, 200 }, - { 4, 11, 233 }, { 4, 0, 516 }, { 6, 11, 577 }, { 4, 0, 844 }, - { 11, 0, 887 }, { 14, 0, 365 }, { 14, 0, 375 }, { 4, 11, 482 }, - { 8, 0, 821 }, { 12, 0, 44 }, { 7, 0, 1655 }, { 8, 0, 305 }, - { 5, 10, 682 }, { 7, 10, 1887 }, { 7, 11, 346 }, { 4, 10, 696 }, - { 4, 0, 10 }, { 7, 0, 917 }, { 11, 0, 786 }, { 5, 11, 795 }, - { 6, 11, 1741 }, { 8, 11, 417 }, { 9, 11, 782 }, { 4, 0, 1016 }, - { 6, 0, 2031 }, { 5, 0, 684 }, { 4, 10, 726 }, { 5, 10, 630 }, - { 6, 0, 1021 }, { 6, 0, 1480 }, { 8, 10, 802 }, { 8, 10, 838 }, - { 6, 0, 27 }, { 6, 0, 395 }, { 7, 11, 622 }, { 7, 11, 625 }, - { 7, 11, 1750 }, { 4, 11, 203 }, { 7, 11, 1936 }, { 6, 10, 118 }, - { 7, 10, 215 }, { 7, 10, 1521 }, { 12, 10, 11 }, { 4, 0, 813 }, - { 8, 0, 511 }, { 7, 10, 615 }, { 10, 10, 251 }, { 7, 10, 1044 }, - { 17, 0, 56 }, { 5, 10, 225 }, { 6, 0, 342 }, { 6, 0, 496 }, - { 8, 0, 275 }, { 9, 0, 206 }, { 4, 0, 909 }, { 5, 0, 940 }, - { 4, 0, 891 }, { 7, 11, 311 }, { 9, 11, 308 }, { 12, 11, 255 }, - { 4, 10, 370 }, { 5, 10, 756 }, { 7, 10, 1326 }, { 4, 0, 687 }, - { 6, 0, 1596 }, { 6, 0, 1342 }, { 6, 10, 1662 }, { 7, 10, 48 }, - { 8, 10, 771 }, { 10, 10, 116 }, { 13, 10, 104 }, { 14, 10, 105 }, - { 14, 10, 184 }, { 15, 10, 168 }, { 19, 10, 92 }, { 20, 10, 68 }, - { 10, 10, 209 }, { 4, 11, 400 }, { 5, 11, 267 }, { 7, 11, 232 }, - { 23, 11, 12 }, { 6, 0, 41 }, { 13, 0, 160 }, { 13, 11, 314 }, - { 6, 0, 1718 }, { 8, 0, 778 }, { 14, 11, 261 }, { 6, 0, 1610 }, - { 5, 0, 115 }, { 4, 0, 294 }, { 14, 0, 314 }, { 4, 10, 120 }, - { 4, 0, 983 }, { 5, 0, 193 }, { 12, 0, 178 }, { 10, 10, 429 }, - { 5, 10, 820 }, { 7, 10, 931 }, { 6, 0, 994 }, { 6, 0, 1051 }, - { 6, 0, 1439 }, { 7, 0, 174 }, { 5, 11, 732 }, { 4, 11, 100 }, - { 7, 11, 679 }, { 8, 11, 313 }, { 10, 10, 199 }, { 6, 10, 151 }, - { 6, 10, 1675 }, { 7, 10, 383 }, { 23, 10, 10 }, { 6, 0, 1796 }, - { 8, 0, 848 }, { 8, 0, 867 }, { 8, 0, 907 }, { 10, 0, 855 }, - { 12, 0, 703 }, { 12, 0, 221 }, { 4, 0, 122 }, { 5, 0, 796 }, - { 5, 0, 952 }, { 6, 0, 1660 }, { 6, 0, 1671 }, { 8, 0, 567 }, - { 9, 0, 687 }, { 9, 0, 742 }, { 10, 0, 686 }, { 11, 0, 682 }, - { 11, 0, 909 }, { 12, 0, 281 }, { 5, 11, 362 }, { 5, 11, 443 }, - { 6, 11, 318 }, { 7, 11, 1019 }, { 11, 11, 623 }, { 5, 11, 463 }, - { 8, 11, 296 }, { 11, 0, 583 }, { 13, 0, 262 }, { 6, 10, 1624 }, - { 12, 10, 422 }, { 14, 10, 360 }, { 5, 0, 179 }, { 7, 0, 1095 }, - { 7, 0, 1213 }, { 4, 10, 43 }, { 4, 11, 454 }, { 5, 10, 344 }, - { 5, 10, 357 }, { 4, 0, 66 }, { 7, 0, 722 }, { 7, 0, 904 }, - { 6, 0, 773 }, { 7, 0, 352 }, { 5, 10, 888 }, { 5, 11, 48 }, - { 5, 11, 404 }, { 6, 11, 557 }, { 7, 11, 458 }, { 8, 11, 597 }, - { 10, 11, 455 }, { 10, 11, 606 }, { 11, 11, 49 }, { 11, 11, 548 }, - { 12, 11, 476 }, { 13, 11, 18 }, { 13, 11, 450 }, { 6, 11, 418 }, - { 4, 10, 711 }, { 5, 11, 442 }, { 7, 11, 1984 }, { 13, 0, 35 }, - { 9, 0, 152 }, { 6, 0, 1197 }, { 7, 11, 1093 }, { 9, 11, 203 }, - { 9, 10, 440 }, { 10, 0, 592 }, { 10, 0, 753 }, { 12, 0, 317 }, - { 12, 0, 355 }, { 12, 0, 465 }, { 12, 0, 469 }, { 12, 0, 560 }, - { 12, 0, 578 }, { 13, 0, 243 }, { 5, 0, 564 }, { 6, 0, 797 }, - { 5, 10, 958 }, { 5, 10, 987 }, { 5, 11, 55 }, { 7, 11, 376 }, - { 12, 11, 161 }, { 5, 11, 450 }, { 6, 0, 556 }, { 6, 0, 819 }, - { 11, 10, 276 }, { 14, 10, 293 }, { 7, 0, 544 }, { 10, 0, 61 }, - { 8, 0, 719 }, { 4, 10, 65 }, { 5, 10, 479 }, { 5, 10, 1004 }, - { 7, 10, 1913 }, { 8, 10, 317 }, { 9, 10, 302 }, { 10, 10, 612 }, - { 13, 10, 22 }, { 4, 0, 5 }, { 5, 0, 498 }, { 8, 0, 637 }, - { 9, 0, 521 }, { 4, 11, 213 }, { 4, 10, 261 }, { 7, 11, 223 }, - { 7, 10, 510 }, { 8, 11, 80 }, { 5, 0, 927 }, { 7, 0, 101 }, - { 4, 10, 291 }, { 7, 11, 381 }, { 7, 11, 806 }, { 7, 11, 820 }, - { 8, 11, 354 }, { 8, 11, 437 }, { 8, 11, 787 }, { 9, 10, 515 }, - { 9, 11, 657 }, { 10, 11, 58 }, { 10, 11, 339 }, { 10, 11, 749 }, - { 11, 11, 914 }, { 12, 10, 152 }, { 12, 11, 162 }, { 12, 10, 443 }, - { 13, 11, 75 }, { 13, 10, 392 }, { 14, 11, 106 }, { 14, 11, 198 }, - { 14, 11, 320 }, { 14, 10, 357 }, { 14, 11, 413 }, { 18, 11, 43 }, - { 6, 0, 1153 }, { 7, 0, 1441 }, { 8, 11, 747 }, { 4, 0, 893 }, - { 5, 0, 780 }, { 5, 0, 893 }, { 10, 11, 654 }, { 5, 11, 692 }, - { 5, 0, 238 }, { 6, 11, 191 }, { 4, 10, 130 }, { 7, 10, 843 }, - { 6, 0, 1296 }, { 5, 10, 42 }, { 5, 10, 879 }, { 7, 10, 245 }, - { 7, 10, 324 }, { 7, 10, 1532 }, { 11, 10, 463 }, { 11, 10, 472 }, - { 13, 10, 363 }, { 16, 10, 52 }, { 6, 0, 1729 }, { 6, 0, 1999 }, - { 8, 0, 969 }, { 4, 10, 134 }, { 5, 10, 372 }, { 4, 0, 60 }, - { 7, 0, 941 }, { 7, 0, 1800 }, { 8, 0, 314 }, { 9, 0, 700 }, - { 11, 0, 487 }, { 6, 0, 1144 }, { 6, 11, 162 }, { 7, 11, 1960 }, - { 8, 11, 831 }, { 4, 11, 706 }, { 7, 0, 1147 }, { 10, 11, 426 }, - { 10, 11, 89 }, { 7, 0, 1853 }, { 10, 0, 437 }, { 8, 0, 419 }, - { 7, 10, 1634 }, { 5, 0, 828 }, { 5, 0, 806 }, { 7, 0, 176 }, - { 7, 0, 178 }, { 7, 0, 1240 }, { 7, 0, 1976 }, { 4, 10, 644 }, - { 7, 11, 1877 }, { 5, 11, 420 }, { 7, 11, 1449 }, { 4, 0, 51 }, - { 5, 0, 39 }, { 6, 0, 4 }, { 7, 0, 591 }, { 7, 0, 849 }, - { 7, 0, 951 }, { 7, 0, 1613 }, { 7, 0, 1760 }, { 7, 0, 1988 }, - { 9, 0, 434 }, { 10, 0, 754 }, { 11, 0, 25 }, { 11, 0, 37 }, - { 10, 11, 57 }, { 10, 11, 277 }, { 7, 10, 540 }, { 4, 11, 204 }, - { 7, 0, 159 }, { 11, 11, 231 }, { 5, 0, 902 }, { 7, 0, 928 }, - { 7, 11, 366 }, { 9, 11, 287 }, { 12, 11, 199 }, { 12, 11, 556 }, - { 12, 11, 577 }, { 6, 10, 623 }, { 8, 10, 789 }, { 4, 10, 908 }, - { 5, 10, 359 }, { 5, 10, 508 }, { 6, 10, 1723 }, { 7, 10, 343 }, - { 7, 10, 1996 }, { 7, 10, 2026 }, { 6, 0, 270 }, { 4, 10, 341 }, - { 7, 10, 480 }, { 5, 11, 356 }, { 7, 11, 224 }, { 11, 11, 588 }, - { 11, 11, 864 }, { 11, 11, 968 }, { 15, 11, 160 }, { 4, 0, 556 }, - { 9, 0, 801 }, { 4, 0, 416 }, { 14, 0, 372 }, { 5, 0, 152 }, - { 5, 0, 197 }, { 7, 0, 340 }, { 7, 0, 867 }, { 10, 0, 548 }, - { 10, 0, 581 }, { 11, 0, 6 }, { 12, 0, 3 }, { 12, 0, 19 }, - { 14, 0, 110 }, { 14, 0, 289 }, { 11, 0, 369 }, { 7, 11, 630 }, - { 9, 11, 567 }, { 11, 11, 150 }, { 11, 11, 444 }, { 13, 11, 119 }, - { 6, 11, 539 }, { 7, 10, 1995 }, { 8, 10, 299 }, { 11, 10, 890 }, - { 12, 10, 674 }, { 7, 0, 34 }, { 7, 0, 190 }, { 8, 0, 28 }, - { 8, 0, 141 }, { 8, 0, 444 }, { 8, 0, 811 }, { 9, 0, 468 }, - { 11, 0, 334 }, { 12, 0, 24 }, { 12, 0, 386 }, { 12, 0, 576 }, - { 5, 0, 757 }, { 7, 0, 1553 }, { 8, 0, 898 }, { 5, 0, 721 }, - { 8, 0, 1012 }, { 4, 0, 789 }, { 5, 0, 647 }, { 7, 0, 1102 }, - { 4, 0, 898 }, { 10, 0, 183 }, { 4, 10, 238 }, { 5, 10, 503 }, - { 6, 10, 179 }, { 7, 10, 2003 }, { 8, 10, 381 }, { 8, 10, 473 }, - { 9, 10, 149 }, { 10, 10, 788 }, { 15, 10, 45 }, { 15, 10, 86 }, - { 20, 10, 110 }, { 22, 10, 57 }, { 9, 0, 136 }, { 19, 0, 107 }, - { 4, 10, 121 }, { 5, 10, 156 }, { 5, 10, 349 }, { 10, 10, 605 }, - { 14, 10, 342 }, { 4, 11, 235 }, { 7, 11, 255 }, { 4, 11, 194 }, - { 5, 11, 584 }, { 6, 11, 384 }, { 7, 11, 583 }, { 10, 11, 761 }, - { 11, 11, 760 }, { 11, 11, 851 }, { 6, 10, 80 }, { 6, 10, 1694 }, - { 7, 10, 173 }, { 7, 10, 1974 }, { 9, 10, 547 }, { 10, 10, 730 }, - { 14, 10, 18 }, { 22, 10, 39 }, { 4, 10, 923 }, { 6, 10, 1711 }, - { 5, 0, 277 }, { 13, 0, 247 }, { 4, 0, 435 }, { 5, 11, 562 }, - { 6, 0, 1311 }, { 5, 11, 191 }, { 9, 11, 271 }, { 4, 10, 595 }, - { 7, 11, 1537 }, { 14, 11, 96 }, { 15, 11, 73 }, { 5, 0, 437 }, - { 7, 0, 502 }, { 7, 0, 519 }, { 7, 0, 1122 }, { 7, 0, 1751 }, - { 14, 0, 211 }, { 6, 10, 459 }, { 7, 10, 1753 }, { 7, 10, 1805 }, - { 8, 10, 658 }, { 9, 10, 1 }, { 11, 10, 959 }, { 13, 10, 446 }, - { 6, 0, 814 }, { 4, 11, 470 }, { 5, 11, 473 }, { 6, 11, 153 }, - { 7, 11, 1503 }, { 7, 11, 1923 }, { 10, 11, 701 }, { 11, 11, 132 }, - { 11, 11, 168 }, { 11, 11, 227 }, { 11, 11, 320 }, { 11, 11, 436 }, - { 11, 11, 525 }, { 11, 11, 855 }, { 12, 11, 41 }, { 12, 11, 286 }, - { 13, 11, 103 }, { 13, 11, 284 }, { 14, 11, 255 }, { 14, 11, 262 }, - { 15, 11, 117 }, { 15, 11, 127 }, { 5, 0, 265 }, { 6, 0, 212 }, - { 7, 0, 28 }, { 10, 0, 750 }, { 5, 11, 327 }, { 6, 11, 552 }, - { 7, 11, 1754 }, { 9, 11, 604 }, { 6, 0, 2012 }, { 4, 0, 702 }, - { 5, 11, 80 }, { 6, 11, 405 }, { 7, 11, 403 }, { 7, 11, 1502 }, - { 7, 11, 1626 }, { 8, 11, 456 }, { 9, 11, 487 }, { 9, 11, 853 }, - { 9, 11, 889 }, { 10, 11, 309 }, { 11, 11, 721 }, { 11, 11, 994 }, - { 12, 11, 430 }, { 13, 11, 165 }, { 5, 0, 808 }, { 7, 0, 2045 }, - { 5, 0, 166 }, { 8, 0, 739 }, { 12, 0, 511 }, { 6, 10, 490 }, - { 4, 11, 453 }, { 5, 11, 887 }, { 6, 11, 535 }, { 8, 11, 6 }, - { 8, 11, 543 }, { 4, 0, 119 }, { 5, 0, 170 }, { 5, 0, 447 }, - { 7, 0, 1708 }, { 7, 0, 1889 }, { 9, 0, 357 }, { 9, 0, 719 }, - { 12, 0, 486 }, { 12, 0, 596 }, { 9, 0, 500 }, { 7, 10, 250 }, - { 8, 10, 507 }, { 4, 10, 158 }, { 6, 0, 809 }, { 6, 0, 1500 }, - { 9, 0, 327 }, { 11, 0, 350 }, { 11, 0, 831 }, { 13, 0, 352 }, - { 4, 10, 140 }, { 7, 10, 362 }, { 8, 10, 209 }, { 9, 10, 10 }, - { 9, 10, 503 }, { 9, 10, 614 }, { 10, 10, 689 }, { 11, 10, 327 }, - { 11, 10, 725 }, { 12, 10, 252 }, { 12, 10, 583 }, { 13, 10, 192 }, - { 14, 10, 269 }, { 14, 10, 356 }, { 20, 10, 50 }, { 7, 11, 741 }, - { 4, 0, 450 }, { 7, 0, 1158 }, { 19, 10, 1 }, { 19, 10, 26 }, - { 22, 10, 9 }, { 6, 0, 597 }, { 7, 0, 1318 }, { 6, 0, 1602 }, - { 6, 10, 228 }, { 7, 10, 1341 }, { 9, 10, 408 }, { 10, 10, 343 }, - { 7, 0, 1375 }, { 7, 0, 1466 }, { 10, 0, 331 }, { 4, 0, 754 }, - { 4, 10, 557 }, { 5, 11, 101 }, { 6, 11, 88 }, { 6, 11, 543 }, - { 7, 11, 1677 }, { 9, 11, 100 }, { 10, 11, 677 }, { 14, 11, 169 }, - { 14, 11, 302 }, { 14, 11, 313 }, { 15, 11, 48 }, { 15, 11, 84 }, - { 6, 0, 1368 }, { 4, 11, 310 }, { 9, 11, 795 }, { 10, 11, 733 }, - { 11, 11, 451 }, { 12, 11, 249 }, { 14, 11, 115 }, { 14, 11, 286 }, - { 15, 11, 100 }, { 4, 10, 548 }, { 10, 0, 557 }, { 7, 10, 197 }, - { 8, 10, 142 }, { 8, 10, 325 }, { 9, 10, 150 }, { 9, 10, 596 }, - { 10, 10, 353 }, { 11, 10, 74 }, { 11, 10, 315 }, { 12, 10, 662 }, - { 12, 10, 681 }, { 14, 10, 423 }, { 15, 10, 141 }, { 5, 11, 587 }, - { 5, 0, 850 }, { 8, 0, 799 }, { 10, 0, 908 }, { 12, 0, 701 }, - { 12, 0, 757 }, { 14, 0, 466 }, { 4, 0, 62 }, { 5, 0, 275 }, - { 18, 0, 19 }, { 6, 10, 399 }, { 6, 10, 579 }, { 7, 10, 692 }, - { 7, 10, 846 }, { 7, 10, 1015 }, { 7, 10, 1799 }, { 8, 10, 403 }, - { 9, 10, 394 }, { 10, 10, 133 }, { 12, 10, 4 }, { 12, 10, 297 }, - { 12, 10, 452 }, { 16, 10, 81 }, { 18, 10, 25 }, { 21, 10, 14 }, - { 22, 10, 12 }, { 23, 10, 18 }, { 12, 0, 459 }, { 7, 10, 1546 }, - { 11, 10, 299 }, { 14, 10, 407 }, { 4, 10, 177 }, { 4, 11, 498 }, - { 7, 11, 217 }, { 8, 11, 140 }, { 10, 11, 610 }, { 5, 10, 411 }, - { 7, 10, 653 }, { 6, 0, 1802 }, { 7, 10, 439 }, { 10, 10, 727 }, - { 11, 10, 260 }, { 11, 10, 684 }, { 5, 11, 905 }, { 11, 11, 580 }, - { 14, 11, 201 }, { 6, 0, 1397 }, { 5, 10, 208 }, { 7, 10, 753 }, - { 7, 10, 1528 }, { 7, 0, 238 }, { 7, 0, 2033 }, { 8, 0, 120 }, - { 8, 0, 188 }, { 8, 0, 659 }, { 9, 0, 598 }, { 10, 0, 466 }, - { 12, 0, 342 }, { 12, 0, 588 }, { 13, 0, 503 }, { 14, 0, 246 }, - { 15, 0, 92 }, { 7, 11, 1041 }, { 4, 11, 456 }, { 7, 11, 105 }, - { 7, 11, 358 }, { 7, 11, 1637 }, { 8, 11, 643 }, { 11, 11, 483 }, - { 6, 0, 1318 }, { 6, 0, 1324 }, { 4, 0, 201 }, { 7, 0, 1744 }, - { 8, 0, 602 }, { 11, 0, 247 }, { 11, 0, 826 }, { 17, 0, 65 }, - { 5, 10, 242 }, { 8, 0, 164 }, { 18, 0, 62 }, { 5, 10, 953 }, - { 11, 10, 802 }, { 5, 0, 615 }, { 7, 11, 1566 }, { 8, 11, 269 }, - { 9, 11, 212 }, { 9, 11, 718 }, { 14, 11, 15 }, { 14, 11, 132 }, - { 14, 11, 227 }, { 5, 10, 290 }, { 4, 10, 380 }, { 5, 10, 52 }, - { 7, 10, 277 }, { 9, 10, 368 }, { 11, 10, 791 }, { 7, 0, 1243 }, - { 5, 11, 539 }, { 11, 11, 919 }, { 13, 11, 409 }, { 8, 0, 968 }, - { 5, 11, 470 }, { 6, 0, 882 }, { 4, 0, 907 }, { 5, 0, 100 }, - { 10, 0, 329 }, { 12, 0, 416 }, { 21, 0, 29 }, { 10, 10, 138 }, - { 11, 10, 476 }, { 5, 10, 725 }, { 5, 10, 727 }, { 6, 11, 91 }, - { 7, 11, 435 }, { 7, 10, 1811 }, { 4, 11, 16 }, { 5, 11, 316 }, - { 5, 11, 842 }, { 6, 11, 370 }, { 6, 11, 1778 }, { 8, 11, 166 }, - { 11, 11, 812 }, { 12, 11, 206 }, { 12, 11, 351 }, { 14, 11, 418 }, - { 16, 11, 15 }, { 16, 11, 34 }, { 18, 11, 3 }, { 19, 11, 3 }, - { 19, 11, 7 }, { 20, 11, 4 }, { 21, 11, 21 }, { 4, 0, 176 }, - { 5, 0, 636 }, { 5, 0, 998 }, { 7, 0, 9 }, { 7, 0, 1508 }, - { 8, 0, 26 }, { 9, 0, 317 }, { 9, 0, 358 }, { 10, 0, 210 }, - { 10, 0, 292 }, { 10, 0, 533 }, { 11, 0, 555 }, { 12, 0, 526 }, - { 12, 0, 607 }, { 13, 0, 263 }, { 13, 0, 459 }, { 14, 0, 271 }, - { 6, 0, 256 }, { 8, 0, 265 }, { 4, 10, 38 }, { 7, 10, 307 }, - { 7, 10, 999 }, { 7, 10, 1481 }, { 7, 10, 1732 }, { 7, 10, 1738 }, - { 9, 10, 414 }, { 11, 10, 316 }, { 12, 10, 52 }, { 13, 10, 420 }, - { 19, 10, 100 }, { 7, 10, 1296 }, { 4, 11, 611 }, { 5, 11, 606 }, - { 4, 0, 643 }, { 14, 11, 21 }, { 5, 11, 715 }, { 5, 10, 723 }, - { 6, 0, 610 }, { 7, 11, 597 }, { 10, 0, 127 }, { 13, 0, 27 }, - { 6, 0, 1995 }, { 6, 0, 2001 }, { 8, 0, 119 }, { 8, 0, 973 }, - { 4, 11, 149 }, { 10, 11, 368 }, { 12, 0, 522 }, { 4, 11, 154 }, - { 5, 10, 109 }, { 6, 10, 1784 }, { 7, 11, 1134 }, { 7, 10, 1895 }, - { 8, 11, 105 }, { 12, 10, 296 }, { 12, 10, 302 }, { 4, 11, 31 }, - { 6, 11, 429 }, { 7, 11, 962 }, { 9, 11, 458 }, { 11, 11, 691 }, - { 10, 0, 553 }, { 11, 0, 876 }, { 13, 0, 193 }, { 13, 0, 423 }, - { 14, 0, 166 }, { 19, 0, 84 }, { 4, 11, 312 }, { 5, 10, 216 }, - { 7, 10, 1879 }, { 9, 10, 141 }, { 9, 10, 270 }, { 9, 10, 679 }, - { 10, 10, 159 }, { 11, 10, 197 }, { 12, 10, 538 }, { 12, 10, 559 }, - { 14, 10, 144 }, { 14, 10, 167 }, { 15, 10, 67 }, { 6, 0, 1582 }, - { 7, 0, 1578 }, { 7, 11, 1578 }, { 9, 10, 81 }, { 4, 11, 236 }, - { 6, 10, 391 }, { 6, 0, 795 }, { 7, 10, 322 }, { 8, 10, 249 }, - { 5, 11, 836 }, { 5, 11, 857 }, { 6, 11, 1680 }, { 7, 11, 59 }, - { 19, 11, 53 }, { 7, 0, 432 }, { 10, 11, 68 }, { 11, 11, 494 }, - { 4, 11, 81 }, { 11, 11, 867 }, { 7, 0, 126 }, { 8, 0, 84 }, - { 14, 11, 280 }, { 5, 11, 282 }, { 8, 11, 650 }, { 9, 11, 295 }, - { 9, 11, 907 }, { 10, 11, 443 }, { 8, 0, 790 }, { 5, 10, 632 }, - { 10, 10, 526 }, { 6, 0, 64 }, { 12, 0, 377 }, { 13, 0, 309 }, - { 14, 0, 141 }, { 14, 0, 429 }, { 14, 11, 141 }, { 14, 11, 429 }, - { 6, 0, 1529 }, { 6, 0, 321 }, { 7, 0, 1857 }, { 9, 0, 530 }, - { 19, 0, 99 }, { 7, 10, 948 }, { 7, 10, 1042 }, { 8, 10, 235 }, - { 8, 10, 461 }, { 9, 10, 453 }, { 10, 10, 354 }, { 17, 10, 77 }, - { 7, 0, 1104 }, { 11, 0, 269 }, { 11, 0, 539 }, { 11, 0, 627 }, - { 11, 0, 706 }, { 11, 0, 975 }, { 12, 0, 248 }, { 12, 0, 434 }, - { 12, 0, 600 }, { 12, 0, 622 }, { 13, 0, 297 }, { 13, 0, 485 }, - { 14, 0, 69 }, { 14, 0, 409 }, { 15, 0, 108 }, { 4, 10, 362 }, - { 7, 10, 52 }, { 7, 10, 303 }, { 10, 11, 70 }, { 12, 11, 26 }, - { 14, 11, 17 }, { 14, 11, 178 }, { 15, 11, 34 }, { 21, 11, 12 }, - { 11, 0, 977 }, { 13, 0, 507 }, { 9, 0, 34 }, { 11, 0, 484 }, - { 5, 10, 196 }, { 6, 10, 486 }, { 7, 10, 212 }, { 8, 10, 309 }, - { 8, 10, 346 }, { 6, 0, 1700 }, { 7, 0, 26 }, { 7, 0, 293 }, - { 7, 0, 382 }, { 7, 0, 1026 }, { 7, 0, 1087 }, { 7, 0, 2027 }, - { 8, 0, 24 }, { 8, 0, 114 }, { 8, 0, 252 }, { 8, 0, 727 }, - { 8, 0, 729 }, { 9, 0, 30 }, { 9, 0, 199 }, { 9, 0, 231 }, - { 9, 0, 251 }, { 9, 0, 334 }, { 9, 0, 361 }, { 9, 0, 712 }, - { 10, 0, 55 }, { 10, 0, 60 }, { 10, 0, 232 }, { 10, 0, 332 }, - { 10, 0, 384 }, { 10, 0, 396 }, { 10, 0, 504 }, { 10, 0, 542 }, - { 10, 0, 652 }, { 11, 0, 20 }, { 11, 0, 48 }, { 11, 0, 207 }, - { 11, 0, 291 }, { 11, 0, 298 }, { 11, 0, 342 }, { 11, 0, 365 }, - { 11, 0, 394 }, { 11, 0, 620 }, { 11, 0, 705 }, { 11, 0, 1017 }, - { 12, 0, 123 }, { 12, 0, 340 }, { 12, 0, 406 }, { 12, 0, 643 }, - { 13, 0, 61 }, { 13, 0, 269 }, { 13, 0, 311 }, { 13, 0, 319 }, - { 13, 0, 486 }, { 14, 0, 234 }, { 15, 0, 62 }, { 15, 0, 85 }, - { 16, 0, 71 }, { 18, 0, 119 }, { 20, 0, 105 }, { 7, 10, 1912 }, - { 4, 11, 71 }, { 5, 11, 376 }, { 7, 11, 119 }, { 10, 11, 665 }, - { 10, 0, 918 }, { 10, 0, 926 }, { 4, 10, 686 }, { 8, 11, 55 }, - { 10, 10, 625 }, { 8, 10, 706 }, { 4, 11, 479 }, { 4, 10, 30 }, - { 5, 10, 43 }, { 6, 0, 379 }, { 7, 0, 270 }, { 8, 0, 176 }, - { 8, 0, 183 }, { 9, 0, 432 }, { 9, 0, 661 }, { 12, 0, 247 }, - { 12, 0, 617 }, { 18, 0, 125 }, { 7, 11, 607 }, { 8, 11, 99 }, - { 24, 11, 4 }, { 5, 0, 792 }, { 5, 0, 900 }, { 4, 11, 612 }, - { 5, 11, 561 }, { 4, 11, 41 }, { 4, 10, 220 }, { 5, 11, 74 }, - { 7, 10, 1535 }, { 7, 11, 1627 }, { 11, 11, 871 }, { 12, 11, 619 }, - { 7, 0, 1920 }, { 7, 11, 94 }, { 11, 11, 329 }, { 11, 11, 965 }, - { 12, 11, 241 }, { 14, 11, 354 }, { 15, 11, 22 }, { 20, 11, 63 }, - { 9, 11, 209 }, { 9, 11, 300 }, { 6, 0, 771 }, { 7, 0, 1979 }, - { 4, 0, 901 }, { 5, 0, 776 }, { 14, 0, 254 }, { 5, 11, 98 }, - { 9, 11, 16 }, { 13, 11, 386 }, { 5, 11, 984 }, { 4, 11, 182 }, - { 6, 11, 205 }, { 7, 11, 220 }, { 7, 10, 1725 }, { 7, 10, 1774 }, - { 10, 10, 393 }, { 5, 10, 263 }, { 6, 10, 414 }, { 4, 11, 42 }, - { 9, 11, 205 }, { 9, 11, 786 }, { 10, 11, 659 }, { 14, 0, 140 }, - { 20, 0, 41 }, { 8, 0, 440 }, { 10, 0, 359 }, { 6, 10, 178 }, - { 6, 11, 289 }, { 6, 10, 1750 }, { 7, 11, 1670 }, { 9, 10, 690 }, - { 10, 10, 155 }, { 10, 10, 373 }, { 11, 10, 698 }, { 12, 11, 57 }, - { 13, 10, 155 }, { 20, 10, 93 }, { 23, 11, 4 }, { 4, 0, 37 }, - { 5, 0, 334 }, { 7, 0, 1253 }, { 23, 11, 25 }, { 4, 0, 508 }, - { 4, 11, 635 }, { 5, 10, 97 }, { 9, 10, 393 }, { 11, 11, 533 }, - { 4, 0, 640 }, { 5, 0, 513 }, { 6, 10, 1639 }, { 4, 11, 371 }, - { 4, 11, 272 }, { 7, 11, 836 }, { 7, 11, 1651 }, { 17, 11, 89 }, - { 5, 11, 825 }, { 6, 11, 444 }, { 6, 11, 1640 }, { 8, 11, 308 }, - { 4, 10, 191 }, { 7, 10, 934 }, { 8, 10, 647 }, { 17, 10, 97 }, - { 12, 0, 246 }, { 15, 0, 162 }, { 19, 0, 64 }, { 20, 0, 8 }, - { 20, 0, 95 }, { 22, 0, 24 }, { 24, 0, 17 }, { 4, 0, 533 }, - { 5, 10, 165 }, { 9, 10, 346 }, { 10, 10, 655 }, { 5, 11, 737 }, - { 11, 10, 885 }, { 5, 10, 877 }, { 8, 10, 128 }, { 11, 10, 179 }, - { 9, 11, 307 }, { 12, 0, 752 }, { 5, 0, 920 }, { 7, 0, 1048 }, - { 5, 0, 153 }, { 6, 0, 580 }, { 6, 10, 1663 }, { 7, 10, 132 }, - { 7, 10, 1154 }, { 7, 10, 1415 }, { 7, 10, 1507 }, { 12, 10, 493 }, - { 15, 10, 105 }, { 23, 10, 15 }, { 5, 10, 459 }, { 7, 10, 1073 }, - { 8, 10, 241 }, { 8, 10, 334 }, { 10, 0, 391 }, { 7, 0, 1952 }, - { 5, 11, 525 }, { 8, 11, 641 }, { 11, 11, 388 }, { 12, 11, 580 }, - { 14, 0, 126 }, { 6, 0, 640 }, { 4, 0, 483 }, { 7, 0, 1616 }, - { 9, 0, 69 }, { 6, 10, 324 }, { 6, 10, 520 }, { 7, 10, 338 }, - { 7, 10, 1729 }, { 8, 10, 228 }, { 11, 10, 750 }, { 5, 11, 493 }, - { 6, 11, 528 }, { 7, 0, 734 }, { 4, 11, 174 }, { 7, 11, 911 }, - { 10, 0, 480 }, { 9, 0, 495 }, { 18, 0, 104 }, { 7, 10, 705 }, - { 9, 0, 472 }, { 4, 10, 73 }, { 6, 10, 612 }, { 7, 10, 927 }, - { 7, 10, 1330 }, { 7, 10, 1822 }, { 8, 10, 217 }, { 9, 10, 765 }, - { 9, 10, 766 }, { 10, 10, 408 }, { 11, 10, 51 }, { 11, 10, 793 }, - { 12, 10, 266 }, { 15, 10, 158 }, { 20, 10, 89 }, { 22, 10, 32 }, - { 7, 11, 548 }, { 9, 11, 58 }, { 4, 11, 32 }, { 5, 11, 215 }, - { 6, 11, 269 }, { 7, 11, 1782 }, { 7, 11, 1892 }, { 10, 11, 16 }, - { 11, 11, 822 }, { 11, 11, 954 }, { 13, 11, 481 }, { 4, 0, 874 }, - { 9, 0, 229 }, { 5, 10, 389 }, { 8, 10, 636 }, { 7, 11, 1749 }, - { 8, 11, 477 }, { 6, 0, 948 }, { 5, 11, 308 }, { 7, 11, 1088 }, - { 4, 0, 748 }, { 11, 0, 1009 }, { 8, 10, 21 }, { 6, 0, 555 }, - { 7, 0, 485 }, { 5, 11, 126 }, { 8, 11, 297 }, { 9, 11, 366 }, - { 9, 11, 445 }, { 12, 11, 53 }, { 12, 11, 374 }, { 13, 11, 492 }, - { 7, 11, 1551 }, { 11, 11, 361 }, { 8, 0, 193 }, { 8, 0, 472 }, - { 8, 0, 653 }, { 13, 0, 93 }, { 19, 0, 14 }, { 4, 0, 984 }, - { 4, 11, 175 }, { 5, 0, 172 }, { 6, 0, 1971 }, { 4, 11, 685 }, - { 21, 11, 8 }, { 5, 11, 797 }, { 13, 0, 83 }, { 5, 10, 189 }, - { 7, 10, 442 }, { 7, 10, 443 }, { 8, 10, 281 }, { 12, 10, 174 }, - { 13, 10, 261 }, { 6, 0, 1568 }, { 5, 11, 565 }, { 11, 0, 384 }, - { 5, 0, 260 }, { 7, 0, 758 }, { 7, 0, 880 }, { 7, 0, 1359 }, - { 9, 0, 164 }, { 9, 0, 167 }, { 10, 0, 156 }, { 10, 0, 588 }, - { 12, 0, 101 }, { 14, 0, 48 }, { 15, 0, 70 }, { 6, 10, 2 }, - { 7, 10, 1262 }, { 7, 10, 1737 }, { 8, 10, 22 }, { 8, 10, 270 }, - { 8, 10, 612 }, { 9, 10, 312 }, { 9, 10, 436 }, { 10, 10, 311 }, - { 10, 10, 623 }, { 11, 10, 72 }, { 11, 10, 330 }, { 11, 10, 455 }, - { 12, 10, 321 }, { 12, 10, 504 }, { 12, 10, 530 }, { 12, 10, 543 }, - { 13, 10, 17 }, { 13, 10, 156 }, { 13, 10, 334 }, { 17, 10, 60 }, - { 20, 10, 64 }, { 4, 11, 252 }, { 7, 11, 1068 }, { 10, 11, 434 }, - { 11, 11, 228 }, { 11, 11, 426 }, { 13, 11, 231 }, { 18, 11, 106 }, - { 20, 11, 87 }, { 7, 10, 354 }, { 10, 10, 410 }, { 11, 10, 815 }, - { 6, 0, 367 }, { 7, 10, 670 }, { 7, 10, 1327 }, { 8, 10, 411 }, - { 8, 10, 435 }, { 9, 10, 653 }, { 9, 10, 740 }, { 10, 10, 385 }, - { 11, 10, 222 }, { 11, 10, 324 }, { 11, 10, 829 }, { 12, 10, 611 }, - { 7, 0, 1174 }, { 6, 10, 166 }, { 7, 10, 374 }, { 18, 0, 121 }, - { 4, 0, 828 }, { 5, 11, 231 }, { 10, 11, 509 }, { 7, 11, 601 }, - { 9, 11, 277 }, { 9, 11, 674 }, { 10, 11, 178 }, { 10, 11, 257 }, - { 10, 11, 418 }, { 11, 11, 531 }, { 11, 11, 544 }, { 11, 11, 585 }, - { 12, 11, 113 }, { 12, 11, 475 }, { 13, 11, 99 }, { 14, 11, 428 }, - { 6, 0, 1541 }, { 7, 11, 1779 }, { 5, 0, 343 }, { 6, 10, 398 }, - { 7, 10, 50 }, { 7, 11, 1683 }, { 4, 0, 440 }, { 7, 0, 57 }, - { 8, 0, 167 }, { 8, 0, 375 }, { 9, 0, 82 }, { 9, 0, 561 }, - { 9, 0, 744 }, { 10, 0, 620 }, { 9, 11, 744 }, { 6, 0, 926 }, - { 6, 10, 517 }, { 7, 10, 1159 }, { 10, 10, 621 }, { 11, 10, 192 }, - { 9, 0, 827 }, { 8, 0, 194 }, { 8, 0, 756 }, { 10, 10, 223 }, - { 11, 10, 645 }, { 7, 10, 64 }, { 8, 10, 245 }, { 4, 11, 399 }, - { 5, 11, 119 }, { 5, 11, 494 }, { 7, 11, 751 }, { 9, 11, 556 }, - { 4, 0, 808 }, { 7, 0, 22 }, { 7, 10, 1763 }, { 12, 10, 310 }, - { 5, 0, 639 }, { 7, 0, 1249 }, { 11, 0, 896 }, { 6, 11, 584 }, - { 6, 0, 1614 }, { 7, 0, 860 }, { 7, 11, 1121 }, { 5, 10, 129 }, - { 6, 10, 61 }, { 7, 10, 947 }, { 4, 0, 102 }, { 7, 0, 815 }, - { 7, 0, 1699 }, { 11, 0, 964 }, { 13, 10, 505 }, { 13, 10, 506 }, - { 11, 10, 1000 }, { 4, 11, 679 }, { 4, 0, 899 }, { 4, 0, 569 }, - { 5, 11, 694 }, { 9, 11, 714 }, { 8, 0, 795 }, { 6, 0, 2045 }, - { 11, 11, 7 }, { 6, 0, 52 }, { 9, 0, 104 }, { 9, 0, 559 }, - { 12, 0, 308 }, { 19, 0, 87 }, { 4, 0, 301 }, { 4, 0, 604 }, - { 5, 10, 637 }, { 8, 0, 779 }, { 5, 11, 143 }, { 5, 11, 769 }, - { 6, 11, 1760 }, { 7, 11, 682 }, { 7, 11, 1992 }, { 8, 11, 736 }, - { 9, 10, 590 }, { 19, 0, 32 }, { 9, 11, 527 }, { 5, 10, 280 }, - { 7, 10, 1226 }, { 6, 0, 494 }, { 6, 0, 677 }, { 6, 0, 682 }, - { 6, 0, 1044 }, { 5, 10, 281 }, { 7, 10, 1064 }, { 7, 0, 508 }, - { 5, 11, 860 }, { 6, 11, 422 }, { 7, 11, 0 }, { 7, 11, 1544 }, - { 9, 11, 577 }, { 11, 11, 990 }, { 12, 11, 141 }, { 12, 11, 453 }, - { 13, 11, 47 }, { 13, 11, 266 }, { 6, 0, 1014 }, { 5, 11, 515 }, - { 9, 11, 131 }, { 6, 0, 957 }, { 4, 11, 646 }, { 6, 0, 310 }, - { 7, 0, 1849 }, { 8, 0, 72 }, { 8, 0, 272 }, { 8, 0, 431 }, - { 9, 0, 12 }, { 9, 0, 376 }, { 10, 0, 563 }, { 10, 0, 630 }, - { 10, 0, 796 }, { 10, 0, 810 }, { 11, 0, 367 }, { 11, 0, 599 }, - { 11, 0, 686 }, { 12, 0, 672 }, { 7, 0, 570 }, { 4, 11, 396 }, - { 7, 10, 120 }, { 7, 11, 728 }, { 8, 10, 489 }, { 9, 11, 117 }, - { 9, 10, 319 }, { 10, 10, 820 }, { 11, 10, 1004 }, { 12, 10, 379 }, - { 12, 10, 679 }, { 13, 10, 117 }, { 13, 11, 202 }, { 13, 10, 412 }, - { 14, 10, 25 }, { 15, 10, 52 }, { 15, 10, 161 }, { 16, 10, 47 }, - { 20, 11, 51 }, { 21, 10, 2 }, { 6, 11, 121 }, { 6, 11, 124 }, - { 6, 11, 357 }, { 7, 11, 1138 }, { 7, 11, 1295 }, { 8, 11, 162 }, - { 11, 11, 655 }, { 8, 0, 449 }, { 4, 10, 937 }, { 5, 10, 801 }, - { 8, 11, 449 }, { 11, 11, 958 }, { 6, 0, 181 }, { 7, 0, 537 }, - { 8, 0, 64 }, { 9, 0, 127 }, { 10, 0, 496 }, { 12, 0, 510 }, - { 13, 0, 384 }, { 10, 11, 253 }, { 4, 0, 244 }, { 7, 0, 233 }, - { 5, 11, 237 }, { 4, 10, 365 }, { 6, 0, 1650 }, { 10, 0, 702 }, - { 11, 0, 245 }, { 5, 10, 7 }, { 11, 10, 774 }, { 13, 0, 463 }, - { 20, 0, 49 }, { 13, 11, 463 }, { 20, 11, 49 }, { 4, 10, 734 }, - { 5, 10, 662 }, { 6, 10, 430 }, { 4, 10, 746 }, { 7, 10, 1090 }, - { 5, 10, 360 }, { 8, 10, 237 }, { 9, 0, 338 }, { 15, 11, 10 }, - { 7, 11, 571 }, { 10, 11, 366 }, { 6, 0, 1279 }, { 9, 11, 513 }, - { 10, 11, 22 }, { 10, 11, 39 }, { 12, 11, 122 }, { 12, 11, 187 }, - { 5, 0, 896 }, { 18, 0, 178 }, { 6, 0, 695 }, { 9, 0, 808 }, - { 6, 11, 587 }, { 7, 11, 107 }, { 7, 11, 838 }, { 8, 11, 550 }, - { 10, 11, 401 }, { 7, 0, 1117 }, { 8, 0, 539 }, { 4, 10, 277 }, - { 5, 10, 608 }, { 6, 10, 493 }, { 7, 10, 457 }, { 12, 10, 384 }, - { 5, 11, 768 }, { 12, 0, 257 }, { 7, 10, 27 }, { 7, 10, 316 }, - { 12, 0, 1003 }, { 4, 0, 207 }, { 5, 0, 586 }, { 5, 0, 676 }, - { 6, 0, 448 }, { 8, 0, 244 }, { 11, 0, 1 }, { 13, 0, 3 }, - { 16, 0, 54 }, { 17, 0, 4 }, { 18, 0, 13 }, { 5, 10, 552 }, - { 4, 10, 401 }, { 9, 10, 264 }, { 5, 0, 516 }, { 7, 0, 1883 }, - { 7, 11, 1883 }, { 12, 0, 960 }, { 4, 11, 894 }, { 5, 0, 4 }, - { 5, 0, 810 }, { 6, 0, 13 }, { 6, 0, 538 }, { 6, 0, 1690 }, - { 6, 0, 1726 }, { 7, 0, 499 }, { 7, 0, 1819 }, { 8, 0, 148 }, - { 8, 0, 696 }, { 8, 0, 791 }, { 12, 0, 125 }, { 15, 0, 9 }, - { 7, 0, 1268 }, { 11, 0, 30 }, { 14, 0, 315 }, { 9, 10, 543 }, - { 10, 10, 524 }, { 12, 10, 524 }, { 16, 10, 18 }, { 20, 10, 26 }, - { 20, 10, 65 }, { 6, 0, 748 }, { 4, 10, 205 }, { 5, 10, 623 }, - { 7, 10, 104 }, { 8, 10, 519 }, { 11, 0, 542 }, { 11, 0, 852 }, - { 12, 0, 6 }, { 4, 0, 848 }, { 7, 0, 1385 }, { 11, 0, 582 }, - { 11, 0, 650 }, { 11, 0, 901 }, { 11, 0, 949 }, { 12, 0, 232 }, - { 12, 0, 236 }, { 13, 0, 413 }, { 13, 0, 501 }, { 18, 0, 116 }, - { 7, 10, 579 }, { 9, 10, 41 }, { 9, 10, 244 }, { 9, 10, 669 }, - { 10, 10, 5 }, { 11, 10, 861 }, { 11, 10, 951 }, { 11, 10, 980 }, - { 4, 0, 945 }, { 6, 0, 1811 }, { 6, 0, 1845 }, { 6, 0, 1853 }, - { 6, 0, 1858 }, { 8, 0, 862 }, { 12, 0, 782 }, { 12, 0, 788 }, - { 18, 0, 160 }, { 20, 0, 117 }, { 4, 10, 717 }, { 4, 0, 925 }, - { 5, 0, 803 }, { 8, 0, 698 }, { 10, 0, 828 }, { 6, 0, 1416 }, - { 4, 0, 610 }, { 11, 0, 992 }, { 6, 0, 878 }, { 6, 0, 1477 }, - { 7, 0, 1847 }, { 10, 11, 531 }, { 9, 11, 539 }, { 6, 11, 272 }, - { 5, 0, 383 }, { 6, 0, 1404 }, { 4, 10, 489 }, { 4, 11, 9 }, - { 5, 11, 128 }, { 7, 11, 368 }, { 11, 11, 480 }, { 20, 11, 3 }, - { 8, 0, 986 }, { 9, 0, 660 }, { 10, 0, 347 }, { 7, 10, 892 }, - { 8, 11, 682 }, { 7, 0, 572 }, { 9, 0, 592 }, { 11, 0, 680 }, - { 12, 0, 356 }, { 12, 0, 550 }, { 7, 0, 1411 }, { 10, 11, 527 }, - { 4, 11, 2 }, { 7, 11, 545 }, { 7, 11, 894 }, { 9, 10, 473 }, - { 11, 0, 64 }, { 7, 11, 481 }, { 7, 10, 819 }, { 9, 10, 26 }, - { 9, 10, 392 }, { 9, 11, 792 }, { 10, 10, 152 }, { 10, 10, 226 }, - { 12, 10, 276 }, { 12, 10, 426 }, { 12, 10, 589 }, { 13, 10, 460 }, - { 15, 10, 97 }, { 19, 10, 48 }, { 20, 10, 104 }, { 7, 10, 51 }, - { 8, 11, 445 }, { 8, 11, 646 }, { 7, 0, 606 }, { 4, 10, 674 }, - { 6, 0, 1829 }, { 6, 0, 1830 }, { 4, 10, 770 }, { 5, 10, 79 }, - { 7, 10, 1027 }, { 7, 10, 1477 }, { 11, 10, 52 }, { 5, 11, 530 }, - { 14, 11, 113 }, { 6, 10, 1666 }, { 7, 0, 748 }, { 11, 0, 700 }, - { 6, 10, 195 }, { 5, 10, 789 }, { 9, 0, 87 }, { 10, 0, 365 }, - { 4, 10, 251 }, { 4, 10, 688 }, { 7, 10, 513 }, { 7, 10, 1284 }, - { 8, 11, 111 }, { 5, 0, 127 }, { 6, 0, 198 }, { 12, 0, 83 }, - { 5, 11, 556 }, { 5, 10, 889 }, { 4, 10, 160 }, { 5, 10, 330 }, - { 7, 10, 1434 }, { 8, 10, 174 }, { 5, 0, 276 }, { 6, 0, 55 }, - { 7, 0, 1369 }, { 10, 0, 864 }, { 8, 11, 16 }, { 12, 11, 568 }, - { 6, 0, 1752 }, { 8, 0, 726 }, { 7, 0, 1066 }, { 5, 0, 764 }, - { 6, 11, 186 }, { 9, 11, 426 }, { 11, 0, 683 }, { 11, 11, 683 }, - { 6, 0, 309 }, { 7, 0, 331 }, { 10, 0, 550 }, { 5, 10, 374 }, - { 6, 0, 1212 }, { 6, 0, 1852 }, { 7, 0, 1062 }, { 8, 0, 874 }, - { 8, 0, 882 }, { 10, 0, 936 }, { 4, 11, 585 }, { 6, 0, 1364 }, - { 7, 0, 986 }, { 5, 10, 731 }, { 6, 0, 723 }, { 6, 0, 1408 }, - { 10, 0, 381 }, { 7, 0, 1573 }, { 6, 0, 1025 }, { 4, 10, 626 }, - { 5, 10, 642 }, { 6, 10, 425 }, { 10, 10, 202 }, { 11, 10, 141 }, - { 4, 11, 93 }, { 5, 11, 252 }, { 6, 11, 229 }, { 7, 11, 291 }, - { 9, 11, 550 }, { 11, 11, 644 }, { 9, 11, 749 }, { 9, 11, 162 }, - { 4, 11, 381 }, { 7, 0, 1559 }, { 6, 0, 194 }, { 7, 0, 133 }, - { 10, 0, 493 }, { 10, 0, 570 }, { 11, 0, 664 }, { 5, 0, 24 }, - { 5, 0, 569 }, { 6, 0, 3 }, { 6, 0, 119 }, { 6, 0, 143 }, - { 6, 0, 440 }, { 7, 0, 295 }, { 7, 0, 599 }, { 7, 0, 1686 }, - { 7, 0, 1854 }, { 8, 0, 424 }, { 9, 0, 43 }, { 9, 0, 584 }, - { 9, 0, 760 }, { 10, 0, 148 }, { 10, 0, 328 }, { 11, 0, 159 }, - { 11, 0, 253 }, { 11, 0, 506 }, { 12, 0, 487 }, { 12, 0, 531 }, - { 6, 0, 661 }, { 6, 0, 1517 }, { 8, 10, 835 }, { 23, 10, 17 }, - { 5, 0, 14 }, { 5, 0, 892 }, { 6, 0, 283 }, { 7, 0, 234 }, - { 8, 0, 537 }, { 11, 0, 541 }, { 4, 0, 126 }, { 8, 0, 635 }, - { 19, 0, 34 }, { 4, 0, 316 }, { 4, 0, 495 }, { 7, 0, 1561 }, - { 4, 11, 187 }, { 5, 11, 184 }, { 5, 11, 690 }, { 7, 11, 1869 }, - { 10, 11, 756 }, { 11, 11, 783 }, { 4, 0, 998 }, { 9, 0, 861 }, - { 8, 0, 1009 }, { 11, 11, 292 }, { 5, 11, 21 }, { 6, 11, 77 }, - { 6, 11, 157 }, { 7, 11, 974 }, { 7, 11, 1301 }, { 7, 11, 1339 }, - { 7, 11, 1490 }, { 7, 11, 1873 }, { 9, 11, 628 }, { 7, 11, 1283 }, - { 9, 11, 227 }, { 9, 11, 499 }, { 10, 11, 341 }, { 11, 11, 325 }, - { 11, 11, 408 }, { 14, 11, 180 }, { 15, 11, 144 }, { 18, 11, 47 }, - { 19, 11, 49 }, { 4, 0, 64 }, { 5, 0, 352 }, { 5, 0, 720 }, - { 6, 0, 368 }, { 11, 0, 359 }, { 5, 10, 384 }, { 8, 10, 455 }, - { 12, 10, 48 }, { 5, 10, 264 }, { 6, 10, 184 }, { 7, 0, 1577 }, - { 10, 0, 304 }, { 10, 0, 549 }, { 12, 0, 365 }, { 13, 0, 220 }, - { 13, 0, 240 }, { 14, 0, 33 }, { 6, 0, 1107 }, { 6, 0, 929 }, - { 7, 0, 1142 }, { 6, 0, 175 }, { 9, 0, 289 }, { 5, 0, 432 }, - { 5, 0, 913 }, { 6, 0, 279 }, { 7, 0, 219 }, { 5, 10, 633 }, - { 7, 10, 1323 }, { 7, 0, 785 }, { 7, 10, 359 }, { 8, 10, 243 }, - { 12, 10, 175 }, { 11, 0, 595 }, { 4, 10, 105 }, { 8, 11, 398 }, - { 9, 11, 681 }, { 11, 11, 632 }, { 12, 0, 80 }, { 5, 0, 931 }, - { 6, 0, 1698 }, { 14, 11, 241 }, { 6, 11, 20 }, { 6, 0, 1323 }, - { 11, 0, 526 }, { 11, 0, 939 }, { 13, 0, 290 }, { 5, 0, 774 }, - { 6, 0, 780 }, { 6, 0, 1637 }, { 6, 0, 1686 }, { 6, 0, 1751 }, - { 8, 0, 559 }, { 13, 0, 109 }, { 13, 0, 127 }, { 7, 0, 1167 }, - { 11, 0, 934 }, { 13, 0, 391 }, { 17, 0, 76 }, { 7, 11, 709 }, - { 7, 0, 963 }, { 6, 0, 260 }, { 7, 0, 1484 }, { 6, 0, 573 }, - { 4, 10, 758 }, { 11, 11, 941 }, { 7, 10, 1649 }, { 17, 11, 36 }, - { 4, 0, 292 }, { 9, 0, 580 }, { 4, 0, 736 }, { 5, 0, 871 }, - { 6, 0, 1689 }, { 7, 0, 1944 }, { 7, 11, 945 }, { 11, 11, 713 }, - { 11, 11, 744 }, { 6, 0, 1164 }, { 7, 11, 937 }, { 6, 0, 1922 }, - { 9, 0, 982 }, { 15, 0, 173 }, { 15, 0, 178 }, { 15, 0, 200 }, - { 18, 0, 189 }, { 18, 0, 207 }, { 21, 0, 47 }, { 7, 11, 1652 }, - { 7, 0, 1695 }, { 11, 10, 128 }, { 6, 0, 63 }, { 7, 0, 920 }, - { 5, 0, 793 }, { 15, 11, 134 }, { 5, 10, 918 }, { 5, 0, 67 }, - { 6, 0, 62 }, { 6, 0, 374 }, { 7, 0, 1391 }, { 9, 0, 790 }, - { 12, 0, 47 }, { 4, 11, 579 }, { 5, 11, 226 }, { 5, 11, 323 }, - { 7, 11, 960 }, { 10, 11, 784 }, { 13, 11, 191 }, { 4, 0, 391 }, - { 7, 0, 1169 }, { 9, 0, 443 }, { 13, 11, 232 }, { 18, 11, 35 }, - { 4, 10, 340 }, { 4, 0, 271 }, { 9, 11, 313 }, { 5, 11, 973 }, - { 9, 11, 659 }, { 6, 0, 1140 }, { 6, 11, 135 }, { 7, 11, 1176 }, - { 4, 0, 253 }, { 5, 0, 544 }, { 7, 0, 300 }, { 9, 0, 340 }, - { 7, 0, 897 }, { 5, 10, 985 }, { 7, 10, 509 }, { 17, 10, 96 }, - { 10, 11, 735 }, { 7, 10, 1919 }, { 10, 0, 890 }, { 5, 0, 818 }, - { 6, 0, 1122 }, { 5, 0, 53 }, { 5, 0, 541 }, { 6, 0, 94 }, - { 6, 0, 499 }, { 7, 0, 230 }, { 11, 0, 321 }, { 4, 0, 920 }, - { 5, 0, 25 }, { 5, 0, 790 }, { 6, 0, 457 }, { 7, 0, 853 }, - { 8, 0, 788 }, { 14, 11, 31 }, { 4, 10, 247 }, { 7, 11, 314 }, - { 4, 0, 468 }, { 7, 0, 243 }, { 6, 10, 337 }, { 7, 10, 494 }, - { 8, 10, 27 }, { 8, 10, 599 }, { 10, 10, 153 }, { 4, 10, 184 }, - { 5, 10, 390 }, { 7, 10, 618 }, { 7, 10, 1456 }, { 11, 10, 710 }, - { 6, 0, 870 }, { 6, 0, 1238 }, { 6, 0, 1765 }, { 10, 0, 853 }, - { 10, 0, 943 }, { 14, 0, 437 }, { 14, 0, 439 }, { 14, 0, 443 }, - { 14, 0, 446 }, { 14, 0, 452 }, { 14, 0, 469 }, { 14, 0, 471 }, - { 14, 0, 473 }, { 16, 0, 93 }, { 16, 0, 102 }, { 16, 0, 110 }, - { 20, 0, 121 }, { 4, 0, 605 }, { 7, 0, 518 }, { 7, 0, 1282 }, - { 7, 0, 1918 }, { 10, 0, 180 }, { 11, 0, 218 }, { 5, 0, 822 }, - { 4, 0, 634 }, { 11, 0, 916 }, { 14, 0, 419 }, { 6, 11, 281 }, - { 7, 11, 6 }, { 8, 11, 282 }, { 8, 11, 480 }, { 8, 11, 499 }, - { 9, 11, 198 }, { 10, 11, 143 }, { 10, 11, 169 }, { 10, 11, 211 }, - { 10, 11, 417 }, { 10, 11, 574 }, { 11, 11, 147 }, { 11, 11, 395 }, - { 12, 11, 75 }, { 12, 11, 407 }, { 12, 11, 608 }, { 13, 11, 500 }, - { 14, 11, 251 }, { 6, 0, 898 }, { 6, 0, 36 }, { 7, 0, 658 }, - { 8, 0, 454 }, { 22, 11, 48 }, { 5, 11, 674 }, { 7, 11, 1776 }, - { 4, 11, 419 }, { 10, 10, 227 }, { 11, 10, 497 }, { 11, 10, 709 }, - { 12, 10, 415 }, { 6, 10, 360 }, { 7, 10, 1664 }, { 8, 10, 478 }, - { 9, 0, 806 }, { 12, 11, 508 }, { 14, 11, 102 }, { 14, 11, 226 }, - { 16, 11, 57 }, { 7, 11, 1123 }, { 4, 11, 138 }, { 7, 11, 1012 }, - { 7, 11, 1280 }, { 9, 11, 76 }, { 5, 11, 29 }, { 12, 11, 638 }, - { 8, 10, 699 }, { 6, 0, 1326 }, { 4, 0, 104 }, { 7, 11, 735 }, - { 4, 10, 739 }, { 6, 0, 1331 }, { 7, 0, 260 }, { 7, 11, 260 }, - { 7, 11, 1063 }, { 7, 0, 45 }, { 9, 0, 542 }, { 9, 0, 566 }, - { 10, 0, 728 }, { 9, 10, 869 }, { 4, 10, 67 }, { 5, 10, 422 }, - { 7, 10, 1037 }, { 7, 10, 1289 }, { 7, 10, 1555 }, { 9, 10, 741 }, - { 17, 10, 108 }, { 11, 0, 263 }, { 6, 0, 1516 }, { 14, 0, 146 }, - { 15, 0, 42 }, { 16, 0, 23 }, { 17, 0, 86 }, { 18, 0, 17 }, - { 10, 0, 468 }, { 8, 0, 1005 }, { 4, 11, 17 }, { 5, 11, 23 }, - { 7, 11, 995 }, { 11, 11, 383 }, { 11, 11, 437 }, { 12, 11, 460 }, - { 12, 11, 532 }, { 7, 0, 87 }, { 14, 0, 288 }, { 10, 10, 96 }, - { 7, 11, 626 }, { 16, 10, 26 }, { 7, 0, 988 }, { 7, 0, 1939 }, - { 9, 0, 64 }, { 9, 0, 502 }, { 12, 0, 22 }, { 12, 0, 34 }, - { 13, 0, 12 }, { 13, 0, 234 }, { 19, 0, 77 }, { 13, 0, 133 }, - { 8, 10, 203 }, { 11, 10, 823 }, { 11, 10, 846 }, { 12, 10, 482 }, - { 13, 10, 277 }, { 13, 10, 302 }, { 13, 10, 464 }, { 14, 10, 205 }, - { 14, 10, 221 }, { 4, 10, 449 }, { 5, 10, 718 }, { 7, 0, 141 }, - { 6, 0, 1842 }, { 8, 0, 872 }, { 8, 11, 70 }, { 12, 11, 171 }, - { 13, 11, 272 }, { 4, 10, 355 }, { 6, 10, 311 }, { 9, 10, 256 }, - { 10, 10, 404 }, { 4, 0, 619 }, { 9, 0, 261 }, { 10, 11, 233 }, - { 10, 10, 758 }, { 11, 11, 76 }, { 5, 0, 246 }, { 8, 0, 189 }, - { 9, 0, 355 }, { 9, 0, 512 }, { 10, 0, 124 }, { 10, 0, 453 }, - { 11, 0, 143 }, { 11, 0, 416 }, { 11, 0, 859 }, { 13, 0, 341 }, - { 6, 11, 442 }, { 5, 10, 827 }, { 5, 10, 64 }, { 12, 10, 581 }, - { 4, 10, 442 }, { 7, 10, 1047 }, { 7, 10, 1352 }, { 7, 10, 1643 }, - { 6, 11, 1709 }, { 5, 0, 678 }, { 6, 0, 305 }, { 7, 0, 775 }, - { 7, 0, 1065 }, { 5, 10, 977 }, { 11, 11, 69 }, { 12, 11, 105 }, - { 12, 11, 117 }, { 13, 11, 213 }, { 14, 11, 13 }, { 14, 11, 62 }, - { 14, 11, 177 }, { 14, 11, 421 }, { 15, 11, 19 }, { 18, 11, 141 }, - { 9, 11, 309 }, { 5, 0, 35 }, { 7, 0, 862 }, { 7, 0, 1886 }, - { 10, 0, 179 }, { 8, 0, 285 }, { 4, 0, 517 }, { 7, 11, 976 }, - { 9, 11, 146 }, { 10, 11, 206 }, { 10, 11, 596 }, { 13, 11, 218 }, - { 14, 11, 153 }, { 4, 10, 254 }, { 6, 0, 214 }, { 12, 0, 540 }, - { 4, 10, 275 }, { 7, 10, 1219 }, { 12, 10, 376 }, { 8, 0, 667 }, - { 11, 0, 403 }, { 18, 0, 83 }, { 12, 0, 74 }, { 10, 11, 648 }, - { 11, 11, 671 }, { 15, 11, 46 }, { 7, 0, 125 }, { 6, 10, 1753 }, - { 5, 0, 761 }, { 6, 0, 912 }, { 4, 11, 518 }, { 6, 10, 369 }, - { 6, 10, 502 }, { 7, 10, 1036 }, { 7, 11, 1136 }, { 8, 10, 348 }, - { 9, 10, 452 }, { 10, 10, 26 }, { 11, 10, 224 }, { 11, 10, 387 }, - { 11, 10, 772 }, { 12, 10, 95 }, { 12, 10, 629 }, { 13, 10, 195 }, - { 13, 10, 207 }, { 13, 10, 241 }, { 14, 10, 260 }, { 14, 10, 270 }, - { 15, 10, 140 }, { 10, 0, 131 }, { 12, 0, 72 }, { 4, 10, 269 }, - { 5, 10, 480 }, { 7, 10, 532 }, { 7, 10, 1197 }, { 7, 10, 1358 }, - { 8, 10, 291 }, { 11, 10, 349 }, { 14, 10, 396 }, { 8, 11, 689 }, - { 9, 11, 863 }, { 8, 0, 333 }, { 10, 0, 182 }, { 4, 11, 18 }, - { 7, 11, 145 }, { 7, 11, 444 }, { 7, 11, 1278 }, { 8, 11, 49 }, - { 8, 11, 400 }, { 9, 11, 71 }, { 9, 11, 250 }, { 10, 11, 459 }, - { 12, 11, 160 }, { 16, 11, 24 }, { 14, 11, 35 }, { 14, 11, 191 }, - { 7, 11, 1864 }, { 7, 0, 1338 }, { 20, 10, 15 }, { 14, 0, 94 }, - { 15, 0, 65 }, { 16, 0, 4 }, { 16, 0, 77 }, { 16, 0, 80 }, - { 17, 0, 5 }, { 12, 11, 82 }, { 15, 11, 36 }, { 5, 11, 1010 }, - { 5, 0, 449 }, { 5, 0, 646 }, { 7, 0, 86 }, { 8, 0, 103 }, - { 7, 10, 657 }, { 7, 0, 2028 }, { 10, 0, 641 }, { 8, 10, 533 }, - { 6, 0, 1 }, { 11, 11, 970 }, { 5, 11, 87 }, { 7, 11, 313 }, - { 7, 11, 1103 }, { 10, 11, 112 }, { 10, 11, 582 }, { 11, 11, 389 }, - { 11, 11, 813 }, { 12, 11, 385 }, { 13, 11, 286 }, { 14, 11, 124 }, - { 18, 11, 108 }, { 6, 0, 869 }, { 4, 11, 267 }, { 6, 0, 277 }, - { 7, 0, 1274 }, { 7, 0, 1386 }, { 18, 0, 87 }, { 6, 0, 187 }, - { 7, 0, 39 }, { 7, 0, 1203 }, { 8, 0, 380 }, { 14, 0, 117 }, - { 21, 0, 28 }, { 4, 10, 211 }, { 4, 10, 332 }, { 5, 10, 335 }, - { 6, 10, 238 }, { 7, 10, 269 }, { 7, 10, 811 }, { 7, 10, 1797 }, - { 8, 10, 836 }, { 9, 10, 507 }, { 13, 10, 242 }, { 4, 0, 785 }, - { 5, 0, 368 }, { 6, 0, 297 }, { 7, 0, 793 }, { 11, 0, 938 }, - { 7, 0, 464 }, { 8, 0, 558 }, { 11, 0, 105 }, { 12, 0, 231 }, - { 14, 0, 386 }, { 15, 0, 102 }, { 20, 0, 75 }, { 5, 10, 1009 }, - { 8, 0, 877 }, { 12, 0, 731 }, { 11, 11, 289 }, { 10, 11, 249 }, - { 11, 11, 209 }, { 4, 11, 561 }, { 6, 0, 1608 }, { 4, 11, 760 }, - { 6, 0, 1429 }, { 9, 11, 154 }, { 12, 11, 485 }, { 5, 10, 228 }, - { 6, 10, 203 }, { 7, 10, 156 }, { 8, 10, 347 }, { 9, 10, 265 }, - { 7, 0, 1010 }, { 11, 0, 733 }, { 11, 0, 759 }, { 13, 0, 34 }, - { 14, 0, 427 }, { 18, 0, 45 }, { 7, 10, 1131 }, { 7, 10, 1468 }, - { 8, 11, 255 }, { 7, 0, 1656 }, { 9, 0, 369 }, { 10, 0, 338 }, - { 10, 0, 490 }, { 11, 0, 154 }, { 11, 0, 545 }, { 11, 0, 775 }, - { 13, 0, 77 }, { 13, 0, 274 }, { 5, 11, 621 }, { 6, 0, 1038 }, - { 4, 11, 368 }, { 7, 11, 641 }, { 6, 0, 2010 }, { 8, 0, 979 }, - { 8, 0, 985 }, { 10, 0, 951 }, { 10, 0, 1011 }, { 6, 0, 1005 }, - { 19, 0, 121 }, { 5, 10, 291 }, { 5, 10, 318 }, { 7, 10, 765 }, - { 9, 10, 389 }, { 12, 10, 548 }, { 5, 0, 20 }, { 6, 0, 298 }, - { 7, 0, 659 }, { 9, 0, 219 }, { 7, 0, 1440 }, { 11, 0, 854 }, - { 11, 0, 872 }, { 11, 0, 921 }, { 12, 0, 551 }, { 13, 0, 472 }, - { 14, 0, 367 }, { 5, 0, 490 }, { 6, 0, 615 }, { 6, 0, 620 }, - { 7, 0, 683 }, { 6, 0, 1070 }, { 6, 0, 1597 }, { 11, 0, 522 }, - { 4, 0, 439 }, { 8, 0, 669 }, { 6, 0, 766 }, { 6, 0, 1143 }, - { 6, 0, 1245 }, { 10, 10, 525 }, { 11, 10, 82 }, { 9, 11, 92 }, - { 19, 11, 91 }, { 6, 0, 668 }, { 6, 0, 1218 }, { 6, 11, 525 }, - { 9, 11, 876 }, { 12, 11, 284 }, { 4, 0, 233 }, { 8, 0, 547 }, - { 4, 10, 422 }, { 5, 10, 355 }, { 17, 10, 0 }, { 6, 11, 300 }, - { 7, 11, 1515 }, { 4, 0, 482 }, { 9, 10, 905 }, { 4, 0, 886 }, - { 7, 0, 346 }, { 5, 11, 594 }, { 5, 10, 865 }, { 5, 10, 914 }, - { 6, 10, 1625 }, { 7, 0, 334 }, { 5, 0, 795 }, { 6, 0, 1741 }, - { 5, 10, 234 }, { 7, 10, 1383 }, { 6, 11, 1641 }, { 8, 11, 820 }, - { 7, 0, 371 }, { 7, 11, 1313 }, { 10, 11, 660 }, { 7, 10, 1312 }, - { 7, 0, 622 }, { 7, 0, 625 }, { 7, 0, 1750 }, { 7, 0, 339 }, - { 4, 0, 203 }, { 7, 0, 1936 }, { 15, 0, 29 }, { 16, 0, 38 }, - { 15, 11, 29 }, { 16, 11, 38 }, { 5, 0, 338 }, { 7, 0, 1256 }, - { 7, 10, 1493 }, { 10, 0, 130 }, { 6, 10, 421 }, { 7, 10, 61 }, - { 7, 10, 1540 }, { 10, 10, 501 }, { 6, 11, 389 }, { 7, 11, 149 }, - { 9, 11, 142 }, { 10, 11, 94 }, { 9, 10, 341 }, { 11, 0, 678 }, - { 12, 0, 307 }, { 14, 10, 98 }, { 6, 11, 8 }, { 7, 11, 1881 }, - { 8, 11, 91 }, { 7, 0, 2044 }, { 6, 0, 770 }, { 6, 0, 802 }, - { 6, 0, 812 }, { 7, 0, 311 }, { 9, 0, 308 }, { 12, 0, 255 }, - { 6, 10, 102 }, { 7, 10, 72 }, { 15, 10, 142 }, { 19, 10, 67 }, - { 23, 10, 30 }, { 7, 10, 823 }, { 7, 0, 1266 }, { 7, 11, 1746 }, - { 7, 10, 1870 }, { 4, 0, 400 }, { 5, 0, 267 }, { 7, 0, 232 }, - { 7, 11, 24 }, { 11, 11, 542 }, { 11, 11, 852 }, { 7, 11, 1739 }, - { 4, 11, 503 }, { 7, 11, 1661 }, { 5, 11, 130 }, { 7, 11, 1314 }, - { 9, 11, 610 }, { 10, 11, 718 }, { 11, 11, 601 }, { 11, 11, 819 }, - { 11, 11, 946 }, { 12, 11, 536 }, { 10, 11, 149 }, { 11, 11, 280 }, - { 14, 11, 336 }, { 7, 0, 739 }, { 11, 0, 690 }, { 7, 11, 1946 }, - { 8, 10, 48 }, { 8, 10, 88 }, { 8, 10, 582 }, { 8, 10, 681 }, - { 9, 10, 373 }, { 9, 10, 864 }, { 11, 10, 157 }, { 11, 10, 843 }, - { 20, 10, 27 }, { 6, 0, 990 }, { 4, 10, 88 }, { 5, 10, 137 }, - { 5, 10, 174 }, { 5, 10, 777 }, { 6, 10, 1664 }, { 6, 10, 1725 }, - { 7, 10, 77 }, { 7, 10, 426 }, { 7, 10, 1317 }, { 7, 10, 1355 }, - { 8, 10, 126 }, { 8, 10, 563 }, { 9, 10, 523 }, { 9, 10, 750 }, - { 10, 10, 310 }, { 10, 10, 836 }, { 11, 10, 42 }, { 11, 10, 318 }, - { 11, 10, 731 }, { 12, 10, 68 }, { 12, 10, 92 }, { 12, 10, 507 }, - { 12, 10, 692 }, { 13, 10, 81 }, { 13, 10, 238 }, { 13, 10, 374 }, - { 14, 10, 436 }, { 18, 10, 138 }, { 19, 10, 78 }, { 19, 10, 111 }, - { 20, 10, 55 }, { 20, 10, 77 }, { 20, 10, 92 }, { 13, 10, 418 }, - { 7, 0, 1831 }, { 4, 10, 938 }, { 6, 0, 776 }, { 6, 0, 915 }, - { 10, 10, 351 }, { 5, 11, 348 }, { 6, 11, 522 }, { 6, 10, 1668 }, - { 7, 10, 1499 }, { 8, 10, 117 }, { 9, 10, 314 }, { 10, 10, 174 }, - { 7, 10, 707 }, { 4, 0, 613 }, { 5, 10, 403 }, { 4, 11, 392 }, - { 5, 11, 433 }, { 9, 11, 633 }, { 11, 11, 629 }, { 5, 0, 763 }, - { 4, 0, 878 }, { 4, 0, 977 }, { 4, 0, 100 }, { 6, 0, 463 }, - { 4, 10, 44 }, { 5, 10, 311 }, { 7, 10, 639 }, { 7, 10, 762 }, - { 7, 10, 1827 }, { 9, 10, 8 }, { 9, 10, 462 }, { 20, 10, 83 }, - { 6, 11, 234 }, { 4, 10, 346 }, { 7, 10, 115 }, { 9, 10, 180 }, - { 9, 10, 456 }, { 10, 10, 363 }, { 5, 0, 362 }, { 5, 0, 443 }, - { 6, 0, 318 }, { 7, 0, 1019 }, { 11, 0, 623 }, { 5, 0, 463 }, - { 8, 0, 296 }, { 7, 11, 140 }, { 7, 11, 1950 }, { 8, 11, 680 }, - { 11, 11, 817 }, { 19, 11, 88 }, { 7, 11, 1222 }, { 10, 11, 386 }, - { 14, 0, 137 }, { 4, 0, 454 }, { 7, 0, 1914 }, { 6, 11, 5 }, - { 7, 10, 1051 }, { 9, 10, 545 }, { 11, 11, 249 }, { 12, 11, 313 }, - { 16, 11, 66 }, { 17, 11, 26 }, { 7, 0, 1527 }, { 17, 0, 58 }, - { 20, 11, 59 }, { 5, 0, 48 }, { 5, 0, 404 }, { 6, 0, 557 }, - { 7, 0, 458 }, { 8, 0, 597 }, { 10, 0, 455 }, { 10, 0, 606 }, - { 11, 0, 49 }, { 11, 0, 548 }, { 12, 0, 476 }, { 13, 0, 18 }, - { 13, 0, 450 }, { 5, 11, 963 }, { 6, 11, 1773 }, { 5, 0, 729 }, - { 10, 11, 586 }, { 5, 0, 442 }, { 7, 0, 1984 }, { 6, 0, 449 }, - { 16, 0, 40 }, { 4, 0, 853 }, { 7, 11, 180 }, { 8, 11, 509 }, - { 8, 11, 792 }, { 6, 10, 185 }, { 7, 10, 1899 }, { 9, 10, 875 }, - { 11, 10, 673 }, { 6, 11, 524 }, { 12, 0, 227 }, { 4, 10, 327 }, - { 5, 10, 478 }, { 7, 10, 1332 }, { 8, 10, 753 }, { 6, 0, 1491 }, - { 5, 10, 1020 }, { 5, 10, 1022 }, { 4, 10, 103 }, { 5, 10, 401 }, - { 4, 11, 931 }, { 4, 10, 499 }, { 7, 10, 1421 }, { 5, 0, 55 }, - { 7, 0, 376 }, { 12, 0, 161 }, { 5, 0, 450 }, { 6, 0, 1174 }, - { 6, 0, 1562 }, { 10, 0, 62 }, { 13, 0, 400 }, { 7, 11, 1837 }, - { 12, 0, 207 }, { 7, 0, 869 }, { 4, 11, 773 }, { 5, 11, 618 }, - { 9, 11, 756 }, { 4, 10, 96 }, { 4, 0, 213 }, { 7, 0, 223 }, - { 8, 0, 80 }, { 7, 10, 968 }, { 4, 11, 90 }, { 5, 11, 337 }, - { 5, 11, 545 }, { 7, 11, 754 }, { 9, 11, 186 }, { 10, 11, 72 }, - { 10, 11, 782 }, { 11, 11, 513 }, { 11, 11, 577 }, { 11, 11, 610 }, - { 11, 11, 889 }, { 11, 11, 961 }, { 12, 11, 354 }, { 12, 11, 362 }, - { 12, 11, 461 }, { 12, 11, 595 }, { 13, 11, 79 }, { 15, 11, 121 }, - { 7, 0, 381 }, { 7, 0, 806 }, { 7, 0, 820 }, { 8, 0, 354 }, - { 8, 0, 437 }, { 8, 0, 787 }, { 9, 0, 657 }, { 10, 0, 58 }, - { 10, 0, 339 }, { 10, 0, 749 }, { 11, 0, 914 }, { 12, 0, 162 }, - { 13, 0, 75 }, { 14, 0, 106 }, { 14, 0, 198 }, { 14, 0, 320 }, - { 14, 0, 413 }, { 18, 0, 43 }, { 8, 0, 747 }, { 8, 0, 954 }, - { 6, 0, 1073 }, { 7, 0, 556 }, { 7, 11, 151 }, { 9, 11, 329 }, - { 11, 11, 254 }, { 5, 0, 692 }, { 6, 0, 1395 }, { 6, 10, 563 }, - { 9, 10, 224 }, { 6, 0, 191 }, { 4, 0, 804 }, { 9, 11, 187 }, - { 10, 11, 36 }, { 17, 11, 44 }, { 18, 11, 64 }, { 7, 11, 165 }, - { 7, 11, 919 }, { 8, 11, 517 }, { 4, 11, 506 }, { 5, 11, 295 }, - { 7, 11, 1680 }, { 15, 11, 14 }, { 16, 11, 5 }, { 4, 0, 706 }, - { 6, 0, 162 }, { 7, 0, 1960 }, { 8, 0, 831 }, { 7, 11, 1376 }, - { 7, 11, 987 }, { 9, 11, 688 }, { 10, 11, 522 }, { 11, 11, 788 }, - { 12, 11, 566 }, { 22, 0, 35 }, { 10, 0, 426 }, { 7, 0, 1235 }, - { 7, 11, 1741 }, { 7, 11, 389 }, { 7, 11, 700 }, { 7, 11, 940 }, - { 8, 11, 514 }, { 9, 11, 116 }, { 9, 11, 535 }, { 10, 11, 118 }, - { 11, 11, 107 }, { 11, 11, 148 }, { 11, 11, 922 }, { 12, 11, 254 }, - { 12, 11, 421 }, { 14, 11, 238 }, { 6, 0, 1234 }, { 4, 11, 743 }, - { 4, 10, 910 }, { 5, 10, 832 }, { 7, 11, 1335 }, { 13, 0, 96 }, - { 7, 11, 185 }, { 18, 0, 149 }, { 4, 0, 204 }, { 9, 0, 902 }, - { 4, 11, 784 }, { 5, 11, 745 }, { 8, 0, 833 }, { 8, 0, 949 }, - { 7, 0, 366 }, { 9, 0, 287 }, { 12, 0, 199 }, { 12, 0, 556 }, - { 12, 0, 577 }, { 5, 11, 81 }, { 7, 11, 146 }, { 7, 11, 1342 }, - { 7, 11, 1446 }, { 8, 11, 53 }, { 8, 11, 561 }, { 8, 11, 694 }, - { 8, 11, 754 }, { 9, 11, 97 }, { 9, 11, 115 }, { 9, 11, 894 }, - { 10, 11, 462 }, { 10, 11, 813 }, { 11, 11, 230 }, { 11, 11, 657 }, - { 11, 11, 699 }, { 11, 11, 748 }, { 12, 11, 119 }, { 12, 11, 200 }, - { 12, 11, 283 }, { 14, 11, 273 }, { 17, 11, 15 }, { 5, 11, 408 }, - { 9, 11, 747 }, { 9, 11, 498 }, { 12, 11, 181 }, { 6, 0, 2020 }, - { 8, 0, 992 }, { 5, 0, 356 }, { 7, 0, 224 }, { 6, 0, 784 }, - { 7, 0, 630 }, { 9, 0, 567 }, { 11, 0, 150 }, { 11, 0, 444 }, - { 13, 0, 119 }, { 8, 10, 528 }, { 9, 10, 348 }, { 6, 0, 539 }, - { 4, 10, 20 }, { 5, 10, 616 }, { 14, 0, 27 }, { 7, 11, 30 }, - { 8, 11, 86 }, { 8, 11, 315 }, { 8, 11, 700 }, { 9, 11, 576 }, - { 9, 11, 858 }, { 11, 11, 310 }, { 11, 11, 888 }, { 11, 11, 904 }, - { 12, 11, 361 }, { 13, 11, 248 }, { 10, 11, 839 }, { 6, 0, 755 }, - { 6, 0, 1063 }, { 7, 10, 1091 }, { 7, 10, 1765 }, { 6, 11, 428 }, - { 7, 11, 524 }, { 8, 11, 169 }, { 8, 11, 234 }, { 9, 11, 480 }, - { 10, 11, 646 }, { 11, 0, 814 }, { 7, 11, 1462 }, { 11, 11, 659 }, - { 4, 10, 26 }, { 5, 10, 429 }, { 6, 10, 245 }, { 7, 10, 704 }, - { 7, 10, 1379 }, { 7, 10, 1474 }, { 7, 11, 1205 }, { 10, 11, 637 }, - { 11, 11, 803 }, { 4, 10, 621 }, { 8, 0, 987 }, { 4, 11, 266 }, - { 8, 11, 4 }, { 9, 11, 39 }, { 10, 11, 166 }, { 11, 11, 918 }, - { 12, 11, 635 }, { 20, 11, 10 }, { 22, 11, 27 }, { 22, 11, 43 }, - { 4, 0, 235 }, { 7, 0, 255 }, { 4, 0, 194 }, { 5, 0, 584 }, - { 6, 0, 384 }, { 7, 0, 583 }, { 10, 0, 761 }, { 11, 0, 760 }, - { 11, 0, 851 }, { 5, 10, 542 }, { 6, 0, 1086 }, { 5, 10, 868 }, - { 8, 0, 1016 }, { 8, 0, 1018 }, { 7, 0, 1396 }, { 7, 11, 1396 }, - { 8, 10, 433 }, { 7, 10, 1495 }, { 10, 10, 215 }, { 13, 10, 124 }, - { 7, 11, 157 }, { 8, 11, 279 }, { 9, 11, 759 }, { 16, 11, 31 }, - { 16, 11, 39 }, { 16, 11, 75 }, { 18, 11, 24 }, { 20, 11, 42 }, - { 24, 11, 1 }, { 5, 0, 562 }, { 6, 11, 604 }, { 6, 0, 913 }, - { 5, 0, 191 }, { 9, 0, 271 }, { 4, 0, 470 }, { 6, 0, 153 }, - { 7, 0, 1503 }, { 7, 0, 1923 }, { 10, 0, 701 }, { 11, 0, 132 }, - { 11, 0, 227 }, { 11, 0, 320 }, { 11, 0, 436 }, { 11, 0, 525 }, - { 11, 0, 855 }, { 11, 0, 873 }, { 12, 0, 41 }, { 12, 0, 286 }, - { 13, 0, 103 }, { 13, 0, 284 }, { 14, 0, 255 }, { 14, 0, 262 }, - { 15, 0, 117 }, { 15, 0, 127 }, { 7, 0, 475 }, { 12, 0, 45 }, - { 19, 10, 112 }, { 4, 11, 567 }, { 9, 11, 859 }, { 6, 0, 713 }, - { 6, 0, 969 }, { 6, 0, 1290 }, { 6, 0, 1551 }, { 5, 0, 327 }, - { 6, 0, 552 }, { 6, 0, 1292 }, { 7, 0, 1754 }, { 9, 0, 604 }, - { 4, 0, 223 }, { 6, 0, 359 }, { 11, 0, 3 }, { 13, 0, 108 }, - { 14, 0, 89 }, { 16, 0, 22 }, { 5, 11, 762 }, { 7, 11, 1880 }, - { 9, 11, 680 }, { 11, 11, 798 }, { 5, 0, 80 }, { 6, 0, 405 }, - { 7, 0, 403 }, { 7, 0, 1502 }, { 8, 0, 456 }, { 9, 0, 487 }, - { 9, 0, 853 }, { 9, 0, 889 }, { 10, 0, 309 }, { 11, 0, 721 }, - { 11, 0, 994 }, { 12, 0, 430 }, { 13, 0, 165 }, { 5, 11, 298 }, - { 4, 10, 647 }, { 6, 0, 2016 }, { 18, 10, 10 }, { 18, 11, 10 }, - { 4, 0, 453 }, { 5, 0, 887 }, { 6, 0, 535 }, { 8, 0, 6 }, - { 8, 0, 543 }, { 8, 0, 826 }, { 8, 0, 975 }, { 10, 0, 961 }, - { 10, 0, 962 }, { 10, 10, 220 }, { 6, 0, 1891 }, { 6, 0, 1893 }, - { 9, 0, 916 }, { 9, 0, 965 }, { 9, 0, 972 }, { 12, 0, 801 }, - { 12, 0, 859 }, { 12, 0, 883 }, { 15, 0, 226 }, { 21, 0, 51 }, - { 4, 10, 109 }, { 7, 11, 267 }, { 7, 11, 92 }, { 7, 11, 182 }, - { 8, 11, 453 }, { 9, 11, 204 }, { 11, 11, 950 }, { 12, 11, 94 }, - { 12, 11, 644 }, { 16, 11, 20 }, { 16, 11, 70 }, { 16, 11, 90 }, - { 19, 11, 55 }, { 6, 10, 1746 }, { 6, 11, 71 }, { 7, 11, 845 }, - { 7, 11, 1308 }, { 8, 11, 160 }, { 9, 11, 318 }, { 5, 0, 101 }, - { 6, 0, 88 }, { 7, 0, 263 }, { 7, 0, 628 }, { 7, 0, 1677 }, - { 8, 0, 349 }, { 9, 0, 100 }, { 10, 0, 677 }, { 14, 0, 169 }, - { 14, 0, 302 }, { 14, 0, 313 }, { 15, 0, 48 }, { 15, 0, 84 }, - { 7, 11, 237 }, { 8, 11, 664 }, { 9, 11, 42 }, { 9, 11, 266 }, - { 9, 11, 380 }, { 9, 11, 645 }, { 10, 11, 177 }, { 10, 11, 276 }, - { 10, 11, 69 }, { 4, 0, 310 }, { 7, 0, 708 }, { 7, 0, 996 }, - { 9, 0, 795 }, { 10, 0, 390 }, { 10, 0, 733 }, { 11, 0, 451 }, - { 12, 0, 249 }, { 14, 0, 115 }, { 14, 0, 286 }, { 15, 0, 100 }, - { 5, 0, 587 }, { 4, 10, 40 }, { 10, 10, 67 }, { 11, 10, 117 }, - { 11, 10, 768 }, { 11, 10, 935 }, { 6, 0, 1942 }, { 7, 0, 512 }, - { 8, 0, 983 }, { 7, 10, 992 }, { 8, 10, 301 }, { 9, 10, 722 }, - { 12, 10, 63 }, { 13, 10, 29 }, { 14, 10, 161 }, { 15, 10, 18 }, - { 8, 11, 76 }, { 11, 10, 923 }, { 6, 0, 645 }, { 6, 0, 851 }, - { 4, 0, 498 }, { 4, 11, 293 }, { 7, 0, 217 }, { 8, 0, 140 }, - { 10, 0, 610 }, { 14, 11, 352 }, { 17, 11, 53 }, { 18, 11, 146 }, - { 18, 11, 152 }, { 19, 11, 11 }, { 22, 11, 54 }, { 6, 0, 1448 }, - { 10, 11, 841 }, { 5, 0, 905 }, { 4, 11, 605 }, { 7, 11, 518 }, - { 7, 11, 1282 }, { 7, 11, 1918 }, { 10, 11, 180 }, { 11, 11, 218 }, - { 11, 11, 917 }, { 7, 10, 825 }, { 12, 10, 328 }, { 4, 0, 456 }, - { 7, 0, 105 }, { 7, 0, 358 }, { 7, 0, 1637 }, { 8, 0, 643 }, - { 11, 0, 483 }, { 6, 0, 792 }, { 6, 11, 96 }, { 7, 11, 1426 }, - { 9, 11, 691 }, { 4, 11, 651 }, { 5, 11, 289 }, { 7, 11, 688 }, - { 8, 11, 35 }, { 9, 11, 511 }, { 10, 11, 767 }, { 19, 11, 118 }, - { 22, 0, 56 }, { 5, 0, 243 }, { 5, 0, 535 }, { 6, 10, 204 }, - { 10, 10, 320 }, { 10, 10, 583 }, { 13, 10, 502 }, { 14, 10, 72 }, - { 14, 10, 274 }, { 14, 10, 312 }, { 14, 10, 344 }, { 15, 10, 159 }, - { 16, 10, 62 }, { 16, 10, 69 }, { 17, 10, 30 }, { 18, 10, 42 }, - { 18, 10, 53 }, { 18, 10, 84 }, { 18, 10, 140 }, { 19, 10, 68 }, - { 19, 10, 85 }, { 20, 10, 5 }, { 20, 10, 45 }, { 20, 10, 101 }, - { 22, 10, 7 }, { 22, 10, 20 }, { 4, 10, 558 }, { 6, 10, 390 }, - { 7, 10, 162 }, { 7, 10, 689 }, { 9, 10, 360 }, { 10, 10, 653 }, - { 18, 11, 23 }, { 7, 0, 1748 }, { 5, 10, 856 }, { 6, 10, 1672 }, - { 6, 10, 1757 }, { 6, 10, 1781 }, { 5, 0, 539 }, { 5, 0, 754 }, - { 6, 0, 876 }, { 4, 11, 704 }, { 7, 11, 1078 }, { 5, 10, 92 }, - { 10, 10, 736 }, { 12, 10, 102 }, { 17, 0, 91 }, { 5, 10, 590 }, - { 9, 10, 213 }, { 6, 0, 1565 }, { 6, 0, 91 }, { 7, 0, 435 }, - { 4, 0, 939 }, { 12, 0, 792 }, { 6, 0, 1399 }, { 4, 0, 16 }, - { 5, 0, 316 }, { 5, 0, 842 }, { 6, 0, 370 }, { 6, 0, 1778 }, - { 8, 0, 166 }, { 11, 0, 812 }, { 12, 0, 206 }, { 12, 0, 351 }, - { 14, 0, 418 }, { 16, 0, 15 }, { 16, 0, 34 }, { 18, 0, 3 }, - { 19, 0, 3 }, { 19, 0, 7 }, { 20, 0, 4 }, { 21, 0, 21 }, - { 4, 11, 720 }, { 5, 11, 306 }, { 16, 0, 95 }, { 5, 11, 431 }, - { 4, 11, 234 }, { 7, 0, 551 }, { 4, 0, 999 }, { 6, 0, 1966 }, - { 6, 0, 2042 }, { 7, 0, 619 }, { 10, 0, 547 }, { 11, 0, 122 }, - { 12, 0, 601 }, { 15, 0, 7 }, { 20, 0, 20 }, { 5, 11, 464 }, - { 6, 11, 236 }, { 7, 11, 276 }, { 7, 11, 696 }, { 7, 11, 914 }, - { 7, 11, 1108 }, { 7, 11, 1448 }, { 9, 11, 15 }, { 9, 11, 564 }, - { 10, 11, 14 }, { 12, 11, 565 }, { 13, 11, 449 }, { 14, 11, 53 }, - { 15, 11, 13 }, { 16, 11, 64 }, { 17, 11, 41 }, { 6, 0, 884 }, - { 6, 0, 1019 }, { 6, 0, 1150 }, { 6, 11, 1767 }, { 12, 11, 194 }, - { 17, 11, 107 }, { 8, 10, 503 }, { 5, 11, 840 }, { 7, 0, 671 }, - { 6, 10, 466 }, { 4, 0, 888 }, { 4, 0, 149 }, { 10, 0, 368 }, - { 4, 0, 154 }, { 7, 0, 1134 }, { 8, 0, 105 }, { 7, 0, 983 }, - { 9, 11, 642 }, { 11, 11, 236 }, { 14, 11, 193 }, { 4, 0, 31 }, - { 6, 0, 429 }, { 7, 0, 962 }, { 9, 0, 458 }, { 11, 0, 691 }, - { 6, 0, 643 }, { 6, 0, 1102 }, { 4, 0, 312 }, { 4, 11, 68 }, - { 5, 11, 634 }, { 6, 11, 386 }, { 7, 11, 794 }, { 8, 11, 273 }, - { 9, 11, 563 }, { 10, 11, 105 }, { 10, 11, 171 }, { 11, 11, 94 }, - { 11, 11, 354 }, { 5, 0, 740 }, { 7, 0, 1642 }, { 4, 11, 95 }, - { 7, 11, 416 }, { 8, 11, 211 }, { 11, 11, 830 }, { 4, 0, 236 }, - { 10, 10, 241 }, { 7, 11, 731 }, { 13, 11, 20 }, { 15, 11, 11 }, - { 5, 0, 836 }, { 5, 0, 857 }, { 6, 0, 1680 }, { 7, 0, 59 }, - { 10, 0, 68 }, { 11, 0, 494 }, { 24, 11, 6 }, { 4, 0, 81 }, - { 11, 0, 867 }, { 7, 0, 795 }, { 5, 11, 689 }, { 4, 0, 1001 }, - { 5, 0, 282 }, { 6, 0, 1932 }, { 6, 0, 1977 }, { 6, 0, 1987 }, - { 6, 0, 1992 }, { 8, 0, 650 }, { 8, 0, 919 }, { 8, 0, 920 }, - { 8, 0, 923 }, { 8, 0, 926 }, { 8, 0, 927 }, { 8, 0, 931 }, - { 8, 0, 939 }, { 8, 0, 947 }, { 8, 0, 956 }, { 8, 0, 997 }, - { 9, 0, 907 }, { 10, 0, 950 }, { 10, 0, 953 }, { 10, 0, 954 }, - { 10, 0, 956 }, { 10, 0, 958 }, { 10, 0, 959 }, { 10, 0, 964 }, - { 10, 0, 970 }, { 10, 0, 972 }, { 10, 0, 973 }, { 10, 0, 975 }, - { 10, 0, 976 }, { 10, 0, 980 }, { 10, 0, 981 }, { 10, 0, 984 }, - { 10, 0, 988 }, { 10, 0, 990 }, { 10, 0, 995 }, { 10, 0, 999 }, - { 10, 0, 1002 }, { 10, 0, 1003 }, { 10, 0, 1005 }, { 10, 0, 1006 }, - { 10, 0, 1008 }, { 10, 0, 1009 }, { 10, 0, 1012 }, { 10, 0, 1014 }, - { 10, 0, 1015 }, { 10, 0, 1019 }, { 10, 0, 1020 }, { 10, 0, 1022 }, - { 12, 0, 959 }, { 12, 0, 961 }, { 12, 0, 962 }, { 12, 0, 963 }, - { 12, 0, 964 }, { 12, 0, 965 }, { 12, 0, 967 }, { 12, 0, 968 }, - { 12, 0, 969 }, { 12, 0, 970 }, { 12, 0, 971 }, { 12, 0, 972 }, - { 12, 0, 973 }, { 12, 0, 974 }, { 12, 0, 975 }, { 12, 0, 976 }, - { 12, 0, 977 }, { 12, 0, 979 }, { 12, 0, 981 }, { 12, 0, 982 }, - { 12, 0, 983 }, { 12, 0, 984 }, { 12, 0, 985 }, { 12, 0, 986 }, - { 12, 0, 987 }, { 12, 0, 989 }, { 12, 0, 990 }, { 12, 0, 992 }, - { 12, 0, 993 }, { 12, 0, 995 }, { 12, 0, 998 }, { 12, 0, 999 }, - { 12, 0, 1000 }, { 12, 0, 1001 }, { 12, 0, 1002 }, { 12, 0, 1004 }, - { 12, 0, 1005 }, { 12, 0, 1006 }, { 12, 0, 1007 }, { 12, 0, 1008 }, - { 12, 0, 1009 }, { 12, 0, 1010 }, { 12, 0, 1011 }, { 12, 0, 1012 }, - { 12, 0, 1014 }, { 12, 0, 1015 }, { 12, 0, 1016 }, { 12, 0, 1017 }, - { 12, 0, 1018 }, { 12, 0, 1019 }, { 12, 0, 1022 }, { 12, 0, 1023 }, - { 14, 0, 475 }, { 14, 0, 477 }, { 14, 0, 478 }, { 14, 0, 479 }, - { 14, 0, 480 }, { 14, 0, 482 }, { 14, 0, 483 }, { 14, 0, 484 }, - { 14, 0, 485 }, { 14, 0, 486 }, { 14, 0, 487 }, { 14, 0, 488 }, - { 14, 0, 489 }, { 14, 0, 490 }, { 14, 0, 491 }, { 14, 0, 492 }, - { 14, 0, 493 }, { 14, 0, 494 }, { 14, 0, 495 }, { 14, 0, 496 }, - { 14, 0, 497 }, { 14, 0, 498 }, { 14, 0, 499 }, { 14, 0, 500 }, - { 14, 0, 501 }, { 14, 0, 502 }, { 14, 0, 503 }, { 14, 0, 504 }, - { 14, 0, 506 }, { 14, 0, 507 }, { 14, 0, 508 }, { 14, 0, 509 }, - { 14, 0, 510 }, { 14, 0, 511 }, { 16, 0, 113 }, { 16, 0, 114 }, - { 16, 0, 115 }, { 16, 0, 117 }, { 16, 0, 118 }, { 16, 0, 119 }, - { 16, 0, 121 }, { 16, 0, 122 }, { 16, 0, 123 }, { 16, 0, 124 }, - { 16, 0, 125 }, { 16, 0, 126 }, { 16, 0, 127 }, { 18, 0, 242 }, - { 18, 0, 243 }, { 18, 0, 244 }, { 18, 0, 245 }, { 18, 0, 248 }, - { 18, 0, 249 }, { 18, 0, 250 }, { 18, 0, 251 }, { 18, 0, 252 }, - { 18, 0, 253 }, { 18, 0, 254 }, { 18, 0, 255 }, { 20, 0, 125 }, - { 20, 0, 126 }, { 20, 0, 127 }, { 7, 11, 1717 }, { 7, 11, 1769 }, - { 10, 11, 546 }, { 7, 11, 1127 }, { 7, 11, 1572 }, { 10, 11, 297 }, - { 10, 11, 422 }, { 11, 11, 764 }, { 11, 11, 810 }, { 12, 11, 264 }, - { 13, 11, 102 }, { 13, 11, 300 }, { 13, 11, 484 }, { 14, 11, 147 }, - { 14, 11, 229 }, { 17, 11, 71 }, { 18, 11, 118 }, { 19, 11, 120 }, - { 6, 0, 1148 }, { 6, 0, 1586 }, { 4, 0, 775 }, { 7, 10, 954 }, - { 5, 11, 864 }, { 5, 11, 928 }, { 10, 11, 189 }, { 7, 10, 1958 }, - { 6, 10, 549 }, { 8, 10, 34 }, { 8, 10, 283 }, { 9, 10, 165 }, - { 10, 10, 475 }, { 5, 10, 652 }, { 5, 10, 701 }, { 7, 10, 449 }, - { 7, 11, 695 }, { 4, 10, 655 }, { 7, 10, 850 }, { 17, 10, 75 }, - { 18, 10, 137 }, { 12, 11, 682 }, { 5, 11, 523 }, { 8, 0, 970 }, - { 8, 10, 670 }, { 8, 11, 555 }, { 7, 11, 76 }, { 8, 11, 44 }, - { 9, 11, 884 }, { 10, 11, 580 }, { 11, 11, 399 }, { 11, 11, 894 }, - { 15, 11, 122 }, { 18, 11, 144 }, { 19, 11, 61 }, { 6, 10, 159 }, - { 6, 10, 364 }, { 7, 10, 516 }, { 7, 10, 1439 }, { 9, 10, 518 }, - { 4, 0, 71 }, { 5, 0, 376 }, { 7, 0, 119 }, { 10, 0, 665 }, - { 13, 10, 151 }, { 11, 0, 827 }, { 14, 0, 34 }, { 15, 0, 148 }, - { 5, 11, 518 }, { 4, 0, 479 }, { 7, 11, 1787 }, { 7, 11, 1852 }, - { 7, 10, 993 }, { 7, 0, 607 }, { 8, 0, 99 }, { 6, 0, 1960 }, - { 4, 0, 793 }, { 4, 0, 41 }, { 5, 0, 74 }, { 7, 0, 1627 }, - { 11, 0, 871 }, { 12, 0, 619 }, { 7, 0, 94 }, { 11, 0, 329 }, - { 11, 0, 965 }, { 12, 0, 241 }, { 14, 0, 354 }, { 15, 0, 22 }, - { 20, 0, 63 }, { 7, 10, 501 }, { 9, 10, 111 }, { 10, 10, 141 }, - { 11, 10, 332 }, { 13, 10, 43 }, { 13, 10, 429 }, { 14, 10, 130 }, - { 14, 10, 415 }, { 17, 10, 102 }, { 9, 0, 209 }, { 9, 0, 300 }, - { 6, 0, 1497 }, { 10, 11, 255 }, { 4, 11, 934 }, { 5, 11, 138 }, - { 8, 11, 610 }, { 5, 0, 98 }, { 6, 0, 1316 }, { 10, 11, 804 }, - { 10, 11, 832 }, { 8, 11, 96 }, { 9, 11, 36 }, { 10, 11, 607 }, - { 11, 11, 423 }, { 11, 11, 442 }, { 12, 11, 309 }, { 14, 11, 199 }, - { 15, 11, 90 }, { 17, 11, 110 }, { 4, 0, 463 }, { 5, 10, 149 }, - { 8, 10, 233 }, { 5, 10, 935 }, { 4, 11, 652 }, { 8, 11, 320 }, - { 9, 11, 13 }, { 9, 11, 398 }, { 9, 11, 727 }, { 10, 11, 75 }, - { 10, 11, 184 }, { 10, 11, 230 }, { 10, 11, 564 }, { 10, 11, 569 }, - { 11, 11, 973 }, { 12, 11, 70 }, { 12, 11, 189 }, { 13, 11, 57 }, - { 13, 11, 257 }, { 22, 11, 6 }, { 22, 11, 16 }, { 14, 0, 291 }, - { 12, 10, 582 }, { 18, 10, 131 }, { 8, 10, 801 }, { 5, 0, 984 }, - { 17, 11, 116 }, { 4, 11, 692 }, { 5, 11, 321 }, { 4, 0, 182 }, - { 6, 0, 205 }, { 7, 0, 220 }, { 4, 0, 42 }, { 9, 0, 205 }, - { 9, 0, 786 }, { 10, 0, 659 }, { 6, 0, 801 }, { 11, 11, 130 }, - { 12, 11, 609 }, { 4, 0, 635 }, { 5, 11, 345 }, { 7, 11, 1016 }, - { 11, 0, 533 }, { 4, 0, 371 }, { 4, 0, 272 }, { 7, 0, 836 }, - { 6, 0, 1282 }, { 7, 11, 1100 }, { 5, 0, 825 }, { 6, 0, 1640 }, - { 7, 11, 1325 }, { 5, 11, 673 }, { 4, 11, 287 }, { 5, 11, 1018 }, - { 7, 0, 357 }, { 6, 0, 467 }, { 9, 0, 879 }, { 7, 0, 317 }, - { 7, 0, 569 }, { 6, 0, 924 }, { 6, 0, 1588 }, { 5, 11, 34 }, - { 5, 10, 406 }, { 10, 11, 724 }, { 12, 11, 444 }, { 13, 11, 354 }, - { 18, 11, 32 }, { 23, 11, 24 }, { 23, 11, 31 }, { 24, 11, 5 }, - { 6, 0, 1795 }, { 6, 0, 1835 }, { 6, 0, 1836 }, { 6, 0, 1856 }, - { 8, 0, 844 }, { 8, 0, 849 }, { 8, 0, 854 }, { 8, 0, 870 }, - { 8, 0, 887 }, { 10, 0, 852 }, { 10, 0, 942 }, { 6, 10, 69 }, - { 7, 10, 117 }, { 9, 0, 307 }, { 4, 0, 944 }, { 6, 0, 1799 }, - { 6, 0, 1825 }, { 10, 0, 848 }, { 10, 0, 875 }, { 10, 0, 895 }, - { 10, 0, 899 }, { 10, 0, 902 }, { 12, 0, 773 }, { 11, 0, 43 }, - { 13, 0, 72 }, { 13, 0, 142 }, { 7, 10, 1830 }, { 6, 11, 382 }, - { 4, 10, 432 }, { 7, 10, 824 }, { 4, 11, 329 }, { 7, 0, 1820 }, - { 11, 11, 124 }, { 5, 10, 826 }, { 5, 0, 525 }, { 4, 11, 906 }, - { 7, 11, 1940 }, { 8, 11, 366 }, { 10, 11, 10 }, { 4, 11, 123 }, - { 4, 11, 649 }, { 5, 11, 605 }, { 7, 11, 1509 }, { 8, 11, 36 }, - { 6, 0, 110 }, { 7, 0, 1681 }, { 5, 0, 493 }, { 5, 11, 767 }, - { 4, 0, 174 }, { 7, 0, 911 }, { 10, 11, 786 }, { 8, 0, 417 }, - { 9, 0, 782 }, { 5, 10, 1000 }, { 7, 0, 733 }, { 9, 0, 583 }, - { 4, 10, 297 }, { 6, 10, 529 }, { 7, 10, 152 }, { 7, 10, 713 }, - { 7, 10, 1845 }, { 8, 10, 710 }, { 8, 10, 717 }, { 12, 10, 639 }, - { 12, 10, 685 }, { 4, 0, 32 }, { 5, 0, 215 }, { 6, 0, 269 }, - { 7, 0, 1782 }, { 7, 0, 1892 }, { 10, 0, 16 }, { 11, 0, 822 }, - { 11, 0, 954 }, { 13, 0, 481 }, { 4, 11, 273 }, { 5, 11, 658 }, - { 5, 11, 995 }, { 8, 0, 477 }, { 6, 11, 72 }, { 7, 11, 1345 }, - { 5, 0, 308 }, { 7, 0, 1088 }, { 4, 10, 520 }, { 7, 10, 575 }, - { 5, 11, 589 }, { 5, 0, 126 }, { 8, 0, 297 }, { 9, 0, 366 }, - { 12, 0, 374 }, { 7, 0, 1551 }, { 11, 0, 361 }, { 5, 11, 117 }, - { 6, 11, 514 }, { 6, 11, 541 }, { 7, 11, 1164 }, { 7, 11, 1436 }, - { 8, 11, 220 }, { 8, 11, 648 }, { 10, 11, 688 }, { 11, 11, 560 }, - { 5, 11, 686 }, { 4, 0, 946 }, { 6, 0, 1807 }, { 8, 0, 871 }, - { 10, 0, 854 }, { 10, 0, 870 }, { 10, 0, 888 }, { 10, 0, 897 }, - { 10, 0, 920 }, { 12, 0, 722 }, { 12, 0, 761 }, { 12, 0, 763 }, - { 12, 0, 764 }, { 14, 0, 454 }, { 14, 0, 465 }, { 16, 0, 107 }, - { 18, 0, 167 }, { 18, 0, 168 }, { 18, 0, 172 }, { 4, 0, 175 }, - { 7, 0, 1307 }, { 4, 0, 685 }, { 7, 11, 1834 }, { 5, 0, 797 }, - { 6, 0, 745 }, { 6, 0, 858 }, { 6, 0, 963 }, { 5, 0, 565 }, - { 5, 10, 397 }, { 6, 10, 154 }, { 7, 11, 196 }, { 7, 10, 676 }, - { 8, 10, 443 }, { 8, 10, 609 }, { 9, 10, 24 }, { 9, 10, 325 }, - { 10, 10, 35 }, { 10, 11, 765 }, { 11, 11, 347 }, { 11, 10, 535 }, - { 11, 11, 552 }, { 11, 11, 576 }, { 11, 10, 672 }, { 11, 11, 790 }, - { 11, 10, 1018 }, { 12, 11, 263 }, { 12, 10, 637 }, { 13, 11, 246 }, - { 13, 11, 270 }, { 13, 11, 395 }, { 14, 11, 74 }, { 14, 11, 176 }, - { 14, 11, 190 }, { 14, 11, 398 }, { 14, 11, 412 }, { 15, 11, 32 }, - { 15, 11, 63 }, { 16, 10, 30 }, { 16, 11, 88 }, { 19, 11, 105 }, - { 13, 11, 84 }, { 13, 11, 122 }, { 4, 0, 252 }, { 7, 0, 1068 }, - { 10, 0, 434 }, { 11, 0, 228 }, { 11, 0, 426 }, { 13, 0, 231 }, - { 18, 0, 106 }, { 20, 0, 87 }, { 9, 0, 826 }, { 4, 11, 589 }, - { 11, 11, 282 }, { 5, 11, 381 }, { 7, 11, 1792 }, { 4, 0, 791 }, - { 5, 0, 231 }, { 10, 0, 509 }, { 5, 10, 981 }, { 7, 0, 601 }, - { 9, 0, 277 }, { 9, 0, 674 }, { 10, 0, 178 }, { 10, 0, 418 }, - { 10, 0, 571 }, { 11, 0, 531 }, { 12, 0, 113 }, { 12, 0, 475 }, - { 13, 0, 99 }, { 14, 0, 428 }, { 4, 10, 56 }, { 7, 11, 616 }, - { 7, 10, 1791 }, { 8, 10, 607 }, { 8, 10, 651 }, { 10, 11, 413 }, - { 11, 10, 465 }, { 11, 10, 835 }, { 12, 10, 337 }, { 13, 10, 480 }, - { 7, 0, 1591 }, { 16, 0, 43 }, { 9, 10, 158 }, { 10, 10, 411 }, - { 7, 0, 1683 }, { 8, 0, 289 }, { 11, 0, 45 }, { 12, 0, 278 }, - { 12, 0, 537 }, { 6, 11, 120 }, { 7, 11, 1188 }, { 7, 11, 1710 }, - { 8, 11, 286 }, { 9, 11, 667 }, { 11, 11, 592 }, { 11, 11, 730 }, - { 8, 10, 617 }, { 7, 0, 1120 }, { 7, 11, 1146 }, { 11, 10, 563 }, - { 4, 11, 352 }, { 4, 10, 369 }, { 7, 11, 687 }, { 15, 11, 38 }, - { 4, 0, 399 }, { 5, 0, 119 }, { 5, 0, 494 }, { 7, 0, 751 }, - { 9, 0, 556 }, { 14, 11, 179 }, { 15, 11, 151 }, { 22, 11, 11 }, - { 4, 11, 192 }, { 5, 11, 49 }, { 6, 11, 200 }, { 6, 11, 293 }, - { 6, 11, 1696 }, { 7, 11, 488 }, { 4, 0, 398 }, { 5, 0, 660 }, - { 7, 0, 1030 }, { 6, 10, 622 }, { 7, 11, 595 }, { 13, 0, 168 }, - { 4, 11, 147 }, { 7, 0, 973 }, { 10, 10, 624 }, { 14, 10, 279 }, - { 4, 10, 363 }, { 4, 0, 642 }, { 5, 11, 934 }, { 6, 0, 1615 }, - { 7, 11, 505 }, { 7, 11, 523 }, { 7, 0, 594 }, { 7, 0, 851 }, - { 7, 0, 1858 }, { 9, 0, 411 }, { 9, 0, 574 }, { 9, 0, 666 }, - { 9, 0, 737 }, { 10, 0, 346 }, { 10, 0, 712 }, { 11, 0, 246 }, - { 11, 0, 432 }, { 11, 0, 517 }, { 11, 0, 647 }, { 11, 0, 679 }, - { 11, 0, 727 }, { 12, 0, 304 }, { 12, 0, 305 }, { 12, 0, 323 }, - { 12, 0, 483 }, { 12, 0, 572 }, { 12, 0, 593 }, { 12, 0, 602 }, - { 13, 0, 95 }, { 13, 0, 101 }, { 13, 0, 171 }, { 13, 0, 315 }, - { 13, 0, 378 }, { 13, 0, 425 }, { 13, 0, 475 }, { 14, 0, 63 }, - { 14, 0, 380 }, { 14, 0, 384 }, { 15, 0, 133 }, { 18, 0, 112 }, - { 20, 0, 72 }, { 7, 0, 1093 }, { 4, 0, 679 }, { 8, 0, 913 }, - { 10, 0, 903 }, { 10, 0, 915 }, { 12, 0, 648 }, { 12, 0, 649 }, - { 14, 0, 455 }, { 16, 0, 112 }, { 10, 11, 438 }, { 9, 0, 203 }, - { 6, 10, 292 }, { 6, 0, 1492 }, { 7, 0, 1374 }, { 8, 0, 540 }, - { 5, 10, 177 }, { 6, 10, 616 }, { 7, 10, 827 }, { 9, 10, 525 }, - { 10, 10, 656 }, { 7, 0, 1486 }, { 9, 0, 714 }, { 10, 10, 31 }, - { 8, 0, 825 }, { 6, 0, 1511 }, { 4, 11, 637 }, { 6, 0, 952 }, - { 4, 10, 161 }, { 5, 10, 631 }, { 5, 0, 143 }, { 5, 0, 769 }, - { 6, 0, 1760 }, { 7, 0, 682 }, { 7, 0, 1992 }, { 8, 0, 736 }, - { 4, 0, 700 }, { 6, 0, 1540 }, { 4, 11, 777 }, { 9, 11, 867 }, - { 10, 11, 837 }, { 7, 0, 1557 }, { 7, 10, 1684 }, { 5, 0, 860 }, - { 6, 0, 422 }, { 7, 0, 0 }, { 7, 0, 1544 }, { 9, 0, 605 }, - { 11, 0, 990 }, { 12, 0, 235 }, { 12, 0, 453 }, { 13, 0, 47 }, - { 13, 0, 266 }, { 9, 10, 469 }, { 9, 10, 709 }, { 12, 10, 512 }, - { 14, 10, 65 }, { 17, 10, 12 }, { 11, 0, 807 }, { 10, 10, 229 }, - { 11, 10, 73 }, { 11, 10, 376 }, { 6, 11, 170 }, { 7, 11, 1080 }, - { 8, 11, 395 }, { 8, 11, 487 }, { 11, 11, 125 }, { 13, 11, 147 }, - { 5, 0, 515 }, { 9, 0, 131 }, { 7, 0, 1605 }, { 11, 0, 962 }, - { 18, 0, 139 }, { 4, 0, 646 }, { 4, 0, 396 }, { 7, 0, 728 }, - { 9, 0, 117 }, { 13, 0, 202 }, { 20, 0, 51 }, { 6, 0, 121 }, - { 6, 0, 124 }, { 6, 0, 357 }, { 7, 0, 1138 }, { 7, 0, 1295 }, - { 8, 0, 162 }, { 8, 0, 508 }, { 11, 0, 655 }, { 4, 11, 535 }, - { 6, 10, 558 }, { 7, 10, 651 }, { 8, 11, 618 }, { 9, 10, 0 }, - { 10, 10, 34 }, { 11, 10, 1008 }, { 7, 11, 1245 }, { 10, 0, 357 }, - { 22, 11, 23 }, { 5, 0, 237 }, { 7, 0, 1784 }, { 7, 10, 1832 }, - { 10, 10, 374 }, { 4, 0, 713 }, { 4, 11, 46 }, { 6, 0, 1536 }, - { 10, 0, 348 }, { 5, 11, 811 }, { 6, 11, 1679 }, { 6, 11, 1714 }, - { 7, 11, 2032 }, { 11, 11, 182 }, { 14, 11, 195 }, { 6, 0, 523 }, - { 7, 0, 738 }, { 7, 10, 771 }, { 7, 10, 1731 }, { 9, 10, 405 }, - { 10, 10, 421 }, { 7, 11, 1458 }, { 9, 11, 407 }, { 11, 11, 15 }, - { 6, 11, 34 }, { 7, 11, 69 }, { 7, 11, 640 }, { 7, 11, 1089 }, - { 8, 11, 708 }, { 8, 11, 721 }, { 9, 11, 363 }, { 9, 11, 643 }, - { 10, 11, 628 }, { 20, 11, 98 }, { 5, 0, 434 }, { 7, 0, 1877 }, - { 7, 0, 571 }, { 10, 0, 366 }, { 5, 10, 881 }, { 5, 10, 885 }, - { 9, 0, 513 }, { 10, 0, 25 }, { 10, 0, 39 }, { 12, 0, 122 }, - { 12, 0, 187 }, { 4, 0, 580 }, { 5, 10, 142 }, { 6, 10, 546 }, - { 4, 11, 462 }, { 9, 0, 873 }, { 5, 10, 466 }, { 11, 10, 571 }, - { 12, 10, 198 }, { 13, 10, 283 }, { 14, 10, 186 }, { 15, 10, 21 }, - { 15, 10, 103 }, { 7, 0, 171 }, { 4, 10, 185 }, { 5, 10, 257 }, - { 5, 10, 839 }, { 5, 10, 936 }, { 9, 10, 399 }, { 10, 10, 258 }, - { 10, 10, 395 }, { 10, 10, 734 }, { 11, 10, 1014 }, { 12, 10, 23 }, - { 13, 10, 350 }, { 14, 10, 150 }, { 19, 10, 6 }, { 6, 0, 625 }, - { 7, 0, 107 }, { 7, 0, 838 }, { 8, 0, 550 }, { 10, 0, 401 }, - { 5, 11, 73 }, { 6, 11, 23 }, { 6, 11, 338 }, { 4, 0, 943 }, - { 6, 0, 1850 }, { 12, 0, 713 }, { 14, 0, 434 }, { 11, 0, 588 }, - { 11, 0, 864 }, { 11, 0, 936 }, { 11, 0, 968 }, { 12, 0, 73 }, - { 12, 0, 343 }, { 12, 0, 394 }, { 13, 0, 275 }, { 14, 0, 257 }, - { 15, 0, 160 }, { 7, 10, 404 }, { 7, 10, 1377 }, { 7, 10, 1430 }, - { 7, 10, 2017 }, { 8, 10, 149 }, { 8, 10, 239 }, { 8, 10, 512 }, - { 8, 10, 793 }, { 8, 10, 818 }, { 9, 10, 474 }, { 9, 10, 595 }, - { 10, 10, 122 }, { 10, 10, 565 }, { 10, 10, 649 }, { 10, 10, 783 }, - { 11, 10, 239 }, { 11, 10, 295 }, { 11, 10, 447 }, { 11, 10, 528 }, - { 11, 10, 639 }, { 11, 10, 800 }, { 12, 10, 25 }, { 12, 10, 157 }, - { 12, 10, 316 }, { 12, 10, 390 }, { 12, 10, 391 }, { 12, 10, 395 }, - { 12, 10, 478 }, { 12, 10, 503 }, { 12, 10, 592 }, { 12, 10, 680 }, - { 13, 10, 50 }, { 13, 10, 53 }, { 13, 10, 132 }, { 13, 10, 198 }, - { 13, 10, 322 }, { 13, 10, 415 }, { 13, 10, 511 }, { 14, 10, 71 }, - { 14, 10, 395 }, { 15, 10, 71 }, { 15, 10, 136 }, { 17, 10, 123 }, - { 18, 10, 93 }, { 19, 10, 58 }, { 5, 0, 768 }, { 11, 0, 103 }, - { 14, 0, 0 }, { 8, 10, 712 }, { 4, 0, 799 }, { 4, 0, 894 }, - { 7, 11, 725 }, { 8, 11, 498 }, { 11, 11, 268 }, { 7, 11, 1798 }, - { 7, 11, 773 }, { 13, 11, 360 }, { 4, 10, 377 }, { 24, 10, 13 }, - { 7, 0, 1673 }, { 4, 11, 583 }, { 6, 0, 1052 }, { 5, 11, 220 }, - { 12, 11, 69 }, { 4, 11, 544 }, { 4, 10, 180 }, { 7, 10, 1906 }, - { 6, 0, 272 }, { 4, 0, 441 }, { 6, 0, 1421 }, { 4, 0, 9 }, - { 5, 0, 128 }, { 7, 0, 368 }, { 11, 0, 480 }, { 20, 0, 3 }, - { 5, 11, 176 }, { 6, 11, 437 }, { 6, 11, 564 }, { 11, 11, 181 }, - { 13, 11, 183 }, { 4, 10, 491 }, { 7, 0, 1182 }, { 13, 11, 67 }, - { 6, 0, 1346 }, { 4, 10, 171 }, { 10, 10, 234 }, { 4, 10, 586 }, - { 7, 10, 1186 }, { 10, 10, 631 }, { 8, 0, 682 }, { 6, 0, 1004 }, - { 15, 0, 24 }, { 15, 11, 24 }, { 6, 0, 968 }, { 4, 0, 2 }, - { 6, 0, 742 }, { 6, 0, 793 }, { 7, 0, 545 }, { 7, 0, 894 }, - { 9, 10, 931 }, { 10, 10, 334 }, { 20, 10, 71 }, { 8, 11, 600 }, - { 5, 10, 765 }, { 9, 0, 769 }, { 12, 0, 185 }, { 4, 11, 790 }, - { 5, 11, 273 }, { 6, 11, 394 }, { 7, 0, 474 }, { 9, 0, 578 }, - { 4, 11, 135 }, { 6, 11, 127 }, { 7, 11, 1185 }, { 7, 11, 1511 }, - { 8, 11, 613 }, { 11, 11, 5 }, { 12, 11, 133 }, { 12, 11, 495 }, - { 12, 11, 586 }, { 14, 11, 385 }, { 15, 11, 118 }, { 17, 11, 20 }, - { 18, 11, 98 }, { 5, 10, 424 }, { 5, 0, 530 }, { 14, 0, 113 }, - { 6, 11, 230 }, { 7, 11, 961 }, { 7, 11, 1085 }, { 8, 11, 462 }, - { 7, 11, 1954 }, { 9, 11, 636 }, { 8, 10, 714 }, { 21, 11, 6 }, - { 7, 10, 685 }, { 9, 10, 420 }, { 10, 10, 269 }, { 10, 10, 285 }, - { 10, 10, 576 }, { 11, 10, 397 }, { 13, 10, 175 }, { 17, 10, 90 }, - { 4, 10, 429 }, { 5, 0, 556 }, { 5, 11, 162 }, { 8, 11, 68 }, - { 4, 11, 654 }, { 4, 11, 156 }, { 7, 11, 998 }, { 7, 11, 1045 }, - { 7, 11, 1860 }, { 9, 11, 48 }, { 9, 11, 692 }, { 11, 11, 419 }, - { 11, 11, 602 }, { 6, 0, 1317 }, { 8, 0, 16 }, { 9, 0, 825 }, - { 12, 0, 568 }, { 7, 11, 1276 }, { 8, 11, 474 }, { 9, 11, 652 }, - { 18, 0, 97 }, { 7, 10, 18 }, { 7, 10, 699 }, { 7, 10, 1966 }, - { 8, 10, 752 }, { 9, 10, 273 }, { 9, 10, 412 }, { 9, 10, 703 }, - { 10, 10, 71 }, { 10, 10, 427 }, { 10, 10, 508 }, { 10, 0, 703 }, - { 7, 11, 1454 }, { 10, 11, 703 }, { 4, 10, 53 }, { 5, 10, 186 }, - { 7, 10, 752 }, { 6, 0, 892 }, { 6, 0, 1571 }, { 8, 10, 575 }, - { 10, 10, 289 }, { 11, 10, 319 }, { 6, 0, 186 }, { 9, 0, 426 }, - { 6, 0, 1101 }, { 4, 10, 675 }, { 4, 0, 585 }, { 6, 0, 1870 }, - { 9, 0, 937 }, { 24, 11, 10 }, { 9, 11, 197 }, { 10, 11, 300 }, - { 12, 11, 473 }, { 13, 11, 90 }, { 13, 11, 405 }, { 4, 0, 93 }, - { 5, 0, 252 }, { 6, 0, 229 }, { 7, 0, 291 }, { 9, 0, 550 }, - { 11, 0, 644 }, { 9, 0, 749 }, { 9, 0, 162 }, { 6, 10, 209 }, - { 8, 10, 468 }, { 9, 10, 210 }, { 11, 10, 36 }, { 12, 10, 28 }, - { 12, 10, 630 }, { 13, 10, 21 }, { 13, 10, 349 }, { 14, 10, 7 }, - { 17, 10, 13 }, { 4, 0, 381 }, { 4, 11, 606 }, { 4, 10, 342 }, - { 7, 10, 1179 }, { 7, 11, 1587 }, { 7, 11, 1707 }, { 10, 11, 528 }, - { 11, 11, 504 }, { 12, 11, 39 }, { 13, 11, 265 }, { 13, 11, 439 }, - { 4, 10, 928 }, { 5, 10, 910 }, { 7, 10, 1838 }, { 7, 11, 1978 }, - { 8, 11, 676 }, { 6, 0, 762 }, { 6, 0, 796 }, { 6, 0, 956 }, - { 4, 10, 318 }, { 4, 10, 496 }, { 7, 10, 856 }, { 11, 10, 654 }, - { 9, 11, 242 }, { 4, 11, 361 }, { 5, 11, 315 }, { 4, 11, 461 }, - { 4, 11, 472 }, { 4, 0, 857 }, { 5, 0, 21 }, { 6, 0, 77 }, - { 6, 0, 157 }, { 7, 0, 974 }, { 7, 0, 1301 }, { 7, 0, 1339 }, - { 7, 0, 1490 }, { 7, 0, 1873 }, { 9, 0, 628 }, { 7, 10, 915 }, - { 8, 10, 247 }, { 19, 10, 0 }, { 4, 10, 202 }, { 5, 10, 382 }, - { 6, 10, 454 }, { 7, 10, 936 }, { 7, 10, 1803 }, { 8, 10, 758 }, - { 9, 10, 375 }, { 9, 10, 895 }, { 10, 10, 743 }, { 10, 10, 792 }, - { 11, 10, 978 }, { 11, 10, 1012 }, { 14, 10, 109 }, { 7, 11, 617 }, - { 10, 11, 498 }, { 11, 11, 501 }, { 12, 11, 16 }, { 12, 11, 150 }, - { 7, 10, 1150 }, { 7, 10, 1425 }, { 7, 10, 1453 }, { 10, 11, 747 }, - { 12, 10, 513 }, { 5, 11, 155 }, { 11, 0, 919 }, { 13, 0, 409 }, - { 10, 10, 791 }, { 10, 0, 633 }, { 11, 11, 729 }, { 7, 11, 163 }, - { 8, 11, 319 }, { 9, 11, 402 }, { 10, 11, 24 }, { 10, 11, 681 }, - { 11, 11, 200 }, { 11, 11, 567 }, { 12, 11, 253 }, { 12, 11, 410 }, - { 14, 11, 219 }, { 5, 11, 475 }, { 7, 11, 1780 }, { 9, 11, 230 }, - { 11, 11, 297 }, { 11, 11, 558 }, { 14, 11, 322 }, { 19, 11, 76 }, - { 7, 0, 332 }, { 6, 10, 445 }, { 9, 10, 909 }, { 7, 11, 1956 }, - { 8, 11, 274 }, { 6, 10, 578 }, { 7, 0, 1489 }, { 7, 11, 1848 }, - { 5, 11, 944 }, { 6, 11, 1769 }, { 4, 11, 144 }, { 8, 10, 766 }, - { 4, 0, 832 }, { 7, 10, 541 }, { 8, 0, 398 }, { 9, 0, 681 }, - { 11, 0, 632 }, { 8, 0, 645 }, { 9, 0, 791 }, { 10, 0, 93 }, - { 16, 0, 13 }, { 17, 0, 23 }, { 18, 0, 135 }, { 19, 0, 12 }, - { 20, 0, 1 }, { 20, 0, 12 }, { 20, 0, 14 }, { 6, 11, 247 }, - { 9, 11, 555 }, { 6, 0, 20 }, { 4, 0, 800 }, { 7, 0, 1841 }, - { 11, 10, 983 }, { 9, 10, 768 }, { 4, 10, 584 }, { 13, 11, 51 }, - { 6, 0, 1993 }, { 4, 11, 620 }, { 10, 11, 280 }, { 8, 0, 769 }, - { 11, 0, 290 }, { 11, 0, 665 }, { 7, 11, 1810 }, { 11, 11, 866 }, - { 12, 11, 103 }, { 13, 11, 495 }, { 17, 11, 67 }, { 19, 11, 74 }, - { 6, 0, 1426 }, { 11, 0, 60 }, { 4, 10, 326 }, { 7, 10, 1770 }, - { 7, 0, 1874 }, { 9, 0, 641 }, { 4, 10, 226 }, { 6, 0, 644 }, - { 5, 10, 426 }, { 8, 10, 30 }, { 9, 10, 2 }, { 11, 10, 549 }, - { 19, 10, 122 }, { 5, 11, 428 }, { 10, 11, 442 }, { 7, 11, 1871 }, - { 7, 0, 1757 }, { 19, 10, 117 }, { 7, 0, 937 }, { 7, 0, 1652 }, - { 6, 0, 654 }, { 6, 0, 1476 }, { 5, 11, 99 }, { 7, 0, 527 }, - { 4, 10, 345 }, { 4, 10, 385 }, { 4, 11, 397 }, { 7, 10, 265 }, - { 7, 10, 587 }, { 4, 0, 579 }, { 5, 0, 226 }, { 5, 0, 323 }, - { 7, 0, 960 }, { 6, 0, 1486 }, { 8, 11, 502 }, { 16, 11, 9 }, - { 4, 10, 347 }, { 5, 10, 423 }, { 5, 10, 996 }, { 7, 10, 1329 }, - { 7, 11, 727 }, { 18, 11, 73 }, { 4, 11, 485 }, { 7, 11, 353 }, - { 7, 10, 1259 }, { 7, 11, 1523 }, { 9, 10, 125 }, { 11, 10, 65 }, - { 6, 0, 325 }, { 5, 10, 136 }, { 6, 11, 366 }, { 7, 11, 1384 }, - { 7, 11, 1601 }, { 8, 10, 644 }, { 10, 11, 160 }, { 6, 0, 1345 }, - { 9, 11, 282 }, { 18, 0, 91 }, { 19, 0, 70 }, { 8, 0, 404 }, - { 4, 11, 157 }, { 5, 11, 471 }, { 5, 0, 973 }, { 6, 0, 135 }, - { 7, 0, 1176 }, { 8, 11, 116 }, { 11, 11, 551 }, { 14, 11, 159 }, - { 4, 0, 549 }, { 4, 10, 433 }, { 5, 10, 719 }, { 8, 0, 976 }, - { 5, 11, 160 }, { 7, 11, 363 }, { 7, 11, 589 }, { 10, 11, 170 }, - { 13, 11, 55 }, { 16, 0, 21 }, { 16, 0, 51 }, { 7, 0, 314 }, - { 7, 10, 1363 }, { 4, 11, 108 }, { 7, 11, 405 }, { 10, 11, 491 }, - { 11, 11, 498 }, { 18, 0, 4 }, { 4, 10, 555 }, { 8, 10, 536 }, - { 10, 10, 288 }, { 11, 10, 1005 }, { 7, 11, 1005 }, { 6, 0, 281 }, - { 7, 0, 6 }, { 8, 0, 282 }, { 8, 0, 480 }, { 8, 0, 499 }, - { 9, 0, 198 }, { 10, 0, 143 }, { 10, 0, 169 }, { 10, 0, 211 }, - { 10, 0, 417 }, { 10, 0, 574 }, { 11, 0, 147 }, { 11, 0, 395 }, - { 12, 0, 75 }, { 12, 0, 407 }, { 12, 0, 608 }, { 13, 0, 500 }, - { 14, 0, 251 }, { 6, 0, 1093 }, { 6, 0, 1405 }, { 9, 10, 370 }, - { 10, 10, 90 }, { 4, 11, 926 }, { 5, 11, 983 }, { 7, 0, 1776 }, - { 6, 0, 1528 }, { 4, 0, 419 }, { 4, 11, 538 }, { 6, 11, 294 }, - { 7, 11, 1267 }, { 8, 11, 624 }, { 7, 11, 1772 }, { 10, 11, 301 }, - { 4, 10, 257 }, { 7, 10, 2031 }, { 4, 0, 138 }, { 7, 0, 1012 }, - { 7, 0, 1280 }, { 9, 0, 76 }, { 7, 10, 1768 }, { 4, 11, 757 }, - { 5, 0, 29 }, { 12, 0, 638 }, { 7, 11, 655 }, { 7, 11, 1844 }, - { 7, 0, 1418 }, { 6, 11, 257 }, { 7, 11, 1522 }, { 8, 11, 469 }, - { 10, 11, 47 }, { 14, 11, 278 }, { 6, 10, 83 }, { 6, 10, 1733 }, - { 7, 10, 1389 }, { 11, 11, 204 }, { 11, 11, 243 }, { 12, 11, 293 }, - { 7, 11, 1875 }, { 6, 0, 1710 }, { 7, 0, 2038 }, { 9, 11, 299 }, - { 4, 0, 17 }, { 5, 0, 23 }, { 7, 0, 995 }, { 11, 0, 383 }, - { 11, 0, 437 }, { 12, 0, 460 }, { 12, 0, 532 }, { 5, 0, 862 }, - { 9, 10, 696 }, { 6, 0, 592 }, { 10, 0, 946 }, { 10, 11, 599 }, - { 7, 10, 1718 }, { 9, 10, 95 }, { 9, 10, 274 }, { 10, 10, 279 }, - { 10, 10, 317 }, { 10, 10, 420 }, { 11, 10, 303 }, { 11, 10, 808 }, - { 12, 10, 134 }, { 12, 10, 367 }, { 13, 10, 149 }, { 13, 10, 347 }, - { 14, 10, 349 }, { 14, 10, 406 }, { 18, 10, 22 }, { 18, 10, 89 }, - { 18, 10, 122 }, { 19, 10, 47 }, { 8, 0, 70 }, { 12, 0, 171 }, - { 13, 0, 272 }, { 5, 10, 26 }, { 4, 10, 550 }, { 9, 0, 812 }, - { 10, 0, 233 }, { 11, 0, 76 }, { 6, 0, 988 }, { 6, 0, 442 }, - { 8, 10, 822 }, { 7, 0, 896 }, { 4, 10, 902 }, { 5, 10, 809 }, - { 6, 10, 122 }, { 5, 11, 150 }, { 7, 11, 106 }, { 8, 11, 603 }, - { 9, 11, 593 }, { 9, 11, 634 }, { 10, 11, 44 }, { 10, 11, 173 }, - { 11, 11, 462 }, { 11, 11, 515 }, { 13, 11, 216 }, { 13, 11, 288 }, - { 14, 11, 400 }, { 8, 0, 483 }, { 7, 10, 262 }, { 6, 0, 1709 }, - { 5, 10, 620 }, { 4, 10, 34 }, { 5, 10, 574 }, { 7, 10, 279 }, - { 7, 10, 1624 }, { 8, 10, 601 }, { 9, 10, 170 }, { 19, 0, 119 }, - { 12, 11, 108 }, { 13, 11, 291 }, { 11, 0, 69 }, { 12, 0, 105 }, - { 12, 0, 117 }, { 13, 0, 213 }, { 14, 0, 13 }, { 14, 0, 62 }, - { 14, 0, 177 }, { 14, 0, 421 }, { 15, 0, 19 }, { 18, 0, 141 }, - { 9, 0, 309 }, { 11, 11, 278 }, { 14, 11, 73 }, { 7, 0, 608 }, - { 7, 0, 976 }, { 9, 0, 146 }, { 10, 0, 206 }, { 10, 0, 596 }, - { 13, 0, 218 }, { 14, 0, 153 }, { 5, 10, 332 }, { 6, 10, 261 }, - { 8, 10, 182 }, { 11, 10, 943 }, { 4, 11, 493 }, { 16, 11, 55 }, - { 6, 10, 1721 }, { 4, 0, 768 }, { 4, 10, 933 }, { 5, 10, 880 }, - { 7, 11, 555 }, { 7, 11, 1316 }, { 7, 11, 1412 }, { 7, 11, 1839 }, - { 9, 11, 192 }, { 9, 11, 589 }, { 11, 11, 241 }, { 11, 11, 676 }, - { 11, 11, 811 }, { 11, 11, 891 }, { 12, 11, 140 }, { 12, 11, 346 }, - { 12, 11, 479 }, { 13, 11, 30 }, { 13, 11, 49 }, { 13, 11, 381 }, - { 14, 11, 188 }, { 15, 11, 150 }, { 16, 11, 76 }, { 18, 11, 30 }, - { 20, 11, 52 }, { 4, 0, 518 }, { 7, 0, 1136 }, { 6, 11, 568 }, - { 7, 11, 112 }, { 7, 11, 1804 }, { 8, 11, 362 }, { 8, 11, 410 }, - { 8, 11, 830 }, { 9, 11, 514 }, { 11, 11, 649 }, { 14, 11, 157 }, - { 7, 11, 673 }, { 8, 0, 689 }, { 9, 0, 863 }, { 4, 0, 18 }, - { 7, 0, 145 }, { 7, 0, 444 }, { 7, 0, 1278 }, { 8, 0, 49 }, - { 8, 0, 400 }, { 9, 0, 71 }, { 9, 0, 250 }, { 10, 0, 459 }, - { 12, 0, 160 }, { 16, 0, 24 }, { 4, 11, 625 }, { 12, 0, 1020 }, - { 4, 0, 997 }, { 6, 0, 1946 }, { 6, 0, 1984 }, { 6, 0, 1998 }, - { 6, 11, 16 }, { 6, 11, 158 }, { 7, 11, 43 }, { 7, 11, 129 }, - { 7, 11, 181 }, { 8, 11, 276 }, { 8, 11, 377 }, { 10, 11, 523 }, - { 11, 11, 816 }, { 12, 11, 455 }, { 13, 11, 303 }, { 14, 11, 135 }, - { 5, 10, 812 }, { 6, 0, 658 }, { 4, 11, 1 }, { 7, 11, 1143 }, - { 7, 11, 1463 }, { 8, 11, 61 }, { 9, 11, 207 }, { 9, 11, 390 }, - { 9, 11, 467 }, { 11, 11, 836 }, { 22, 11, 26 }, { 12, 0, 106 }, - { 6, 0, 1827 }, { 10, 0, 931 }, { 18, 0, 166 }, { 20, 0, 114 }, - { 4, 10, 137 }, { 7, 10, 1178 }, { 7, 11, 1319 }, { 7, 10, 1520 }, - { 5, 0, 1010 }, { 4, 11, 723 }, { 5, 11, 895 }, { 7, 11, 1031 }, - { 8, 11, 199 }, { 8, 11, 340 }, { 9, 11, 153 }, { 9, 11, 215 }, - { 10, 11, 21 }, { 10, 11, 59 }, { 10, 11, 80 }, { 10, 11, 224 }, - { 11, 11, 229 }, { 11, 11, 652 }, { 12, 11, 192 }, { 13, 11, 146 }, - { 14, 11, 91 }, { 4, 11, 295 }, { 6, 11, 619 }, { 7, 11, 898 }, - { 7, 11, 1092 }, { 8, 11, 485 }, { 18, 11, 28 }, { 19, 11, 116 }, - { 9, 11, 51 }, { 6, 10, 1661 }, { 7, 10, 1975 }, { 7, 10, 2009 }, - { 7, 10, 2011 }, { 5, 11, 309 }, { 12, 11, 211 }, { 5, 0, 87 }, - { 7, 0, 313 }, { 7, 0, 1103 }, { 10, 0, 208 }, { 10, 0, 582 }, - { 11, 0, 389 }, { 11, 0, 813 }, { 12, 0, 385 }, { 13, 0, 286 }, - { 14, 0, 124 }, { 18, 0, 108 }, { 5, 11, 125 }, { 8, 11, 77 }, - { 10, 11, 15 }, { 4, 0, 267 }, { 5, 0, 703 }, { 9, 11, 155 }, - { 5, 11, 439 }, { 11, 11, 164 }, { 12, 11, 76 }, { 9, 0, 496 }, - { 5, 10, 89 }, { 7, 10, 1915 }, { 9, 10, 185 }, { 9, 10, 235 }, - { 10, 10, 64 }, { 10, 10, 270 }, { 10, 10, 403 }, { 10, 10, 469 }, - { 10, 10, 529 }, { 10, 10, 590 }, { 11, 10, 140 }, { 11, 10, 860 }, - { 13, 10, 1 }, { 13, 10, 422 }, { 14, 10, 341 }, { 14, 10, 364 }, - { 17, 10, 93 }, { 18, 10, 113 }, { 19, 10, 97 }, { 19, 10, 113 }, - { 5, 10, 695 }, { 7, 0, 1121 }, { 5, 10, 6 }, { 6, 10, 183 }, - { 7, 10, 680 }, { 7, 10, 978 }, { 7, 10, 1013 }, { 7, 10, 1055 }, - { 12, 10, 230 }, { 13, 10, 172 }, { 18, 10, 29 }, { 4, 11, 8 }, - { 7, 11, 1152 }, { 7, 11, 1153 }, { 7, 11, 1715 }, { 9, 11, 374 }, - { 10, 11, 478 }, { 11, 11, 648 }, { 7, 11, 1099 }, { 6, 10, 29 }, - { 11, 10, 63 }, { 4, 0, 561 }, { 10, 0, 249 }, { 11, 0, 209 }, - { 4, 0, 760 }, { 7, 11, 799 }, { 10, 11, 511 }, { 8, 11, 87 }, - { 9, 0, 154 }, { 12, 0, 485 }, { 8, 0, 255 }, { 4, 0, 323 }, - { 12, 0, 419 }, { 4, 10, 311 }, { 6, 10, 1740 }, { 4, 0, 368 }, - { 7, 0, 641 }, { 7, 10, 170 }, { 8, 10, 90 }, { 8, 10, 177 }, - { 8, 10, 415 }, { 11, 10, 714 }, { 14, 10, 281 }, { 4, 11, 69 }, - { 5, 11, 122 }, { 9, 11, 656 }, { 10, 11, 464 }, { 5, 11, 849 }, - { 6, 11, 1633 }, { 8, 0, 522 }, { 14, 0, 328 }, { 11, 10, 91 }, - { 13, 10, 129 }, { 15, 10, 101 }, { 17, 10, 125 }, { 7, 0, 562 }, - { 8, 0, 551 }, { 4, 10, 494 }, { 6, 10, 74 }, { 7, 10, 44 }, - { 11, 11, 499 }, { 12, 10, 17 }, { 15, 10, 5 }, { 20, 10, 11 }, - { 4, 10, 276 }, { 5, 10, 296 }, { 9, 0, 92 }, { 19, 0, 91 }, - { 4, 10, 7 }, { 5, 10, 90 }, { 5, 10, 158 }, { 6, 10, 542 }, - { 7, 10, 221 }, { 7, 10, 1574 }, { 9, 10, 490 }, { 10, 10, 540 }, - { 11, 10, 443 }, { 11, 10, 757 }, { 6, 0, 525 }, { 6, 0, 1976 }, - { 8, 0, 806 }, { 9, 0, 876 }, { 12, 0, 284 }, { 5, 11, 859 }, - { 7, 10, 588 }, { 7, 11, 1160 }, { 8, 11, 107 }, { 9, 10, 175 }, - { 9, 11, 291 }, { 9, 11, 439 }, { 10, 10, 530 }, { 10, 11, 663 }, - { 11, 11, 609 }, { 12, 11, 197 }, { 7, 11, 168 }, { 13, 11, 196 }, - { 13, 11, 237 }, { 11, 0, 958 }, { 5, 0, 594 }, { 7, 10, 580 }, - { 7, 10, 88 }, { 8, 10, 627 }, { 6, 0, 479 }, { 6, 0, 562 }, - { 7, 0, 1060 }, { 13, 0, 6 }, { 5, 10, 872 }, { 6, 10, 57 }, - { 7, 10, 471 }, { 9, 10, 447 }, { 9, 10, 454 }, { 8, 11, 413 }, - { 17, 11, 19 }, { 4, 11, 117 }, { 6, 11, 372 }, { 7, 11, 1905 }, - { 14, 11, 323 }, { 4, 11, 722 }, { 11, 11, 471 }, { 17, 0, 61 }, - { 5, 10, 31 }, { 6, 10, 614 }, { 8, 10, 330 }, { 12, 10, 477 }, - { 7, 10, 1200 }, { 10, 10, 460 }, { 6, 10, 424 }, { 7, 10, 1866 }, - { 6, 0, 1641 }, { 8, 0, 820 }, { 6, 0, 1556 }, { 6, 0, 1618 }, - { 9, 11, 5 }, { 12, 11, 216 }, { 12, 11, 294 }, { 12, 11, 298 }, - { 12, 11, 400 }, { 12, 11, 518 }, { 13, 11, 229 }, { 15, 11, 139 }, - { 15, 11, 155 }, { 16, 11, 79 }, { 4, 0, 302 }, { 7, 0, 1766 }, - { 5, 10, 13 }, { 6, 10, 142 }, { 6, 0, 148 }, { 7, 0, 1313 }, - { 7, 10, 116 }, { 8, 10, 322 }, { 8, 10, 755 }, { 9, 10, 548 }, - { 10, 10, 714 }, { 11, 10, 884 }, { 13, 10, 324 }, { 9, 0, 676 }, - { 9, 11, 88 }, { 11, 11, 270 }, { 5, 11, 12 }, { 7, 11, 375 }, - { 9, 11, 438 }, { 6, 0, 1674 }, { 7, 10, 1472 }, { 7, 10, 1554 }, - { 11, 0, 178 }, { 7, 10, 1071 }, { 7, 10, 1541 }, { 7, 10, 1767 }, - { 7, 10, 1806 }, { 11, 10, 162 }, { 11, 10, 242 }, { 12, 10, 605 }, - { 15, 10, 26 }, { 16, 10, 44 }, { 6, 0, 389 }, { 7, 0, 149 }, - { 9, 0, 142 }, { 10, 0, 94 }, { 12, 11, 71 }, { 17, 10, 115 }, - { 6, 0, 8 }, { 7, 0, 1881 }, { 8, 0, 91 }, { 11, 11, 966 }, - { 12, 11, 287 }, { 13, 11, 342 }, { 13, 11, 402 }, { 15, 11, 110 }, - { 15, 11, 163 }, { 4, 11, 258 }, { 8, 11, 639 }, { 6, 11, 22 }, - { 7, 11, 903 }, { 10, 11, 577 }, { 5, 11, 681 }, { 7, 10, 1111 }, - { 7, 11, 1286 }, { 9, 0, 112 }, { 8, 10, 1 }, { 10, 10, 326 }, - { 5, 10, 488 }, { 6, 10, 527 }, { 7, 10, 489 }, { 7, 10, 1636 }, - { 8, 10, 121 }, { 8, 10, 144 }, { 8, 10, 359 }, { 9, 10, 193 }, - { 9, 10, 241 }, { 9, 10, 336 }, { 9, 10, 882 }, { 11, 10, 266 }, - { 11, 10, 372 }, { 11, 10, 944 }, { 12, 10, 401 }, { 12, 10, 641 }, - { 4, 11, 664 }, { 5, 11, 804 }, { 6, 0, 747 }, { 6, 0, 1015 }, - { 7, 0, 1746 }, { 9, 10, 31 }, { 10, 10, 244 }, { 10, 10, 699 }, - { 12, 10, 149 }, { 13, 10, 497 }, { 5, 10, 377 }, { 7, 0, 24 }, - { 6, 0, 1352 }, { 5, 11, 32 }, { 17, 10, 101 }, { 7, 0, 1530 }, - { 10, 0, 158 }, { 13, 0, 13 }, { 13, 0, 137 }, { 13, 0, 258 }, - { 14, 0, 111 }, { 14, 0, 225 }, { 14, 0, 253 }, { 14, 0, 304 }, - { 14, 0, 339 }, { 14, 0, 417 }, { 18, 0, 33 }, { 4, 0, 503 }, - { 7, 0, 1661 }, { 5, 0, 130 }, { 6, 0, 845 }, { 7, 0, 1314 }, - { 9, 0, 610 }, { 10, 0, 718 }, { 11, 0, 601 }, { 11, 0, 819 }, - { 11, 0, 946 }, { 12, 0, 536 }, { 10, 0, 149 }, { 11, 0, 280 }, - { 14, 0, 336 }, { 6, 0, 1401 }, { 7, 0, 1946 }, { 8, 0, 663 }, - { 16, 0, 8 }, { 6, 0, 1607 }, { 7, 10, 2023 }, { 4, 11, 289 }, - { 7, 11, 629 }, { 7, 11, 1698 }, { 7, 11, 1711 }, { 12, 11, 215 }, - { 6, 11, 450 }, { 8, 11, 109 }, { 10, 0, 882 }, { 10, 0, 883 }, - { 10, 0, 914 }, { 10, 0, 928 }, { 5, 10, 843 }, { 8, 11, 705 }, - { 4, 10, 554 }, { 5, 10, 536 }, { 5, 0, 417 }, { 9, 10, 79 }, - { 11, 10, 625 }, { 17, 10, 7 }, { 7, 11, 1238 }, { 14, 11, 37 }, - { 4, 0, 392 }, { 7, 0, 1597 }, { 5, 0, 433 }, { 9, 0, 633 }, - { 11, 0, 629 }, { 4, 10, 424 }, { 7, 10, 336 }, { 8, 10, 785 }, - { 6, 11, 355 }, { 6, 0, 234 }, { 7, 0, 769 }, { 9, 0, 18 }, - { 10, 0, 358 }, { 4, 10, 896 }, { 6, 10, 1777 }, { 10, 11, 323 }, - { 7, 0, 140 }, { 7, 0, 1950 }, { 8, 0, 680 }, { 11, 0, 817 }, - { 19, 0, 88 }, { 7, 0, 1222 }, { 10, 0, 386 }, { 11, 11, 908 }, - { 11, 0, 249 }, { 12, 0, 313 }, { 16, 0, 66 }, { 17, 0, 26 }, - { 6, 0, 5 }, { 7, 10, 750 }, { 9, 10, 223 }, { 11, 10, 27 }, - { 11, 10, 466 }, { 12, 10, 624 }, { 14, 10, 265 }, { 18, 10, 61 }, - { 6, 11, 26 }, { 6, 0, 1216 }, { 5, 0, 963 }, { 6, 0, 1773 }, - { 4, 11, 414 }, { 5, 11, 467 }, { 9, 11, 654 }, { 10, 11, 451 }, - { 12, 11, 59 }, { 13, 11, 375 }, { 7, 11, 17 }, { 4, 10, 603 }, - { 5, 10, 661 }, { 4, 10, 11 }, { 6, 10, 128 }, { 7, 10, 231 }, - { 7, 10, 1533 }, { 10, 10, 725 }, { 7, 11, 955 }, { 7, 0, 180 }, - { 8, 0, 509 }, { 8, 0, 792 }, { 4, 10, 476 }, { 4, 0, 1002 }, - { 5, 11, 538 }, { 7, 10, 1807 }, { 4, 0, 931 }, { 7, 0, 943 }, - { 11, 0, 614 }, { 12, 0, 747 }, { 7, 0, 1837 }, { 9, 10, 20 }, - { 10, 10, 324 }, { 10, 10, 807 }, { 11, 10, 488 }, { 6, 0, 641 }, - { 6, 11, 280 }, { 10, 11, 502 }, { 11, 11, 344 }, { 12, 11, 38 }, - { 5, 11, 45 }, { 7, 11, 1161 }, { 11, 11, 448 }, { 11, 11, 880 }, - { 13, 11, 139 }, { 13, 11, 407 }, { 15, 11, 16 }, { 17, 11, 95 }, - { 18, 11, 66 }, { 18, 11, 88 }, { 18, 11, 123 }, { 21, 11, 7 }, - { 9, 0, 280 }, { 10, 0, 134 }, { 22, 0, 22 }, { 23, 0, 5 }, - { 23, 0, 29 }, { 8, 11, 777 }, { 4, 0, 90 }, { 5, 0, 545 }, - { 7, 0, 754 }, { 9, 0, 186 }, { 10, 0, 72 }, { 10, 0, 782 }, - { 11, 0, 577 }, { 11, 0, 610 }, { 11, 0, 960 }, { 12, 0, 354 }, - { 12, 0, 362 }, { 12, 0, 595 }, { 4, 11, 410 }, { 7, 11, 521 }, - { 7, 11, 1778 }, { 5, 10, 112 }, { 6, 10, 103 }, { 6, 10, 150 }, - { 10, 10, 356 }, { 4, 0, 742 }, { 7, 0, 151 }, { 9, 0, 329 }, - { 11, 0, 254 }, { 8, 0, 853 }, { 8, 0, 881 }, { 8, 0, 911 }, - { 8, 0, 912 }, { 10, 0, 872 }, { 12, 0, 741 }, { 12, 0, 742 }, - { 24, 0, 18 }, { 4, 11, 573 }, { 8, 11, 655 }, { 6, 0, 921 }, - { 6, 0, 934 }, { 9, 0, 187 }, { 10, 0, 36 }, { 11, 0, 1016 }, - { 17, 0, 44 }, { 18, 0, 64 }, { 7, 0, 833 }, { 8, 0, 517 }, - { 4, 0, 506 }, { 5, 0, 295 }, { 7, 0, 1680 }, { 4, 10, 708 }, - { 8, 10, 15 }, { 9, 10, 50 }, { 9, 10, 386 }, { 11, 10, 18 }, - { 11, 10, 529 }, { 12, 10, 228 }, { 7, 0, 251 }, { 7, 0, 1701 }, - { 8, 0, 436 }, { 4, 10, 563 }, { 7, 10, 592 }, { 7, 10, 637 }, - { 7, 10, 770 }, { 8, 10, 463 }, { 9, 10, 60 }, { 9, 10, 335 }, - { 9, 10, 904 }, { 10, 10, 73 }, { 11, 10, 434 }, { 12, 10, 585 }, - { 13, 10, 331 }, { 18, 10, 110 }, { 20, 10, 60 }, { 4, 10, 502 }, - { 8, 0, 584 }, { 6, 10, 347 }, { 10, 10, 161 }, { 7, 0, 987 }, - { 9, 0, 688 }, { 10, 0, 522 }, { 11, 0, 788 }, { 12, 0, 137 }, - { 12, 0, 566 }, { 14, 0, 9 }, { 14, 0, 24 }, { 14, 0, 64 }, - { 7, 11, 899 }, { 14, 11, 325 }, { 4, 0, 214 }, { 5, 0, 500 }, - { 5, 10, 102 }, { 6, 10, 284 }, { 7, 10, 1079 }, { 7, 10, 1423 }, - { 7, 10, 1702 }, { 8, 10, 470 }, { 9, 10, 554 }, { 9, 10, 723 }, - { 11, 10, 333 }, { 7, 10, 246 }, { 7, 10, 840 }, { 6, 10, 10 }, - { 8, 10, 571 }, { 9, 10, 739 }, { 15, 10, 91 }, { 5, 10, 626 }, - { 18, 0, 195 }, { 6, 0, 1775 }, { 7, 0, 389 }, { 7, 0, 700 }, - { 7, 0, 940 }, { 8, 0, 514 }, { 9, 0, 116 }, { 9, 0, 535 }, - { 10, 0, 118 }, { 11, 0, 107 }, { 11, 0, 148 }, { 11, 0, 922 }, - { 12, 0, 254 }, { 12, 0, 421 }, { 14, 0, 238 }, { 5, 10, 18 }, - { 6, 10, 526 }, { 13, 10, 24 }, { 13, 10, 110 }, { 19, 10, 5 }, - { 19, 10, 44 }, { 4, 0, 743 }, { 11, 0, 292 }, { 4, 10, 309 }, - { 5, 10, 462 }, { 7, 10, 970 }, { 7, 10, 1097 }, { 22, 10, 30 }, - { 22, 10, 33 }, { 11, 11, 338 }, { 7, 11, 1598 }, { 7, 0, 1283 }, - { 9, 0, 227 }, { 11, 0, 325 }, { 11, 0, 408 }, { 14, 0, 180 }, - { 18, 0, 47 }, { 4, 0, 953 }, { 6, 0, 1805 }, { 6, 0, 1814 }, - { 6, 0, 1862 }, { 12, 0, 774 }, { 6, 11, 611 }, { 7, 11, 1733 }, - { 7, 11, 1464 }, { 5, 0, 81 }, { 7, 0, 146 }, { 7, 0, 1342 }, - { 8, 0, 53 }, { 8, 0, 561 }, { 8, 0, 694 }, { 8, 0, 754 }, - { 9, 0, 115 }, { 9, 0, 179 }, { 9, 0, 894 }, { 10, 0, 462 }, - { 10, 0, 813 }, { 11, 0, 230 }, { 11, 0, 657 }, { 11, 0, 699 }, - { 11, 0, 748 }, { 12, 0, 119 }, { 12, 0, 200 }, { 12, 0, 283 }, - { 14, 0, 273 }, { 5, 0, 408 }, { 6, 0, 789 }, { 6, 0, 877 }, - { 6, 0, 1253 }, { 6, 0, 1413 }, { 9, 0, 747 }, { 6, 10, 1704 }, - { 7, 11, 663 }, { 6, 0, 1910 }, { 6, 0, 1915 }, { 6, 0, 1923 }, - { 9, 0, 913 }, { 9, 0, 928 }, { 9, 0, 950 }, { 9, 0, 954 }, - { 9, 0, 978 }, { 9, 0, 993 }, { 12, 0, 812 }, { 12, 0, 819 }, - { 12, 0, 831 }, { 12, 0, 833 }, { 12, 0, 838 }, { 12, 0, 909 }, - { 12, 0, 928 }, { 12, 0, 931 }, { 12, 0, 950 }, { 15, 0, 186 }, - { 15, 0, 187 }, { 15, 0, 195 }, { 15, 0, 196 }, { 15, 0, 209 }, - { 15, 0, 215 }, { 15, 0, 236 }, { 15, 0, 241 }, { 15, 0, 249 }, - { 15, 0, 253 }, { 18, 0, 180 }, { 18, 0, 221 }, { 18, 0, 224 }, - { 18, 0, 227 }, { 18, 0, 229 }, { 21, 0, 60 }, { 7, 0, 1826 }, - { 7, 0, 1938 }, { 11, 0, 490 }, { 18, 0, 143 }, { 5, 10, 86 }, - { 7, 10, 743 }, { 9, 10, 85 }, { 10, 10, 281 }, { 10, 10, 432 }, - { 12, 10, 251 }, { 13, 10, 118 }, { 14, 10, 378 }, { 5, 10, 524 }, - { 5, 10, 744 }, { 13, 11, 442 }, { 10, 10, 107 }, { 12, 10, 436 }, - { 7, 11, 503 }, { 6, 0, 1162 }, { 4, 10, 927 }, { 7, 0, 30 }, - { 8, 0, 86 }, { 8, 0, 315 }, { 8, 0, 700 }, { 9, 0, 576 }, - { 9, 0, 858 }, { 10, 0, 414 }, { 11, 0, 310 }, { 11, 0, 888 }, - { 11, 0, 904 }, { 12, 0, 361 }, { 13, 0, 248 }, { 13, 0, 371 }, - { 14, 0, 142 }, { 12, 10, 670 }, { 18, 10, 94 }, { 6, 0, 721 }, - { 4, 11, 113 }, { 5, 11, 163 }, { 5, 11, 735 }, { 7, 11, 1009 }, - { 7, 10, 1149 }, { 9, 11, 9 }, { 9, 10, 156 }, { 9, 11, 771 }, - { 12, 11, 90 }, { 13, 11, 138 }, { 13, 11, 410 }, { 15, 11, 128 }, - { 10, 0, 839 }, { 5, 10, 778 }, { 9, 0, 617 }, { 5, 10, 502 }, - { 8, 10, 196 }, { 10, 10, 283 }, { 11, 10, 406 }, { 6, 0, 428 }, - { 7, 0, 524 }, { 8, 0, 169 }, { 8, 0, 234 }, { 9, 0, 480 }, - { 10, 0, 646 }, { 5, 10, 855 }, { 6, 0, 1648 }, { 7, 0, 1205 }, - { 10, 0, 637 }, { 7, 0, 1596 }, { 4, 11, 935 }, { 5, 11, 823 }, - { 5, 11, 269 }, { 7, 11, 434 }, { 7, 11, 891 }, { 8, 11, 339 }, - { 9, 11, 702 }, { 11, 11, 594 }, { 11, 11, 718 }, { 17, 11, 100 }, - { 7, 11, 878 }, { 9, 11, 485 }, { 13, 11, 264 }, { 4, 0, 266 }, - { 8, 0, 4 }, { 9, 0, 39 }, { 10, 0, 166 }, { 11, 0, 918 }, - { 12, 0, 635 }, { 20, 0, 10 }, { 22, 0, 27 }, { 22, 0, 43 }, - { 22, 0, 52 }, { 6, 11, 1713 }, { 7, 10, 1400 }, { 9, 10, 446 }, - { 10, 10, 45 }, { 7, 11, 900 }, { 4, 0, 862 }, { 6, 0, 1554 }, - { 7, 11, 1033 }, { 19, 0, 16 }, { 19, 11, 16 }, { 7, 11, 1208 }, - { 7, 0, 157 }, { 8, 0, 279 }, { 6, 0, 604 }, { 8, 0, 391 }, - { 13, 10, 455 }, { 15, 10, 99 }, { 15, 10, 129 }, { 16, 10, 68 }, - { 7, 10, 172 }, { 7, 0, 945 }, { 11, 0, 713 }, { 11, 0, 744 }, - { 4, 0, 973 }, { 10, 0, 877 }, { 10, 0, 937 }, { 10, 0, 938 }, - { 12, 0, 711 }, { 11, 0, 1022 }, { 4, 10, 568 }, { 14, 11, 143 }, - { 4, 0, 567 }, { 9, 0, 859 }, { 4, 10, 732 }, { 7, 0, 1846 }, - { 8, 0, 628 }, { 8, 10, 733 }, { 5, 0, 762 }, { 4, 10, 428 }, - { 7, 10, 1789 }, { 10, 0, 784 }, { 13, 0, 191 }, { 7, 10, 2015 }, - { 12, 10, 665 }, { 5, 0, 298 }, { 7, 0, 633 }, { 7, 0, 905 }, - { 7, 0, 909 }, { 7, 0, 1538 }, { 9, 0, 767 }, { 12, 0, 636 }, - { 10, 10, 806 }, { 4, 0, 795 }, { 11, 0, 301 }, { 7, 0, 1970 }, - { 5, 11, 625 }, { 7, 11, 1617 }, { 7, 11, 275 }, { 7, 11, 37 }, - { 8, 11, 425 }, { 8, 11, 693 }, { 9, 11, 720 }, { 10, 11, 380 }, - { 10, 11, 638 }, { 11, 11, 273 }, { 11, 11, 307 }, { 11, 11, 473 }, - { 12, 11, 61 }, { 15, 11, 43 }, { 7, 11, 198 }, { 6, 0, 1236 }, - { 7, 0, 369 }, { 12, 0, 644 }, { 12, 0, 645 }, { 16, 0, 90 }, - { 19, 0, 15 }, { 21, 0, 27 }, { 6, 0, 71 }, { 7, 0, 845 }, - { 8, 0, 160 }, { 9, 0, 318 }, { 6, 10, 1623 }, { 6, 10, 1681 }, - { 6, 0, 1447 }, { 6, 0, 1255 }, { 10, 0, 735 }, { 8, 0, 76 }, - { 4, 11, 168 }, { 6, 10, 1748 }, { 8, 10, 715 }, { 9, 10, 802 }, - { 10, 10, 46 }, { 10, 10, 819 }, { 13, 10, 308 }, { 14, 10, 351 }, - { 14, 10, 363 }, { 18, 10, 67 }, { 7, 11, 91 }, { 6, 0, 474 }, - { 4, 10, 63 }, { 5, 10, 347 }, { 5, 10, 749 }, { 10, 0, 841 }, - { 5, 10, 366 }, { 6, 0, 836 }, { 4, 11, 225 }, { 7, 0, 1622 }, - { 7, 10, 89 }, { 12, 0, 735 }, { 6, 0, 1601 }, { 10, 11, 145 }, - { 6, 0, 1390 }, { 9, 0, 804 }, { 14, 0, 394 }, { 6, 11, 15 }, - { 7, 11, 70 }, { 10, 11, 240 }, { 19, 11, 93 }, { 6, 0, 96 }, - { 7, 0, 1426 }, { 4, 0, 651 }, { 5, 0, 289 }, { 7, 11, 956 }, - { 7, 10, 977 }, { 7, 11, 1157 }, { 7, 11, 1506 }, { 7, 11, 1606 }, - { 7, 11, 1615 }, { 7, 11, 1619 }, { 7, 11, 1736 }, { 7, 11, 1775 }, - { 8, 11, 590 }, { 9, 11, 324 }, { 9, 11, 736 }, { 9, 11, 774 }, - { 9, 11, 776 }, { 9, 11, 784 }, { 10, 11, 567 }, { 10, 11, 708 }, - { 11, 11, 518 }, { 11, 11, 613 }, { 11, 11, 695 }, { 11, 11, 716 }, - { 11, 11, 739 }, { 11, 11, 770 }, { 11, 11, 771 }, { 11, 11, 848 }, - { 11, 11, 857 }, { 11, 11, 931 }, { 11, 11, 947 }, { 12, 11, 326 }, - { 12, 11, 387 }, { 12, 11, 484 }, { 12, 11, 528 }, { 12, 11, 552 }, - { 12, 11, 613 }, { 13, 11, 189 }, { 13, 11, 256 }, { 13, 11, 340 }, - { 13, 11, 432 }, { 13, 11, 436 }, { 13, 11, 440 }, { 13, 11, 454 }, - { 14, 11, 174 }, { 14, 11, 220 }, { 14, 11, 284 }, { 14, 11, 390 }, - { 17, 11, 121 }, { 7, 0, 688 }, { 8, 0, 35 }, { 9, 0, 511 }, - { 10, 0, 767 }, { 19, 0, 118 }, { 6, 0, 667 }, { 4, 0, 513 }, - { 5, 10, 824 }, { 5, 10, 941 }, { 7, 10, 440 }, { 8, 10, 230 }, - { 11, 10, 106 }, { 6, 0, 2034 }, { 7, 11, 1399 }, { 15, 11, 66 }, - { 7, 11, 1529 }, { 4, 11, 145 }, { 6, 11, 176 }, { 7, 11, 395 }, - { 9, 11, 562 }, { 16, 11, 28 }, { 4, 11, 501 }, { 4, 0, 704 }, - { 6, 0, 1524 }, { 7, 0, 1078 }, { 6, 11, 464 }, { 6, 11, 509 }, - { 10, 11, 82 }, { 20, 11, 91 }, { 23, 11, 13 }, { 4, 0, 720 }, - { 5, 0, 306 }, { 5, 0, 431 }, { 7, 0, 1196 }, { 4, 10, 914 }, - { 5, 10, 800 }, { 5, 10, 852 }, { 7, 11, 1189 }, { 10, 0, 54 }, - { 13, 10, 115 }, { 7, 10, 564 }, { 14, 10, 168 }, { 5, 0, 464 }, - { 6, 0, 236 }, { 7, 0, 696 }, { 7, 0, 914 }, { 7, 0, 1108 }, - { 7, 0, 1448 }, { 9, 0, 15 }, { 9, 0, 564 }, { 10, 0, 14 }, - { 12, 0, 565 }, { 13, 0, 449 }, { 14, 0, 53 }, { 15, 0, 13 }, - { 16, 0, 64 }, { 17, 0, 41 }, { 4, 10, 918 }, { 5, 10, 876 }, - { 6, 0, 1418 }, { 6, 10, 1764 }, { 4, 10, 92 }, { 5, 10, 274 }, - { 6, 0, 907 }, { 4, 11, 114 }, { 8, 10, 501 }, { 9, 11, 492 }, - { 13, 11, 462 }, { 14, 11, 215 }, { 4, 11, 77 }, { 5, 11, 361 }, - { 6, 11, 139 }, { 6, 11, 401 }, { 6, 11, 404 }, { 7, 11, 413 }, - { 7, 11, 715 }, { 7, 11, 1716 }, { 11, 11, 279 }, { 12, 11, 179 }, - { 12, 11, 258 }, { 13, 11, 244 }, { 14, 11, 358 }, { 6, 0, 1767 }, - { 12, 0, 194 }, { 17, 0, 107 }, { 6, 11, 1717 }, { 5, 10, 743 }, - { 14, 11, 329 }, { 4, 10, 49 }, { 7, 10, 280 }, { 7, 10, 1633 }, - { 5, 0, 840 }, { 7, 11, 1061 }, { 8, 11, 82 }, { 11, 11, 250 }, - { 12, 11, 420 }, { 13, 11, 184 }, { 7, 11, 724 }, { 6, 0, 900 }, - { 8, 10, 47 }, { 6, 0, 1436 }, { 16, 11, 0 }, { 6, 0, 675 }, - { 7, 0, 1008 }, { 7, 0, 1560 }, { 9, 0, 642 }, { 11, 0, 236 }, - { 14, 0, 193 }, { 5, 10, 272 }, { 5, 10, 908 }, { 5, 10, 942 }, - { 8, 10, 197 }, { 9, 10, 47 }, { 11, 10, 538 }, { 11, 10, 742 }, - { 4, 0, 68 }, { 5, 0, 628 }, { 5, 0, 634 }, { 6, 0, 386 }, - { 7, 0, 794 }, { 8, 0, 273 }, { 9, 0, 563 }, { 10, 0, 105 }, - { 10, 0, 171 }, { 11, 0, 94 }, { 11, 0, 354 }, { 7, 10, 1911 }, - { 9, 10, 891 }, { 4, 0, 95 }, { 6, 0, 1297 }, { 6, 0, 1604 }, - { 7, 0, 416 }, { 11, 0, 830 }, { 6, 11, 513 }, { 7, 11, 1052 }, - { 7, 0, 731 }, { 13, 0, 20 }, { 15, 0, 11 }, { 9, 11, 899 }, - { 10, 0, 850 }, { 12, 0, 697 }, { 4, 0, 662 }, { 7, 11, 1417 }, - { 12, 11, 382 }, { 17, 11, 48 }, { 24, 11, 12 }, { 5, 0, 736 }, - { 4, 0, 861 }, { 4, 10, 407 }, { 4, 10, 560 }, { 13, 10, 490 }, - { 6, 11, 545 }, { 7, 11, 565 }, { 7, 11, 1669 }, { 10, 11, 114 }, - { 11, 11, 642 }, { 12, 11, 618 }, { 6, 0, 871 }, { 6, 0, 1000 }, - { 5, 0, 864 }, { 10, 0, 648 }, { 11, 0, 671 }, { 15, 0, 46 }, - { 5, 11, 5 }, { 5, 0, 928 }, { 11, 0, 90 }, { 13, 0, 7 }, - { 4, 10, 475 }, { 11, 10, 35 }, { 13, 10, 71 }, { 13, 10, 177 }, - { 14, 10, 422 }, { 8, 0, 332 }, { 7, 11, 192 }, { 6, 0, 1055 }, - { 8, 11, 763 }, { 11, 0, 986 }, { 12, 0, 682 }, { 7, 0, 76 }, - { 8, 0, 44 }, { 9, 0, 884 }, { 10, 0, 580 }, { 11, 0, 399 }, - { 11, 0, 894 }, { 15, 0, 122 }, { 7, 11, 1237 }, { 7, 10, 636 }, - { 11, 0, 300 }, { 6, 10, 222 }, { 7, 10, 1620 }, { 8, 10, 409 }, - { 9, 10, 693 }, { 4, 11, 87 }, { 5, 11, 250 }, { 10, 11, 601 }, - { 13, 11, 298 }, { 13, 11, 353 }, { 13, 11, 376 }, { 5, 0, 518 }, - { 10, 0, 340 }, { 11, 0, 175 }, { 21, 0, 16 }, { 12, 0, 771 }, - { 6, 0, 1108 }, { 9, 0, 831 }, { 4, 0, 836 }, { 7, 0, 1852 }, - { 4, 0, 957 }, { 6, 0, 1804 }, { 8, 0, 842 }, { 8, 0, 843 }, - { 8, 0, 851 }, { 8, 0, 855 }, { 12, 0, 767 }, { 7, 11, 814 }, - { 4, 11, 57 }, { 7, 11, 1195 }, { 7, 11, 1438 }, { 7, 11, 1548 }, - { 7, 11, 1835 }, { 7, 11, 1904 }, { 9, 11, 757 }, { 10, 11, 604 }, - { 11, 11, 519 }, { 5, 10, 882 }, { 10, 0, 246 }, { 4, 0, 934 }, - { 5, 0, 202 }, { 8, 0, 610 }, { 7, 11, 1897 }, { 12, 11, 290 }, - { 13, 11, 80 }, { 13, 11, 437 }, { 17, 11, 74 }, { 8, 0, 96 }, - { 9, 0, 36 }, { 10, 0, 607 }, { 10, 0, 804 }, { 10, 0, 832 }, - { 11, 0, 423 }, { 11, 0, 442 }, { 12, 0, 309 }, { 14, 0, 199 }, - { 15, 0, 90 }, { 17, 0, 110 }, { 4, 10, 426 }, { 7, 0, 654 }, - { 8, 0, 240 }, { 6, 10, 58 }, { 7, 10, 745 }, { 7, 10, 1969 }, - { 8, 10, 675 }, { 9, 10, 479 }, { 9, 10, 731 }, { 10, 10, 330 }, - { 10, 10, 593 }, { 10, 10, 817 }, { 11, 10, 32 }, { 11, 10, 133 }, - { 11, 10, 221 }, { 17, 10, 68 }, { 9, 0, 13 }, { 9, 0, 398 }, - { 9, 0, 727 }, { 10, 0, 75 }, { 10, 0, 184 }, { 10, 0, 230 }, - { 10, 0, 564 }, { 10, 0, 569 }, { 11, 0, 973 }, { 12, 0, 70 }, - { 12, 0, 189 }, { 13, 0, 57 }, { 13, 0, 257 }, { 4, 11, 209 }, - { 7, 11, 902 }, { 7, 0, 391 }, { 9, 10, 538 }, { 6, 0, 403 }, - { 6, 11, 303 }, { 7, 11, 335 }, { 7, 11, 1437 }, { 7, 11, 1668 }, - { 8, 11, 553 }, { 8, 11, 652 }, { 8, 11, 656 }, { 9, 11, 558 }, - { 11, 11, 743 }, { 21, 11, 18 }, { 4, 11, 559 }, { 11, 0, 75 }, - { 14, 0, 267 }, { 6, 0, 815 }, { 13, 11, 2 }, { 13, 0, 366 }, - { 9, 0, 631 }, { 5, 11, 1017 }, { 5, 0, 345 }, { 7, 0, 1016 }, - { 5, 11, 709 }, { 6, 11, 1745 }, { 5, 10, 566 }, { 7, 0, 952 }, - { 6, 10, 48 }, { 9, 10, 139 }, { 10, 10, 399 }, { 11, 10, 469 }, - { 12, 10, 634 }, { 13, 10, 223 }, { 5, 0, 673 }, { 9, 0, 850 }, - { 7, 11, 8 }, { 8, 11, 206 }, { 6, 0, 662 }, { 21, 0, 35 }, - { 4, 0, 287 }, { 5, 0, 1018 }, { 6, 10, 114 }, { 7, 10, 1224 }, - { 7, 10, 1556 }, { 8, 10, 3 }, { 8, 10, 576 }, { 9, 10, 267 }, - { 4, 0, 884 }, { 5, 0, 34 }, { 10, 0, 724 }, { 12, 0, 444 }, - { 13, 0, 354 }, { 18, 0, 32 }, { 23, 0, 24 }, { 23, 0, 31 }, - { 24, 0, 5 }, { 5, 10, 933 }, { 4, 11, 776 }, { 10, 0, 151 }, - { 8, 0, 427 }, { 6, 0, 382 }, { 4, 0, 329 }, { 9, 0, 846 }, - { 10, 0, 827 }, { 10, 11, 33 }, { 9, 0, 279 }, { 10, 0, 407 }, - { 14, 0, 84 }, { 22, 0, 18 }, { 7, 11, 1297 }, { 8, 11, 406 }, - { 4, 0, 906 }, { 8, 0, 366 }, { 6, 0, 843 }, { 6, 0, 1443 }, - { 7, 0, 1372 }, { 10, 0, 992 }, { 4, 0, 123 }, { 5, 0, 605 }, - { 7, 0, 1509 }, { 8, 0, 36 }, { 4, 0, 649 }, { 8, 11, 175 }, - { 10, 11, 168 }, { 10, 11, 573 }, { 5, 0, 767 }, { 6, 0, 1018 }, - { 7, 11, 1305 }, { 12, 10, 30 }, { 13, 10, 148 }, { 14, 10, 87 }, - { 14, 10, 182 }, { 16, 10, 42 }, { 20, 10, 70 }, { 6, 11, 607 }, - { 4, 0, 273 }, { 5, 0, 658 }, { 5, 0, 995 }, { 6, 0, 72 }, - { 11, 11, 174 }, { 10, 0, 483 }, { 12, 0, 368 }, { 7, 10, 56 }, - { 7, 10, 1989 }, { 8, 10, 337 }, { 8, 10, 738 }, { 9, 10, 600 }, - { 13, 10, 447 }, { 14, 10, 92 }, { 5, 11, 784 }, { 10, 10, 666 }, - { 7, 0, 1345 }, { 11, 11, 882 }, { 6, 0, 1293 }, { 5, 0, 589 }, - { 6, 0, 1988 }, { 5, 0, 117 }, { 6, 0, 514 }, { 6, 0, 541 }, - { 7, 0, 1164 }, { 7, 0, 1436 }, { 8, 0, 220 }, { 8, 0, 648 }, - { 10, 0, 688 }, { 11, 0, 560 }, { 8, 0, 379 }, { 5, 0, 686 }, - { 7, 10, 866 }, { 7, 10, 1163 }, { 4, 10, 328 }, { 9, 11, 14 }, - { 9, 11, 441 }, { 10, 11, 306 }, { 11, 11, 9 }, { 4, 10, 101 }, - { 7, 10, 1171 }, { 5, 10, 833 }, { 8, 10, 744 }, { 5, 11, 161 }, - { 7, 11, 839 }, { 7, 11, 887 }, { 7, 0, 196 }, { 10, 0, 765 }, - { 11, 0, 347 }, { 11, 0, 552 }, { 11, 0, 790 }, { 12, 0, 263 }, - { 13, 0, 246 }, { 13, 0, 270 }, { 13, 0, 395 }, { 14, 0, 176 }, - { 14, 0, 190 }, { 14, 0, 398 }, { 14, 0, 412 }, { 15, 0, 32 }, - { 15, 0, 63 }, { 16, 0, 88 }, { 19, 0, 105 }, { 6, 10, 9 }, - { 6, 10, 397 }, { 7, 10, 53 }, { 7, 10, 1742 }, { 10, 10, 632 }, - { 11, 10, 828 }, { 12, 10, 146 }, { 5, 0, 381 }, { 7, 0, 1792 }, - { 6, 0, 1452 }, { 7, 11, 429 }, { 8, 0, 367 }, { 10, 0, 760 }, - { 14, 0, 79 }, { 20, 0, 17 }, { 24, 0, 0 }, { 7, 0, 616 }, - { 10, 0, 413 }, { 11, 10, 417 }, { 12, 10, 223 }, { 12, 10, 265 }, - { 7, 11, 1611 }, { 13, 11, 14 }, { 15, 11, 44 }, { 19, 11, 13 }, - { 20, 11, 76 }, { 7, 0, 1229 }, { 6, 0, 120 }, { 7, 0, 1188 }, - { 7, 0, 1710 }, { 8, 0, 286 }, { 9, 0, 667 }, { 11, 0, 592 }, - { 11, 0, 730 }, { 7, 11, 1814 }, { 7, 0, 1146 }, { 4, 10, 186 }, - { 5, 10, 157 }, { 8, 10, 168 }, { 10, 10, 6 }, { 4, 0, 352 }, - { 7, 0, 687 }, { 4, 0, 192 }, { 5, 0, 49 }, { 6, 0, 200 }, - { 6, 0, 293 }, { 6, 0, 1696 }, { 7, 0, 1151 }, { 5, 10, 875 }, - { 5, 10, 773 }, { 5, 10, 991 }, { 6, 10, 1635 }, { 6, 10, 1788 }, - { 7, 10, 111 }, { 8, 10, 581 }, { 6, 0, 935 }, { 6, 0, 1151 }, - { 6, 0, 1050 }, { 4, 0, 650 }, { 4, 0, 147 }, { 11, 0, 194 }, - { 12, 0, 62 }, { 12, 0, 88 }, { 11, 11, 194 }, { 12, 11, 62 }, - { 12, 11, 88 }, { 6, 0, 339 }, { 7, 0, 923 }, { 6, 10, 1747 }, - { 7, 11, 643 }, { 8, 11, 236 }, { 5, 0, 934 }, { 7, 10, 1364 }, - { 7, 10, 1907 }, { 13, 10, 158 }, { 4, 10, 659 }, { 4, 10, 404 }, - { 7, 10, 675 }, { 7, 11, 581 }, { 9, 11, 644 }, { 9, 11, 699 }, - { 13, 0, 211 }, { 14, 0, 133 }, { 14, 0, 204 }, { 15, 0, 64 }, - { 15, 0, 69 }, { 15, 0, 114 }, { 16, 0, 10 }, { 19, 0, 23 }, - { 19, 0, 35 }, { 19, 0, 39 }, { 19, 0, 51 }, { 19, 0, 71 }, - { 19, 0, 75 }, { 24, 0, 15 }, { 5, 10, 391 }, { 5, 11, 54 }, - { 7, 11, 1513 }, { 7, 0, 222 }, { 8, 0, 341 }, { 5, 10, 540 }, - { 6, 10, 1697 }, { 6, 10, 78 }, { 4, 11, 744 }, { 8, 0, 293 }, - { 9, 11, 701 }, { 7, 11, 930 }, { 10, 11, 402 }, { 10, 11, 476 }, - { 13, 11, 452 }, { 18, 11, 55 }, { 19, 11, 104 }, { 4, 0, 637 }, - { 5, 10, 460 }, { 8, 11, 50 }, { 9, 11, 624 }, { 4, 11, 572 }, - { 6, 0, 1159 }, { 4, 10, 199 }, { 11, 10, 34 }, { 6, 0, 847 }, - { 6, 10, 388 }, { 6, 11, 43 }, { 7, 11, 38 }, { 8, 11, 248 }, - { 9, 11, 504 }, { 10, 11, 513 }, { 9, 0, 683 }, { 4, 10, 511 }, - { 6, 10, 608 }, { 9, 10, 333 }, { 10, 10, 602 }, { 11, 10, 441 }, - { 11, 10, 723 }, { 11, 10, 976 }, { 12, 10, 357 }, { 9, 0, 867 }, - { 10, 0, 837 }, { 6, 0, 944 }, { 7, 11, 326 }, { 7, 0, 1809 }, - { 5, 10, 938 }, { 7, 11, 783 }, { 8, 10, 707 }, { 5, 11, 766 }, - { 5, 11, 363 }, { 6, 0, 170 }, { 7, 0, 1080 }, { 8, 0, 395 }, - { 8, 0, 487 }, { 13, 0, 147 }, { 6, 11, 258 }, { 12, 11, 409 }, - { 4, 0, 535 }, { 8, 0, 618 }, { 5, 11, 249 }, { 20, 11, 82 }, - { 6, 0, 1379 }, { 21, 11, 15 }, { 7, 0, 1625 }, { 22, 0, 23 }, - { 5, 11, 393 }, { 6, 11, 378 }, { 7, 11, 1981 }, { 9, 11, 32 }, - { 9, 11, 591 }, { 10, 11, 685 }, { 10, 11, 741 }, { 14, 11, 382 }, - { 5, 11, 788 }, { 7, 11, 1968 }, { 10, 11, 19 }, { 11, 11, 911 }, - { 7, 11, 1401 }, { 7, 11, 1476 }, { 4, 11, 61 }, { 5, 11, 58 }, - { 5, 11, 171 }, { 5, 11, 635 }, { 5, 11, 683 }, { 5, 11, 700 }, - { 6, 11, 291 }, { 6, 11, 566 }, { 7, 11, 1650 }, { 11, 11, 523 }, - { 12, 11, 273 }, { 12, 11, 303 }, { 15, 11, 39 }, { 15, 11, 111 }, - { 6, 10, 469 }, { 7, 10, 1709 }, { 10, 10, 515 }, { 4, 0, 778 }, - { 6, 11, 589 }, { 4, 0, 46 }, { 5, 0, 811 }, { 6, 0, 1679 }, - { 6, 0, 1714 }, { 7, 0, 2032 }, { 7, 0, 1458 }, { 9, 0, 407 }, - { 11, 0, 15 }, { 12, 0, 651 }, { 21, 0, 37 }, { 7, 0, 938 }, - { 4, 10, 500 }, { 6, 0, 34 }, { 7, 0, 69 }, { 7, 0, 1089 }, - { 7, 0, 1281 }, { 8, 0, 708 }, { 8, 0, 721 }, { 9, 0, 363 }, - { 20, 0, 98 }, { 10, 11, 231 }, { 19, 11, 124 }, { 7, 11, 726 }, - { 24, 11, 9 }, { 5, 10, 68 }, { 6, 10, 383 }, { 8, 11, 583 }, - { 4, 11, 917 }, { 5, 11, 1005 }, { 11, 10, 216 }, { 11, 10, 340 }, - { 7, 11, 1675 }, { 8, 0, 441 }, { 10, 0, 314 }, { 15, 0, 3 }, - { 4, 11, 919 }, { 4, 10, 337 }, { 6, 10, 353 }, { 7, 10, 1934 }, - { 8, 10, 488 }, { 9, 10, 429 }, { 7, 0, 889 }, { 7, 10, 1795 }, - { 8, 10, 259 }, { 9, 10, 135 }, { 9, 10, 177 }, { 9, 10, 860 }, - { 10, 10, 825 }, { 11, 10, 115 }, { 11, 10, 370 }, { 11, 10, 405 }, - { 11, 10, 604 }, { 12, 10, 10 }, { 12, 10, 667 }, { 12, 10, 669 }, - { 13, 10, 76 }, { 14, 10, 310 }, { 15, 10, 76 }, { 15, 10, 147 }, - { 20, 10, 23 }, { 4, 10, 15 }, { 4, 11, 255 }, { 5, 10, 22 }, - { 5, 11, 302 }, { 6, 11, 132 }, { 6, 10, 244 }, { 7, 10, 40 }, - { 7, 11, 128 }, { 7, 10, 200 }, { 7, 11, 283 }, { 7, 10, 906 }, - { 7, 10, 1199 }, { 7, 11, 1299 }, { 9, 10, 616 }, { 10, 11, 52 }, - { 10, 11, 514 }, { 10, 10, 716 }, { 11, 10, 635 }, { 11, 10, 801 }, - { 11, 11, 925 }, { 12, 10, 458 }, { 13, 11, 92 }, { 14, 11, 309 }, - { 4, 0, 462 }, { 9, 11, 173 }, { 7, 10, 1735 }, { 8, 0, 525 }, - { 5, 10, 598 }, { 7, 10, 791 }, { 8, 10, 108 }, { 9, 10, 123 }, - { 5, 0, 73 }, { 6, 0, 23 }, { 6, 0, 338 }, { 4, 0, 676 }, - { 4, 10, 683 }, { 7, 0, 725 }, { 8, 0, 498 }, { 11, 0, 268 }, - { 12, 0, 21 }, { 23, 0, 7 }, { 7, 0, 773 }, { 4, 10, 155 }, - { 7, 10, 1689 }, { 4, 0, 164 }, { 5, 0, 730 }, { 5, 10, 151 }, - { 5, 10, 741 }, { 6, 11, 210 }, { 7, 10, 498 }, { 7, 10, 870 }, - { 7, 10, 1542 }, { 12, 10, 213 }, { 14, 10, 36 }, { 14, 10, 391 }, - { 17, 10, 111 }, { 18, 10, 6 }, { 18, 10, 46 }, { 18, 10, 151 }, - { 19, 10, 36 }, { 20, 10, 32 }, { 20, 10, 56 }, { 20, 10, 69 }, - { 20, 10, 102 }, { 21, 10, 4 }, { 22, 10, 8 }, { 22, 10, 10 }, - { 22, 10, 14 }, { 22, 10, 31 }, { 4, 10, 624 }, { 7, 10, 1752 }, - { 4, 0, 583 }, { 9, 0, 936 }, { 15, 0, 214 }, { 18, 0, 199 }, - { 24, 0, 26 }, { 6, 11, 588 }, { 7, 0, 1462 }, { 11, 0, 659 }, - { 4, 11, 284 }, { 6, 11, 223 }, { 5, 0, 220 }, { 11, 0, 803 }, - { 4, 0, 544 }, { 4, 10, 492 }, { 5, 10, 451 }, { 16, 0, 98 }, - { 20, 0, 119 }, { 4, 11, 218 }, { 7, 11, 526 }, { 15, 11, 137 }, - { 7, 10, 835 }, { 4, 11, 270 }, { 5, 11, 192 }, { 6, 11, 332 }, - { 7, 11, 1322 }, { 13, 11, 9 }, { 13, 10, 70 }, { 14, 11, 104 }, - { 14, 11, 311 }, { 4, 10, 539 }, { 12, 11, 661 }, { 5, 0, 176 }, - { 6, 0, 437 }, { 6, 0, 564 }, { 11, 0, 181 }, { 13, 0, 183 }, - { 7, 0, 1192 }, { 6, 10, 113 }, { 7, 10, 436 }, { 8, 10, 718 }, - { 7, 10, 520 }, { 7, 0, 1878 }, { 12, 11, 196 }, { 7, 11, 379 }, - { 8, 11, 481 }, { 9, 11, 377 }, { 5, 11, 1003 }, { 6, 11, 149 }, - { 9, 11, 746 }, { 8, 11, 262 }, { 9, 11, 627 }, { 10, 11, 18 }, - { 11, 11, 214 }, { 11, 11, 404 }, { 11, 11, 457 }, { 11, 11, 780 }, - { 11, 11, 849 }, { 11, 11, 913 }, { 13, 11, 330 }, { 13, 11, 401 }, - { 14, 11, 200 }, { 21, 0, 26 }, { 8, 11, 304 }, { 4, 11, 142 }, - { 7, 0, 944 }, { 4, 0, 790 }, { 5, 0, 273 }, { 6, 0, 394 }, - { 6, 0, 855 }, { 4, 0, 135 }, { 6, 0, 127 }, { 7, 0, 1185 }, - { 7, 0, 1511 }, { 8, 0, 613 }, { 11, 0, 5 }, { 12, 0, 336 }, - { 12, 0, 495 }, { 12, 0, 586 }, { 12, 0, 660 }, { 12, 0, 668 }, - { 14, 0, 385 }, { 15, 0, 118 }, { 17, 0, 20 }, { 18, 0, 98 }, - { 6, 0, 230 }, { 9, 0, 752 }, { 18, 0, 109 }, { 12, 10, 610 }, - { 13, 10, 431 }, { 16, 10, 59 }, { 7, 0, 1954 }, { 7, 11, 925 }, - { 4, 11, 471 }, { 5, 11, 51 }, { 6, 11, 602 }, { 8, 11, 484 }, - { 10, 11, 195 }, { 12, 11, 159 }, { 4, 10, 307 }, { 8, 11, 688 }, - { 4, 11, 697 }, { 7, 11, 812 }, { 7, 11, 1261 }, { 7, 11, 1360 }, - { 9, 11, 632 }, { 12, 11, 352 }, { 5, 0, 162 }, { 8, 0, 68 }, - { 5, 10, 964 }, { 4, 0, 654 }, { 8, 11, 212 }, { 4, 0, 156 }, - { 7, 0, 998 }, { 7, 0, 1045 }, { 7, 0, 1860 }, { 9, 0, 48 }, - { 9, 0, 692 }, { 11, 0, 419 }, { 11, 0, 602 }, { 5, 11, 221 }, - { 4, 11, 373 }, { 5, 11, 283 }, { 6, 11, 480 }, { 7, 11, 609 }, - { 14, 11, 216 }, { 4, 0, 240 }, { 6, 11, 192 }, { 9, 11, 793 }, - { 17, 11, 55 }, { 4, 10, 75 }, { 5, 10, 180 }, { 6, 10, 500 }, - { 7, 10, 58 }, { 7, 10, 710 }, { 10, 10, 645 }, { 4, 11, 132 }, - { 5, 11, 69 }, { 5, 10, 649 }, { 7, 11, 1242 }, { 6, 10, 276 }, - { 7, 10, 282 }, { 7, 10, 879 }, { 7, 10, 924 }, { 8, 10, 459 }, - { 9, 10, 599 }, { 9, 10, 754 }, { 11, 10, 574 }, { 12, 10, 128 }, - { 12, 10, 494 }, { 13, 10, 52 }, { 13, 10, 301 }, { 15, 10, 30 }, - { 15, 10, 132 }, { 4, 10, 200 }, { 4, 11, 111 }, { 7, 11, 302 }, - { 9, 0, 197 }, { 10, 0, 300 }, { 12, 0, 473 }, { 13, 0, 90 }, - { 13, 0, 405 }, { 4, 11, 767 }, { 6, 11, 42 }, { 7, 11, 1416 }, - { 7, 11, 1590 }, { 7, 11, 2005 }, { 8, 11, 131 }, { 8, 11, 466 }, - { 9, 11, 672 }, { 13, 11, 252 }, { 20, 11, 103 }, { 8, 0, 958 }, - { 8, 0, 999 }, { 10, 0, 963 }, { 10, 0, 1001 }, { 7, 10, 1621 }, - { 7, 0, 858 }, { 4, 0, 606 }, { 9, 11, 444 }, { 6, 11, 44 }, - { 8, 11, 368 }, { 11, 11, 172 }, { 4, 11, 570 }, { 5, 11, 120 }, - { 11, 11, 624 }, { 7, 0, 1978 }, { 8, 0, 676 }, { 6, 10, 225 }, - { 9, 10, 211 }, { 7, 0, 972 }, { 11, 0, 102 }, { 8, 10, 687 }, - { 6, 11, 227 }, { 7, 11, 1589 }, { 8, 10, 58 }, { 9, 10, 724 }, - { 11, 10, 809 }, { 13, 10, 113 }, { 17, 10, 72 }, { 4, 0, 361 }, - { 5, 0, 315 }, { 4, 0, 461 }, { 6, 10, 345 }, { 7, 10, 1247 }, - { 4, 0, 472 }, { 8, 10, 767 }, { 8, 10, 803 }, { 9, 10, 301 }, - { 9, 10, 903 }, { 7, 11, 1333 }, { 7, 11, 477 }, { 7, 10, 1949 }, - { 8, 10, 674 }, { 6, 0, 905 }, { 10, 0, 747 }, { 5, 0, 155 }, - { 6, 10, 259 }, { 7, 0, 163 }, { 8, 0, 319 }, { 9, 0, 402 }, - { 10, 0, 24 }, { 10, 0, 681 }, { 11, 0, 200 }, { 12, 0, 253 }, - { 12, 0, 410 }, { 14, 0, 219 }, { 5, 0, 475 }, { 7, 0, 1780 }, - { 9, 0, 230 }, { 11, 0, 297 }, { 11, 0, 558 }, { 14, 0, 322 }, - { 19, 0, 76 }, { 6, 11, 1667 }, { 7, 11, 2036 }, { 10, 11, 600 }, - { 8, 10, 254 }, { 6, 0, 848 }, { 7, 0, 1956 }, { 6, 11, 511 }, - { 12, 11, 132 }, { 5, 11, 568 }, { 6, 11, 138 }, { 7, 11, 1293 }, - { 6, 0, 631 }, { 9, 0, 838 }, { 21, 0, 36 }, { 4, 11, 565 }, - { 8, 11, 23 }, { 8, 11, 827 }, { 5, 0, 944 }, { 6, 0, 1769 }, - { 4, 0, 144 }, { 6, 0, 842 }, { 6, 0, 1400 }, { 4, 11, 922 }, - { 5, 11, 1023 }, { 5, 10, 248 }, { 9, 10, 800 }, { 10, 10, 693 }, - { 11, 10, 482 }, { 11, 10, 734 }, { 11, 10, 789 }, { 7, 11, 1002 }, - { 11, 11, 145 }, { 4, 10, 116 }, { 5, 10, 95 }, { 5, 10, 445 }, - { 7, 10, 1688 }, { 8, 10, 29 }, { 9, 10, 272 }, { 11, 10, 509 }, - { 11, 10, 915 }, { 14, 0, 369 }, { 18, 0, 72 }, { 7, 10, 1641 }, - { 4, 11, 740 }, { 5, 10, 543 }, { 12, 11, 116 }, { 6, 0, 247 }, - { 9, 0, 555 }, { 5, 10, 181 }, { 8, 10, 41 }, { 5, 10, 657 }, - { 8, 0, 996 }, { 10, 10, 709 }, { 7, 0, 189 }, { 8, 10, 202 }, - { 10, 10, 536 }, { 8, 11, 402 }, { 4, 11, 716 }, { 13, 11, 31 }, - { 10, 0, 280 }, { 10, 0, 797 }, { 9, 10, 423 }, { 12, 10, 89 }, - { 8, 10, 113 }, { 9, 10, 877 }, { 10, 10, 554 }, { 11, 10, 83 }, - { 12, 10, 136 }, { 19, 10, 109 }, { 5, 10, 976 }, { 7, 0, 746 }, - { 4, 10, 206 }, { 8, 0, 526 }, { 11, 0, 345 }, { 8, 0, 1017 }, - { 8, 11, 152 }, { 9, 11, 53 }, { 9, 11, 268 }, { 9, 11, 901 }, - { 10, 11, 518 }, { 10, 11, 829 }, { 11, 11, 188 }, { 13, 11, 74 }, - { 14, 11, 46 }, { 15, 11, 17 }, { 15, 11, 33 }, { 17, 11, 40 }, - { 18, 11, 36 }, { 19, 11, 20 }, { 22, 11, 1 }, { 24, 11, 2 }, - { 5, 11, 736 }, { 8, 11, 532 }, { 5, 0, 428 }, { 10, 0, 651 }, - { 7, 11, 681 }, { 7, 0, 1162 }, { 7, 0, 327 }, { 13, 0, 230 }, - { 17, 0, 113 }, { 8, 10, 226 }, { 10, 10, 537 }, { 11, 10, 570 }, - { 11, 10, 605 }, { 11, 10, 799 }, { 11, 10, 804 }, { 12, 10, 85 }, - { 12, 10, 516 }, { 12, 10, 623 }, { 12, 11, 677 }, { 13, 10, 361 }, - { 14, 10, 77 }, { 14, 10, 78 }, { 19, 10, 110 }, { 4, 0, 792 }, - { 7, 0, 1717 }, { 10, 0, 546 }, { 4, 10, 769 }, { 4, 11, 684 }, - { 8, 11, 384 }, { 4, 10, 551 }, { 6, 0, 1203 }, { 9, 10, 57 }, - { 9, 10, 459 }, { 10, 10, 425 }, { 11, 10, 119 }, { 12, 10, 184 }, - { 12, 10, 371 }, { 13, 10, 358 }, { 17, 10, 51 }, { 5, 0, 672 }, - { 5, 10, 814 }, { 8, 10, 10 }, { 9, 10, 421 }, { 9, 10, 729 }, - { 10, 10, 609 }, { 11, 10, 689 }, { 10, 0, 189 }, { 6, 10, 624 }, - { 7, 11, 110 }, { 7, 11, 188 }, { 8, 11, 290 }, { 8, 11, 591 }, - { 9, 11, 382 }, { 9, 11, 649 }, { 11, 11, 71 }, { 11, 11, 155 }, - { 11, 11, 313 }, { 12, 11, 5 }, { 13, 11, 325 }, { 14, 11, 287 }, - { 5, 0, 99 }, { 6, 0, 1053 }, { 7, 0, 298 }, { 7, 11, 360 }, - { 7, 11, 425 }, { 9, 11, 66 }, { 9, 11, 278 }, { 10, 11, 644 }, - { 4, 0, 397 }, { 8, 0, 555 }, { 9, 10, 269 }, { 4, 10, 528 }, - { 4, 11, 900 }, { 5, 11, 861 }, { 6, 0, 1157 }, { 5, 11, 254 }, - { 7, 11, 985 }, { 8, 11, 73 }, { 7, 11, 1959 }, { 8, 11, 683 }, - { 12, 0, 398 }, { 20, 0, 39 }, { 21, 0, 11 }, { 22, 0, 41 }, - { 4, 0, 485 }, { 7, 0, 353 }, { 7, 0, 1523 }, { 6, 0, 366 }, - { 7, 0, 1384 }, { 7, 0, 1601 }, { 10, 0, 787 }, { 9, 0, 282 }, - { 5, 10, 104 }, { 6, 10, 173 }, { 7, 10, 1631 }, { 11, 11, 146 }, - { 4, 0, 157 }, { 5, 0, 471 }, { 6, 0, 941 }, { 4, 11, 725 }, - { 7, 0, 1336 }, { 8, 10, 138 }, { 8, 10, 342 }, { 9, 10, 84 }, - { 10, 10, 193 }, { 11, 10, 883 }, { 12, 10, 359 }, { 6, 11, 196 }, - { 8, 0, 116 }, { 5, 11, 831 }, { 6, 0, 787 }, { 6, 10, 95 }, - { 6, 10, 406 }, { 10, 10, 409 }, { 10, 10, 447 }, { 11, 10, 44 }, - { 12, 10, 100 }, { 5, 0, 160 }, { 7, 0, 363 }, { 7, 0, 589 }, - { 10, 0, 170 }, { 13, 0, 55 }, { 6, 0, 1815 }, { 4, 0, 866 }, - { 6, 0, 889 }, { 6, 0, 1067 }, { 6, 0, 1183 }, { 4, 11, 321 }, - { 6, 11, 569 }, { 5, 11, 848 }, { 6, 11, 66 }, { 4, 11, 36 }, - { 6, 10, 1636 }, { 7, 11, 1387 }, { 10, 11, 205 }, { 11, 11, 755 }, - { 13, 11, 271 }, { 4, 0, 689 }, { 9, 0, 820 }, { 4, 10, 282 }, - { 7, 10, 1034 }, { 11, 10, 398 }, { 11, 10, 634 }, { 12, 10, 1 }, - { 12, 10, 79 }, { 12, 10, 544 }, { 14, 10, 237 }, { 17, 10, 10 }, - { 18, 10, 20 }, { 4, 0, 108 }, { 7, 0, 804 }, { 11, 0, 498 }, - { 4, 11, 887 }, { 6, 0, 1119 }, { 7, 11, 620 }, { 6, 11, 165 }, - { 10, 11, 388 }, { 5, 0, 244 }, { 5, 10, 499 }, { 6, 10, 476 }, - { 7, 10, 600 }, { 7, 10, 888 }, { 7, 10, 1096 }, { 12, 0, 609 }, - { 7, 0, 1005 }, { 4, 0, 412 }, { 5, 0, 581 }, { 4, 11, 719 }, - { 7, 11, 155 }, { 7, 10, 296 }, { 7, 10, 596 }, { 8, 10, 560 }, - { 8, 10, 586 }, { 9, 10, 612 }, { 11, 10, 304 }, { 12, 10, 46 }, - { 13, 10, 89 }, { 14, 10, 112 }, { 17, 10, 122 }, { 4, 0, 895 }, - { 5, 0, 772 }, { 14, 11, 307 }, { 7, 0, 1898 }, { 4, 0, 926 }, - { 5, 0, 983 }, { 4, 11, 353 }, { 6, 11, 146 }, { 6, 11, 1789 }, - { 7, 11, 288 }, { 7, 11, 990 }, { 7, 11, 1348 }, { 9, 11, 665 }, - { 9, 11, 898 }, { 11, 11, 893 }, { 14, 11, 212 }, { 4, 0, 538 }, - { 5, 11, 532 }, { 6, 0, 294 }, { 7, 0, 1267 }, { 8, 0, 624 }, - { 13, 0, 496 }, { 7, 0, 1325 }, { 4, 11, 45 }, { 7, 11, 1257 }, - { 10, 0, 301 }, { 9, 0, 298 }, { 12, 0, 291 }, { 13, 0, 276 }, - { 14, 0, 6 }, { 17, 0, 18 }, { 21, 0, 32 }, { 7, 10, 1599 }, - { 7, 10, 1723 }, { 8, 10, 79 }, { 8, 10, 106 }, { 8, 10, 190 }, - { 8, 10, 302 }, { 8, 10, 383 }, { 8, 10, 713 }, { 9, 10, 119 }, - { 9, 10, 233 }, { 9, 10, 419 }, { 9, 10, 471 }, { 10, 10, 181 }, - { 10, 10, 406 }, { 11, 10, 57 }, { 11, 10, 85 }, { 11, 10, 120 }, - { 11, 10, 177 }, { 11, 10, 296 }, { 11, 10, 382 }, { 11, 10, 454 }, - { 11, 10, 758 }, { 11, 10, 999 }, { 12, 10, 27 }, { 12, 10, 131 }, - { 12, 10, 245 }, { 12, 10, 312 }, { 12, 10, 446 }, { 12, 10, 454 }, - { 13, 10, 98 }, { 13, 10, 426 }, { 13, 10, 508 }, { 14, 10, 163 }, - { 14, 10, 272 }, { 14, 10, 277 }, { 14, 10, 370 }, { 15, 10, 95 }, - { 15, 10, 138 }, { 15, 10, 167 }, { 17, 10, 38 }, { 20, 10, 96 }, - { 4, 0, 757 }, { 6, 0, 1263 }, { 4, 0, 820 }, { 6, 10, 1759 }, - { 5, 0, 722 }, { 8, 11, 816 }, { 10, 10, 372 }, { 17, 10, 16 }, - { 6, 0, 1039 }, { 4, 0, 991 }, { 6, 0, 2028 }, { 5, 10, 258 }, - { 7, 0, 1875 }, { 11, 0, 124 }, { 6, 11, 559 }, { 6, 11, 1691 }, - { 7, 11, 586 }, { 5, 0, 324 }, { 7, 0, 881 }, { 8, 10, 134 }, - { 9, 10, 788 }, { 12, 10, 438 }, { 7, 11, 1823 }, { 11, 11, 693 }, - { 6, 0, 1348 }, { 6, 0, 1545 }, { 6, 0, 911 }, { 4, 0, 954 }, - { 8, 0, 329 }, { 8, 0, 414 }, { 7, 10, 1948 }, { 7, 10, 2004 }, - { 5, 0, 517 }, { 6, 10, 439 }, { 7, 10, 780 }, { 7, 10, 1040 }, - { 4, 0, 816 }, { 5, 10, 1 }, { 6, 10, 81 }, { 10, 10, 520 }, - { 9, 0, 713 }, { 10, 0, 222 }, { 5, 10, 482 }, { 8, 10, 98 }, - { 10, 10, 700 }, { 10, 10, 822 }, { 11, 10, 302 }, { 11, 10, 778 }, - { 12, 10, 50 }, { 12, 10, 127 }, { 12, 10, 396 }, { 13, 10, 62 }, - { 13, 10, 328 }, { 14, 10, 122 }, { 19, 10, 72 }, { 9, 0, 33 }, - { 5, 10, 2 }, { 7, 10, 1494 }, { 8, 10, 589 }, { 6, 10, 512 }, - { 7, 10, 797 }, { 8, 10, 253 }, { 9, 10, 77 }, { 10, 10, 1 }, - { 10, 11, 108 }, { 10, 10, 129 }, { 10, 10, 225 }, { 11, 11, 116 }, - { 11, 10, 118 }, { 11, 10, 226 }, { 11, 10, 251 }, { 11, 10, 430 }, - { 11, 10, 701 }, { 11, 10, 974 }, { 11, 10, 982 }, { 12, 10, 64 }, - { 12, 10, 260 }, { 12, 10, 488 }, { 12, 10, 690 }, { 6, 11, 456 }, - { 5, 11, 925 }, { 5, 0, 150 }, { 7, 0, 106 }, { 7, 0, 774 }, - { 8, 0, 603 }, { 9, 0, 593 }, { 9, 0, 634 }, { 10, 0, 44 }, - { 10, 0, 173 }, { 11, 0, 462 }, { 11, 0, 515 }, { 13, 0, 216 }, - { 13, 0, 288 }, { 14, 0, 400 }, { 9, 10, 347 }, { 5, 0, 748 }, - { 6, 0, 553 }, { 12, 0, 108 }, { 13, 0, 291 }, { 7, 0, 420 }, - { 4, 10, 12 }, { 7, 10, 522 }, { 7, 10, 809 }, { 8, 10, 797 }, - { 13, 10, 88 }, { 6, 11, 193 }, { 7, 11, 240 }, { 7, 11, 1682 }, - { 10, 11, 51 }, { 10, 11, 640 }, { 11, 11, 410 }, { 13, 11, 82 }, - { 14, 11, 247 }, { 14, 11, 331 }, { 14, 11, 377 }, { 5, 10, 528 }, - { 7, 0, 1777 }, { 4, 0, 493 }, { 16, 0, 55 }, { 8, 11, 633 }, - { 11, 0, 81 }, { 6, 0, 980 }, { 8, 0, 321 }, { 20, 10, 109 }, - { 5, 10, 266 }, { 9, 10, 290 }, { 9, 10, 364 }, { 10, 10, 293 }, - { 11, 10, 606 }, { 14, 10, 45 }, { 6, 0, 568 }, { 7, 0, 112 }, - { 7, 0, 1804 }, { 8, 0, 362 }, { 8, 0, 410 }, { 8, 0, 830 }, - { 9, 0, 514 }, { 11, 0, 649 }, { 14, 0, 157 }, { 4, 0, 74 }, - { 6, 0, 510 }, { 6, 10, 594 }, { 9, 10, 121 }, { 10, 10, 49 }, - { 10, 10, 412 }, { 11, 10, 834 }, { 6, 0, 838 }, { 8, 10, 748 }, - { 4, 10, 466 }, { 4, 0, 625 }, { 7, 11, 1443 }, { 4, 11, 237 }, - { 7, 11, 514 }, { 9, 10, 378 }, { 13, 10, 162 }, { 6, 0, 16 }, - { 6, 0, 158 }, { 7, 0, 43 }, { 7, 0, 129 }, { 7, 0, 181 }, - { 8, 0, 276 }, { 8, 0, 377 }, { 10, 0, 523 }, { 11, 0, 816 }, - { 12, 0, 455 }, { 13, 0, 303 }, { 14, 0, 135 }, { 7, 0, 281 }, - { 4, 0, 1 }, { 7, 0, 1143 }, { 7, 0, 1463 }, { 8, 0, 61 }, - { 9, 0, 207 }, { 9, 0, 390 }, { 9, 0, 467 }, { 11, 0, 836 }, - { 6, 11, 392 }, { 7, 11, 65 }, { 7, 11, 2019 }, { 4, 10, 667 }, - { 4, 0, 723 }, { 5, 0, 895 }, { 7, 0, 1031 }, { 8, 0, 199 }, - { 8, 0, 340 }, { 9, 0, 153 }, { 9, 0, 215 }, { 10, 0, 21 }, - { 10, 0, 59 }, { 10, 0, 80 }, { 10, 0, 224 }, { 10, 0, 838 }, - { 11, 0, 229 }, { 11, 0, 652 }, { 12, 0, 192 }, { 13, 0, 146 }, - { 14, 0, 91 }, { 4, 0, 295 }, { 9, 0, 51 }, { 9, 11, 222 }, - { 10, 11, 43 }, { 11, 11, 900 }, { 5, 0, 309 }, { 12, 0, 211 }, - { 5, 0, 125 }, { 8, 0, 77 }, { 10, 0, 15 }, { 8, 11, 604 }, - { 10, 0, 789 }, { 5, 0, 173 }, { 4, 10, 39 }, { 7, 10, 1843 }, - { 8, 10, 407 }, { 11, 10, 144 }, { 12, 10, 523 }, { 10, 11, 265 }, - { 5, 0, 439 }, { 4, 10, 510 }, { 7, 0, 648 }, { 7, 0, 874 }, - { 11, 0, 164 }, { 12, 0, 76 }, { 18, 0, 9 }, { 7, 10, 1980 }, - { 10, 10, 487 }, { 10, 10, 809 }, { 12, 0, 111 }, { 14, 0, 294 }, - { 19, 0, 45 }, { 13, 10, 260 }, { 18, 10, 63 }, { 5, 11, 549 }, - { 6, 10, 570 }, { 4, 0, 8 }, { 7, 0, 1152 }, { 7, 0, 1153 }, - { 7, 0, 1715 }, { 9, 0, 374 }, { 10, 0, 478 }, { 11, 0, 648 }, - { 7, 0, 1099 }, { 5, 0, 575 }, { 6, 0, 354 }, { 7, 0, 701 }, - { 7, 11, 36 }, { 8, 11, 201 }, { 8, 11, 605 }, { 4, 10, 787 }, - { 8, 11, 156 }, { 6, 0, 518 }, { 21, 11, 13 }, { 12, 11, 224 }, - { 6, 0, 702 }, { 4, 10, 516 }, { 5, 11, 724 }, { 10, 11, 305 }, - { 11, 11, 151 }, { 12, 11, 33 }, { 12, 11, 121 }, { 12, 11, 381 }, - { 17, 11, 3 }, { 17, 11, 27 }, { 17, 11, 78 }, { 18, 11, 18 }, - { 19, 11, 54 }, { 21, 11, 5 }, { 8, 0, 87 }, { 4, 11, 523 }, - { 5, 11, 638 }, { 11, 10, 887 }, { 14, 10, 365 }, { 14, 10, 375 }, - { 10, 0, 438 }, { 8, 10, 821 }, { 7, 11, 1908 }, { 6, 11, 242 }, - { 7, 11, 227 }, { 7, 11, 1581 }, { 8, 11, 104 }, { 9, 11, 113 }, - { 9, 11, 220 }, { 9, 11, 427 }, { 10, 11, 74 }, { 10, 11, 239 }, - { 11, 11, 579 }, { 11, 11, 1023 }, { 13, 11, 4 }, { 13, 11, 204 }, - { 13, 11, 316 }, { 18, 11, 95 }, { 20, 11, 86 }, { 4, 0, 69 }, - { 5, 0, 122 }, { 5, 0, 849 }, { 6, 0, 1633 }, { 9, 0, 656 }, - { 10, 0, 464 }, { 7, 0, 1802 }, { 4, 10, 10 }, { 11, 10, 786 }, - { 7, 11, 861 }, { 11, 0, 499 }, { 7, 0, 476 }, { 7, 0, 1592 }, - { 10, 0, 87 }, { 5, 10, 684 }, { 4, 0, 840 }, { 6, 10, 27 }, - { 14, 0, 283 }, { 6, 0, 1620 }, { 7, 11, 1328 }, { 8, 11, 494 }, - { 5, 0, 859 }, { 7, 0, 1160 }, { 8, 0, 107 }, { 9, 0, 291 }, - { 9, 0, 439 }, { 10, 0, 663 }, { 11, 0, 609 }, { 12, 0, 197 }, - { 7, 11, 1306 }, { 8, 11, 505 }, { 9, 11, 482 }, { 10, 11, 126 }, - { 11, 11, 225 }, { 12, 11, 347 }, { 12, 11, 449 }, { 13, 11, 19 }, - { 14, 11, 218 }, { 5, 11, 268 }, { 10, 11, 764 }, { 12, 11, 120 }, - { 13, 11, 39 }, { 17, 11, 127 }, { 17, 10, 56 }, { 7, 11, 1672 }, - { 10, 11, 472 }, { 11, 11, 189 }, { 15, 11, 51 }, { 6, 10, 342 }, - { 6, 10, 496 }, { 8, 10, 275 }, { 9, 10, 206 }, { 5, 0, 600 }, - { 4, 0, 117 }, { 6, 0, 372 }, { 7, 0, 1905 }, { 14, 0, 323 }, - { 4, 10, 909 }, { 5, 10, 940 }, { 7, 11, 1471 }, { 4, 10, 891 }, - { 4, 0, 722 }, { 11, 0, 471 }, { 4, 11, 384 }, { 7, 11, 1022 }, - { 4, 10, 687 }, { 9, 0, 5 }, { 12, 0, 216 }, { 12, 0, 294 }, - { 12, 0, 298 }, { 12, 0, 400 }, { 12, 0, 518 }, { 13, 0, 229 }, - { 15, 0, 139 }, { 7, 11, 1703 }, { 7, 11, 1602 }, { 10, 11, 698 }, - { 12, 11, 212 }, { 13, 11, 307 }, { 6, 10, 41 }, { 13, 10, 160 }, - { 7, 11, 1077 }, { 9, 11, 159 }, { 11, 11, 28 }, { 12, 11, 603 }, - { 4, 0, 514 }, { 7, 0, 1304 }, { 10, 0, 477 }, { 6, 0, 1774 }, - { 9, 0, 88 }, { 11, 0, 270 }, { 5, 0, 12 }, { 7, 0, 375 }, - { 9, 0, 438 }, { 6, 10, 1718 }, { 4, 11, 515 }, { 8, 10, 778 }, - { 8, 11, 632 }, { 8, 11, 697 }, { 9, 11, 854 }, { 6, 0, 362 }, - { 6, 0, 997 }, { 18, 0, 51 }, { 7, 0, 816 }, { 7, 0, 1241 }, - { 9, 0, 283 }, { 9, 0, 520 }, { 10, 0, 213 }, { 10, 0, 307 }, - { 10, 0, 463 }, { 10, 0, 671 }, { 10, 0, 746 }, { 11, 0, 401 }, - { 11, 0, 794 }, { 12, 0, 517 }, { 18, 0, 107 }, { 19, 0, 115 }, - { 5, 10, 115 }, { 22, 11, 28 }, { 4, 11, 136 }, { 5, 11, 551 }, - { 14, 10, 314 }, { 4, 0, 258 }, { 6, 0, 22 }, { 7, 0, 903 }, - { 7, 0, 1963 }, { 8, 0, 639 }, { 10, 0, 577 }, { 5, 0, 681 }, - { 8, 0, 782 }, { 13, 0, 130 }, { 17, 0, 84 }, { 5, 10, 193 }, - { 12, 10, 178 }, { 9, 11, 17 }, { 10, 11, 291 }, { 7, 11, 1287 }, - { 9, 11, 44 }, { 10, 11, 552 }, { 10, 11, 642 }, { 11, 11, 839 }, - { 12, 11, 274 }, { 12, 11, 275 }, { 12, 11, 372 }, { 13, 11, 91 }, - { 14, 11, 125 }, { 7, 10, 174 }, { 4, 0, 664 }, { 5, 0, 804 }, - { 11, 0, 1013 }, { 6, 0, 942 }, { 6, 0, 1349 }, { 6, 0, 1353 }, - { 6, 0, 1450 }, { 7, 11, 1518 }, { 11, 11, 694 }, { 11, 0, 356 }, - { 4, 10, 122 }, { 5, 10, 796 }, { 5, 10, 952 }, { 6, 10, 1660 }, - { 6, 10, 1671 }, { 8, 10, 567 }, { 9, 10, 687 }, { 9, 10, 742 }, - { 10, 10, 686 }, { 11, 10, 682 }, { 12, 10, 281 }, { 5, 0, 32 }, - { 6, 11, 147 }, { 7, 11, 886 }, { 9, 11, 753 }, { 10, 11, 268 }, - { 5, 10, 179 }, { 7, 10, 1095 }, { 7, 10, 1213 }, { 4, 10, 66 }, - { 7, 10, 722 }, { 7, 10, 904 }, { 7, 10, 352 }, { 9, 11, 245 }, - { 10, 11, 137 }, { 4, 0, 289 }, { 7, 0, 629 }, { 7, 0, 1698 }, - { 7, 0, 1711 }, { 12, 0, 215 }, { 5, 11, 414 }, { 6, 0, 1975 }, - { 7, 11, 1762 }, { 6, 0, 450 }, { 8, 0, 109 }, { 13, 10, 35 }, - { 6, 11, 599 }, { 8, 0, 705 }, { 5, 0, 664 }, { 6, 11, 1749 }, - { 11, 11, 402 }, { 12, 11, 109 }, { 12, 11, 431 }, { 13, 11, 179 }, - { 13, 11, 206 }, { 14, 11, 175 }, { 14, 11, 217 }, { 16, 11, 3 }, - { 20, 11, 53 }, { 7, 0, 1238 }, { 6, 11, 1627 }, { 4, 11, 488 }, - { 13, 0, 318 }, { 10, 10, 592 }, { 10, 10, 753 }, { 12, 10, 317 }, - { 12, 10, 355 }, { 12, 10, 465 }, { 12, 10, 469 }, { 12, 10, 560 }, - { 12, 10, 578 }, { 5, 10, 564 }, { 4, 11, 83 }, { 12, 11, 676 }, - { 6, 0, 1872 }, { 6, 0, 1906 }, { 6, 0, 1907 }, { 9, 0, 934 }, - { 9, 0, 956 }, { 9, 0, 960 }, { 9, 0, 996 }, { 12, 0, 794 }, - { 12, 0, 876 }, { 12, 0, 880 }, { 12, 0, 918 }, { 15, 0, 230 }, - { 18, 0, 234 }, { 18, 0, 238 }, { 21, 0, 38 }, { 21, 0, 62 }, - { 6, 10, 556 }, { 6, 11, 278 }, { 9, 0, 103 }, { 7, 10, 544 }, - { 8, 10, 719 }, { 10, 10, 61 }, { 4, 10, 5 }, { 5, 10, 498 }, - { 8, 10, 637 }, { 9, 10, 521 }, { 7, 0, 777 }, { 12, 0, 229 }, - { 12, 0, 239 }, { 15, 0, 12 }, { 12, 11, 229 }, { 12, 11, 239 }, - { 15, 11, 12 }, { 6, 0, 26 }, { 7, 11, 388 }, { 7, 11, 644 }, - { 11, 11, 781 }, { 7, 11, 229 }, { 8, 11, 59 }, { 9, 11, 190 }, - { 9, 11, 257 }, { 10, 11, 378 }, { 12, 11, 191 }, { 5, 10, 927 }, - { 7, 10, 1441 }, { 4, 10, 893 }, { 5, 10, 780 }, { 5, 10, 893 }, - { 4, 0, 414 }, { 5, 0, 467 }, { 9, 0, 654 }, { 10, 0, 451 }, - { 12, 0, 59 }, { 13, 0, 375 }, { 14, 0, 173 }, { 7, 0, 17 }, - { 7, 0, 1350 }, { 5, 10, 238 }, { 7, 0, 955 }, { 4, 0, 960 }, - { 10, 0, 887 }, { 12, 0, 753 }, { 18, 0, 161 }, { 18, 0, 162 }, - { 24, 0, 19 }, { 8, 11, 344 }, { 6, 10, 1729 }, { 9, 11, 288 }, - { 4, 11, 660 }, { 4, 0, 217 }, { 5, 0, 710 }, { 7, 0, 760 }, - { 7, 0, 1926 }, { 9, 0, 428 }, { 9, 0, 708 }, { 10, 0, 254 }, - { 10, 0, 296 }, { 10, 0, 720 }, { 11, 0, 109 }, { 11, 0, 255 }, - { 12, 0, 165 }, { 12, 0, 315 }, { 13, 0, 107 }, { 13, 0, 203 }, - { 14, 0, 54 }, { 14, 0, 99 }, { 14, 0, 114 }, { 14, 0, 388 }, - { 16, 0, 85 }, { 17, 0, 9 }, { 17, 0, 33 }, { 20, 0, 25 }, - { 20, 0, 28 }, { 20, 0, 29 }, { 21, 0, 9 }, { 21, 0, 10 }, - { 21, 0, 34 }, { 22, 0, 17 }, { 4, 10, 60 }, { 7, 10, 1800 }, - { 8, 10, 314 }, { 9, 10, 700 }, { 11, 10, 487 }, { 7, 11, 1035 }, - { 10, 11, 737 }, { 7, 11, 690 }, { 9, 11, 217 }, { 9, 11, 587 }, - { 12, 11, 521 }, { 6, 0, 919 }, { 7, 11, 706 }, { 7, 11, 1058 }, - { 10, 11, 538 }, { 7, 10, 1853 }, { 10, 10, 437 }, { 8, 10, 419 }, - { 6, 0, 280 }, { 10, 0, 502 }, { 11, 0, 344 }, { 12, 0, 38 }, - { 5, 0, 45 }, { 7, 0, 1161 }, { 11, 0, 448 }, { 11, 0, 880 }, - { 13, 0, 139 }, { 13, 0, 407 }, { 15, 0, 16 }, { 17, 0, 95 }, - { 18, 0, 66 }, { 18, 0, 88 }, { 18, 0, 123 }, { 21, 0, 7 }, - { 11, 11, 92 }, { 11, 11, 196 }, { 11, 11, 409 }, { 11, 11, 450 }, - { 11, 11, 666 }, { 11, 11, 777 }, { 12, 11, 262 }, { 13, 11, 385 }, - { 13, 11, 393 }, { 15, 11, 115 }, { 16, 11, 45 }, { 17, 11, 82 }, - { 8, 0, 777 }, { 6, 11, 1744 }, { 4, 0, 410 }, { 7, 0, 521 }, - { 5, 10, 828 }, { 6, 0, 673 }, { 7, 0, 1110 }, { 7, 0, 1778 }, - { 7, 10, 176 }, { 7, 10, 178 }, { 5, 10, 806 }, { 7, 11, 268 }, - { 7, 10, 1976 }, { 8, 11, 569 }, { 4, 11, 733 }, { 9, 11, 194 }, - { 10, 11, 92 }, { 11, 11, 198 }, { 12, 11, 84 }, { 12, 11, 87 }, - { 13, 11, 128 }, { 16, 11, 74 }, { 5, 0, 341 }, { 7, 0, 1129 }, - { 11, 0, 414 }, { 4, 10, 51 }, { 6, 10, 4 }, { 7, 10, 591 }, - { 7, 10, 849 }, { 7, 10, 951 }, { 7, 10, 1613 }, { 7, 10, 1760 }, - { 7, 10, 1988 }, { 9, 10, 434 }, { 10, 10, 754 }, { 11, 10, 25 }, - { 11, 10, 37 }, { 5, 10, 902 }, { 7, 10, 928 }, { 7, 0, 787 }, - { 4, 0, 436 }, { 6, 10, 270 }, { 7, 0, 1587 }, { 7, 0, 1707 }, - { 6, 0, 377 }, { 7, 0, 1025 }, { 9, 0, 613 }, { 17, 0, 104 }, - { 7, 11, 982 }, { 7, 11, 1361 }, { 10, 11, 32 }, { 15, 11, 56 }, - { 11, 0, 96 }, { 4, 0, 451 }, { 4, 10, 416 }, { 14, 10, 372 }, - { 5, 10, 152 }, { 5, 10, 197 }, { 7, 11, 306 }, { 7, 10, 340 }, - { 7, 10, 867 }, { 10, 10, 548 }, { 10, 10, 581 }, { 11, 10, 6 }, - { 12, 10, 3 }, { 12, 10, 19 }, { 14, 10, 110 }, { 14, 10, 289 }, - { 6, 0, 680 }, { 6, 11, 609 }, { 7, 0, 483 }, { 7, 10, 190 }, - { 8, 10, 28 }, { 8, 10, 141 }, { 8, 10, 444 }, { 8, 10, 811 }, - { 9, 10, 468 }, { 11, 10, 334 }, { 12, 10, 24 }, { 12, 10, 386 }, - { 12, 10, 576 }, { 10, 0, 916 }, { 5, 10, 757 }, { 5, 10, 721 }, - { 7, 10, 1553 }, { 5, 11, 178 }, { 6, 0, 937 }, { 4, 10, 898 }, - { 5, 0, 739 }, { 19, 0, 82 }, { 7, 0, 663 }, { 18, 0, 128 }, - { 5, 10, 277 }, { 13, 10, 247 }, { 6, 0, 1087 }, { 4, 10, 435 }, - { 6, 11, 381 }, { 7, 11, 645 }, { 7, 11, 694 }, { 8, 11, 546 }, - { 7, 0, 503 }, { 7, 0, 1885 }, { 6, 0, 1965 }, { 8, 0, 925 }, - { 10, 0, 955 }, { 4, 0, 113 }, { 5, 0, 163 }, { 5, 0, 735 }, - { 7, 0, 1009 }, { 9, 0, 9 }, { 9, 0, 771 }, { 12, 0, 90 }, - { 13, 0, 138 }, { 13, 0, 410 }, { 15, 0, 128 }, { 4, 0, 324 }, - { 10, 0, 104 }, { 7, 0, 460 }, { 5, 10, 265 }, { 6, 10, 212 }, - { 5, 11, 105 }, { 7, 11, 261 }, { 7, 11, 1107 }, { 7, 11, 1115 }, - { 7, 11, 1354 }, { 7, 11, 1588 }, { 7, 11, 1705 }, { 7, 11, 1902 }, - { 9, 11, 465 }, { 10, 11, 248 }, { 10, 11, 349 }, { 10, 11, 647 }, - { 11, 11, 527 }, { 11, 11, 660 }, { 11, 11, 669 }, { 12, 11, 529 }, - { 13, 11, 305 }, { 5, 11, 438 }, { 9, 11, 694 }, { 12, 11, 627 }, - { 13, 11, 210 }, { 24, 11, 11 }, { 4, 0, 935 }, { 5, 0, 823 }, - { 4, 10, 702 }, { 5, 0, 269 }, { 7, 0, 434 }, { 7, 0, 891 }, - { 8, 0, 339 }, { 9, 0, 702 }, { 11, 0, 594 }, { 11, 0, 718 }, - { 17, 0, 100 }, { 5, 10, 808 }, { 7, 10, 2045 }, { 7, 0, 1014 }, - { 9, 0, 485 }, { 13, 0, 264 }, { 6, 0, 1713 }, { 7, 0, 1810 }, - { 11, 0, 866 }, { 12, 0, 103 }, { 13, 0, 495 }, { 12, 11, 233 }, - { 4, 0, 423 }, { 10, 0, 949 }, { 10, 0, 1013 }, { 7, 0, 900 }, - { 8, 11, 25 }, { 10, 11, 826 }, { 5, 10, 166 }, { 8, 10, 739 }, - { 12, 10, 511 }, { 6, 0, 2018 }, { 7, 11, 1270 }, { 11, 11, 612 }, - { 4, 10, 119 }, { 5, 10, 170 }, { 5, 10, 447 }, { 7, 10, 1708 }, - { 7, 10, 1889 }, { 9, 10, 357 }, { 9, 10, 719 }, { 12, 10, 486 }, - { 12, 10, 596 }, { 12, 0, 574 }, { 12, 11, 574 }, { 4, 11, 308 }, - { 6, 0, 964 }, { 6, 0, 1206 }, { 6, 0, 1302 }, { 4, 10, 450 }, - { 7, 10, 1158 }, { 7, 11, 150 }, { 8, 11, 649 }, { 14, 0, 213 }, - { 20, 0, 38 }, { 9, 11, 45 }, { 9, 11, 311 }, { 13, 11, 42 }, - { 6, 11, 521 }, { 7, 10, 1375 }, { 7, 10, 1466 }, { 10, 10, 331 }, - { 4, 10, 754 }, { 5, 11, 339 }, { 7, 11, 1442 }, { 14, 11, 3 }, - { 15, 11, 41 }, { 19, 11, 66 }, { 8, 11, 378 }, { 6, 0, 1022 }, - { 5, 10, 850 }, { 8, 10, 799 }, { 14, 0, 143 }, { 7, 0, 2029 }, - { 6, 11, 1628 }, { 8, 0, 523 }, { 22, 0, 34 }, { 5, 0, 625 }, - { 7, 0, 1617 }, { 7, 0, 275 }, { 7, 10, 238 }, { 7, 10, 2033 }, - { 8, 10, 120 }, { 8, 10, 188 }, { 8, 10, 659 }, { 9, 10, 598 }, - { 10, 10, 466 }, { 12, 10, 342 }, { 12, 10, 588 }, { 13, 10, 503 }, - { 14, 10, 246 }, { 15, 10, 92 }, { 7, 0, 37 }, { 8, 0, 425 }, - { 8, 0, 693 }, { 9, 0, 720 }, { 10, 0, 380 }, { 10, 0, 638 }, - { 11, 0, 273 }, { 11, 0, 473 }, { 12, 0, 61 }, { 15, 0, 43 }, - { 7, 11, 829 }, { 7, 0, 1943 }, { 4, 0, 765 }, { 5, 11, 486 }, - { 7, 11, 1349 }, { 7, 11, 1635 }, { 8, 11, 17 }, { 10, 11, 217 }, - { 10, 11, 295 }, { 4, 10, 201 }, { 7, 10, 1744 }, { 8, 10, 602 }, - { 11, 10, 247 }, { 11, 10, 826 }, { 17, 10, 65 }, { 10, 11, 558 }, - { 11, 0, 551 }, { 14, 0, 159 }, { 8, 10, 164 }, { 18, 10, 62 }, - { 11, 11, 176 }, { 4, 0, 168 }, { 8, 0, 1010 }, { 6, 0, 1994 }, - { 7, 0, 91 }, { 10, 0, 532 }, { 7, 10, 1243 }, { 7, 0, 1884 }, - { 4, 10, 907 }, { 5, 10, 100 }, { 10, 10, 329 }, { 12, 10, 416 }, - { 21, 10, 29 }, { 6, 11, 447 }, { 4, 10, 176 }, { 5, 10, 636 }, - { 5, 10, 998 }, { 7, 10, 9 }, { 7, 10, 1508 }, { 8, 10, 26 }, - { 9, 10, 317 }, { 9, 10, 358 }, { 10, 10, 210 }, { 10, 10, 292 }, - { 10, 10, 533 }, { 11, 10, 555 }, { 12, 10, 526 }, { 12, 10, 607 }, - { 13, 10, 263 }, { 13, 10, 459 }, { 14, 10, 271 }, { 4, 11, 609 }, - { 7, 11, 756 }, { 6, 0, 15 }, { 7, 0, 70 }, { 10, 0, 240 }, - { 19, 0, 93 }, { 4, 11, 930 }, { 5, 11, 947 }, { 6, 0, 1227 }, - { 6, 0, 1534 }, { 5, 11, 939 }, { 5, 11, 962 }, { 5, 11, 651 }, - { 8, 11, 170 }, { 9, 11, 61 }, { 9, 11, 63 }, { 10, 11, 23 }, - { 10, 11, 37 }, { 10, 11, 834 }, { 11, 11, 4 }, { 11, 11, 187 }, - { 11, 11, 281 }, { 11, 11, 503 }, { 11, 11, 677 }, { 12, 11, 96 }, - { 12, 11, 130 }, { 12, 11, 244 }, { 14, 11, 5 }, { 14, 11, 40 }, - { 14, 11, 162 }, { 14, 11, 202 }, { 18, 11, 133 }, { 4, 11, 406 }, - { 5, 11, 579 }, { 12, 11, 492 }, { 22, 11, 15 }, { 11, 0, 392 }, - { 6, 10, 610 }, { 10, 10, 127 }, { 13, 10, 27 }, { 7, 0, 655 }, - { 7, 0, 1844 }, { 8, 10, 119 }, { 4, 0, 145 }, { 6, 0, 176 }, - { 7, 0, 395 }, { 9, 0, 562 }, { 4, 0, 501 }, { 12, 11, 145 }, - { 8, 0, 1019 }, { 6, 0, 509 }, { 11, 0, 267 }, { 6, 11, 17 }, - { 7, 11, 16 }, { 7, 11, 1001 }, { 7, 11, 1982 }, { 9, 11, 886 }, - { 10, 11, 489 }, { 10, 11, 800 }, { 11, 11, 782 }, { 12, 11, 320 }, - { 13, 11, 467 }, { 14, 11, 145 }, { 14, 11, 387 }, { 15, 11, 119 }, - { 17, 11, 17 }, { 6, 0, 1099 }, { 5, 11, 458 }, { 7, 11, 1983 }, - { 8, 11, 0 }, { 8, 11, 171 }, { 9, 11, 120 }, { 9, 11, 732 }, - { 10, 11, 473 }, { 11, 11, 656 }, { 11, 11, 998 }, { 18, 11, 0 }, - { 18, 11, 2 }, { 19, 11, 21 }, { 12, 11, 427 }, { 18, 11, 38 }, - { 10, 0, 948 }, { 10, 0, 968 }, { 7, 10, 126 }, { 8, 10, 84 }, - { 8, 10, 790 }, { 4, 0, 114 }, { 9, 0, 492 }, { 13, 0, 462 }, - { 14, 0, 215 }, { 6, 10, 64 }, { 12, 10, 377 }, { 13, 10, 309 }, - { 4, 0, 77 }, { 5, 0, 361 }, { 6, 0, 139 }, { 6, 0, 401 }, - { 6, 0, 404 }, { 7, 0, 413 }, { 7, 0, 715 }, { 7, 0, 1716 }, - { 11, 0, 279 }, { 12, 0, 179 }, { 12, 0, 258 }, { 13, 0, 244 }, - { 14, 0, 358 }, { 6, 0, 1717 }, { 7, 0, 772 }, { 7, 0, 1061 }, - { 7, 0, 1647 }, { 8, 0, 82 }, { 11, 0, 250 }, { 11, 0, 607 }, - { 12, 0, 311 }, { 12, 0, 420 }, { 13, 0, 184 }, { 13, 0, 367 }, - { 7, 10, 1104 }, { 11, 10, 269 }, { 11, 10, 539 }, { 11, 10, 627 }, - { 11, 10, 706 }, { 11, 10, 975 }, { 12, 10, 248 }, { 12, 10, 434 }, - { 12, 10, 600 }, { 12, 10, 622 }, { 13, 10, 297 }, { 13, 10, 485 }, - { 14, 10, 69 }, { 14, 10, 409 }, { 15, 10, 108 }, { 7, 0, 724 }, - { 4, 11, 512 }, { 4, 11, 519 }, { 5, 11, 342 }, { 6, 0, 1133 }, - { 17, 11, 29 }, { 11, 10, 977 }, { 13, 10, 507 }, { 6, 0, 841 }, - { 6, 0, 1042 }, { 6, 0, 1194 }, { 10, 0, 993 }, { 12, 0, 1021 }, - { 6, 11, 31 }, { 7, 11, 491 }, { 7, 11, 530 }, { 8, 11, 592 }, - { 9, 10, 34 }, { 11, 11, 53 }, { 11, 10, 484 }, { 11, 11, 779 }, - { 12, 11, 167 }, { 12, 11, 411 }, { 14, 11, 14 }, { 14, 11, 136 }, - { 15, 11, 72 }, { 16, 11, 17 }, { 16, 11, 72 }, { 4, 0, 1021 }, - { 6, 0, 2037 }, { 5, 11, 907 }, { 7, 0, 373 }, { 8, 0, 335 }, - { 8, 0, 596 }, { 9, 0, 488 }, { 6, 10, 1700 }, { 7, 10, 293 }, - { 7, 10, 382 }, { 7, 10, 1026 }, { 7, 10, 1087 }, { 7, 10, 2027 }, - { 8, 10, 252 }, { 8, 10, 727 }, { 8, 10, 729 }, { 9, 10, 30 }, - { 9, 10, 199 }, { 9, 10, 231 }, { 9, 10, 251 }, { 9, 10, 334 }, - { 9, 10, 361 }, { 9, 10, 712 }, { 10, 10, 55 }, { 10, 10, 60 }, - { 10, 10, 232 }, { 10, 10, 332 }, { 10, 10, 384 }, { 10, 10, 396 }, - { 10, 10, 504 }, { 10, 10, 542 }, { 10, 10, 652 }, { 11, 10, 20 }, - { 11, 10, 48 }, { 11, 10, 207 }, { 11, 10, 291 }, { 11, 10, 298 }, - { 11, 10, 342 }, { 11, 10, 365 }, { 11, 10, 394 }, { 11, 10, 620 }, - { 11, 10, 705 }, { 11, 10, 1017 }, { 12, 10, 123 }, { 12, 10, 340 }, - { 12, 10, 406 }, { 12, 10, 643 }, { 13, 10, 61 }, { 13, 10, 269 }, - { 13, 10, 311 }, { 13, 10, 319 }, { 13, 10, 486 }, { 14, 10, 234 }, - { 15, 10, 62 }, { 15, 10, 85 }, { 16, 10, 71 }, { 18, 10, 119 }, - { 20, 10, 105 }, { 22, 0, 37 }, { 4, 11, 208 }, { 5, 11, 106 }, - { 6, 11, 531 }, { 8, 11, 408 }, { 9, 11, 188 }, { 10, 11, 572 }, - { 4, 0, 564 }, { 6, 0, 513 }, { 7, 0, 1052 }, { 4, 0, 825 }, - { 9, 0, 899 }, { 12, 11, 441 }, { 6, 0, 778 }, { 5, 11, 379 }, - { 7, 0, 1417 }, { 12, 0, 382 }, { 17, 0, 48 }, { 24, 0, 12 }, - { 4, 11, 241 }, { 7, 0, 1116 }, { 6, 10, 379 }, { 7, 10, 270 }, - { 8, 10, 176 }, { 8, 10, 183 }, { 9, 10, 432 }, { 9, 10, 661 }, - { 12, 10, 247 }, { 12, 10, 617 }, { 18, 10, 125 }, { 5, 10, 792 }, - { 5, 10, 900 }, { 6, 0, 545 }, { 7, 0, 565 }, { 7, 0, 1669 }, - { 10, 0, 114 }, { 11, 0, 642 }, { 12, 0, 618 }, { 5, 0, 5 }, - { 10, 11, 7 }, { 4, 11, 259 }, { 7, 0, 192 }, { 6, 0, 701 }, - { 8, 0, 763 }, { 7, 10, 1979 }, { 4, 10, 901 }, { 5, 10, 776 }, - { 10, 0, 755 }, { 19, 0, 29 }, { 5, 0, 759 }, { 4, 11, 173 }, - { 5, 11, 312 }, { 5, 11, 512 }, { 7, 11, 1285 }, { 7, 11, 1603 }, - { 7, 11, 1691 }, { 9, 11, 464 }, { 11, 11, 195 }, { 12, 11, 279 }, - { 12, 11, 448 }, { 14, 11, 11 }, { 19, 11, 102 }, { 7, 0, 370 }, - { 7, 0, 1007 }, { 7, 0, 1177 }, { 7, 0, 1565 }, { 7, 0, 1237 }, - { 4, 0, 87 }, { 5, 0, 250 }, { 13, 0, 298 }, { 4, 11, 452 }, - { 5, 11, 583 }, { 5, 11, 817 }, { 6, 11, 433 }, { 7, 11, 593 }, - { 7, 11, 720 }, { 7, 11, 1378 }, { 8, 11, 161 }, { 9, 11, 284 }, - { 10, 11, 313 }, { 11, 11, 886 }, { 4, 11, 547 }, { 7, 11, 1409 }, - { 8, 11, 722 }, { 4, 10, 37 }, { 5, 10, 334 }, { 7, 10, 1253 }, - { 4, 10, 508 }, { 12, 0, 107 }, { 18, 0, 31 }, { 8, 11, 420 }, - { 11, 11, 193 }, { 7, 0, 814 }, { 7, 11, 409 }, { 12, 0, 991 }, - { 4, 0, 57 }, { 7, 0, 1195 }, { 7, 0, 1438 }, { 7, 0, 1548 }, - { 7, 0, 1835 }, { 7, 0, 1904 }, { 9, 0, 757 }, { 10, 0, 604 }, - { 11, 0, 519 }, { 4, 0, 540 }, { 10, 11, 308 }, { 4, 10, 533 }, - { 8, 0, 608 }, { 16, 11, 65 }, { 4, 0, 1014 }, { 6, 0, 2029 }, - { 4, 0, 209 }, { 7, 0, 902 }, { 5, 11, 1002 }, { 8, 11, 745 }, - { 6, 0, 2030 }, { 6, 0, 303 }, { 7, 0, 335 }, { 7, 0, 1437 }, - { 7, 0, 1668 }, { 8, 0, 553 }, { 8, 0, 652 }, { 8, 0, 656 }, - { 9, 0, 558 }, { 11, 0, 743 }, { 21, 0, 18 }, { 5, 11, 575 }, - { 6, 11, 354 }, { 7, 11, 701 }, { 4, 11, 239 }, { 6, 11, 477 }, - { 7, 11, 1607 }, { 11, 11, 68 }, { 11, 11, 617 }, { 4, 0, 559 }, - { 8, 0, 527 }, { 18, 0, 60 }, { 19, 0, 24 }, { 5, 10, 920 }, - { 10, 0, 511 }, { 5, 0, 1017 }, { 5, 0, 675 }, { 10, 10, 391 }, - { 11, 0, 156 }, { 7, 10, 1952 }, { 10, 11, 369 }, { 4, 11, 367 }, - { 5, 0, 709 }, { 6, 0, 698 }, { 6, 0, 887 }, { 14, 10, 126 }, - { 6, 0, 1745 }, { 4, 10, 483 }, { 13, 11, 299 }, { 14, 11, 75 }, - { 5, 0, 714 }, { 7, 0, 8 }, { 8, 0, 206 }, { 10, 10, 480 }, - { 4, 11, 694 }, { 9, 10, 495 }, { 18, 10, 104 }, { 7, 11, 1248 }, - { 11, 11, 621 }, { 11, 11, 702 }, { 12, 11, 687 }, { 4, 0, 776 }, - { 11, 10, 1009 }, { 7, 0, 1272 }, { 6, 0, 1059 }, { 8, 10, 653 }, - { 13, 10, 93 }, { 19, 10, 14 }, { 7, 11, 213 }, { 8, 0, 406 }, - { 5, 10, 172 }, { 4, 0, 947 }, { 8, 0, 175 }, { 10, 0, 168 }, - { 10, 0, 573 }, { 4, 0, 870 }, { 6, 0, 1567 }, { 23, 11, 28 }, - { 6, 11, 472 }, { 5, 10, 260 }, { 8, 11, 132 }, { 4, 11, 751 }, - { 11, 11, 390 }, { 12, 11, 32 }, { 4, 11, 409 }, { 5, 11, 78 }, - { 12, 0, 554 }, { 6, 11, 473 }, { 17, 11, 105 }, { 5, 0, 784 }, - { 8, 0, 908 }, { 8, 11, 306 }, { 11, 0, 882 }, { 6, 0, 358 }, - { 7, 0, 1393 }, { 8, 0, 396 }, { 10, 0, 263 }, { 14, 0, 154 }, - { 16, 0, 48 }, { 17, 0, 8 }, { 7, 11, 1759 }, { 8, 11, 396 }, - { 10, 11, 263 }, { 14, 11, 154 }, { 16, 11, 48 }, { 17, 11, 8 }, - { 13, 11, 163 }, { 13, 11, 180 }, { 18, 11, 78 }, { 20, 11, 35 }, - { 14, 0, 32 }, { 18, 0, 85 }, { 20, 0, 2 }, { 24, 0, 16 }, - { 7, 0, 228 }, { 10, 0, 770 }, { 8, 10, 167 }, { 8, 10, 375 }, - { 9, 10, 82 }, { 9, 10, 561 }, { 10, 10, 620 }, { 4, 0, 845 }, - { 9, 0, 14 }, { 9, 0, 441 }, { 10, 0, 306 }, { 11, 0, 9 }, - { 11, 0, 966 }, { 12, 0, 287 }, { 13, 0, 342 }, { 13, 0, 402 }, - { 15, 0, 110 }, { 15, 0, 163 }, { 8, 10, 194 }, { 8, 10, 756 }, - { 6, 0, 1578 }, { 4, 0, 967 }, { 6, 0, 1820 }, { 6, 0, 1847 }, - { 12, 0, 716 }, { 8, 0, 594 }, { 7, 0, 1428 }, { 7, 0, 1640 }, - { 7, 0, 1867 }, { 9, 0, 169 }, { 9, 0, 182 }, { 9, 0, 367 }, - { 9, 0, 478 }, { 9, 0, 506 }, { 9, 0, 551 }, { 9, 0, 557 }, - { 9, 0, 648 }, { 9, 0, 697 }, { 9, 0, 705 }, { 9, 0, 725 }, - { 9, 0, 787 }, { 9, 0, 794 }, { 10, 0, 198 }, { 10, 0, 214 }, - { 10, 0, 267 }, { 10, 0, 275 }, { 10, 0, 456 }, { 10, 0, 551 }, - { 10, 0, 561 }, { 10, 0, 613 }, { 10, 0, 627 }, { 10, 0, 668 }, - { 10, 0, 675 }, { 10, 0, 691 }, { 10, 0, 695 }, { 10, 0, 707 }, - { 10, 0, 715 }, { 11, 0, 183 }, { 11, 0, 201 }, { 11, 0, 244 }, - { 11, 0, 262 }, { 11, 0, 352 }, { 11, 0, 439 }, { 11, 0, 493 }, - { 11, 0, 572 }, { 11, 0, 591 }, { 11, 0, 608 }, { 11, 0, 611 }, - { 11, 0, 646 }, { 11, 0, 674 }, { 11, 0, 711 }, { 11, 0, 751 }, - { 11, 0, 761 }, { 11, 0, 776 }, { 11, 0, 785 }, { 11, 0, 850 }, - { 11, 0, 853 }, { 11, 0, 862 }, { 11, 0, 865 }, { 11, 0, 868 }, - { 11, 0, 875 }, { 11, 0, 898 }, { 11, 0, 902 }, { 11, 0, 903 }, - { 11, 0, 910 }, { 11, 0, 932 }, { 11, 0, 942 }, { 11, 0, 957 }, - { 11, 0, 967 }, { 11, 0, 972 }, { 12, 0, 148 }, { 12, 0, 195 }, - { 12, 0, 220 }, { 12, 0, 237 }, { 12, 0, 318 }, { 12, 0, 339 }, - { 12, 0, 393 }, { 12, 0, 445 }, { 12, 0, 450 }, { 12, 0, 474 }, - { 12, 0, 505 }, { 12, 0, 509 }, { 12, 0, 533 }, { 12, 0, 591 }, - { 12, 0, 594 }, { 12, 0, 597 }, { 12, 0, 621 }, { 12, 0, 633 }, - { 12, 0, 642 }, { 13, 0, 59 }, { 13, 0, 60 }, { 13, 0, 145 }, - { 13, 0, 239 }, { 13, 0, 250 }, { 13, 0, 329 }, { 13, 0, 344 }, - { 13, 0, 365 }, { 13, 0, 372 }, { 13, 0, 387 }, { 13, 0, 403 }, - { 13, 0, 414 }, { 13, 0, 456 }, { 13, 0, 470 }, { 13, 0, 478 }, - { 13, 0, 483 }, { 13, 0, 489 }, { 14, 0, 55 }, { 14, 0, 57 }, - { 14, 0, 81 }, { 14, 0, 90 }, { 14, 0, 148 }, { 14, 0, 239 }, - { 14, 0, 266 }, { 14, 0, 321 }, { 14, 0, 326 }, { 14, 0, 327 }, - { 14, 0, 330 }, { 14, 0, 347 }, { 14, 0, 355 }, { 14, 0, 401 }, - { 14, 0, 404 }, { 14, 0, 411 }, { 14, 0, 414 }, { 14, 0, 416 }, - { 14, 0, 420 }, { 15, 0, 61 }, { 15, 0, 74 }, { 15, 0, 87 }, - { 15, 0, 88 }, { 15, 0, 94 }, { 15, 0, 96 }, { 15, 0, 116 }, - { 15, 0, 149 }, { 15, 0, 154 }, { 16, 0, 50 }, { 16, 0, 63 }, - { 16, 0, 73 }, { 17, 0, 2 }, { 17, 0, 66 }, { 17, 0, 92 }, - { 17, 0, 103 }, { 17, 0, 112 }, { 17, 0, 120 }, { 18, 0, 50 }, - { 18, 0, 54 }, { 18, 0, 82 }, { 18, 0, 86 }, { 18, 0, 90 }, - { 18, 0, 111 }, { 18, 0, 115 }, { 18, 0, 156 }, { 19, 0, 40 }, - { 19, 0, 79 }, { 20, 0, 78 }, { 21, 0, 22 }, { 7, 11, 883 }, - { 5, 0, 161 }, { 7, 0, 839 }, { 4, 0, 782 }, { 13, 11, 293 }, - { 14, 11, 56 }, { 5, 11, 617 }, { 11, 11, 50 }, { 7, 10, 22 }, - { 17, 0, 64 }, { 5, 10, 639 }, { 7, 10, 1249 }, { 11, 10, 896 }, - { 10, 0, 998 }, { 7, 11, 2042 }, { 4, 11, 546 }, { 14, 11, 233 }, - { 6, 0, 1043 }, { 6, 0, 1574 }, { 6, 0, 1496 }, { 4, 10, 102 }, - { 7, 10, 815 }, { 7, 10, 1699 }, { 11, 10, 964 }, { 12, 0, 781 }, - { 14, 0, 461 }, { 4, 11, 313 }, { 5, 11, 577 }, { 6, 0, 639 }, - { 6, 0, 1114 }, { 9, 0, 817 }, { 8, 11, 184 }, { 13, 11, 433 }, - { 7, 0, 1814 }, { 7, 11, 935 }, { 10, 0, 997 }, { 12, 0, 958 }, - { 4, 0, 812 }, { 9, 11, 625 }, { 4, 10, 899 }, { 8, 10, 795 }, - { 5, 11, 886 }, { 6, 11, 46 }, { 6, 11, 1790 }, { 7, 11, 14 }, - { 7, 11, 732 }, { 7, 11, 1654 }, { 8, 11, 95 }, { 8, 11, 327 }, - { 8, 11, 616 }, { 10, 11, 598 }, { 10, 11, 769 }, { 11, 11, 134 }, - { 11, 11, 747 }, { 12, 11, 378 }, { 14, 11, 97 }, { 8, 0, 139 }, - { 6, 10, 52 }, { 9, 10, 104 }, { 9, 10, 559 }, { 12, 10, 308 }, - { 19, 10, 87 }, { 5, 11, 1021 }, { 4, 10, 604 }, { 4, 10, 301 }, - { 8, 10, 779 }, { 7, 0, 643 }, { 8, 0, 236 }, { 4, 11, 153 }, - { 6, 0, 1172 }, { 19, 10, 32 }, { 5, 11, 798 }, { 6, 0, 1338 }, - { 4, 11, 587 }, { 6, 11, 598 }, { 7, 11, 42 }, { 8, 11, 695 }, - { 10, 11, 212 }, { 11, 11, 158 }, { 14, 11, 196 }, { 17, 11, 85 }, - { 7, 10, 508 }, { 5, 11, 957 }, { 5, 11, 1008 }, { 7, 11, 249 }, - { 4, 11, 129 }, { 7, 11, 465 }, { 5, 0, 54 }, { 7, 11, 470 }, - { 7, 11, 1057 }, { 7, 11, 1201 }, { 9, 11, 755 }, { 11, 11, 906 }, - { 12, 11, 527 }, { 7, 11, 908 }, { 18, 11, 7 }, { 5, 11, 148 }, - { 8, 11, 450 }, { 16, 11, 1 }, { 4, 0, 256 }, { 7, 0, 1488 }, - { 9, 0, 351 }, { 6, 10, 310 }, { 7, 10, 1849 }, { 8, 10, 72 }, - { 8, 10, 272 }, { 8, 10, 431 }, { 9, 10, 12 }, { 10, 10, 563 }, - { 10, 10, 630 }, { 10, 10, 796 }, { 10, 10, 810 }, { 11, 10, 367 }, - { 11, 10, 599 }, { 11, 10, 686 }, { 12, 10, 672 }, { 6, 0, 1885 }, - { 6, 0, 1898 }, { 6, 0, 1899 }, { 12, 0, 955 }, { 4, 0, 714 }, - { 5, 0, 469 }, { 6, 0, 1270 }, { 6, 0, 1456 }, { 4, 0, 744 }, - { 6, 0, 313 }, { 7, 10, 537 }, { 8, 10, 64 }, { 9, 10, 127 }, - { 10, 10, 496 }, { 12, 10, 510 }, { 13, 10, 384 }, { 4, 11, 217 }, - { 4, 10, 244 }, { 5, 11, 710 }, { 7, 10, 233 }, { 7, 11, 1926 }, - { 9, 11, 428 }, { 9, 11, 708 }, { 10, 11, 254 }, { 10, 11, 296 }, - { 10, 11, 720 }, { 11, 11, 109 }, { 11, 11, 255 }, { 12, 11, 165 }, - { 12, 11, 315 }, { 13, 11, 107 }, { 13, 11, 203 }, { 14, 11, 54 }, - { 14, 11, 99 }, { 14, 11, 114 }, { 14, 11, 388 }, { 16, 11, 85 }, - { 17, 11, 9 }, { 17, 11, 33 }, { 20, 11, 25 }, { 20, 11, 28 }, - { 20, 11, 29 }, { 21, 11, 9 }, { 21, 11, 10 }, { 21, 11, 34 }, - { 22, 11, 17 }, { 10, 0, 402 }, { 7, 0, 969 }, { 18, 0, 55 }, - { 8, 0, 50 }, { 9, 0, 624 }, { 6, 0, 1355 }, { 4, 0, 572 }, - { 6, 10, 1650 }, { 10, 10, 702 }, { 11, 10, 245 }, { 10, 0, 847 }, - { 14, 0, 445 }, { 6, 0, 43 }, { 7, 0, 38 }, { 8, 0, 248 }, - { 10, 0, 513 }, { 5, 0, 369 }, { 9, 10, 338 }, { 5, 0, 766 }, - { 5, 0, 363 }, { 5, 10, 896 }, { 8, 11, 392 }, { 11, 11, 54 }, - { 13, 11, 173 }, { 13, 11, 294 }, { 20, 11, 7 }, { 6, 0, 678 }, - { 7, 11, 1230 }, { 8, 11, 531 }, { 6, 0, 258 }, { 12, 0, 409 }, - { 5, 0, 249 }, { 20, 0, 82 }, { 7, 10, 1117 }, { 8, 10, 539 }, - { 5, 0, 393 }, { 6, 0, 378 }, { 7, 0, 1981 }, { 9, 0, 32 }, - { 9, 0, 591 }, { 10, 0, 685 }, { 10, 0, 741 }, { 14, 0, 382 }, - { 5, 0, 788 }, { 6, 0, 1281 }, { 6, 0, 1295 }, { 7, 0, 1968 }, - { 13, 0, 509 }, { 4, 0, 61 }, { 5, 0, 58 }, { 5, 0, 171 }, - { 5, 0, 683 }, { 6, 0, 291 }, { 6, 0, 566 }, { 7, 0, 1650 }, - { 11, 0, 523 }, { 12, 0, 273 }, { 12, 0, 303 }, { 15, 0, 39 }, - { 15, 0, 111 }, { 6, 0, 706 }, { 6, 0, 1283 }, { 6, 0, 589 }, - { 7, 11, 1433 }, { 5, 11, 435 }, { 7, 0, 1059 }, { 13, 0, 54 }, - { 5, 10, 4 }, { 5, 10, 810 }, { 6, 10, 13 }, { 6, 10, 538 }, - { 6, 10, 1690 }, { 6, 10, 1726 }, { 7, 10, 1819 }, { 8, 10, 148 }, - { 8, 10, 696 }, { 8, 10, 791 }, { 12, 10, 125 }, { 15, 10, 9 }, - { 7, 10, 1268 }, { 5, 11, 85 }, { 6, 11, 419 }, { 7, 11, 134 }, - { 7, 11, 305 }, { 7, 11, 361 }, { 7, 11, 1337 }, { 8, 11, 71 }, - { 12, 11, 519 }, { 9, 0, 824 }, { 12, 11, 688 }, { 5, 11, 691 }, - { 7, 11, 345 }, { 7, 10, 1385 }, { 9, 11, 94 }, { 11, 10, 582 }, - { 11, 10, 650 }, { 11, 10, 901 }, { 11, 10, 949 }, { 12, 11, 169 }, - { 12, 10, 232 }, { 12, 10, 236 }, { 13, 10, 413 }, { 13, 10, 501 }, - { 18, 10, 116 }, { 4, 0, 917 }, { 5, 0, 1005 }, { 7, 0, 1598 }, - { 5, 11, 183 }, { 6, 11, 582 }, { 9, 11, 344 }, { 10, 11, 679 }, - { 12, 11, 435 }, { 4, 10, 925 }, { 5, 10, 803 }, { 8, 10, 698 }, - { 10, 10, 828 }, { 4, 0, 919 }, { 7, 11, 511 }, { 11, 10, 992 }, - { 4, 0, 255 }, { 5, 0, 302 }, { 6, 0, 132 }, { 7, 0, 128 }, - { 7, 0, 283 }, { 7, 0, 1299 }, { 10, 0, 52 }, { 10, 0, 514 }, - { 11, 0, 925 }, { 13, 0, 92 }, { 14, 0, 309 }, { 6, 0, 1369 }, - { 7, 10, 1847 }, { 6, 0, 328 }, { 7, 11, 1993 }, { 8, 11, 684 }, - { 5, 10, 383 }, { 9, 0, 173 }, { 6, 11, 583 }, { 6, 0, 1411 }, - { 19, 0, 65 }, { 5, 11, 704 }, { 8, 11, 357 }, { 10, 11, 745 }, - { 14, 11, 426 }, { 17, 11, 94 }, { 19, 11, 57 }, { 9, 10, 660 }, - { 10, 10, 347 }, { 4, 11, 179 }, { 5, 11, 198 }, { 5, 11, 697 }, - { 7, 11, 347 }, { 7, 11, 971 }, { 8, 11, 181 }, { 10, 11, 711 }, - { 13, 0, 442 }, { 11, 0, 842 }, { 11, 0, 924 }, { 13, 0, 317 }, - { 13, 0, 370 }, { 13, 0, 469 }, { 13, 0, 471 }, { 14, 0, 397 }, - { 18, 0, 69 }, { 18, 0, 145 }, { 7, 10, 572 }, { 9, 10, 592 }, - { 11, 10, 680 }, { 12, 10, 356 }, { 12, 10, 550 }, { 14, 11, 19 }, - { 14, 11, 28 }, { 16, 11, 29 }, { 8, 0, 534 }, { 4, 11, 243 }, - { 5, 11, 203 }, { 7, 11, 19 }, { 7, 11, 71 }, { 7, 11, 113 }, - { 10, 11, 405 }, { 11, 11, 357 }, { 14, 11, 240 }, { 6, 0, 210 }, - { 10, 0, 845 }, { 10, 0, 862 }, { 7, 11, 1351 }, { 9, 11, 581 }, - { 10, 11, 639 }, { 11, 11, 453 }, { 12, 11, 584 }, { 7, 11, 1450 }, - { 11, 11, 99 }, { 10, 0, 892 }, { 12, 0, 719 }, { 16, 0, 105 }, - { 4, 0, 284 }, { 6, 0, 223 }, { 6, 11, 492 }, { 5, 11, 134 }, - { 6, 11, 408 }, { 6, 11, 495 }, { 7, 11, 1593 }, { 8, 0, 529 }, - { 9, 0, 807 }, { 4, 0, 218 }, { 7, 0, 526 }, { 15, 0, 137 }, - { 6, 0, 1444 }, { 14, 11, 4 }, { 4, 11, 665 }, { 4, 0, 270 }, - { 5, 0, 192 }, { 6, 0, 332 }, { 7, 0, 1322 }, { 4, 11, 248 }, - { 7, 11, 137 }, { 9, 11, 349 }, { 12, 0, 661 }, { 7, 0, 1517 }, - { 11, 0, 597 }, { 14, 0, 76 }, { 14, 0, 335 }, { 20, 0, 33 }, - { 7, 10, 748 }, { 11, 10, 700 }, { 5, 11, 371 }, { 7, 11, 563 }, - { 18, 11, 57 }, { 5, 10, 127 }, { 5, 0, 418 }, { 4, 11, 374 }, - { 7, 11, 547 }, { 7, 11, 1700 }, { 7, 11, 1833 }, { 11, 11, 858 }, - { 6, 10, 198 }, { 12, 10, 83 }, { 7, 11, 1812 }, { 13, 11, 259 }, - { 13, 11, 356 }, { 14, 11, 242 }, { 19, 11, 114 }, { 7, 0, 379 }, - { 8, 0, 481 }, { 9, 0, 377 }, { 5, 10, 276 }, { 6, 10, 55 }, - { 7, 10, 1369 }, { 10, 11, 286 }, { 5, 0, 1003 }, { 6, 0, 149 }, - { 6, 10, 1752 }, { 8, 10, 726 }, { 8, 0, 262 }, { 9, 0, 627 }, - { 10, 0, 18 }, { 11, 0, 214 }, { 11, 0, 404 }, { 11, 0, 457 }, - { 11, 0, 780 }, { 11, 0, 913 }, { 13, 0, 401 }, { 14, 0, 200 }, - { 6, 11, 1647 }, { 7, 11, 1552 }, { 7, 11, 2010 }, { 9, 11, 494 }, - { 9, 11, 509 }, { 7, 0, 742 }, { 8, 0, 304 }, { 4, 0, 142 }, - { 5, 10, 764 }, { 6, 10, 309 }, { 7, 10, 331 }, { 10, 10, 550 }, - { 7, 10, 1062 }, { 6, 11, 123 }, { 7, 11, 214 }, { 7, 10, 986 }, - { 9, 11, 728 }, { 10, 11, 157 }, { 11, 11, 346 }, { 11, 11, 662 }, - { 15, 11, 106 }, { 7, 10, 1573 }, { 7, 0, 925 }, { 9, 0, 799 }, - { 4, 0, 471 }, { 5, 0, 51 }, { 6, 0, 602 }, { 8, 0, 484 }, - { 10, 0, 195 }, { 8, 0, 688 }, { 4, 0, 697 }, { 6, 0, 1169 }, - { 6, 0, 1241 }, { 6, 10, 194 }, { 7, 10, 133 }, { 10, 10, 493 }, - { 10, 10, 570 }, { 11, 10, 664 }, { 12, 0, 751 }, { 7, 0, 929 }, - { 10, 0, 452 }, { 11, 0, 878 }, { 16, 0, 33 }, { 5, 10, 24 }, - { 5, 10, 569 }, { 6, 10, 3 }, { 6, 10, 119 }, { 6, 10, 143 }, - { 6, 10, 440 }, { 7, 10, 599 }, { 7, 10, 1686 }, { 7, 10, 1854 }, - { 8, 10, 424 }, { 9, 10, 43 }, { 9, 10, 584 }, { 9, 10, 760 }, - { 10, 10, 328 }, { 11, 10, 159 }, { 11, 10, 253 }, { 12, 10, 487 }, - { 12, 10, 531 }, { 4, 11, 707 }, { 13, 11, 106 }, { 18, 11, 49 }, - { 19, 11, 41 }, { 5, 0, 221 }, { 5, 11, 588 }, { 6, 11, 393 }, - { 6, 0, 1437 }, { 6, 11, 211 }, { 7, 11, 1690 }, { 11, 11, 486 }, - { 12, 11, 369 }, { 5, 10, 14 }, { 5, 10, 892 }, { 6, 10, 283 }, - { 7, 10, 234 }, { 8, 10, 537 }, { 4, 0, 988 }, { 8, 0, 955 }, - { 7, 0, 1251 }, { 4, 10, 126 }, { 8, 10, 635 }, { 19, 10, 34 }, - { 4, 10, 316 }, { 7, 10, 1561 }, { 9, 10, 861 }, { 4, 10, 64 }, - { 5, 10, 352 }, { 5, 10, 720 }, { 6, 10, 368 }, { 11, 10, 359 }, - { 6, 0, 192 }, { 4, 0, 132 }, { 5, 0, 69 }, { 7, 0, 1242 }, - { 7, 10, 1577 }, { 10, 10, 304 }, { 10, 10, 549 }, { 12, 10, 365 }, - { 13, 10, 220 }, { 13, 10, 240 }, { 14, 10, 33 }, { 4, 0, 111 }, - { 7, 0, 865 }, { 6, 11, 219 }, { 5, 11, 582 }, { 6, 11, 1646 }, - { 7, 11, 99 }, { 7, 11, 1962 }, { 7, 11, 1986 }, { 8, 11, 515 }, - { 8, 11, 773 }, { 9, 11, 23 }, { 9, 11, 491 }, { 12, 11, 620 }, - { 14, 11, 52 }, { 17, 11, 50 }, { 4, 0, 767 }, { 7, 11, 568 }, - { 20, 11, 21 }, { 6, 0, 42 }, { 7, 0, 1416 }, { 7, 0, 2005 }, - { 8, 0, 131 }, { 8, 0, 466 }, { 9, 0, 672 }, { 13, 0, 252 }, - { 20, 0, 103 }, { 5, 11, 851 }, { 7, 0, 1050 }, { 6, 10, 175 }, - { 9, 10, 289 }, { 5, 10, 432 }, { 5, 10, 913 }, { 6, 0, 44 }, - { 8, 0, 368 }, { 7, 11, 784 }, { 4, 0, 570 }, { 5, 0, 120 }, - { 11, 10, 595 }, { 12, 0, 29 }, { 6, 0, 227 }, { 7, 0, 1589 }, - { 4, 11, 98 }, { 7, 11, 1365 }, { 9, 11, 422 }, { 9, 11, 670 }, - { 10, 11, 775 }, { 11, 11, 210 }, { 13, 11, 26 }, { 13, 11, 457 }, - { 13, 11, 476 }, { 12, 10, 80 }, { 5, 10, 931 }, { 6, 10, 1698 }, - { 5, 0, 522 }, { 6, 0, 1120 }, { 7, 0, 1529 }, { 12, 0, 739 }, - { 14, 0, 448 }, { 14, 0, 467 }, { 11, 10, 526 }, { 11, 10, 939 }, - { 13, 10, 290 }, { 5, 10, 774 }, { 6, 10, 1637 }, { 6, 10, 1686 }, - { 6, 10, 1751 }, { 6, 0, 1667 }, { 7, 0, 2036 }, { 7, 10, 1167 }, - { 11, 10, 934 }, { 13, 10, 391 }, { 17, 10, 76 }, { 9, 11, 147 }, - { 6, 10, 260 }, { 7, 10, 1484 }, { 11, 11, 821 }, { 12, 11, 110 }, - { 12, 11, 153 }, { 18, 11, 41 }, { 22, 11, 19 }, { 6, 0, 511 }, - { 12, 0, 132 }, { 6, 10, 573 }, { 5, 0, 568 }, { 6, 0, 138 }, - { 7, 0, 1293 }, { 4, 0, 1020 }, { 8, 0, 258 }, { 9, 0, 208 }, - { 9, 0, 359 }, { 4, 0, 565 }, { 8, 0, 23 }, { 8, 0, 827 }, - { 6, 0, 344 }, { 4, 0, 922 }, { 5, 0, 1023 }, { 13, 11, 477 }, - { 14, 11, 120 }, { 20, 11, 61 }, { 6, 0, 240 }, { 5, 11, 209 }, - { 6, 11, 30 }, { 11, 11, 56 }, { 11, 11, 305 }, { 6, 0, 171 }, - { 7, 0, 1002 }, { 7, 0, 1324 }, { 9, 0, 415 }, { 14, 0, 230 }, - { 18, 0, 68 }, { 4, 10, 292 }, { 4, 10, 736 }, { 5, 10, 871 }, - { 6, 10, 1689 }, { 7, 10, 1944 }, { 9, 10, 580 }, { 9, 11, 635 }, - { 11, 11, 559 }, { 4, 11, 150 }, { 5, 11, 303 }, { 6, 11, 327 }, - { 6, 10, 63 }, { 7, 10, 920 }, { 5, 10, 793 }, { 8, 11, 192 }, - { 10, 11, 78 }, { 10, 11, 555 }, { 11, 11, 308 }, { 13, 11, 359 }, - { 19, 11, 95 }, { 7, 11, 786 }, { 7, 11, 1712 }, { 8, 0, 402 }, - { 6, 0, 754 }, { 6, 11, 1638 }, { 7, 11, 79 }, { 7, 11, 496 }, - { 9, 11, 138 }, { 10, 11, 336 }, { 11, 11, 12 }, { 12, 11, 412 }, - { 12, 11, 440 }, { 14, 11, 305 }, { 4, 0, 716 }, { 13, 0, 31 }, - { 5, 0, 982 }, { 8, 0, 691 }, { 8, 0, 731 }, { 5, 10, 67 }, - { 6, 10, 62 }, { 6, 10, 374 }, { 7, 10, 1391 }, { 9, 10, 790 }, - { 12, 10, 47 }, { 11, 11, 556 }, { 23, 11, 1 }, { 7, 11, 204 }, - { 7, 11, 415 }, { 8, 11, 42 }, { 10, 11, 85 }, { 11, 11, 33 }, - { 11, 11, 564 }, { 12, 11, 571 }, { 21, 11, 1 }, { 8, 0, 888 }, - { 7, 11, 610 }, { 7, 11, 1501 }, { 4, 10, 391 }, { 7, 10, 1169 }, - { 5, 0, 847 }, { 9, 0, 840 }, { 10, 0, 803 }, { 9, 0, 823 }, - { 6, 0, 785 }, { 8, 0, 152 }, { 9, 0, 53 }, { 9, 0, 268 }, - { 9, 0, 901 }, { 10, 0, 518 }, { 10, 0, 829 }, { 11, 0, 188 }, - { 13, 0, 74 }, { 14, 0, 46 }, { 15, 0, 17 }, { 15, 0, 33 }, - { 17, 0, 40 }, { 18, 0, 36 }, { 19, 0, 20 }, { 22, 0, 1 }, - { 24, 0, 2 }, { 4, 11, 3 }, { 5, 11, 247 }, { 5, 11, 644 }, - { 7, 11, 744 }, { 7, 11, 1207 }, { 7, 11, 1225 }, { 7, 11, 1909 }, - { 18, 11, 147 }, { 8, 0, 532 }, { 7, 0, 681 }, { 4, 10, 271 }, - { 12, 0, 314 }, { 12, 0, 677 }, { 4, 0, 684 }, { 8, 0, 384 }, - { 5, 11, 285 }, { 9, 11, 67 }, { 13, 11, 473 }, { 15, 11, 82 }, - { 4, 10, 253 }, { 5, 10, 544 }, { 7, 10, 300 }, { 9, 10, 340 }, - { 7, 0, 110 }, { 7, 0, 447 }, { 8, 0, 290 }, { 8, 0, 591 }, - { 9, 0, 382 }, { 9, 0, 649 }, { 11, 0, 71 }, { 11, 0, 155 }, - { 11, 0, 313 }, { 12, 0, 5 }, { 13, 0, 325 }, { 14, 0, 287 }, - { 6, 0, 1818 }, { 8, 0, 1007 }, { 10, 0, 321 }, { 7, 0, 360 }, - { 7, 0, 425 }, { 9, 0, 66 }, { 9, 0, 278 }, { 10, 0, 644 }, - { 5, 10, 818 }, { 5, 0, 385 }, { 5, 10, 541 }, { 6, 10, 94 }, - { 6, 10, 499 }, { 7, 10, 230 }, { 11, 10, 321 }, { 4, 10, 920 }, - { 5, 10, 25 }, { 5, 10, 790 }, { 6, 10, 457 }, { 7, 10, 853 }, - { 8, 10, 788 }, { 4, 0, 900 }, { 5, 0, 861 }, { 5, 0, 254 }, - { 7, 0, 985 }, { 8, 0, 73 }, { 7, 0, 1959 }, { 8, 0, 683 }, - { 6, 10, 1765 }, { 5, 10, 822 }, { 4, 10, 634 }, { 4, 11, 29 }, - { 6, 11, 532 }, { 7, 11, 1628 }, { 7, 11, 1648 }, { 9, 11, 303 }, - { 9, 11, 350 }, { 10, 11, 433 }, { 11, 11, 97 }, { 11, 11, 557 }, - { 11, 11, 745 }, { 12, 11, 289 }, { 12, 11, 335 }, { 12, 11, 348 }, - { 12, 11, 606 }, { 13, 11, 116 }, { 13, 11, 233 }, { 13, 11, 466 }, - { 14, 11, 181 }, { 14, 11, 209 }, { 14, 11, 232 }, { 14, 11, 236 }, - { 14, 11, 300 }, { 16, 11, 41 }, { 20, 11, 97 }, { 19, 0, 86 }, - { 6, 10, 36 }, { 7, 10, 658 }, { 8, 10, 454 }, { 7, 11, 1692 }, - { 4, 0, 725 }, { 5, 11, 501 }, { 7, 11, 1704 }, { 9, 11, 553 }, - { 11, 11, 520 }, { 12, 11, 557 }, { 13, 11, 249 }, { 6, 0, 196 }, - { 5, 0, 831 }, { 8, 0, 723 }, { 7, 0, 1897 }, { 13, 0, 80 }, - { 13, 0, 437 }, { 17, 0, 74 }, { 4, 0, 992 }, { 6, 0, 627 }, - { 8, 0, 994 }, { 7, 11, 1294 }, { 4, 10, 104 }, { 5, 0, 848 }, - { 6, 0, 66 }, { 8, 0, 764 }, { 4, 0, 36 }, { 7, 0, 1387 }, - { 10, 0, 205 }, { 11, 0, 755 }, { 6, 0, 1046 }, { 6, 0, 1485 }, - { 6, 0, 950 }, { 4, 0, 887 }, { 14, 0, 450 }, { 20, 0, 111 }, - { 7, 0, 620 }, { 7, 0, 831 }, { 9, 10, 542 }, { 9, 10, 566 }, - { 10, 10, 728 }, { 6, 0, 165 }, { 10, 0, 388 }, { 11, 10, 263 }, - { 4, 0, 719 }, { 7, 0, 155 }, { 10, 10, 468 }, { 6, 11, 453 }, - { 16, 11, 36 }, { 6, 11, 129 }, { 5, 0, 533 }, { 7, 0, 755 }, - { 10, 0, 780 }, { 6, 0, 1465 }, { 4, 0, 353 }, { 6, 0, 146 }, - { 6, 0, 1789 }, { 7, 0, 427 }, { 7, 0, 990 }, { 7, 0, 1348 }, - { 9, 0, 665 }, { 9, 0, 898 }, { 11, 0, 893 }, { 14, 0, 212 }, - { 7, 10, 87 }, { 14, 10, 288 }, { 4, 0, 45 }, { 7, 0, 1257 }, - { 12, 0, 7 }, { 7, 10, 988 }, { 7, 10, 1939 }, { 9, 10, 64 }, - { 9, 10, 502 }, { 12, 10, 34 }, { 13, 10, 12 }, { 13, 10, 234 }, - { 19, 10, 77 }, { 4, 0, 607 }, { 5, 11, 60 }, { 6, 11, 504 }, - { 7, 11, 614 }, { 7, 11, 1155 }, { 12, 11, 0 }, { 7, 10, 141 }, - { 8, 11, 198 }, { 11, 11, 29 }, { 12, 11, 534 }, { 12, 0, 65 }, - { 8, 0, 816 }, { 4, 10, 619 }, { 11, 0, 88 }, { 5, 10, 246 }, - { 8, 10, 189 }, { 9, 10, 355 }, { 9, 10, 512 }, { 10, 10, 124 }, - { 10, 10, 453 }, { 11, 10, 143 }, { 11, 10, 416 }, { 11, 10, 859 }, - { 13, 10, 341 }, { 4, 11, 379 }, { 7, 11, 1397 }, { 4, 0, 600 }, - { 9, 0, 621 }, { 5, 0, 367 }, { 6, 0, 561 }, { 6, 0, 559 }, - { 6, 0, 1691 }, { 6, 0, 585 }, { 6, 11, 585 }, { 7, 11, 1228 }, - { 4, 11, 118 }, { 5, 10, 678 }, { 6, 11, 274 }, { 6, 11, 361 }, - { 7, 11, 75 }, { 13, 11, 441 }, { 7, 11, 1818 }, { 9, 11, 841 }, - { 5, 0, 573 }, { 6, 0, 287 }, { 7, 10, 862 }, { 7, 10, 1886 }, - { 10, 10, 179 }, { 4, 10, 517 }, { 12, 11, 693 }, { 5, 11, 314 }, - { 6, 11, 221 }, { 7, 11, 419 }, { 10, 11, 650 }, { 11, 11, 396 }, - { 12, 11, 156 }, { 13, 11, 369 }, { 14, 11, 333 }, { 17, 11, 47 }, - { 12, 10, 540 }, { 8, 10, 667 }, { 11, 10, 403 }, { 18, 10, 83 }, - { 6, 0, 672 }, { 5, 10, 761 }, { 9, 0, 157 }, { 10, 10, 131 }, - { 12, 10, 72 }, { 7, 0, 714 }, { 6, 11, 460 }, { 6, 0, 456 }, - { 5, 0, 925 }, { 5, 11, 682 }, { 7, 11, 1887 }, { 8, 11, 510 }, - { 8, 11, 475 }, { 5, 11, 1016 }, { 9, 0, 19 }, { 7, 11, 602 }, - { 8, 11, 179 }, { 10, 11, 781 }, { 12, 11, 126 }, { 6, 11, 329 }, - { 10, 11, 111 }, { 6, 0, 822 }, { 6, 0, 1473 }, { 16, 11, 86 }, - { 11, 0, 113 }, { 11, 11, 113 }, { 5, 11, 821 }, { 6, 11, 1687 }, - { 5, 10, 449 }, { 7, 0, 463 }, { 17, 0, 69 }, { 8, 10, 103 }, - { 7, 10, 2028 }, { 10, 10, 641 }, { 6, 0, 193 }, { 7, 0, 240 }, - { 7, 0, 1682 }, { 10, 0, 51 }, { 10, 0, 640 }, { 11, 0, 410 }, - { 13, 0, 82 }, { 14, 0, 247 }, { 14, 0, 331 }, { 14, 0, 377 }, - { 6, 0, 471 }, { 11, 0, 411 }, { 14, 0, 2 }, { 5, 11, 71 }, - { 7, 11, 1407 }, { 9, 11, 388 }, { 9, 11, 704 }, { 10, 11, 261 }, - { 10, 11, 619 }, { 11, 11, 547 }, { 11, 11, 619 }, { 15, 11, 157 }, - { 8, 0, 633 }, { 7, 0, 1148 }, { 6, 0, 554 }, { 7, 0, 1392 }, - { 12, 0, 129 }, { 7, 10, 1274 }, { 7, 10, 1386 }, { 7, 11, 2008 }, - { 9, 11, 337 }, { 10, 11, 517 }, { 18, 10, 87 }, { 7, 0, 803 }, - { 8, 0, 542 }, { 6, 10, 187 }, { 7, 10, 1203 }, { 8, 10, 380 }, - { 14, 10, 117 }, { 21, 10, 28 }, { 6, 10, 297 }, { 7, 10, 793 }, - { 11, 10, 938 }, { 8, 0, 438 }, { 11, 0, 363 }, { 7, 10, 464 }, - { 11, 10, 105 }, { 12, 10, 231 }, { 14, 10, 386 }, { 15, 10, 102 }, - { 20, 10, 75 }, { 5, 11, 16 }, { 6, 11, 86 }, { 6, 11, 603 }, - { 7, 11, 292 }, { 7, 11, 561 }, { 8, 11, 257 }, { 8, 11, 382 }, - { 9, 11, 721 }, { 9, 11, 778 }, { 11, 11, 581 }, { 12, 11, 466 }, - { 6, 0, 717 }, { 4, 11, 486 }, { 5, 11, 491 }, { 4, 0, 875 }, - { 4, 11, 72 }, { 6, 11, 265 }, { 7, 11, 847 }, { 4, 0, 237 }, - { 7, 0, 514 }, { 6, 0, 392 }, { 7, 0, 65 }, { 7, 0, 2019 }, - { 12, 11, 261 }, { 7, 11, 922 }, { 9, 11, 404 }, { 12, 0, 563 }, - { 14, 0, 101 }, { 18, 0, 129 }, { 7, 10, 1010 }, { 11, 10, 733 }, - { 11, 10, 759 }, { 13, 10, 34 }, { 18, 10, 45 }, { 7, 10, 1656 }, - { 9, 10, 369 }, { 10, 10, 338 }, { 10, 10, 490 }, { 11, 10, 154 }, - { 11, 10, 545 }, { 11, 10, 775 }, { 13, 10, 77 }, { 13, 10, 274 }, - { 4, 0, 444 }, { 10, 0, 146 }, { 12, 0, 9 }, { 11, 11, 163 }, - { 7, 0, 1260 }, { 7, 0, 1790 }, { 9, 0, 222 }, { 10, 0, 43 }, - { 11, 0, 900 }, { 9, 11, 234 }, { 10, 0, 971 }, { 9, 0, 761 }, - { 6, 0, 699 }, { 8, 11, 434 }, { 6, 0, 1116 }, { 7, 0, 1366 }, - { 5, 10, 20 }, { 6, 11, 197 }, { 6, 10, 298 }, { 7, 10, 659 }, - { 8, 11, 205 }, { 9, 10, 219 }, { 4, 11, 490 }, { 11, 11, 820 }, - { 22, 11, 51 }, { 7, 10, 1440 }, { 11, 10, 854 }, { 11, 10, 872 }, - { 11, 10, 921 }, { 12, 10, 551 }, { 13, 10, 472 }, { 14, 10, 367 }, - { 12, 11, 13 }, { 4, 0, 829 }, { 12, 0, 242 }, { 4, 10, 439 }, - { 8, 10, 669 }, { 6, 0, 593 }, { 6, 11, 452 }, { 7, 11, 312 }, - { 10, 11, 219 }, { 4, 11, 333 }, { 9, 11, 176 }, { 12, 11, 353 }, - { 13, 11, 187 }, { 7, 0, 36 }, { 8, 0, 201 }, { 8, 0, 605 }, - { 12, 0, 224 }, { 4, 10, 233 }, { 6, 0, 1430 }, { 6, 0, 1806 }, - { 4, 0, 523 }, { 5, 0, 638 }, { 6, 0, 1889 }, { 9, 0, 958 }, - { 9, 0, 971 }, { 9, 0, 976 }, { 12, 0, 796 }, { 12, 0, 799 }, - { 12, 0, 808 }, { 12, 0, 835 }, { 12, 0, 836 }, { 12, 0, 914 }, - { 12, 0, 946 }, { 15, 0, 216 }, { 15, 0, 232 }, { 18, 0, 183 }, - { 18, 0, 187 }, { 18, 0, 194 }, { 18, 0, 212 }, { 18, 0, 232 }, - { 21, 0, 49 }, { 4, 10, 482 }, { 6, 0, 827 }, { 6, 0, 1434 }, - { 7, 10, 346 }, { 6, 0, 2043 }, { 6, 0, 242 }, { 7, 0, 227 }, - { 7, 0, 1581 }, { 8, 0, 104 }, { 9, 0, 113 }, { 9, 0, 220 }, - { 9, 0, 427 }, { 10, 0, 136 }, { 10, 0, 239 }, { 11, 0, 579 }, - { 11, 0, 1023 }, { 13, 0, 4 }, { 13, 0, 204 }, { 13, 0, 316 }, - { 20, 0, 86 }, { 6, 11, 1685 }, { 7, 0, 148 }, { 8, 0, 284 }, - { 13, 0, 63 }, { 14, 0, 10 }, { 7, 11, 584 }, { 6, 0, 1249 }, - { 7, 0, 861 }, { 7, 10, 334 }, { 5, 10, 795 }, { 6, 10, 1741 }, - { 9, 11, 70 }, { 4, 0, 807 }, { 7, 11, 135 }, { 8, 11, 7 }, - { 8, 11, 62 }, { 9, 11, 243 }, { 10, 11, 658 }, { 10, 11, 697 }, - { 11, 11, 456 }, { 11, 11, 756 }, { 9, 11, 395 }, { 10, 11, 79 }, - { 9, 11, 108 }, { 19, 0, 94 }, { 8, 0, 494 }, { 7, 11, 631 }, - { 7, 10, 622 }, { 7, 0, 1510 }, { 7, 10, 1750 }, { 4, 10, 203 }, - { 7, 10, 1936 }, { 7, 11, 406 }, { 7, 11, 459 }, { 8, 11, 606 }, - { 11, 11, 726 }, { 7, 0, 1306 }, { 8, 0, 505 }, { 9, 0, 482 }, - { 10, 0, 126 }, { 11, 0, 225 }, { 12, 0, 347 }, { 12, 0, 449 }, - { 13, 0, 19 }, { 14, 0, 218 }, { 14, 0, 435 }, { 5, 0, 268 }, - { 10, 0, 764 }, { 12, 0, 120 }, { 13, 0, 39 }, { 17, 0, 127 }, - { 14, 11, 68 }, { 11, 10, 678 }, { 12, 10, 307 }, { 12, 11, 268 }, - { 12, 11, 640 }, { 14, 11, 119 }, { 7, 10, 2044 }, { 5, 11, 612 }, - { 4, 11, 372 }, { 7, 11, 482 }, { 8, 11, 158 }, { 9, 11, 602 }, - { 9, 11, 615 }, { 10, 11, 245 }, { 10, 11, 678 }, { 10, 11, 744 }, - { 11, 11, 248 }, { 11, 11, 806 }, { 7, 10, 311 }, { 9, 10, 308 }, - { 12, 10, 255 }, { 4, 0, 384 }, { 7, 0, 1022 }, { 5, 11, 854 }, - { 7, 11, 1991 }, { 7, 10, 1266 }, { 4, 10, 400 }, { 5, 10, 267 }, - { 7, 10, 232 }, { 7, 0, 1703 }, { 9, 0, 159 }, { 11, 0, 661 }, - { 12, 0, 603 }, { 4, 0, 964 }, { 14, 0, 438 }, { 14, 0, 444 }, - { 14, 0, 456 }, { 22, 0, 60 }, { 22, 0, 63 }, { 9, 11, 106 }, - { 9, 11, 163 }, { 9, 11, 296 }, { 10, 11, 167 }, { 10, 11, 172 }, - { 10, 11, 777 }, { 11, 11, 16 }, { 8, 0, 583 }, { 4, 0, 515 }, - { 8, 0, 632 }, { 8, 0, 697 }, { 9, 0, 854 }, { 5, 11, 195 }, - { 7, 11, 1685 }, { 6, 0, 1123 }, { 6, 0, 1365 }, { 6, 11, 328 }, - { 7, 11, 1997 }, { 8, 11, 730 }, { 11, 11, 1006 }, { 4, 0, 136 }, - { 5, 0, 551 }, { 6, 0, 1782 }, { 7, 0, 1287 }, { 9, 0, 44 }, - { 10, 0, 552 }, { 10, 0, 642 }, { 11, 0, 839 }, { 12, 0, 274 }, - { 12, 0, 275 }, { 12, 0, 372 }, { 13, 0, 91 }, { 14, 0, 125 }, - { 5, 11, 751 }, { 11, 11, 797 }, { 12, 11, 203 }, { 5, 0, 732 }, - { 7, 0, 679 }, { 8, 0, 313 }, { 4, 10, 100 }, { 7, 11, 821 }, - { 10, 0, 361 }, { 14, 0, 316 }, { 6, 0, 595 }, { 6, 0, 147 }, - { 7, 0, 886 }, { 9, 0, 753 }, { 10, 0, 268 }, { 5, 10, 362 }, - { 5, 10, 443 }, { 6, 10, 318 }, { 7, 10, 1019 }, { 11, 10, 623 }, - { 5, 10, 463 }, { 8, 10, 296 }, { 4, 10, 454 }, { 5, 11, 950 }, - { 5, 11, 994 }, { 6, 11, 351 }, { 10, 0, 137 }, { 5, 10, 48 }, - { 5, 10, 404 }, { 6, 10, 557 }, { 7, 10, 458 }, { 8, 10, 597 }, - { 10, 10, 455 }, { 10, 10, 606 }, { 11, 10, 49 }, { 11, 10, 548 }, - { 12, 10, 476 }, { 13, 10, 18 }, { 13, 10, 450 }, { 5, 0, 414 }, - { 7, 0, 1762 }, { 5, 11, 421 }, { 7, 11, 47 }, { 5, 10, 442 }, - { 7, 10, 1984 }, { 6, 0, 599 }, { 6, 0, 1749 }, { 6, 0, 1627 }, - { 4, 0, 488 }, { 4, 11, 350 }, { 9, 11, 751 }, { 4, 0, 83 }, - { 12, 0, 676 }, { 5, 11, 967 }, { 7, 0, 1639 }, { 5, 10, 55 }, - { 12, 10, 161 }, { 4, 11, 473 }, { 7, 11, 623 }, { 8, 11, 808 }, - { 9, 11, 871 }, { 9, 11, 893 }, { 11, 11, 38 }, { 11, 11, 431 }, - { 12, 11, 112 }, { 12, 11, 217 }, { 12, 11, 243 }, { 12, 11, 562 }, - { 12, 11, 683 }, { 13, 11, 141 }, { 13, 11, 197 }, { 13, 11, 227 }, - { 13, 11, 406 }, { 13, 11, 487 }, { 14, 11, 156 }, { 14, 11, 203 }, - { 14, 11, 224 }, { 14, 11, 256 }, { 18, 11, 58 }, { 22, 11, 0 }, - { 5, 10, 450 }, { 7, 11, 736 }, { 11, 11, 264 }, { 6, 0, 278 }, - { 4, 11, 222 }, { 7, 11, 286 }, { 8, 11, 629 }, { 7, 10, 869 }, - { 12, 0, 97 }, { 16, 0, 14 }, { 6, 0, 1085 }, { 4, 10, 213 }, - { 7, 10, 223 }, { 8, 10, 80 }, { 7, 0, 388 }, { 7, 0, 644 }, - { 11, 0, 781 }, { 4, 0, 849 }, { 7, 0, 229 }, { 8, 0, 59 }, - { 9, 0, 190 }, { 10, 0, 378 }, { 12, 0, 191 }, { 7, 10, 381 }, - { 7, 10, 806 }, { 7, 10, 820 }, { 8, 10, 354 }, { 8, 10, 437 }, - { 8, 10, 787 }, { 9, 10, 657 }, { 10, 10, 58 }, { 10, 10, 339 }, - { 10, 10, 749 }, { 11, 10, 914 }, { 12, 10, 162 }, { 13, 10, 75 }, - { 14, 10, 106 }, { 14, 10, 198 }, { 14, 10, 320 }, { 14, 10, 413 }, - { 18, 10, 43 }, { 13, 11, 306 }, { 8, 10, 747 }, { 6, 0, 1115 }, - { 16, 0, 94 }, { 16, 0, 108 }, { 8, 11, 146 }, { 6, 0, 700 }, - { 6, 0, 817 }, { 6, 0, 1002 }, { 5, 10, 692 }, { 4, 11, 465 }, - { 7, 11, 1663 }, { 6, 10, 191 }, { 6, 0, 1414 }, { 7, 11, 913 }, - { 4, 0, 660 }, { 7, 0, 1035 }, { 10, 0, 737 }, { 6, 10, 162 }, - { 7, 10, 1960 }, { 8, 10, 831 }, { 4, 10, 706 }, { 7, 0, 690 }, - { 9, 0, 217 }, { 9, 0, 587 }, { 12, 0, 521 }, { 10, 10, 426 }, - { 7, 10, 1235 }, { 6, 11, 82 }, { 7, 11, 138 }, { 7, 11, 517 }, - { 9, 11, 673 }, { 11, 11, 238 }, { 10, 0, 272 }, { 5, 11, 495 }, - { 7, 11, 834 }, { 9, 11, 733 }, { 11, 11, 378 }, { 6, 0, 1744 }, - { 4, 0, 1011 }, { 7, 11, 828 }, { 14, 11, 116 }, { 4, 0, 733 }, - { 9, 0, 194 }, { 10, 0, 92 }, { 11, 0, 198 }, { 12, 0, 84 }, - { 13, 0, 128 }, { 5, 11, 559 }, { 10, 0, 57 }, { 10, 0, 277 }, - { 6, 11, 21 }, { 6, 11, 1737 }, { 7, 11, 1444 }, { 8, 11, 224 }, - { 4, 10, 204 }, { 9, 10, 902 }, { 8, 10, 833 }, { 11, 0, 348 }, - { 12, 0, 99 }, { 18, 0, 1 }, { 18, 0, 11 }, { 19, 0, 4 }, - { 7, 10, 366 }, { 9, 10, 287 }, { 12, 10, 199 }, { 12, 10, 556 }, - { 12, 10, 577 }, { 6, 0, 1981 }, { 8, 0, 936 }, { 21, 0, 33 }, - { 22, 0, 40 }, { 5, 11, 519 }, { 10, 11, 204 }, { 5, 10, 356 }, - { 7, 10, 224 }, { 6, 0, 775 }, { 7, 0, 306 }, { 7, 10, 630 }, - { 9, 10, 567 }, { 11, 10, 150 }, { 11, 10, 444 }, { 13, 10, 119 }, - { 5, 0, 979 }, { 6, 10, 539 }, { 5, 0, 611 }, { 4, 11, 402 }, - { 7, 11, 1679 }, { 5, 0, 178 }, { 7, 11, 2 }, { 8, 11, 323 }, - { 8, 11, 479 }, { 5, 11, 59 }, { 7, 11, 672 }, { 4, 0, 1010 }, - { 6, 0, 1969 }, { 10, 11, 237 }, { 5, 11, 412 }, { 18, 11, 34 }, - { 7, 11, 1740 }, { 18, 11, 48 }, { 6, 0, 664 }, { 11, 10, 814 }, - { 4, 11, 85 }, { 7, 11, 549 }, { 5, 11, 94 }, { 5, 11, 457 }, - { 4, 0, 390 }, { 6, 0, 1510 }, { 4, 10, 235 }, { 7, 10, 255 }, - { 4, 10, 194 }, { 5, 10, 584 }, { 6, 11, 11 }, { 6, 10, 384 }, - { 7, 11, 187 }, { 7, 10, 583 }, { 10, 10, 761 }, { 11, 10, 760 }, - { 11, 10, 851 }, { 4, 11, 522 }, { 11, 11, 802 }, { 7, 0, 493 }, - { 10, 11, 776 }, { 13, 11, 345 }, { 14, 11, 425 }, { 18, 0, 37 }, - { 4, 11, 52 }, { 7, 11, 661 }, { 6, 0, 724 }, { 6, 0, 829 }, - { 5, 11, 520 }, { 5, 10, 562 }, { 4, 11, 281 }, { 5, 11, 38 }, - { 7, 11, 194 }, { 7, 11, 668 }, { 7, 11, 1893 }, { 9, 11, 397 }, - { 5, 10, 191 }, { 9, 10, 271 }, { 7, 0, 1537 }, { 14, 0, 96 }, - { 15, 0, 73 }, { 5, 0, 473 }, { 11, 0, 168 }, { 4, 10, 470 }, - { 6, 10, 153 }, { 7, 10, 1503 }, { 7, 10, 1923 }, { 10, 10, 701 }, - { 11, 10, 132 }, { 11, 10, 227 }, { 11, 10, 320 }, { 11, 10, 436 }, - { 11, 10, 525 }, { 11, 10, 855 }, { 12, 10, 41 }, { 12, 10, 286 }, - { 13, 10, 103 }, { 13, 10, 284 }, { 14, 10, 255 }, { 14, 10, 262 }, - { 15, 10, 117 }, { 15, 10, 127 }, { 5, 0, 105 }, { 5, 0, 438 }, - { 9, 0, 694 }, { 12, 0, 627 }, { 13, 0, 210 }, { 5, 10, 327 }, - { 6, 10, 552 }, { 7, 10, 1754 }, { 9, 10, 604 }, { 6, 0, 1256 }, - { 24, 0, 11 }, { 5, 11, 448 }, { 11, 11, 98 }, { 11, 11, 524 }, - { 7, 0, 1626 }, { 5, 10, 80 }, { 6, 10, 405 }, { 7, 10, 403 }, - { 7, 10, 1502 }, { 8, 10, 456 }, { 9, 10, 487 }, { 9, 10, 853 }, - { 9, 10, 889 }, { 10, 10, 309 }, { 11, 10, 721 }, { 11, 10, 994 }, - { 12, 10, 430 }, { 13, 10, 165 }, { 14, 11, 16 }, { 18, 11, 44 }, - { 4, 0, 779 }, { 8, 0, 25 }, { 10, 0, 826 }, { 4, 10, 453 }, - { 5, 10, 887 }, { 6, 10, 535 }, { 8, 10, 6 }, { 8, 10, 543 }, - { 8, 10, 826 }, { 9, 11, 461 }, { 12, 11, 632 }, { 4, 0, 308 }, - { 7, 0, 741 }, { 4, 0, 671 }, { 7, 0, 150 }, { 8, 0, 649 }, - { 8, 0, 1020 }, { 9, 0, 99 }, { 6, 11, 336 }, { 8, 11, 552 }, - { 9, 11, 285 }, { 10, 11, 99 }, { 11, 11, 568 }, { 6, 0, 521 }, - { 5, 0, 339 }, { 14, 0, 3 }, { 15, 0, 41 }, { 15, 0, 166 }, - { 19, 0, 66 }, { 6, 11, 423 }, { 7, 11, 665 }, { 7, 11, 1210 }, - { 9, 11, 218 }, { 13, 11, 222 }, { 6, 0, 543 }, { 5, 10, 101 }, - { 5, 11, 256 }, { 6, 10, 88 }, { 7, 10, 1677 }, { 9, 10, 100 }, - { 10, 10, 677 }, { 14, 10, 169 }, { 14, 10, 302 }, { 14, 10, 313 }, - { 15, 10, 48 }, { 15, 10, 84 }, { 4, 10, 310 }, { 7, 10, 708 }, - { 7, 10, 996 }, { 9, 10, 795 }, { 10, 10, 390 }, { 10, 10, 733 }, - { 11, 10, 451 }, { 12, 10, 249 }, { 14, 10, 115 }, { 14, 10, 286 }, - { 15, 10, 100 }, { 5, 10, 587 }, { 13, 11, 417 }, { 14, 11, 129 }, - { 15, 11, 15 }, { 6, 0, 1358 }, { 8, 11, 554 }, { 4, 10, 498 }, - { 7, 10, 217 }, { 8, 10, 140 }, { 10, 10, 610 }, { 7, 11, 989 }, - { 7, 11, 634 }, { 6, 0, 155 }, { 12, 0, 234 }, { 7, 11, 462 }, - { 4, 11, 618 }, { 6, 0, 1628 }, { 4, 0, 766 }, { 4, 11, 339 }, - { 5, 10, 905 }, { 7, 11, 259 }, { 7, 0, 829 }, { 4, 11, 759 }, - { 13, 11, 169 }, { 7, 0, 1445 }, { 4, 10, 456 }, { 7, 10, 358 }, - { 7, 10, 1637 }, { 8, 10, 643 }, { 11, 10, 483 }, { 5, 0, 486 }, - { 7, 0, 1349 }, { 5, 11, 688 }, { 7, 11, 712 }, { 7, 0, 1635 }, - { 8, 0, 17 }, { 10, 0, 217 }, { 10, 0, 295 }, { 12, 0, 2 }, - { 12, 11, 2 }, { 10, 0, 558 }, { 22, 10, 56 }, { 4, 11, 278 }, - { 5, 11, 465 }, { 7, 11, 1367 }, { 8, 11, 482 }, { 5, 10, 535 }, - { 6, 0, 1362 }, { 6, 0, 1461 }, { 10, 11, 274 }, { 10, 11, 625 }, - { 11, 11, 530 }, { 5, 0, 599 }, { 5, 11, 336 }, { 6, 11, 341 }, - { 6, 11, 478 }, { 6, 11, 1763 }, { 8, 11, 386 }, { 7, 10, 1748 }, - { 9, 11, 151 }, { 6, 0, 1376 }, { 5, 10, 539 }, { 7, 11, 73 }, - { 7, 11, 1971 }, { 11, 11, 283 }, { 9, 0, 93 }, { 11, 0, 474 }, - { 6, 10, 91 }, { 7, 10, 435 }, { 6, 0, 447 }, { 5, 11, 396 }, - { 6, 11, 501 }, { 4, 10, 16 }, { 5, 10, 316 }, { 5, 10, 842 }, - { 6, 10, 370 }, { 6, 10, 1778 }, { 8, 10, 166 }, { 11, 10, 812 }, - { 12, 10, 206 }, { 12, 10, 351 }, { 14, 10, 418 }, { 16, 10, 15 }, - { 16, 10, 34 }, { 18, 10, 3 }, { 19, 10, 3 }, { 19, 10, 7 }, - { 20, 10, 4 }, { 21, 10, 21 }, { 7, 0, 577 }, { 7, 0, 1432 }, - { 9, 0, 475 }, { 9, 0, 505 }, { 9, 0, 526 }, { 9, 0, 609 }, - { 9, 0, 689 }, { 9, 0, 726 }, { 9, 0, 735 }, { 9, 0, 738 }, - { 10, 0, 556 }, { 10, 0, 674 }, { 10, 0, 684 }, { 11, 0, 89 }, - { 11, 0, 202 }, { 11, 0, 272 }, { 11, 0, 380 }, { 11, 0, 415 }, - { 11, 0, 505 }, { 11, 0, 537 }, { 11, 0, 550 }, { 11, 0, 562 }, - { 11, 0, 640 }, { 11, 0, 667 }, { 11, 0, 688 }, { 11, 0, 847 }, - { 11, 0, 927 }, { 11, 0, 930 }, { 11, 0, 940 }, { 12, 0, 144 }, - { 12, 0, 325 }, { 12, 0, 329 }, { 12, 0, 389 }, { 12, 0, 403 }, - { 12, 0, 451 }, { 12, 0, 515 }, { 12, 0, 604 }, { 12, 0, 616 }, - { 12, 0, 626 }, { 13, 0, 66 }, { 13, 0, 131 }, { 13, 0, 167 }, - { 13, 0, 236 }, { 13, 0, 368 }, { 13, 0, 411 }, { 13, 0, 434 }, - { 13, 0, 453 }, { 13, 0, 461 }, { 13, 0, 474 }, { 14, 0, 59 }, - { 14, 0, 60 }, { 14, 0, 139 }, { 14, 0, 152 }, { 14, 0, 276 }, - { 14, 0, 353 }, { 14, 0, 402 }, { 15, 0, 28 }, { 15, 0, 81 }, - { 15, 0, 123 }, { 15, 0, 152 }, { 18, 0, 136 }, { 20, 0, 88 }, - { 4, 11, 929 }, { 5, 11, 799 }, { 8, 11, 46 }, { 14, 0, 307 }, - { 4, 0, 609 }, { 7, 0, 756 }, { 9, 0, 544 }, { 11, 0, 413 }, - { 16, 0, 25 }, { 10, 0, 687 }, { 7, 10, 619 }, { 10, 10, 547 }, - { 11, 10, 122 }, { 12, 10, 601 }, { 4, 0, 930 }, { 5, 0, 947 }, - { 5, 0, 939 }, { 14, 0, 21 }, { 4, 11, 892 }, { 5, 11, 770 }, - { 5, 0, 962 }, { 5, 0, 651 }, { 8, 0, 170 }, { 9, 0, 61 }, - { 9, 0, 63 }, { 10, 0, 23 }, { 10, 0, 37 }, { 10, 0, 834 }, - { 11, 0, 4 }, { 11, 0, 187 }, { 11, 0, 281 }, { 11, 0, 503 }, - { 11, 0, 677 }, { 12, 0, 96 }, { 12, 0, 130 }, { 12, 0, 244 }, - { 14, 0, 5 }, { 14, 0, 40 }, { 14, 0, 162 }, { 14, 0, 202 }, - { 18, 0, 133 }, { 4, 0, 406 }, { 5, 0, 579 }, { 12, 0, 492 }, - { 22, 0, 15 }, { 7, 11, 158 }, { 7, 0, 597 }, { 4, 0, 981 }, - { 4, 10, 888 }, { 4, 10, 149 }, { 10, 10, 368 }, { 4, 0, 545 }, - { 4, 10, 154 }, { 7, 10, 1134 }, { 8, 10, 105 }, { 7, 11, 2001 }, - { 6, 0, 1558 }, { 4, 10, 31 }, { 6, 10, 429 }, { 7, 10, 962 }, - { 9, 10, 458 }, { 11, 10, 691 }, { 4, 10, 312 }, { 7, 10, 1642 }, - { 6, 0, 17 }, { 6, 0, 1304 }, { 7, 0, 16 }, { 7, 0, 1001 }, - { 9, 0, 886 }, { 10, 0, 489 }, { 10, 0, 800 }, { 11, 0, 782 }, - { 12, 0, 320 }, { 13, 0, 467 }, { 14, 0, 145 }, { 14, 0, 387 }, - { 15, 0, 119 }, { 7, 0, 1982 }, { 17, 0, 17 }, { 7, 11, 1461 }, - { 12, 11, 91 }, { 4, 10, 236 }, { 4, 11, 602 }, { 10, 0, 907 }, - { 8, 0, 110 }, { 7, 0, 272 }, { 19, 0, 53 }, { 5, 10, 836 }, - { 5, 10, 857 }, { 6, 10, 1680 }, { 5, 0, 458 }, { 7, 11, 1218 }, - { 8, 11, 303 }, { 7, 0, 1983 }, { 8, 0, 0 }, { 8, 0, 171 }, - { 9, 0, 120 }, { 9, 0, 732 }, { 10, 0, 473 }, { 11, 0, 656 }, - { 11, 0, 998 }, { 18, 0, 0 }, { 18, 0, 2 }, { 19, 0, 21 }, - { 10, 10, 68 }, { 11, 10, 494 }, { 9, 11, 662 }, { 4, 11, 13 }, - { 5, 11, 567 }, { 7, 11, 1498 }, { 9, 11, 124 }, { 11, 11, 521 }, - { 12, 11, 405 }, { 4, 10, 81 }, { 11, 10, 867 }, { 7, 11, 1006 }, - { 7, 11, 800 }, { 7, 11, 1783 }, { 10, 11, 12 }, { 9, 0, 295 }, - { 10, 0, 443 }, { 5, 10, 282 }, { 8, 10, 650 }, { 9, 10, 907 }, - { 4, 11, 735 }, { 4, 11, 170 }, { 4, 10, 775 }, { 7, 11, 323 }, - { 6, 0, 1844 }, { 10, 0, 924 }, { 11, 11, 844 }, { 12, 11, 104 }, - { 12, 11, 625 }, { 5, 11, 304 }, { 7, 11, 1403 }, { 12, 11, 498 }, - { 6, 0, 1232 }, { 4, 0, 519 }, { 10, 0, 70 }, { 12, 0, 26 }, - { 14, 0, 17 }, { 14, 0, 178 }, { 15, 0, 34 }, { 21, 0, 12 }, - { 4, 0, 993 }, { 4, 11, 148 }, { 5, 11, 742 }, { 6, 0, 31 }, - { 7, 0, 491 }, { 7, 0, 530 }, { 8, 0, 592 }, { 11, 0, 53 }, - { 11, 0, 779 }, { 12, 0, 167 }, { 12, 0, 411 }, { 14, 0, 14 }, - { 14, 0, 136 }, { 15, 0, 72 }, { 16, 0, 17 }, { 16, 0, 72 }, - { 5, 0, 907 }, { 6, 0, 733 }, { 5, 11, 111 }, { 4, 10, 71 }, - { 5, 10, 376 }, { 7, 10, 119 }, { 10, 10, 665 }, { 8, 0, 55 }, - { 8, 0, 430 }, { 8, 11, 430 }, { 4, 0, 208 }, { 5, 0, 106 }, - { 6, 0, 531 }, { 8, 0, 408 }, { 9, 0, 188 }, { 10, 0, 572 }, - { 12, 0, 56 }, { 11, 10, 827 }, { 14, 10, 34 }, { 15, 10, 148 }, - { 6, 0, 1693 }, { 5, 11, 444 }, { 4, 10, 479 }, { 12, 0, 441 }, - { 9, 0, 449 }, { 10, 0, 192 }, { 10, 0, 740 }, { 6, 0, 928 }, - { 4, 0, 241 }, { 7, 10, 607 }, { 8, 10, 99 }, { 8, 11, 123 }, - { 15, 11, 6 }, { 16, 11, 7 }, { 6, 11, 285 }, { 8, 11, 654 }, - { 11, 11, 749 }, { 12, 11, 190 }, { 12, 11, 327 }, { 13, 11, 120 }, - { 13, 11, 121 }, { 13, 11, 327 }, { 15, 11, 47 }, { 18, 11, 40 }, - { 4, 10, 41 }, { 5, 10, 74 }, { 7, 10, 1627 }, { 11, 10, 871 }, - { 12, 10, 619 }, { 7, 0, 1525 }, { 11, 10, 329 }, { 11, 10, 965 }, - { 12, 10, 241 }, { 14, 10, 354 }, { 15, 10, 22 }, { 20, 10, 63 }, - { 4, 0, 259 }, { 7, 11, 183 }, { 9, 10, 209 }, { 9, 10, 300 }, - { 5, 11, 937 }, { 7, 11, 100 }, { 5, 10, 98 }, { 4, 0, 173 }, - { 5, 0, 312 }, { 5, 0, 512 }, { 7, 0, 1285 }, { 13, 0, 185 }, - { 7, 0, 1603 }, { 7, 0, 1691 }, { 9, 0, 464 }, { 11, 0, 195 }, - { 12, 0, 279 }, { 12, 0, 448 }, { 14, 0, 11 }, { 19, 0, 102 }, - { 7, 0, 1113 }, { 5, 10, 984 }, { 4, 0, 452 }, { 5, 0, 583 }, - { 7, 0, 720 }, { 4, 0, 547 }, { 5, 0, 817 }, { 6, 0, 433 }, - { 7, 0, 593 }, { 7, 0, 1378 }, { 8, 0, 161 }, { 9, 0, 284 }, - { 10, 0, 313 }, { 11, 0, 886 }, { 8, 0, 722 }, { 4, 10, 182 }, - { 6, 10, 205 }, { 7, 10, 220 }, { 22, 0, 13 }, { 4, 10, 42 }, - { 9, 10, 205 }, { 9, 10, 786 }, { 10, 10, 659 }, { 6, 0, 289 }, - { 7, 0, 1670 }, { 12, 0, 57 }, { 23, 0, 4 }, { 4, 10, 635 }, - { 14, 0, 43 }, { 18, 0, 21 }, { 11, 10, 533 }, { 7, 0, 1694 }, - { 8, 0, 420 }, { 11, 0, 193 }, { 7, 0, 409 }, { 4, 10, 371 }, - { 4, 10, 272 }, { 7, 10, 836 }, { 5, 10, 825 }, { 6, 10, 1640 }, - { 5, 11, 251 }, { 5, 11, 956 }, { 8, 11, 268 }, { 9, 11, 214 }, - { 18, 11, 142 }, { 10, 0, 308 }, { 6, 0, 1863 }, { 13, 11, 37 }, - { 9, 10, 879 }, { 7, 10, 317 }, { 7, 10, 569 }, { 4, 11, 294 }, - { 6, 0, 790 }, { 5, 0, 1002 }, { 8, 0, 745 }, { 5, 11, 346 }, - { 5, 11, 711 }, { 8, 11, 390 }, { 7, 0, 289 }, { 5, 0, 504 }, - { 11, 0, 68 }, { 9, 10, 307 }, { 4, 0, 239 }, { 6, 0, 477 }, - { 7, 0, 1607 }, { 11, 0, 617 }, { 21, 0, 13 }, { 5, 0, 609 }, - { 5, 11, 624 }, { 5, 11, 783 }, { 7, 11, 1998 }, { 7, 11, 2047 }, - { 5, 10, 525 }, { 4, 0, 367 }, { 4, 11, 594 }, { 6, 0, 528 }, - { 5, 10, 493 }, { 4, 10, 174 }, { 7, 10, 911 }, { 8, 10, 417 }, - { 9, 10, 782 }, { 4, 0, 694 }, { 7, 0, 548 }, { 9, 0, 58 }, - { 4, 10, 32 }, { 5, 10, 215 }, { 6, 10, 269 }, { 7, 10, 1782 }, - { 7, 10, 1892 }, { 10, 10, 16 }, { 11, 10, 822 }, { 11, 10, 954 }, - { 13, 10, 481 }, { 12, 0, 687 }, { 7, 0, 1749 }, { 8, 10, 477 }, - { 4, 11, 569 }, { 5, 10, 308 }, { 7, 10, 1088 }, { 4, 0, 661 }, - { 10, 0, 1004 }, { 5, 11, 37 }, { 6, 11, 39 }, { 6, 11, 451 }, - { 7, 11, 218 }, { 7, 11, 667 }, { 7, 11, 1166 }, { 7, 11, 1687 }, - { 8, 11, 662 }, { 16, 11, 2 }, { 9, 0, 445 }, { 12, 0, 53 }, - { 13, 0, 492 }, { 5, 10, 126 }, { 8, 10, 297 }, { 9, 10, 366 }, - { 12, 10, 374 }, { 7, 10, 1551 }, { 11, 10, 361 }, { 20, 0, 74 }, - { 6, 11, 508 }, { 7, 0, 213 }, { 4, 10, 175 }, { 4, 10, 685 }, - { 6, 0, 760 }, { 6, 0, 834 }, { 6, 0, 1248 }, { 7, 11, 453 }, - { 7, 11, 635 }, { 7, 11, 796 }, { 8, 11, 331 }, { 9, 11, 328 }, - { 9, 11, 330 }, { 9, 11, 865 }, { 10, 11, 119 }, { 10, 11, 235 }, - { 11, 11, 111 }, { 11, 11, 129 }, { 11, 11, 240 }, { 12, 11, 31 }, - { 12, 11, 66 }, { 12, 11, 222 }, { 12, 11, 269 }, { 12, 11, 599 }, - { 12, 11, 689 }, { 13, 11, 186 }, { 13, 11, 364 }, { 14, 11, 345 }, - { 7, 0, 1672 }, { 11, 0, 189 }, { 5, 10, 797 }, { 5, 10, 565 }, - { 6, 0, 1548 }, { 6, 11, 98 }, { 7, 11, 585 }, { 7, 11, 702 }, - { 9, 0, 968 }, { 15, 0, 192 }, { 21, 0, 56 }, { 4, 10, 252 }, - { 6, 11, 37 }, { 7, 11, 299 }, { 7, 10, 1068 }, { 7, 11, 1666 }, - { 8, 11, 195 }, { 8, 11, 316 }, { 9, 11, 178 }, { 9, 11, 276 }, - { 9, 11, 339 }, { 9, 11, 536 }, { 10, 11, 102 }, { 10, 11, 362 }, - { 10, 10, 434 }, { 10, 11, 785 }, { 11, 11, 55 }, { 11, 11, 149 }, - { 11, 10, 228 }, { 11, 10, 426 }, { 11, 11, 773 }, { 13, 10, 231 }, - { 13, 11, 416 }, { 13, 11, 419 }, { 14, 11, 38 }, { 14, 11, 41 }, - { 14, 11, 210 }, { 18, 10, 106 }, { 20, 10, 87 }, { 4, 0, 751 }, - { 11, 0, 390 }, { 12, 0, 32 }, { 4, 0, 409 }, { 5, 0, 78 }, - { 11, 11, 458 }, { 12, 11, 15 }, { 12, 11, 432 }, { 7, 0, 1602 }, - { 10, 0, 257 }, { 10, 0, 698 }, { 11, 0, 544 }, { 11, 0, 585 }, - { 12, 0, 212 }, { 13, 0, 307 }, { 5, 10, 231 }, { 7, 10, 601 }, - { 9, 10, 277 }, { 9, 10, 674 }, { 10, 10, 178 }, { 10, 10, 418 }, - { 10, 10, 509 }, { 11, 10, 531 }, { 12, 10, 113 }, { 12, 10, 475 }, - { 13, 10, 99 }, { 14, 10, 428 }, { 6, 0, 473 }, { 17, 0, 105 }, - { 6, 0, 1949 }, { 15, 0, 156 }, { 5, 11, 645 }, { 7, 10, 1591 }, - { 16, 10, 43 }, { 7, 0, 1779 }, { 7, 10, 1683 }, { 4, 11, 290 }, - { 7, 11, 1356 }, { 6, 0, 763 }, { 6, 11, 70 }, { 7, 11, 1292 }, - { 10, 11, 762 }, { 11, 11, 288 }, { 14, 0, 29 }, { 12, 11, 428 }, - { 7, 0, 883 }, { 7, 11, 131 }, { 7, 11, 422 }, { 8, 11, 210 }, - { 12, 11, 573 }, { 6, 0, 488 }, { 4, 10, 399 }, { 5, 10, 119 }, - { 5, 10, 494 }, { 7, 10, 751 }, { 9, 10, 556 }, { 5, 0, 617 }, - { 4, 11, 936 }, { 11, 0, 50 }, { 7, 0, 1518 }, { 11, 0, 694 }, - { 9, 0, 785 }, { 4, 0, 546 }, { 7, 0, 2042 }, { 7, 11, 716 }, - { 13, 11, 97 }, { 13, 11, 251 }, { 4, 11, 653 }, { 17, 0, 22 }, - { 6, 0, 1016 }, { 4, 0, 313 }, { 5, 0, 577 }, { 8, 11, 657 }, - { 8, 0, 184 }, { 13, 0, 433 }, { 7, 0, 935 }, { 6, 0, 720 }, - { 9, 0, 114 }, { 18, 11, 80 }, { 12, 0, 186 }, { 12, 0, 292 }, - { 14, 0, 100 }, { 18, 0, 70 }, { 7, 10, 594 }, { 7, 10, 851 }, - { 7, 10, 1858 }, { 9, 10, 411 }, { 9, 10, 574 }, { 9, 10, 666 }, - { 9, 10, 737 }, { 10, 10, 346 }, { 10, 10, 712 }, { 11, 10, 246 }, - { 11, 10, 432 }, { 11, 10, 517 }, { 11, 10, 647 }, { 11, 10, 679 }, - { 11, 10, 727 }, { 12, 10, 304 }, { 12, 10, 305 }, { 12, 10, 323 }, - { 12, 10, 483 }, { 12, 10, 572 }, { 12, 10, 593 }, { 12, 10, 602 }, - { 13, 10, 95 }, { 13, 10, 101 }, { 13, 10, 171 }, { 13, 10, 315 }, - { 13, 10, 378 }, { 13, 10, 425 }, { 13, 10, 475 }, { 14, 10, 63 }, - { 14, 10, 380 }, { 14, 10, 384 }, { 15, 10, 133 }, { 18, 10, 112 }, - { 20, 10, 72 }, { 7, 10, 1093 }, { 7, 11, 1836 }, { 4, 10, 679 }, - { 9, 10, 203 }, { 11, 0, 402 }, { 12, 0, 109 }, { 12, 0, 431 }, - { 13, 0, 179 }, { 13, 0, 206 }, { 14, 0, 217 }, { 16, 0, 3 }, - { 20, 0, 53 }, { 7, 11, 1368 }, { 8, 11, 232 }, { 8, 11, 361 }, - { 10, 11, 682 }, { 10, 11, 742 }, { 9, 10, 714 }, { 5, 0, 886 }, - { 6, 0, 46 }, { 6, 0, 1790 }, { 7, 0, 14 }, { 7, 0, 732 }, - { 7, 0, 1654 }, { 8, 0, 95 }, { 8, 0, 327 }, { 8, 0, 616 }, - { 9, 0, 892 }, { 10, 0, 598 }, { 10, 0, 769 }, { 11, 0, 134 }, - { 11, 0, 747 }, { 12, 0, 378 }, { 14, 0, 97 }, { 9, 11, 534 }, - { 4, 0, 969 }, { 8, 10, 825 }, { 9, 11, 27 }, { 6, 0, 727 }, - { 14, 11, 12 }, { 5, 0, 1021 }, { 6, 0, 1190 }, { 6, 11, 1657 }, - { 5, 10, 143 }, { 5, 10, 769 }, { 6, 10, 1760 }, { 7, 10, 682 }, - { 7, 10, 1992 }, { 8, 10, 736 }, { 4, 0, 153 }, { 7, 11, 127 }, - { 5, 0, 798 }, { 4, 0, 587 }, { 6, 0, 598 }, { 7, 0, 42 }, - { 8, 0, 695 }, { 10, 0, 212 }, { 11, 0, 158 }, { 14, 0, 196 }, - { 17, 0, 85 }, { 5, 10, 860 }, { 6, 0, 1929 }, { 6, 0, 1933 }, - { 5, 0, 957 }, { 5, 0, 1008 }, { 9, 0, 577 }, { 12, 0, 141 }, - { 6, 10, 422 }, { 7, 10, 0 }, { 7, 10, 1544 }, { 8, 11, 364 }, - { 11, 10, 990 }, { 12, 10, 453 }, { 13, 10, 47 }, { 13, 10, 266 }, - { 6, 0, 1319 }, { 4, 0, 129 }, { 7, 0, 465 }, { 7, 0, 470 }, - { 7, 0, 1057 }, { 7, 0, 1201 }, { 9, 0, 755 }, { 11, 0, 906 }, - { 12, 0, 527 }, { 7, 0, 908 }, { 18, 0, 7 }, { 5, 0, 148 }, - { 8, 0, 450 }, { 5, 10, 515 }, { 9, 10, 131 }, { 7, 10, 1605 }, - { 11, 10, 962 }, { 18, 10, 139 }, { 4, 10, 646 }, { 6, 0, 1166 }, - { 4, 10, 396 }, { 7, 10, 728 }, { 9, 10, 117 }, { 13, 10, 202 }, - { 20, 10, 51 }, { 6, 10, 121 }, { 6, 10, 124 }, { 6, 10, 357 }, - { 7, 10, 1138 }, { 7, 10, 1295 }, { 8, 10, 162 }, { 11, 10, 655 }, - { 14, 0, 374 }, { 14, 11, 374 }, { 10, 0, 253 }, { 11, 0, 1003 }, - { 5, 11, 909 }, { 9, 11, 849 }, { 10, 11, 805 }, { 5, 10, 237 }, - { 7, 11, 525 }, { 7, 11, 1579 }, { 8, 11, 497 }, { 8, 11, 573 }, - { 9, 0, 46 }, { 4, 0, 879 }, { 6, 0, 806 }, { 7, 0, 1868 }, - { 6, 0, 1837 }, { 6, 0, 1846 }, { 6, 0, 730 }, { 6, 0, 881 }, - { 7, 0, 965 }, { 7, 0, 1460 }, { 7, 0, 1604 }, { 7, 11, 193 }, - { 7, 11, 397 }, { 7, 11, 1105 }, { 8, 11, 124 }, { 8, 11, 619 }, - { 9, 11, 305 }, { 10, 11, 264 }, { 11, 11, 40 }, { 12, 11, 349 }, - { 13, 11, 134 }, { 13, 11, 295 }, { 14, 11, 155 }, { 15, 11, 120 }, - { 18, 11, 105 }, { 8, 0, 506 }, { 15, 0, 10 }, { 4, 11, 262 }, - { 7, 11, 342 }, { 7, 10, 571 }, { 7, 10, 1877 }, { 10, 10, 366 }, - { 13, 11, 23 }, { 5, 11, 641 }, { 10, 0, 22 }, { 9, 10, 513 }, - { 10, 10, 39 }, { 12, 10, 122 }, { 12, 10, 187 }, { 7, 11, 1431 }, - { 22, 11, 49 }, { 4, 11, 99 }, { 6, 11, 250 }, { 6, 11, 346 }, - { 8, 11, 127 }, { 10, 11, 81 }, { 6, 0, 2014 }, { 8, 0, 928 }, - { 10, 0, 960 }, { 10, 0, 979 }, { 12, 0, 996 }, { 6, 0, 296 }, - { 4, 11, 915 }, { 5, 11, 75 }, { 9, 11, 517 }, { 10, 11, 470 }, - { 12, 11, 155 }, { 13, 11, 224 }, { 9, 10, 873 }, { 4, 0, 854 }, - { 12, 11, 18 }, { 6, 0, 587 }, { 7, 10, 107 }, { 7, 10, 838 }, - { 8, 10, 550 }, { 10, 10, 401 }, { 11, 0, 636 }, { 15, 0, 145 }, - { 17, 0, 34 }, { 19, 0, 50 }, { 23, 0, 20 }, { 11, 10, 588 }, - { 11, 10, 864 }, { 11, 10, 968 }, { 15, 10, 160 }, { 7, 11, 216 }, - { 7, 0, 982 }, { 10, 0, 32 }, { 15, 0, 56 }, { 5, 10, 768 }, - { 5, 11, 954 }, { 6, 11, 304 }, { 7, 11, 1114 }, { 8, 11, 418 }, - { 10, 11, 345 }, { 11, 11, 341 }, { 11, 11, 675 }, { 13, 11, 40 }, - { 9, 11, 410 }, { 11, 11, 425 }, { 8, 0, 941 }, { 5, 0, 435 }, - { 4, 10, 894 }, { 5, 0, 85 }, { 6, 0, 419 }, { 7, 0, 134 }, - { 7, 0, 305 }, { 7, 0, 361 }, { 7, 0, 1337 }, { 8, 0, 71 }, - { 12, 0, 519 }, { 12, 0, 688 }, { 7, 0, 740 }, { 5, 0, 691 }, - { 7, 0, 345 }, { 9, 0, 94 }, { 12, 0, 169 }, { 5, 0, 183 }, - { 6, 0, 582 }, { 10, 0, 679 }, { 12, 0, 435 }, { 6, 11, 14 }, - { 6, 0, 945 }, { 7, 0, 511 }, { 6, 11, 1708 }, { 5, 11, 113 }, - { 6, 11, 243 }, { 7, 11, 1865 }, { 11, 11, 161 }, { 16, 11, 37 }, - { 17, 11, 99 }, { 4, 11, 274 }, { 9, 0, 539 }, { 7, 0, 1993 }, - { 8, 0, 684 }, { 6, 10, 272 }, { 6, 0, 659 }, { 6, 0, 982 }, - { 4, 10, 9 }, { 5, 10, 128 }, { 7, 10, 368 }, { 11, 10, 480 }, - { 20, 10, 3 }, { 6, 0, 583 }, { 4, 0, 803 }, { 5, 0, 704 }, - { 4, 0, 179 }, { 5, 0, 198 }, { 5, 0, 697 }, { 7, 0, 347 }, - { 7, 0, 971 }, { 8, 0, 181 }, { 10, 0, 711 }, { 7, 11, 166 }, - { 8, 10, 682 }, { 4, 10, 2 }, { 7, 10, 545 }, { 7, 10, 894 }, - { 8, 11, 521 }, { 7, 0, 481 }, { 4, 0, 243 }, { 5, 0, 203 }, - { 7, 0, 19 }, { 7, 0, 71 }, { 7, 0, 113 }, { 10, 0, 405 }, - { 11, 0, 357 }, { 14, 0, 240 }, { 5, 11, 725 }, { 5, 11, 727 }, - { 7, 11, 1811 }, { 6, 0, 826 }, { 9, 11, 304 }, { 7, 0, 1450 }, - { 11, 0, 99 }, { 5, 11, 654 }, { 6, 0, 492 }, { 5, 0, 134 }, - { 6, 0, 408 }, { 6, 0, 495 }, { 7, 0, 1593 }, { 6, 11, 273 }, - { 10, 11, 188 }, { 13, 11, 377 }, { 18, 11, 77 }, { 9, 10, 769 }, - { 12, 10, 185 }, { 7, 11, 410 }, { 14, 0, 4 }, { 4, 0, 665 }, - { 6, 11, 1785 }, { 4, 0, 248 }, { 7, 0, 137 }, { 9, 0, 349 }, - { 5, 10, 530 }, { 14, 10, 113 }, { 7, 0, 1270 }, { 11, 0, 612 }, - { 4, 11, 780 }, { 5, 0, 371 }, { 7, 0, 563 }, { 7, 0, 826 }, - { 6, 0, 1535 }, { 23, 0, 21 }, { 23, 0, 23 }, { 4, 0, 374 }, - { 7, 0, 547 }, { 7, 0, 1700 }, { 7, 0, 1833 }, { 11, 0, 858 }, - { 5, 10, 556 }, { 7, 11, 612 }, { 8, 11, 545 }, { 8, 11, 568 }, - { 8, 11, 642 }, { 9, 11, 717 }, { 10, 11, 541 }, { 10, 11, 763 }, - { 11, 11, 449 }, { 12, 11, 489 }, { 13, 11, 153 }, { 13, 11, 296 }, - { 14, 11, 138 }, { 14, 11, 392 }, { 15, 11, 50 }, { 16, 11, 6 }, - { 16, 11, 12 }, { 20, 11, 9 }, { 9, 0, 311 }, { 13, 0, 42 }, - { 8, 10, 16 }, { 12, 10, 568 }, { 6, 0, 1968 }, { 6, 0, 2027 }, - { 10, 0, 991 }, { 6, 0, 1647 }, { 7, 0, 1552 }, { 7, 0, 2010 }, - { 9, 0, 494 }, { 9, 0, 509 }, { 5, 11, 948 }, { 6, 10, 186 }, - { 9, 10, 426 }, { 6, 0, 769 }, { 6, 0, 642 }, { 4, 10, 585 }, - { 6, 0, 123 }, { 7, 0, 214 }, { 9, 0, 728 }, { 10, 0, 157 }, - { 11, 0, 346 }, { 11, 0, 662 }, { 15, 0, 106 }, { 14, 11, 381 }, - { 7, 0, 1435 }, { 4, 11, 532 }, { 5, 11, 706 }, { 7, 11, 662 }, - { 5, 11, 837 }, { 6, 11, 1651 }, { 4, 10, 93 }, { 5, 10, 252 }, - { 6, 10, 229 }, { 7, 10, 291 }, { 9, 10, 550 }, { 11, 10, 644 }, - { 20, 0, 79 }, { 9, 10, 749 }, { 6, 0, 1425 }, { 9, 10, 162 }, - { 4, 11, 362 }, { 7, 11, 52 }, { 7, 11, 303 }, { 12, 11, 166 }, - { 4, 10, 381 }, { 4, 11, 330 }, { 7, 11, 933 }, { 7, 11, 2012 }, - { 8, 11, 292 }, { 7, 11, 767 }, { 4, 0, 707 }, { 5, 0, 588 }, - { 6, 0, 393 }, { 13, 0, 106 }, { 18, 0, 49 }, { 19, 0, 41 }, - { 6, 0, 211 }, { 7, 0, 1690 }, { 11, 0, 486 }, { 12, 0, 369 }, - { 9, 11, 883 }, { 4, 11, 703 }, { 7, 11, 207 }, { 4, 0, 187 }, - { 5, 0, 184 }, { 5, 0, 690 }, { 7, 0, 1869 }, { 10, 0, 756 }, - { 11, 0, 783 }, { 4, 11, 571 }, { 6, 0, 1382 }, { 5, 0, 175 }, - { 6, 10, 77 }, { 6, 10, 157 }, { 7, 10, 974 }, { 7, 10, 1301 }, - { 7, 10, 1339 }, { 7, 10, 1490 }, { 7, 10, 1873 }, { 9, 10, 628 }, - { 6, 0, 1493 }, { 5, 11, 873 }, { 5, 11, 960 }, { 6, 0, 1007 }, - { 12, 11, 93 }, { 12, 11, 501 }, { 13, 11, 362 }, { 14, 11, 151 }, - { 15, 11, 40 }, { 15, 11, 59 }, { 16, 11, 46 }, { 17, 11, 25 }, - { 18, 11, 14 }, { 18, 11, 134 }, { 19, 11, 25 }, { 19, 11, 69 }, - { 20, 11, 16 }, { 20, 11, 19 }, { 20, 11, 66 }, { 21, 11, 23 }, - { 21, 11, 25 }, { 22, 11, 42 }, { 11, 10, 919 }, { 13, 10, 409 }, - { 6, 0, 219 }, { 5, 0, 582 }, { 6, 0, 1646 }, { 7, 0, 99 }, - { 7, 0, 1962 }, { 7, 0, 1986 }, { 8, 0, 515 }, { 8, 0, 773 }, - { 9, 0, 23 }, { 9, 0, 491 }, { 12, 0, 620 }, { 14, 0, 93 }, - { 5, 0, 851 }, { 5, 11, 33 }, { 6, 11, 470 }, { 7, 11, 1291 }, - { 6, 0, 1278 }, { 7, 11, 1882 }, { 7, 10, 1489 }, { 4, 0, 1000 }, - { 10, 0, 982 }, { 8, 0, 762 }, { 8, 0, 812 }, { 9, 0, 910 }, - { 6, 11, 47 }, { 7, 11, 90 }, { 7, 11, 664 }, { 7, 11, 830 }, - { 7, 11, 1380 }, { 7, 11, 2025 }, { 8, 11, 448 }, { 8, 11, 828 }, - { 4, 0, 98 }, { 4, 0, 940 }, { 6, 0, 1819 }, { 6, 0, 1834 }, - { 6, 0, 1841 }, { 7, 0, 1365 }, { 8, 0, 859 }, { 8, 0, 897 }, - { 8, 0, 918 }, { 9, 0, 422 }, { 9, 0, 670 }, { 10, 0, 775 }, - { 10, 0, 894 }, { 10, 0, 909 }, { 10, 0, 910 }, { 10, 0, 935 }, - { 11, 0, 210 }, { 12, 0, 750 }, { 12, 0, 755 }, { 13, 0, 26 }, - { 13, 0, 457 }, { 13, 0, 476 }, { 16, 0, 100 }, { 16, 0, 109 }, - { 18, 0, 173 }, { 18, 0, 175 }, { 8, 10, 398 }, { 9, 10, 681 }, - { 11, 10, 632 }, { 9, 11, 417 }, { 9, 11, 493 }, { 8, 10, 645 }, - { 10, 0, 906 }, { 6, 0, 1730 }, { 6, 10, 20 }, { 5, 11, 1019 }, - { 6, 0, 1185 }, { 10, 0, 40 }, { 8, 10, 769 }, { 9, 0, 147 }, - { 6, 11, 208 }, { 12, 0, 650 }, { 5, 0, 209 }, { 6, 0, 30 }, - { 11, 0, 56 }, { 11, 0, 305 }, { 4, 0, 553 }, { 10, 11, 344 }, - { 6, 11, 68 }, { 7, 11, 398 }, { 7, 11, 448 }, { 7, 11, 1629 }, - { 7, 11, 1813 }, { 8, 11, 387 }, { 8, 11, 442 }, { 9, 11, 710 }, - { 10, 11, 282 }, { 10, 11, 722 }, { 5, 0, 597 }, { 14, 0, 20 }, - { 14, 11, 20 }, { 7, 0, 1614 }, { 7, 10, 1757 }, { 4, 0, 150 }, - { 5, 0, 303 }, { 6, 0, 327 }, { 7, 10, 937 }, { 16, 0, 49 }, - { 7, 10, 1652 }, { 16, 11, 49 }, { 8, 0, 192 }, { 10, 0, 78 }, - { 13, 0, 359 }, { 7, 0, 786 }, { 15, 0, 134 }, { 6, 0, 1638 }, - { 7, 0, 79 }, { 7, 0, 496 }, { 9, 0, 138 }, { 10, 0, 336 }, - { 11, 0, 12 }, { 12, 0, 412 }, { 12, 0, 440 }, { 14, 0, 305 }, - { 8, 11, 491 }, { 4, 10, 579 }, { 5, 10, 226 }, { 5, 10, 323 }, - { 7, 10, 960 }, { 7, 0, 204 }, { 7, 0, 415 }, { 8, 0, 42 }, - { 10, 0, 85 }, { 11, 0, 564 }, { 4, 0, 614 }, { 4, 11, 403 }, - { 5, 11, 441 }, { 7, 11, 450 }, { 11, 11, 101 }, { 12, 11, 193 }, - { 13, 11, 430 }, { 7, 11, 1927 }, { 7, 11, 1330 }, { 4, 0, 3 }, - { 5, 0, 247 }, { 5, 0, 644 }, { 7, 0, 744 }, { 7, 0, 1207 }, - { 7, 0, 1225 }, { 7, 0, 1909 }, { 18, 0, 147 }, { 8, 0, 942 }, - { 4, 0, 1019 }, { 6, 0, 2023 }, { 5, 11, 679 }, { 5, 10, 973 }, - { 5, 0, 285 }, { 9, 0, 67 }, { 13, 0, 473 }, { 15, 0, 82 }, - { 7, 11, 328 }, { 9, 11, 326 }, { 23, 0, 8 }, { 6, 10, 135 }, - { 7, 10, 1176 }, { 7, 11, 1128 }, { 6, 0, 1309 }, { 7, 11, 1796 }, - { 7, 10, 314 }, { 4, 11, 574 }, { 7, 11, 350 }, { 7, 11, 1024 }, - { 8, 11, 338 }, { 9, 11, 677 }, { 10, 11, 808 }, { 11, 11, 508 }, - { 7, 11, 818 }, { 17, 11, 14 }, { 17, 11, 45 }, { 18, 11, 75 }, - { 20, 11, 18 }, { 18, 10, 4 }, { 7, 11, 1081 }, { 4, 0, 29 }, - { 6, 0, 532 }, { 7, 0, 1628 }, { 7, 0, 1648 }, { 9, 0, 350 }, - { 10, 0, 433 }, { 11, 0, 97 }, { 11, 0, 557 }, { 11, 0, 745 }, - { 12, 0, 289 }, { 12, 0, 335 }, { 12, 0, 348 }, { 12, 0, 606 }, - { 13, 0, 116 }, { 13, 0, 233 }, { 13, 0, 466 }, { 14, 0, 181 }, - { 14, 0, 209 }, { 14, 0, 232 }, { 14, 0, 236 }, { 14, 0, 300 }, - { 16, 0, 41 }, { 20, 0, 97 }, { 7, 0, 318 }, { 6, 10, 281 }, - { 8, 10, 282 }, { 8, 10, 480 }, { 8, 10, 499 }, { 9, 10, 198 }, - { 10, 10, 143 }, { 10, 10, 169 }, { 10, 10, 211 }, { 10, 10, 417 }, - { 10, 10, 574 }, { 11, 10, 147 }, { 11, 10, 395 }, { 12, 10, 75 }, - { 12, 10, 407 }, { 12, 10, 608 }, { 13, 10, 500 }, { 14, 10, 251 }, - { 7, 11, 1676 }, { 7, 11, 2037 }, { 7, 0, 1692 }, { 5, 0, 501 }, - { 7, 0, 1704 }, { 9, 0, 553 }, { 11, 0, 520 }, { 12, 0, 557 }, - { 13, 0, 249 }, { 6, 0, 1527 }, { 14, 0, 324 }, { 15, 0, 55 }, - { 15, 0, 80 }, { 14, 11, 324 }, { 15, 11, 55 }, { 15, 11, 80 }, - { 7, 10, 1776 }, { 8, 0, 988 }, { 9, 11, 297 }, { 4, 10, 419 }, - { 14, 0, 223 }, { 11, 11, 234 }, { 7, 0, 1123 }, { 12, 0, 508 }, - { 14, 0, 102 }, { 14, 0, 226 }, { 16, 0, 57 }, { 4, 10, 138 }, - { 7, 10, 1012 }, { 7, 10, 1280 }, { 9, 10, 76 }, { 7, 0, 1764 }, - { 5, 10, 29 }, { 12, 10, 638 }, { 6, 0, 2015 }, { 6, 0, 1599 }, - { 10, 11, 56 }, { 6, 11, 306 }, { 7, 11, 1140 }, { 7, 11, 1340 }, - { 8, 11, 133 }, { 10, 11, 449 }, { 11, 11, 1011 }, { 6, 10, 1710 }, - { 7, 10, 2038 }, { 7, 11, 1763 }, { 12, 11, 310 }, { 6, 0, 129 }, - { 4, 10, 17 }, { 5, 10, 23 }, { 7, 10, 995 }, { 11, 10, 383 }, - { 11, 10, 437 }, { 12, 10, 460 }, { 12, 10, 532 }, { 5, 11, 329 }, - { 8, 11, 260 }, { 5, 10, 862 }, { 4, 0, 534 }, { 6, 0, 811 }, - { 7, 0, 626 }, { 4, 11, 657 }, { 4, 0, 25 }, { 5, 0, 60 }, - { 6, 0, 504 }, { 7, 0, 614 }, { 7, 0, 1155 }, { 12, 0, 0 }, - { 24, 11, 7 }, { 7, 0, 1248 }, { 11, 0, 621 }, { 11, 0, 702 }, - { 9, 0, 321 }, { 8, 10, 70 }, { 12, 10, 171 }, { 13, 10, 272 }, - { 10, 10, 233 }, { 11, 10, 76 }, { 4, 0, 379 }, { 7, 0, 1397 }, - { 6, 10, 442 }, { 5, 11, 66 }, { 7, 11, 1896 }, { 8, 11, 288 }, - { 6, 11, 1643 }, { 6, 10, 1709 }, { 4, 11, 21 }, { 5, 11, 91 }, - { 5, 11, 570 }, { 5, 11, 648 }, { 5, 11, 750 }, { 5, 11, 781 }, - { 6, 11, 54 }, { 6, 11, 112 }, { 6, 11, 402 }, { 6, 11, 1732 }, - { 7, 11, 315 }, { 7, 11, 749 }, { 7, 11, 1347 }, { 7, 11, 1900 }, - { 9, 11, 78 }, { 9, 11, 508 }, { 10, 11, 611 }, { 11, 11, 510 }, - { 11, 11, 728 }, { 13, 11, 36 }, { 14, 11, 39 }, { 16, 11, 83 }, - { 17, 11, 124 }, { 20, 11, 30 }, { 4, 0, 118 }, { 6, 0, 274 }, - { 6, 0, 361 }, { 7, 0, 75 }, { 13, 0, 441 }, { 10, 11, 322 }, - { 10, 11, 719 }, { 11, 11, 407 }, { 19, 10, 119 }, { 12, 11, 549 }, - { 14, 11, 67 }, { 19, 11, 60 }, { 11, 10, 69 }, { 12, 10, 105 }, - { 12, 10, 117 }, { 13, 10, 213 }, { 14, 10, 13 }, { 14, 10, 62 }, - { 14, 10, 177 }, { 14, 10, 421 }, { 15, 10, 19 }, { 18, 10, 141 }, - { 9, 0, 841 }, { 9, 10, 309 }, { 7, 10, 608 }, { 7, 10, 976 }, - { 8, 11, 125 }, { 8, 11, 369 }, { 8, 11, 524 }, { 9, 10, 146 }, - { 10, 10, 206 }, { 10, 11, 486 }, { 10, 10, 596 }, { 11, 11, 13 }, - { 11, 11, 381 }, { 11, 11, 736 }, { 11, 11, 766 }, { 11, 11, 845 }, - { 13, 11, 114 }, { 13, 10, 218 }, { 13, 11, 292 }, { 14, 11, 47 }, - { 14, 10, 153 }, { 12, 0, 693 }, { 7, 11, 759 }, { 5, 0, 314 }, - { 6, 0, 221 }, { 7, 0, 419 }, { 10, 0, 650 }, { 11, 0, 396 }, - { 12, 0, 156 }, { 13, 0, 369 }, { 14, 0, 333 }, { 17, 0, 47 }, - { 6, 11, 1684 }, { 6, 11, 1731 }, { 7, 11, 356 }, { 7, 11, 1932 }, - { 8, 11, 54 }, { 8, 11, 221 }, { 9, 11, 225 }, { 9, 11, 356 }, - { 10, 11, 77 }, { 10, 11, 446 }, { 10, 11, 731 }, { 12, 11, 404 }, - { 13, 11, 491 }, { 4, 11, 375 }, { 4, 10, 518 }, { 7, 10, 1136 }, - { 4, 0, 913 }, { 4, 11, 411 }, { 11, 11, 643 }, { 12, 11, 115 }, - { 4, 11, 80 }, { 5, 11, 44 }, { 8, 10, 689 }, { 9, 10, 863 }, - { 10, 0, 880 }, { 4, 10, 18 }, { 7, 10, 145 }, { 7, 10, 444 }, - { 7, 10, 1278 }, { 8, 10, 49 }, { 8, 10, 400 }, { 9, 10, 71 }, - { 9, 10, 250 }, { 10, 10, 459 }, { 12, 10, 160 }, { 16, 10, 24 }, - { 8, 0, 475 }, { 5, 0, 1016 }, { 5, 11, 299 }, { 7, 11, 1083 }, - { 7, 0, 602 }, { 8, 0, 179 }, { 10, 0, 781 }, { 12, 0, 126 }, - { 6, 0, 329 }, { 10, 0, 111 }, { 7, 0, 1864 }, { 4, 11, 219 }, - { 7, 11, 1761 }, { 9, 11, 86 }, { 6, 0, 1888 }, { 6, 0, 1892 }, - { 6, 0, 1901 }, { 6, 0, 1904 }, { 9, 0, 953 }, { 9, 0, 985 }, - { 9, 0, 991 }, { 9, 0, 1001 }, { 12, 0, 818 }, { 12, 0, 846 }, - { 12, 0, 847 }, { 12, 0, 861 }, { 12, 0, 862 }, { 12, 0, 873 }, - { 12, 0, 875 }, { 12, 0, 877 }, { 12, 0, 879 }, { 12, 0, 881 }, - { 12, 0, 884 }, { 12, 0, 903 }, { 12, 0, 915 }, { 12, 0, 926 }, - { 12, 0, 939 }, { 15, 0, 182 }, { 15, 0, 219 }, { 15, 0, 255 }, - { 18, 0, 191 }, { 18, 0, 209 }, { 18, 0, 211 }, { 21, 0, 41 }, - { 5, 11, 328 }, { 7, 11, 918 }, { 9, 0, 780 }, { 12, 0, 82 }, - { 15, 0, 36 }, { 5, 10, 1010 }, { 5, 0, 821 }, { 6, 0, 1687 }, - { 5, 11, 514 }, { 4, 0, 956 }, { 6, 0, 1180 }, { 10, 0, 112 }, - { 5, 10, 87 }, { 7, 10, 313 }, { 7, 10, 1103 }, { 10, 10, 582 }, - { 11, 10, 389 }, { 11, 10, 813 }, { 12, 10, 385 }, { 13, 10, 286 }, - { 14, 10, 124 }, { 18, 10, 108 }, { 5, 0, 71 }, { 7, 0, 1407 }, - { 9, 0, 704 }, { 10, 0, 261 }, { 10, 0, 619 }, { 11, 0, 547 }, - { 11, 0, 619 }, { 15, 0, 157 }, { 4, 0, 531 }, { 5, 0, 455 }, - { 5, 11, 301 }, { 6, 11, 571 }, { 14, 11, 49 }, { 18, 11, 102 }, - { 4, 10, 267 }, { 6, 0, 385 }, { 7, 0, 2008 }, { 9, 0, 337 }, - { 10, 0, 517 }, { 5, 11, 726 }, { 5, 11, 364 }, { 4, 11, 76 }, - { 7, 11, 1550 }, { 9, 11, 306 }, { 9, 11, 430 }, { 9, 11, 663 }, - { 10, 11, 683 }, { 11, 11, 427 }, { 11, 11, 753 }, { 12, 11, 334 }, - { 12, 11, 442 }, { 14, 11, 258 }, { 14, 11, 366 }, { 15, 11, 131 }, - { 6, 0, 1865 }, { 6, 0, 1879 }, { 6, 0, 1881 }, { 6, 0, 1894 }, - { 6, 0, 1908 }, { 9, 0, 915 }, { 9, 0, 926 }, { 9, 0, 940 }, - { 9, 0, 943 }, { 9, 0, 966 }, { 9, 0, 980 }, { 9, 0, 989 }, - { 9, 0, 1005 }, { 9, 0, 1010 }, { 12, 0, 813 }, { 12, 0, 817 }, - { 12, 0, 840 }, { 12, 0, 843 }, { 12, 0, 855 }, { 12, 0, 864 }, - { 12, 0, 871 }, { 12, 0, 872 }, { 12, 0, 899 }, { 12, 0, 905 }, - { 12, 0, 924 }, { 15, 0, 171 }, { 15, 0, 181 }, { 15, 0, 224 }, - { 15, 0, 235 }, { 15, 0, 251 }, { 18, 0, 184 }, { 9, 11, 52 }, - { 5, 0, 16 }, { 6, 0, 86 }, { 6, 0, 603 }, { 7, 0, 292 }, - { 7, 0, 561 }, { 8, 0, 257 }, { 8, 0, 382 }, { 9, 0, 721 }, - { 9, 0, 778 }, { 11, 0, 581 }, { 12, 0, 466 }, { 4, 0, 486 }, - { 5, 0, 491 }, { 7, 10, 1121 }, { 4, 0, 72 }, { 6, 0, 265 }, - { 7, 0, 1300 }, { 7, 11, 1183 }, { 10, 10, 249 }, { 11, 10, 209 }, - { 4, 10, 561 }, { 9, 11, 519 }, { 4, 11, 656 }, { 4, 10, 760 }, - { 7, 11, 779 }, { 9, 10, 154 }, { 12, 10, 485 }, { 7, 11, 1793 }, - { 7, 11, 144 }, { 8, 10, 255 }, { 5, 0, 621 }, { 4, 10, 368 }, - { 7, 10, 641 }, { 7, 11, 1373 }, { 7, 11, 554 }, { 7, 11, 605 }, - { 13, 11, 10 }, { 9, 0, 234 }, { 5, 0, 815 }, { 6, 0, 1688 }, - { 6, 0, 1755 }, { 5, 11, 838 }, { 5, 11, 841 }, { 6, 11, 1649 }, - { 7, 0, 1987 }, { 7, 0, 2040 }, { 8, 0, 743 }, { 5, 11, 1012 }, - { 6, 0, 197 }, { 8, 0, 205 }, { 6, 0, 314 }, { 6, 11, 314 }, - { 16, 11, 53 }, { 6, 11, 251 }, { 7, 11, 365 }, { 7, 11, 1357 }, - { 7, 11, 1497 }, { 8, 11, 154 }, { 13, 11, 281 }, { 5, 11, 340 }, - { 6, 0, 452 }, { 7, 0, 312 }, { 10, 0, 219 }, { 10, 0, 589 }, - { 4, 0, 333 }, { 9, 0, 176 }, { 12, 0, 353 }, { 13, 0, 187 }, - { 9, 10, 92 }, { 19, 10, 91 }, { 6, 0, 1110 }, { 11, 0, 47 }, - { 11, 11, 495 }, { 6, 10, 525 }, { 8, 10, 806 }, { 9, 10, 876 }, - { 12, 10, 284 }, { 8, 11, 261 }, { 9, 11, 144 }, { 9, 11, 466 }, - { 10, 11, 370 }, { 12, 11, 470 }, { 13, 11, 144 }, { 14, 11, 348 }, - { 9, 11, 897 }, { 8, 0, 863 }, { 8, 0, 864 }, { 8, 0, 868 }, - { 8, 0, 884 }, { 10, 0, 866 }, { 10, 0, 868 }, { 10, 0, 873 }, - { 10, 0, 911 }, { 10, 0, 912 }, { 10, 0, 944 }, { 12, 0, 727 }, - { 6, 11, 248 }, { 9, 11, 546 }, { 10, 11, 535 }, { 11, 11, 681 }, - { 13, 11, 135 }, { 6, 0, 300 }, { 7, 0, 1515 }, { 6, 0, 1237 }, - { 11, 10, 958 }, { 5, 10, 594 }, { 12, 11, 250 }, { 6, 0, 1685 }, - { 6, 11, 567 }, { 7, 0, 135 }, { 8, 0, 7 }, { 8, 0, 62 }, - { 9, 0, 243 }, { 10, 0, 658 }, { 10, 0, 697 }, { 11, 0, 456 }, - { 11, 0, 756 }, { 9, 0, 395 }, { 10, 0, 79 }, { 6, 10, 1641 }, - { 8, 10, 820 }, { 4, 10, 302 }, { 7, 10, 1766 }, { 6, 11, 174 }, - { 7, 10, 1313 }, { 7, 0, 631 }, { 6, 10, 1674 }, { 6, 11, 395 }, - { 10, 0, 835 }, { 7, 0, 406 }, { 7, 0, 459 }, { 8, 0, 606 }, - { 11, 0, 726 }, { 6, 11, 617 }, { 6, 0, 979 }, { 6, 10, 389 }, - { 7, 10, 149 }, { 9, 10, 142 }, { 10, 10, 94 }, { 5, 11, 878 }, - { 5, 11, 972 }, { 6, 10, 8 }, { 7, 10, 1881 }, { 8, 10, 91 }, - { 8, 11, 511 }, { 5, 0, 612 }, { 4, 11, 351 }, { 4, 0, 372 }, - { 7, 0, 482 }, { 8, 0, 158 }, { 9, 0, 602 }, { 9, 0, 615 }, - { 10, 0, 245 }, { 10, 0, 678 }, { 10, 0, 744 }, { 11, 0, 248 }, - { 11, 0, 806 }, { 5, 0, 854 }, { 7, 0, 1991 }, { 4, 11, 286 }, - { 7, 11, 344 }, { 7, 11, 438 }, { 7, 11, 627 }, { 7, 11, 1516 }, - { 8, 11, 40 }, { 9, 11, 56 }, { 9, 11, 294 }, { 10, 11, 30 }, - { 10, 11, 259 }, { 11, 11, 969 }, { 18, 11, 148 }, { 7, 0, 1492 }, - { 5, 11, 259 }, { 7, 11, 414 }, { 7, 11, 854 }, { 14, 11, 107 }, - { 7, 10, 1746 }, { 6, 0, 833 }, { 6, 0, 998 }, { 7, 10, 24 }, - { 6, 0, 750 }, { 7, 0, 1739 }, { 4, 10, 503 }, { 7, 10, 1661 }, - { 5, 10, 130 }, { 7, 10, 1314 }, { 9, 10, 610 }, { 10, 10, 718 }, - { 11, 10, 601 }, { 11, 10, 819 }, { 11, 10, 946 }, { 12, 10, 536 }, - { 10, 10, 149 }, { 11, 10, 280 }, { 14, 10, 336 }, { 4, 11, 738 }, - { 7, 10, 1946 }, { 5, 0, 195 }, { 7, 0, 1685 }, { 7, 0, 1997 }, - { 8, 0, 730 }, { 11, 0, 1006 }, { 23, 11, 17 }, { 5, 11, 866 }, - { 14, 0, 463 }, { 14, 0, 470 }, { 22, 0, 61 }, { 5, 0, 751 }, - { 8, 0, 266 }, { 11, 0, 578 }, { 4, 10, 392 }, { 7, 10, 1597 }, - { 5, 10, 433 }, { 9, 10, 633 }, { 11, 10, 629 }, { 7, 0, 821 }, - { 6, 0, 715 }, { 6, 0, 1325 }, { 5, 11, 116 }, { 6, 0, 868 }, - { 4, 11, 457 }, { 6, 0, 959 }, { 6, 10, 234 }, { 10, 11, 199 }, - { 7, 0, 1053 }, { 7, 10, 1950 }, { 8, 10, 680 }, { 11, 10, 817 }, - { 19, 10, 88 }, { 7, 10, 1222 }, { 10, 10, 386 }, { 5, 0, 950 }, - { 5, 0, 994 }, { 6, 0, 351 }, { 6, 0, 1124 }, { 6, 0, 1081 }, - { 7, 0, 1595 }, { 6, 10, 5 }, { 11, 10, 249 }, { 12, 10, 313 }, - { 16, 10, 66 }, { 17, 10, 26 }, { 20, 0, 59 }, { 5, 11, 527 }, - { 6, 11, 189 }, { 7, 11, 859 }, { 5, 10, 963 }, { 6, 10, 1773 }, - { 11, 11, 104 }, { 11, 11, 554 }, { 15, 11, 60 }, { 15, 11, 125 }, - { 7, 0, 47 }, { 9, 0, 684 }, { 6, 11, 116 }, { 6, 0, 1606 }, - { 6, 0, 777 }, { 7, 0, 1020 }, { 8, 10, 509 }, { 8, 10, 792 }, - { 7, 0, 1094 }, { 4, 0, 350 }, { 5, 11, 487 }, { 4, 11, 86 }, - { 5, 11, 667 }, { 5, 11, 753 }, { 6, 11, 316 }, { 6, 11, 455 }, - { 7, 11, 946 }, { 7, 0, 1812 }, { 13, 0, 259 }, { 13, 0, 356 }, - { 14, 0, 242 }, { 19, 0, 114 }, { 4, 10, 931 }, { 5, 0, 967 }, - { 4, 0, 473 }, { 7, 0, 623 }, { 8, 0, 808 }, { 9, 0, 871 }, - { 9, 0, 893 }, { 11, 0, 38 }, { 11, 0, 431 }, { 12, 0, 112 }, - { 12, 0, 217 }, { 12, 0, 243 }, { 12, 0, 562 }, { 12, 0, 663 }, - { 12, 0, 683 }, { 13, 0, 141 }, { 13, 0, 197 }, { 13, 0, 227 }, - { 13, 0, 406 }, { 13, 0, 487 }, { 14, 0, 156 }, { 14, 0, 203 }, - { 14, 0, 224 }, { 14, 0, 256 }, { 18, 0, 58 }, { 22, 0, 0 }, - { 10, 0, 286 }, { 7, 10, 943 }, { 11, 10, 614 }, { 7, 10, 1837 }, - { 22, 11, 45 }, { 4, 0, 798 }, { 4, 0, 222 }, { 7, 0, 286 }, - { 8, 0, 629 }, { 4, 11, 79 }, { 7, 11, 1773 }, { 10, 11, 450 }, - { 11, 11, 589 }, { 13, 11, 332 }, { 13, 11, 493 }, { 14, 11, 183 }, - { 14, 11, 334 }, { 14, 11, 362 }, { 14, 11, 368 }, { 14, 11, 376 }, - { 14, 11, 379 }, { 19, 11, 90 }, { 19, 11, 103 }, { 19, 11, 127 }, - { 20, 11, 90 }, { 5, 0, 337 }, { 11, 0, 513 }, { 11, 0, 889 }, - { 11, 0, 961 }, { 12, 0, 461 }, { 13, 0, 79 }, { 15, 0, 121 }, - { 4, 10, 90 }, { 5, 10, 545 }, { 7, 10, 754 }, { 9, 10, 186 }, - { 10, 10, 72 }, { 10, 10, 782 }, { 11, 10, 577 }, { 11, 10, 610 }, - { 12, 10, 354 }, { 12, 10, 362 }, { 12, 10, 595 }, { 13, 0, 306 }, - { 8, 0, 146 }, { 7, 0, 1646 }, { 9, 10, 329 }, { 11, 10, 254 }, - { 13, 11, 124 }, { 4, 0, 465 }, { 7, 0, 1663 }, { 4, 0, 525 }, - { 5, 11, 663 }, { 10, 0, 299 }, { 18, 0, 74 }, { 9, 10, 187 }, - { 11, 10, 1016 }, { 17, 10, 44 }, { 7, 0, 165 }, { 7, 0, 919 }, - { 4, 10, 506 }, { 8, 10, 517 }, { 5, 10, 295 }, { 7, 10, 1680 }, - { 5, 11, 846 }, { 6, 0, 1064 }, { 5, 11, 378 }, { 7, 11, 1402 }, - { 7, 11, 1414 }, { 8, 11, 465 }, { 9, 11, 286 }, { 10, 11, 185 }, - { 10, 11, 562 }, { 10, 11, 635 }, { 11, 11, 31 }, { 11, 11, 393 }, - { 12, 11, 456 }, { 13, 11, 312 }, { 18, 11, 65 }, { 18, 11, 96 }, - { 19, 11, 89 }, { 4, 0, 596 }, { 7, 10, 987 }, { 9, 10, 688 }, - { 10, 10, 522 }, { 11, 10, 788 }, { 12, 10, 566 }, { 6, 0, 82 }, - { 7, 0, 138 }, { 7, 0, 517 }, { 7, 0, 1741 }, { 11, 0, 238 }, - { 4, 11, 648 }, { 6, 10, 1775 }, { 7, 0, 1233 }, { 7, 10, 700 }, - { 7, 10, 940 }, { 8, 10, 514 }, { 9, 10, 116 }, { 9, 10, 535 }, - { 10, 10, 118 }, { 11, 10, 107 }, { 11, 10, 148 }, { 11, 10, 922 }, - { 12, 10, 254 }, { 12, 10, 421 }, { 14, 10, 238 }, { 4, 0, 962 }, - { 6, 0, 1824 }, { 8, 0, 894 }, { 12, 0, 708 }, { 12, 0, 725 }, - { 14, 0, 451 }, { 20, 0, 94 }, { 22, 0, 59 }, { 22, 0, 62 }, - { 5, 11, 945 }, { 6, 11, 1656 }, { 6, 11, 1787 }, { 7, 11, 167 }, - { 8, 11, 824 }, { 9, 11, 391 }, { 10, 11, 375 }, { 11, 11, 185 }, - { 5, 0, 495 }, { 7, 0, 834 }, { 9, 0, 733 }, { 11, 0, 378 }, - { 4, 10, 743 }, { 7, 11, 1273 }, { 6, 0, 1204 }, { 7, 11, 1645 }, - { 8, 11, 352 }, { 9, 11, 249 }, { 11, 10, 292 }, { 5, 0, 559 }, - { 4, 11, 152 }, { 9, 0, 499 }, { 10, 0, 341 }, { 15, 0, 144 }, - { 19, 0, 49 }, { 7, 10, 1283 }, { 9, 10, 227 }, { 11, 10, 325 }, - { 11, 10, 408 }, { 14, 10, 180 }, { 18, 10, 47 }, { 6, 0, 21 }, - { 6, 0, 1737 }, { 7, 0, 1444 }, { 8, 0, 224 }, { 5, 11, 1006 }, - { 7, 0, 1446 }, { 9, 0, 97 }, { 17, 0, 15 }, { 5, 10, 81 }, - { 7, 10, 146 }, { 7, 10, 1342 }, { 8, 10, 53 }, { 8, 10, 561 }, - { 8, 10, 694 }, { 8, 10, 754 }, { 9, 10, 115 }, { 9, 10, 894 }, - { 10, 10, 462 }, { 10, 10, 813 }, { 11, 10, 230 }, { 11, 10, 657 }, - { 11, 10, 699 }, { 11, 10, 748 }, { 12, 10, 119 }, { 12, 10, 200 }, - { 12, 10, 283 }, { 14, 10, 273 }, { 5, 10, 408 }, { 9, 10, 747 }, - { 7, 11, 431 }, { 7, 11, 832 }, { 6, 0, 729 }, { 6, 0, 953 }, - { 4, 0, 727 }, { 8, 0, 565 }, { 5, 11, 351 }, { 7, 11, 264 }, - { 8, 11, 565 }, { 6, 0, 1948 }, { 5, 0, 519 }, { 5, 11, 40 }, - { 7, 11, 598 }, { 7, 11, 1638 }, { 8, 11, 78 }, { 9, 11, 166 }, - { 9, 11, 640 }, { 9, 11, 685 }, { 9, 11, 773 }, { 11, 11, 215 }, - { 13, 11, 65 }, { 14, 11, 172 }, { 14, 11, 317 }, { 17, 11, 6 }, - { 8, 11, 60 }, { 9, 11, 343 }, { 11, 11, 769 }, { 9, 11, 455 }, - { 6, 0, 1193 }, { 12, 0, 790 }, { 7, 11, 1951 }, { 8, 11, 765 }, - { 8, 11, 772 }, { 12, 11, 671 }, { 7, 11, 108 }, { 8, 11, 219 }, - { 8, 11, 388 }, { 9, 11, 639 }, { 9, 11, 775 }, { 11, 11, 275 }, - { 12, 11, 464 }, { 4, 11, 468 }, { 7, 10, 30 }, { 8, 10, 86 }, - { 8, 10, 315 }, { 8, 10, 700 }, { 9, 10, 576 }, { 9, 10, 858 }, - { 11, 10, 310 }, { 11, 10, 888 }, { 11, 10, 904 }, { 12, 10, 361 }, - { 13, 10, 248 }, { 5, 11, 15 }, { 6, 11, 56 }, { 7, 11, 1758 }, - { 8, 11, 500 }, { 9, 11, 730 }, { 11, 11, 331 }, { 13, 11, 150 }, - { 14, 11, 282 }, { 4, 0, 402 }, { 7, 0, 2 }, { 8, 0, 323 }, - { 8, 0, 479 }, { 10, 10, 839 }, { 11, 0, 580 }, { 14, 0, 201 }, - { 5, 0, 59 }, { 7, 0, 672 }, { 9, 10, 617 }, { 18, 0, 34 }, - { 6, 11, 1886 }, { 4, 0, 961 }, { 8, 0, 896 }, { 6, 0, 1285 }, - { 5, 11, 205 }, { 6, 11, 438 }, { 9, 11, 711 }, { 6, 10, 428 }, - { 7, 10, 524 }, { 8, 10, 169 }, { 8, 10, 234 }, { 9, 10, 480 }, - { 10, 10, 646 }, { 20, 0, 46 }, { 13, 0, 479 }, { 5, 11, 534 }, - { 6, 0, 2019 }, { 6, 10, 1648 }, { 4, 0, 85 }, { 7, 0, 549 }, - { 7, 10, 1205 }, { 10, 10, 637 }, { 4, 0, 663 }, { 5, 0, 94 }, - { 7, 11, 235 }, { 7, 11, 1475 }, { 15, 11, 68 }, { 18, 11, 120 }, - { 6, 11, 443 }, { 9, 11, 237 }, { 9, 11, 571 }, { 9, 11, 695 }, - { 10, 11, 139 }, { 11, 11, 715 }, { 12, 11, 417 }, { 13, 11, 421 }, - { 4, 0, 783 }, { 4, 0, 682 }, { 8, 0, 65 }, { 9, 10, 39 }, - { 10, 10, 166 }, { 11, 10, 918 }, { 12, 10, 635 }, { 20, 10, 10 }, - { 22, 10, 27 }, { 22, 10, 43 }, { 22, 10, 52 }, { 6, 0, 11 }, - { 7, 0, 187 }, { 4, 0, 522 }, { 4, 0, 52 }, { 7, 0, 661 }, - { 4, 0, 383 }, { 5, 0, 520 }, { 7, 11, 546 }, { 11, 0, 343 }, - { 14, 0, 127 }, { 4, 11, 578 }, { 7, 10, 157 }, { 7, 11, 624 }, - { 7, 11, 916 }, { 8, 10, 279 }, { 10, 11, 256 }, { 11, 11, 87 }, - { 11, 11, 703 }, { 6, 10, 604 }, { 4, 0, 281 }, { 5, 0, 38 }, - { 7, 0, 194 }, { 7, 0, 668 }, { 7, 0, 1893 }, { 9, 0, 397 }, - { 7, 10, 945 }, { 11, 10, 713 }, { 11, 10, 744 }, { 11, 10, 1022 }, - { 9, 0, 635 }, { 11, 0, 559 }, { 5, 11, 923 }, { 7, 11, 490 }, - { 12, 11, 553 }, { 13, 11, 100 }, { 14, 11, 118 }, { 15, 11, 75 }, - { 4, 0, 975 }, { 4, 10, 567 }, { 9, 10, 859 }, { 7, 10, 1846 }, - { 7, 11, 1846 }, { 8, 10, 628 }, { 8, 11, 628 }, { 20, 0, 116 }, - { 10, 11, 750 }, { 14, 0, 51 }, { 14, 11, 51 }, { 15, 11, 7 }, - { 20, 11, 20 }, { 4, 0, 858 }, { 6, 0, 1075 }, { 4, 11, 924 }, - { 5, 10, 762 }, { 8, 0, 535 }, { 5, 0, 448 }, { 10, 10, 784 }, - { 13, 10, 191 }, { 5, 10, 298 }, { 7, 0, 610 }, { 7, 0, 1501 }, - { 7, 10, 633 }, { 7, 10, 905 }, { 7, 10, 909 }, { 7, 10, 1538 }, - { 9, 10, 767 }, { 12, 10, 636 }, { 4, 11, 265 }, { 7, 11, 807 }, - { 7, 11, 950 }, { 5, 11, 93 }, { 12, 11, 267 }, { 16, 11, 26 }, - { 8, 0, 191 }, { 11, 10, 301 }, { 7, 10, 1970 }, { 7, 0, 267 }, - { 4, 0, 319 }, { 5, 0, 699 }, { 10, 0, 673 }, { 6, 0, 336 }, - { 7, 0, 92 }, { 7, 0, 182 }, { 8, 0, 453 }, { 8, 0, 552 }, - { 9, 0, 204 }, { 9, 0, 285 }, { 10, 0, 99 }, { 11, 0, 568 }, - { 11, 0, 950 }, { 12, 0, 94 }, { 16, 0, 20 }, { 16, 0, 70 }, - { 19, 0, 55 }, { 12, 10, 644 }, { 16, 10, 90 }, { 6, 0, 551 }, - { 7, 0, 1308 }, { 7, 10, 845 }, { 7, 11, 994 }, { 8, 10, 160 }, - { 9, 10, 318 }, { 19, 11, 1 }, { 19, 11, 26 }, { 22, 11, 9 }, - { 7, 0, 1406 }, { 9, 0, 218 }, { 13, 0, 222 }, { 5, 0, 256 }, - { 10, 0, 69 }, { 5, 11, 233 }, { 5, 11, 320 }, { 6, 11, 140 }, - { 7, 11, 330 }, { 8, 11, 295 }, { 6, 0, 1980 }, { 8, 0, 952 }, - { 4, 0, 833 }, { 9, 11, 678 }, { 5, 11, 978 }, { 4, 11, 905 }, - { 6, 11, 1701 }, { 9, 11, 843 }, { 10, 10, 735 }, { 8, 10, 76 }, - { 17, 0, 39 }, { 20, 0, 36 }, { 18, 0, 81 }, { 18, 11, 81 }, - { 14, 0, 352 }, { 17, 0, 53 }, { 18, 0, 146 }, { 18, 0, 152 }, - { 19, 0, 11 }, { 22, 0, 54 }, { 7, 0, 634 }, { 10, 10, 841 }, - { 4, 0, 618 }, { 4, 0, 339 }, { 7, 0, 259 }, { 17, 0, 73 }, - { 4, 11, 275 }, { 12, 11, 376 }, { 4, 11, 509 }, { 7, 11, 273 }, - { 11, 11, 377 }, { 4, 0, 759 }, { 13, 0, 169 }, { 9, 10, 804 }, - { 6, 10, 96 }, { 7, 10, 1426 }, { 4, 10, 651 }, { 5, 10, 289 }, - { 7, 0, 1075 }, { 8, 10, 35 }, { 9, 10, 511 }, { 10, 10, 767 }, - { 19, 10, 118 }, { 6, 0, 649 }, { 6, 0, 670 }, { 8, 0, 482 }, - { 5, 0, 336 }, { 6, 0, 341 }, { 6, 0, 478 }, { 6, 0, 1763 }, - { 8, 0, 386 }, { 5, 11, 802 }, { 7, 11, 2021 }, { 8, 11, 805 }, - { 14, 11, 94 }, { 15, 11, 65 }, { 16, 11, 4 }, { 16, 11, 77 }, - { 16, 11, 80 }, { 17, 11, 5 }, { 6, 0, 1035 }, { 5, 11, 167 }, - { 5, 11, 899 }, { 6, 11, 410 }, { 9, 11, 777 }, { 6, 11, 1705 }, - { 5, 0, 924 }, { 5, 0, 969 }, { 4, 10, 704 }, { 7, 0, 73 }, - { 7, 11, 10 }, { 7, 10, 1078 }, { 5, 11, 11 }, { 6, 11, 117 }, - { 6, 11, 485 }, { 7, 11, 1133 }, { 9, 11, 582 }, { 9, 11, 594 }, - { 11, 11, 21 }, { 11, 11, 818 }, { 12, 11, 535 }, { 13, 11, 86 }, - { 7, 0, 1971 }, { 4, 11, 264 }, { 7, 11, 1067 }, { 8, 11, 204 }, - { 8, 11, 385 }, { 11, 11, 953 }, { 6, 0, 1458 }, { 7, 0, 1344 }, - { 5, 0, 396 }, { 6, 0, 501 }, { 4, 10, 720 }, { 5, 10, 306 }, - { 4, 0, 929 }, { 5, 0, 799 }, { 8, 0, 46 }, { 8, 0, 740 }, - { 5, 10, 431 }, { 7, 11, 646 }, { 7, 11, 1730 }, { 11, 11, 446 }, - { 13, 11, 178 }, { 7, 0, 276 }, { 5, 10, 464 }, { 6, 10, 236 }, - { 7, 10, 696 }, { 7, 10, 914 }, { 7, 10, 1108 }, { 7, 10, 1448 }, - { 9, 10, 15 }, { 9, 10, 564 }, { 10, 10, 14 }, { 12, 10, 565 }, - { 13, 10, 449 }, { 14, 10, 53 }, { 15, 10, 13 }, { 16, 10, 64 }, - { 17, 10, 41 }, { 4, 0, 892 }, { 5, 0, 770 }, { 6, 10, 1767 }, - { 12, 10, 194 }, { 17, 10, 107 }, { 7, 0, 158 }, { 5, 10, 840 }, - { 10, 11, 608 }, { 6, 0, 1432 }, { 10, 11, 250 }, { 8, 11, 794 }, - { 9, 11, 400 }, { 10, 11, 298 }, { 14, 11, 228 }, { 23, 0, 25 }, - { 7, 11, 1131 }, { 7, 11, 1468 }, { 7, 0, 2001 }, { 9, 10, 642 }, - { 11, 10, 236 }, { 14, 10, 193 }, { 4, 10, 68 }, { 5, 10, 634 }, - { 6, 10, 386 }, { 7, 10, 794 }, { 8, 10, 273 }, { 9, 10, 563 }, - { 10, 10, 105 }, { 10, 10, 171 }, { 11, 10, 94 }, { 11, 10, 354 }, - { 8, 11, 724 }, { 4, 0, 478 }, { 11, 11, 512 }, { 13, 11, 205 }, - { 19, 11, 30 }, { 22, 11, 36 }, { 23, 11, 19 }, { 7, 0, 1461 }, - { 12, 0, 91 }, { 6, 11, 190 }, { 7, 11, 768 }, { 7, 11, 1170 }, - { 4, 0, 602 }, { 8, 0, 211 }, { 4, 10, 95 }, { 7, 10, 416 }, - { 11, 10, 830 }, { 7, 10, 731 }, { 13, 10, 20 }, { 15, 10, 11 }, - { 6, 0, 1068 }, { 7, 0, 1872 }, { 4, 0, 13 }, { 5, 0, 567 }, - { 7, 0, 1498 }, { 9, 0, 124 }, { 11, 0, 521 }, { 12, 0, 405 }, - { 7, 11, 1023 }, { 7, 0, 1006 }, { 4, 0, 735 }, { 10, 0, 812 }, - { 4, 0, 170 }, { 7, 0, 323 }, { 6, 11, 137 }, { 9, 11, 75 }, - { 9, 11, 253 }, { 10, 11, 194 }, { 10, 11, 444 }, { 5, 0, 304 }, - { 7, 0, 1403 }, { 5, 10, 864 }, { 10, 10, 648 }, { 11, 10, 671 }, - { 15, 10, 46 }, { 7, 11, 1180 }, { 5, 10, 928 }, { 4, 0, 148 }, - { 5, 0, 742 }, { 11, 10, 986 }, { 12, 10, 682 }, { 5, 0, 523 }, - { 7, 11, 1743 }, { 7, 0, 730 }, { 18, 0, 144 }, { 19, 0, 61 }, - { 8, 10, 44 }, { 9, 10, 884 }, { 10, 10, 580 }, { 11, 10, 399 }, - { 11, 10, 894 }, { 15, 10, 122 }, { 5, 11, 760 }, { 7, 11, 542 }, - { 8, 11, 135 }, { 8, 11, 496 }, { 8, 0, 981 }, { 5, 0, 111 }, - { 10, 0, 132 }, { 11, 0, 191 }, { 11, 0, 358 }, { 11, 0, 460 }, - { 7, 11, 319 }, { 7, 11, 355 }, { 7, 11, 763 }, { 10, 11, 389 }, - { 17, 11, 43 }, { 6, 0, 890 }, { 6, 0, 1420 }, { 8, 11, 557 }, - { 5, 10, 518 }, { 5, 0, 444 }, { 7, 0, 1787 }, { 7, 10, 1852 }, - { 8, 0, 123 }, { 15, 0, 6 }, { 16, 0, 7 }, { 6, 0, 2041 }, - { 10, 11, 38 }, { 11, 11, 784 }, { 8, 0, 932 }, { 5, 0, 937 }, - { 7, 0, 100 }, { 6, 0, 995 }, { 4, 11, 58 }, { 5, 11, 286 }, - { 6, 11, 319 }, { 7, 11, 402 }, { 7, 11, 1254 }, { 7, 11, 1903 }, - { 8, 11, 356 }, { 12, 11, 408 }, { 4, 11, 389 }, { 9, 11, 181 }, - { 9, 11, 255 }, { 10, 11, 8 }, { 10, 11, 29 }, { 10, 11, 816 }, - { 11, 11, 311 }, { 11, 11, 561 }, { 12, 11, 67 }, { 13, 11, 181 }, - { 10, 0, 255 }, { 5, 0, 138 }, { 4, 10, 934 }, { 8, 10, 610 }, - { 4, 0, 965 }, { 10, 0, 863 }, { 10, 0, 898 }, { 10, 10, 804 }, - { 10, 10, 832 }, { 12, 0, 631 }, { 8, 10, 96 }, { 9, 10, 36 }, - { 10, 10, 607 }, { 11, 10, 423 }, { 11, 10, 442 }, { 12, 10, 309 }, - { 14, 10, 199 }, { 15, 10, 90 }, { 17, 10, 110 }, { 6, 0, 1394 }, - { 4, 0, 652 }, { 8, 0, 320 }, { 22, 0, 6 }, { 22, 0, 16 }, - { 9, 10, 13 }, { 9, 10, 398 }, { 9, 10, 727 }, { 10, 10, 75 }, - { 10, 10, 184 }, { 10, 10, 230 }, { 10, 10, 564 }, { 10, 10, 569 }, - { 11, 10, 973 }, { 12, 10, 70 }, { 12, 10, 189 }, { 13, 10, 57 }, - { 13, 10, 257 }, { 6, 0, 897 }, { 6, 0, 1333 }, { 4, 0, 692 }, - { 5, 0, 321 }, { 5, 11, 373 }, { 7, 0, 922 }, { 5, 0, 619 }, - { 5, 0, 698 }, { 9, 10, 631 }, { 5, 10, 345 }, { 7, 10, 1016 }, - { 9, 0, 957 }, { 9, 0, 1018 }, { 12, 0, 828 }, { 12, 0, 844 }, - { 12, 0, 897 }, { 12, 0, 901 }, { 12, 0, 943 }, { 15, 0, 180 }, - { 18, 0, 197 }, { 18, 0, 200 }, { 18, 0, 213 }, { 18, 0, 214 }, - { 18, 0, 226 }, { 5, 0, 917 }, { 6, 0, 1659 }, { 7, 0, 1100 }, - { 6, 0, 1173 }, { 6, 0, 1930 }, { 5, 0, 251 }, { 5, 0, 956 }, - { 8, 0, 268 }, { 9, 0, 214 }, { 18, 0, 142 }, { 5, 10, 673 }, - { 9, 10, 850 }, { 4, 10, 287 }, { 5, 10, 1018 }, { 4, 11, 672 }, - { 5, 0, 346 }, { 5, 0, 711 }, { 8, 0, 390 }, { 11, 11, 752 }, - { 11, 11, 885 }, { 5, 10, 34 }, { 10, 10, 724 }, { 12, 10, 444 }, - { 13, 10, 354 }, { 18, 10, 32 }, { 23, 10, 24 }, { 23, 10, 31 }, - { 24, 10, 5 }, { 4, 11, 710 }, { 6, 11, 606 }, { 6, 0, 744 }, - { 6, 10, 382 }, { 5, 11, 145 }, { 4, 10, 329 }, { 7, 11, 884 }, - { 12, 11, 124 }, { 4, 11, 467 }, { 5, 11, 405 }, { 6, 11, 544 }, - { 9, 10, 846 }, { 10, 10, 827 }, { 5, 0, 624 }, { 9, 11, 372 }, - { 15, 11, 2 }, { 19, 11, 10 }, { 19, 11, 18 }, { 4, 11, 387 }, - { 7, 11, 1288 }, { 5, 0, 783 }, { 7, 0, 1998 }, { 7, 0, 2047 }, - { 4, 10, 906 }, { 8, 10, 366 }, { 7, 11, 550 }, { 4, 10, 123 }, - { 4, 10, 649 }, { 5, 10, 605 }, { 7, 10, 1509 }, { 8, 10, 36 }, - { 6, 0, 1125 }, { 4, 0, 594 }, { 5, 10, 767 }, { 7, 11, 1227 }, - { 8, 11, 467 }, { 4, 11, 576 }, { 7, 11, 1263 }, { 4, 0, 268 }, - { 7, 0, 1534 }, { 7, 11, 1534 }, { 4, 10, 273 }, { 5, 10, 658 }, - { 5, 11, 919 }, { 5, 10, 995 }, { 6, 11, 1673 }, { 5, 0, 563 }, - { 6, 10, 72 }, { 7, 10, 1345 }, { 4, 11, 82 }, { 5, 11, 333 }, - { 5, 11, 904 }, { 6, 11, 207 }, { 7, 11, 325 }, { 7, 11, 1726 }, - { 8, 11, 101 }, { 10, 11, 778 }, { 11, 11, 220 }, { 5, 0, 37 }, - { 6, 0, 39 }, { 6, 0, 451 }, { 7, 0, 218 }, { 7, 0, 667 }, - { 7, 0, 1166 }, { 7, 0, 1687 }, { 8, 0, 662 }, { 16, 0, 2 }, - { 5, 10, 589 }, { 6, 0, 1332 }, { 5, 11, 903 }, { 6, 0, 508 }, - { 5, 10, 117 }, { 6, 10, 514 }, { 6, 10, 541 }, { 7, 10, 1164 }, - { 7, 10, 1436 }, { 8, 10, 220 }, { 8, 10, 648 }, { 10, 10, 688 }, - { 11, 10, 560 }, { 12, 11, 147 }, { 6, 11, 555 }, { 7, 11, 485 }, - { 5, 10, 686 }, { 7, 0, 453 }, { 7, 0, 635 }, { 7, 0, 796 }, - { 8, 0, 331 }, { 9, 0, 330 }, { 9, 0, 865 }, { 10, 0, 119 }, - { 10, 0, 235 }, { 11, 0, 111 }, { 11, 0, 129 }, { 11, 0, 240 }, - { 12, 0, 31 }, { 12, 0, 66 }, { 12, 0, 222 }, { 12, 0, 269 }, - { 12, 0, 599 }, { 12, 0, 684 }, { 12, 0, 689 }, { 12, 0, 691 }, - { 14, 0, 345 }, { 7, 0, 1834 }, { 4, 11, 705 }, { 7, 11, 615 }, - { 10, 11, 251 }, { 8, 11, 345 }, { 9, 0, 527 }, { 6, 0, 98 }, - { 7, 0, 702 }, { 7, 0, 991 }, { 11, 0, 576 }, { 14, 0, 74 }, - { 7, 10, 196 }, { 10, 10, 765 }, { 11, 10, 347 }, { 11, 10, 552 }, - { 11, 10, 790 }, { 12, 10, 263 }, { 13, 10, 246 }, { 13, 10, 270 }, - { 13, 10, 395 }, { 14, 10, 176 }, { 14, 10, 190 }, { 14, 10, 398 }, - { 14, 10, 412 }, { 15, 10, 32 }, { 15, 10, 63 }, { 16, 10, 88 }, - { 19, 10, 105 }, { 6, 11, 90 }, { 13, 0, 84 }, { 13, 0, 122 }, - { 6, 0, 37 }, { 7, 0, 299 }, { 7, 0, 1666 }, { 8, 0, 195 }, - { 8, 0, 316 }, { 9, 0, 178 }, { 9, 0, 276 }, { 9, 0, 339 }, - { 9, 0, 536 }, { 10, 0, 102 }, { 10, 0, 362 }, { 10, 0, 785 }, - { 11, 0, 55 }, { 11, 0, 149 }, { 11, 0, 773 }, { 13, 0, 416 }, - { 13, 0, 419 }, { 14, 0, 38 }, { 14, 0, 41 }, { 14, 0, 210 }, - { 5, 10, 381 }, { 7, 10, 1792 }, { 7, 11, 813 }, { 12, 11, 497 }, - { 13, 11, 56 }, { 7, 10, 616 }, { 10, 10, 413 }, { 5, 0, 645 }, - { 6, 11, 125 }, { 7, 11, 1277 }, { 4, 0, 290 }, { 6, 0, 70 }, - { 7, 0, 1292 }, { 10, 0, 762 }, { 11, 0, 288 }, { 6, 10, 120 }, - { 7, 10, 1188 }, { 7, 10, 1710 }, { 8, 10, 286 }, { 9, 10, 667 }, - { 11, 10, 592 }, { 11, 10, 730 }, { 7, 11, 1784 }, { 7, 0, 1315 }, - { 7, 11, 1315 }, { 6, 0, 1955 }, { 7, 10, 1146 }, { 7, 0, 131 }, - { 7, 0, 422 }, { 8, 0, 210 }, { 12, 0, 573 }, { 4, 10, 352 }, - { 7, 10, 687 }, { 11, 0, 797 }, { 15, 0, 38 }, { 14, 0, 179 }, - { 15, 0, 151 }, { 22, 0, 11 }, { 7, 0, 488 }, { 4, 10, 192 }, - { 5, 10, 49 }, { 6, 10, 200 }, { 6, 10, 293 }, { 6, 10, 1696 }, - { 4, 0, 936 }, { 7, 11, 703 }, { 6, 11, 160 }, { 7, 11, 1106 }, - { 9, 11, 770 }, { 10, 11, 618 }, { 11, 11, 112 }, { 12, 11, 413 }, - { 5, 0, 453 }, { 6, 0, 441 }, { 7, 0, 595 }, { 4, 10, 650 }, - { 4, 10, 147 }, { 6, 0, 991 }, { 6, 0, 1182 }, { 12, 11, 271 }, - { 17, 11, 109 }, { 5, 10, 934 }, { 12, 11, 221 }, { 4, 0, 653 }, - { 7, 0, 505 }, { 7, 0, 523 }, { 6, 0, 903 }, { 7, 11, 479 }, - { 7, 11, 304 }, { 9, 11, 646 }, { 9, 11, 862 }, { 10, 11, 262 }, - { 11, 11, 696 }, { 12, 11, 208 }, { 15, 11, 79 }, { 19, 11, 108 }, - { 18, 0, 80 }, { 7, 11, 981 }, { 14, 0, 432 }, { 4, 0, 314 }, - { 9, 11, 152 }, { 7, 0, 1368 }, { 8, 0, 232 }, { 8, 0, 361 }, - { 10, 0, 682 }, { 10, 0, 742 }, { 7, 11, 1586 }, { 9, 0, 534 }, - { 4, 11, 434 }, { 11, 11, 663 }, { 12, 11, 210 }, { 13, 11, 166 }, - { 13, 11, 310 }, { 14, 11, 373 }, { 19, 11, 43 }, { 7, 11, 1091 }, - { 7, 11, 1765 }, { 6, 11, 550 }, { 7, 11, 652 }, { 9, 0, 27 }, - { 14, 0, 12 }, { 4, 10, 637 }, { 5, 11, 553 }, { 7, 11, 766 }, - { 10, 11, 824 }, { 7, 11, 737 }, { 8, 11, 298 }, { 8, 11, 452 }, - { 7, 0, 736 }, { 11, 0, 264 }, { 6, 0, 1657 }, { 5, 11, 292 }, - { 10, 11, 135 }, { 6, 0, 844 }, { 6, 0, 1117 }, { 7, 0, 127 }, - { 9, 10, 867 }, { 10, 10, 837 }, { 6, 0, 1184 }, { 6, 0, 1208 }, - { 6, 0, 1294 }, { 8, 0, 364 }, { 6, 0, 1415 }, { 7, 0, 1334 }, - { 11, 0, 125 }, { 6, 10, 170 }, { 7, 11, 393 }, { 8, 10, 395 }, - { 8, 10, 487 }, { 10, 11, 603 }, { 11, 11, 206 }, { 13, 10, 147 }, - { 9, 11, 748 }, { 4, 11, 912 }, { 9, 11, 232 }, { 4, 10, 535 }, - { 8, 10, 618 }, { 9, 0, 792 }, { 7, 11, 1973 }, { 8, 11, 716 }, - { 7, 11, 98 }, { 5, 0, 909 }, { 9, 0, 849 }, { 10, 0, 805 }, - { 4, 0, 630 }, { 4, 0, 699 }, { 5, 11, 733 }, { 14, 11, 103 }, - { 22, 10, 23 }, { 12, 11, 158 }, { 18, 11, 8 }, { 19, 11, 62 }, - { 20, 11, 6 }, { 22, 11, 4 }, { 23, 11, 2 }, { 23, 11, 9 }, - { 4, 0, 968 }, { 4, 10, 778 }, { 4, 10, 46 }, { 5, 10, 811 }, - { 6, 10, 1679 }, { 6, 10, 1714 }, { 7, 10, 2032 }, { 6, 0, 1446 }, - { 7, 10, 1458 }, { 9, 10, 407 }, { 11, 10, 15 }, { 7, 0, 206 }, - { 7, 0, 397 }, { 7, 0, 621 }, { 7, 0, 640 }, { 8, 0, 124 }, - { 8, 0, 619 }, { 9, 0, 305 }, { 9, 0, 643 }, { 10, 0, 264 }, - { 10, 0, 628 }, { 11, 0, 40 }, { 12, 0, 349 }, { 13, 0, 134 }, - { 13, 0, 295 }, { 14, 0, 155 }, { 15, 0, 120 }, { 18, 0, 105 }, - { 6, 10, 34 }, { 7, 10, 1089 }, { 8, 10, 708 }, { 8, 10, 721 }, - { 9, 10, 363 }, { 20, 10, 98 }, { 4, 0, 262 }, { 5, 0, 641 }, - { 7, 0, 342 }, { 9, 11, 72 }, { 4, 0, 99 }, { 6, 0, 250 }, - { 6, 0, 346 }, { 8, 0, 127 }, { 10, 0, 81 }, { 4, 0, 915 }, - { 5, 0, 75 }, { 9, 0, 517 }, { 10, 0, 470 }, { 12, 0, 155 }, - { 13, 0, 224 }, { 4, 10, 462 }, { 11, 11, 600 }, { 11, 11, 670 }, - { 13, 11, 245 }, { 14, 0, 83 }, { 5, 10, 73 }, { 6, 10, 23 }, - { 6, 10, 338 }, { 6, 0, 1031 }, { 11, 11, 923 }, { 7, 11, 164 }, - { 7, 11, 1571 }, { 9, 11, 107 }, { 12, 11, 225 }, { 6, 0, 1470 }, - { 5, 0, 954 }, { 6, 0, 304 }, { 8, 0, 418 }, { 10, 0, 345 }, - { 11, 0, 341 }, { 11, 0, 675 }, { 9, 0, 410 }, { 11, 0, 425 }, - { 4, 11, 27 }, { 5, 11, 484 }, { 5, 11, 510 }, { 6, 11, 434 }, - { 7, 11, 1000 }, { 7, 11, 1098 }, { 8, 11, 2 }, { 8, 11, 200 }, - { 6, 0, 734 }, { 12, 11, 257 }, { 7, 10, 725 }, { 8, 10, 498 }, - { 11, 10, 268 }, { 6, 0, 1822 }, { 7, 0, 1798 }, { 7, 10, 773 }, - { 4, 11, 460 }, { 4, 11, 932 }, { 5, 11, 891 }, { 6, 0, 14 }, - { 4, 10, 583 }, { 7, 10, 1462 }, { 8, 11, 625 }, { 11, 10, 659 }, - { 5, 0, 113 }, { 6, 0, 243 }, { 6, 0, 1708 }, { 7, 0, 1865 }, - { 11, 0, 161 }, { 16, 0, 37 }, { 17, 0, 99 }, { 5, 10, 220 }, - { 6, 11, 76 }, { 5, 11, 461 }, { 7, 11, 1925 }, { 12, 0, 69 }, - { 8, 11, 92 }, { 9, 11, 221 }, { 11, 10, 803 }, { 4, 10, 544 }, - { 4, 0, 274 }, { 6, 0, 922 }, { 4, 0, 541 }, { 5, 0, 627 }, - { 6, 10, 437 }, { 6, 10, 564 }, { 11, 10, 181 }, { 13, 10, 183 }, - { 7, 10, 1192 }, { 7, 0, 166 }, { 4, 11, 763 }, { 5, 11, 253 }, - { 6, 0, 849 }, { 9, 11, 73 }, { 10, 11, 110 }, { 14, 11, 185 }, - { 17, 11, 119 }, { 5, 11, 212 }, { 12, 11, 35 }, { 13, 11, 382 }, - { 5, 0, 717 }, { 9, 0, 304 }, { 8, 0, 600 }, { 5, 0, 654 }, - { 6, 0, 273 }, { 10, 0, 188 }, { 13, 0, 377 }, { 18, 0, 77 }, - { 4, 10, 790 }, { 5, 10, 273 }, { 6, 10, 394 }, { 4, 0, 543 }, - { 7, 0, 410 }, { 11, 0, 98 }, { 11, 0, 524 }, { 13, 0, 87 }, - { 4, 0, 941 }, { 7, 11, 1175 }, { 4, 0, 250 }, { 7, 0, 1612 }, - { 11, 0, 186 }, { 12, 0, 133 }, { 6, 10, 127 }, { 7, 10, 1511 }, - { 8, 10, 613 }, { 12, 10, 495 }, { 12, 10, 586 }, { 12, 10, 660 }, - { 12, 10, 668 }, { 14, 10, 385 }, { 15, 10, 118 }, { 17, 10, 20 }, - { 18, 10, 98 }, { 6, 0, 1785 }, { 5, 11, 816 }, { 6, 0, 1339 }, - { 7, 0, 961 }, { 7, 0, 1085 }, { 7, 0, 1727 }, { 8, 0, 462 }, - { 6, 10, 230 }, { 7, 11, 1727 }, { 9, 0, 636 }, { 7, 10, 1954 }, - { 4, 0, 780 }, { 5, 11, 869 }, { 5, 11, 968 }, { 6, 11, 1626 }, - { 8, 11, 734 }, { 8, 11, 784 }, { 4, 11, 542 }, { 6, 11, 1716 }, - { 6, 11, 1727 }, { 7, 11, 1082 }, { 7, 11, 1545 }, { 8, 11, 56 }, - { 8, 11, 118 }, { 8, 11, 412 }, { 8, 11, 564 }, { 9, 11, 888 }, - { 9, 11, 908 }, { 10, 11, 50 }, { 10, 11, 423 }, { 11, 11, 685 }, - { 11, 11, 697 }, { 11, 11, 933 }, { 12, 11, 299 }, { 13, 11, 126 }, - { 13, 11, 136 }, { 13, 11, 170 }, { 13, 11, 190 }, { 6, 11, 226 }, - { 4, 11, 232 }, { 9, 11, 202 }, { 10, 11, 474 }, { 12, 11, 433 }, - { 9, 11, 500 }, { 5, 0, 529 }, { 8, 10, 68 }, { 4, 10, 654 }, - { 4, 10, 156 }, { 7, 10, 998 }, { 7, 10, 1045 }, { 7, 10, 1860 }, - { 9, 10, 48 }, { 9, 10, 692 }, { 11, 10, 419 }, { 11, 10, 602 }, - { 7, 0, 1276 }, { 8, 0, 474 }, { 9, 0, 652 }, { 6, 11, 108 }, - { 7, 11, 1003 }, { 7, 11, 1181 }, { 8, 11, 343 }, { 7, 11, 1264 }, - { 7, 11, 1678 }, { 11, 11, 945 }, { 12, 11, 341 }, { 12, 11, 471 }, - { 12, 11, 569 }, { 6, 11, 1712 }, { 5, 0, 948 }, { 12, 0, 468 }, - { 19, 0, 96 }, { 20, 0, 24 }, { 4, 11, 133 }, { 7, 11, 711 }, - { 7, 11, 1298 }, { 7, 11, 1585 }, { 7, 11, 1929 }, { 6, 0, 753 }, - { 12, 0, 657 }, { 11, 0, 941 }, { 6, 11, 99 }, { 7, 11, 1808 }, - { 17, 11, 57 }, { 6, 11, 574 }, { 7, 11, 428 }, { 7, 11, 1250 }, - { 10, 11, 669 }, { 11, 11, 485 }, { 11, 11, 840 }, { 12, 11, 300 }, - { 14, 11, 250 }, { 4, 0, 532 }, { 5, 0, 706 }, { 7, 0, 662 }, - { 5, 0, 837 }, { 6, 0, 1651 }, { 11, 0, 985 }, { 7, 0, 1861 }, - { 9, 10, 197 }, { 10, 10, 300 }, { 12, 10, 473 }, { 13, 10, 90 }, - { 13, 10, 405 }, { 9, 11, 252 }, { 6, 11, 323 }, { 7, 11, 1564 }, - { 4, 0, 330 }, { 4, 0, 863 }, { 7, 0, 933 }, { 7, 0, 2012 }, - { 8, 0, 292 }, { 7, 11, 461 }, { 8, 11, 775 }, { 10, 11, 435 }, - { 4, 10, 606 }, { 4, 11, 655 }, { 7, 11, 850 }, { 17, 11, 75 }, - { 18, 11, 137 }, { 7, 0, 767 }, { 7, 10, 1978 }, { 8, 10, 676 }, - { 4, 0, 641 }, { 7, 11, 1559 }, { 6, 0, 1233 }, { 9, 0, 242 }, - { 17, 0, 114 }, { 4, 10, 361 }, { 5, 10, 315 }, { 9, 0, 883 }, - { 4, 10, 461 }, { 10, 0, 274 }, { 6, 0, 2008 }, { 6, 0, 1794 }, - { 4, 0, 703 }, { 7, 0, 207 }, { 12, 0, 285 }, { 4, 10, 472 }, - { 4, 0, 571 }, { 5, 0, 873 }, { 5, 0, 960 }, { 8, 0, 823 }, - { 9, 0, 881 }, { 8, 11, 577 }, { 7, 0, 617 }, { 10, 0, 498 }, - { 11, 0, 501 }, { 12, 0, 16 }, { 12, 0, 150 }, { 10, 10, 747 }, - { 4, 0, 431 }, { 5, 10, 155 }, { 11, 0, 283 }, { 11, 0, 567 }, - { 7, 10, 163 }, { 8, 10, 319 }, { 9, 10, 402 }, { 10, 10, 24 }, - { 10, 10, 681 }, { 11, 10, 200 }, { 12, 10, 253 }, { 12, 10, 410 }, - { 14, 10, 219 }, { 4, 11, 413 }, { 5, 11, 677 }, { 8, 11, 432 }, - { 12, 11, 280 }, { 9, 0, 401 }, { 5, 10, 475 }, { 7, 10, 1780 }, - { 11, 10, 297 }, { 11, 10, 558 }, { 14, 10, 322 }, { 19, 10, 76 }, - { 6, 0, 781 }, { 9, 0, 134 }, { 10, 0, 2 }, { 10, 0, 27 }, - { 10, 0, 333 }, { 11, 0, 722 }, { 15, 0, 1 }, { 5, 0, 33 }, - { 6, 0, 470 }, { 11, 0, 424 }, { 7, 0, 2006 }, { 12, 0, 783 }, - { 7, 10, 1956 }, { 8, 0, 274 }, { 7, 0, 1882 }, { 4, 0, 794 }, - { 7, 0, 1848 }, { 5, 10, 944 }, { 6, 10, 1769 }, { 6, 0, 47 }, - { 7, 0, 90 }, { 7, 0, 664 }, { 7, 0, 830 }, { 7, 0, 1380 }, - { 7, 0, 2025 }, { 8, 0, 448 }, { 8, 0, 828 }, { 4, 10, 144 }, - { 6, 0, 1199 }, { 4, 11, 395 }, { 11, 11, 762 }, { 7, 11, 1504 }, - { 9, 0, 417 }, { 9, 0, 493 }, { 9, 11, 174 }, { 10, 11, 164 }, - { 11, 11, 440 }, { 11, 11, 841 }, { 15, 11, 98 }, { 6, 11, 426 }, - { 11, 11, 1002 }, { 6, 0, 295 }, { 6, 0, 816 }, { 6, 10, 247 }, - { 9, 10, 555 }, { 5, 0, 1019 }, { 4, 0, 620 }, { 5, 11, 476 }, - { 10, 10, 280 }, { 10, 10, 797 }, { 11, 0, 464 }, { 5, 11, 76 }, - { 6, 11, 458 }, { 6, 11, 497 }, { 7, 11, 764 }, { 7, 11, 868 }, - { 9, 11, 658 }, { 10, 11, 594 }, { 11, 11, 173 }, { 11, 11, 566 }, - { 12, 11, 20 }, { 12, 11, 338 }, { 13, 11, 200 }, { 6, 0, 208 }, - { 4, 11, 526 }, { 7, 11, 1029 }, { 7, 11, 1054 }, { 4, 11, 636 }, - { 6, 11, 233 }, { 7, 11, 660 }, { 7, 11, 1124 }, { 17, 11, 31 }, - { 19, 11, 22 }, { 23, 11, 14 }, { 10, 0, 442 }, { 5, 10, 428 }, - { 10, 0, 930 }, { 12, 0, 778 }, { 6, 0, 68 }, { 7, 0, 448 }, - { 7, 0, 1629 }, { 7, 0, 1769 }, { 7, 0, 1813 }, { 8, 0, 442 }, - { 8, 0, 516 }, { 9, 0, 710 }, { 10, 0, 282 }, { 10, 0, 722 }, - { 7, 10, 1717 }, { 10, 10, 546 }, { 6, 0, 1128 }, { 11, 0, 844 }, - { 12, 0, 104 }, { 12, 0, 625 }, { 4, 11, 432 }, { 7, 11, 824 }, - { 10, 10, 189 }, { 5, 0, 787 }, { 5, 10, 99 }, { 4, 11, 279 }, - { 7, 11, 301 }, { 9, 11, 362 }, { 8, 0, 491 }, { 4, 10, 397 }, - { 8, 10, 555 }, { 4, 11, 178 }, { 5, 11, 399 }, { 6, 0, 711 }, - { 16, 0, 9 }, { 4, 0, 403 }, { 5, 0, 441 }, { 7, 0, 450 }, - { 10, 0, 840 }, { 11, 0, 101 }, { 12, 0, 193 }, { 13, 0, 430 }, - { 7, 11, 1246 }, { 12, 10, 398 }, { 20, 10, 39 }, { 21, 10, 11 }, - { 22, 10, 41 }, { 4, 10, 485 }, { 7, 10, 353 }, { 7, 10, 1523 }, - { 6, 10, 366 }, { 7, 10, 1384 }, { 7, 10, 1601 }, { 7, 11, 1912 }, - { 7, 0, 396 }, { 10, 0, 160 }, { 7, 11, 396 }, { 9, 10, 282 }, - { 6, 11, 1692 }, { 4, 10, 157 }, { 5, 10, 471 }, { 6, 11, 202 }, - { 10, 11, 448 }, { 11, 11, 208 }, { 12, 11, 360 }, { 17, 11, 117 }, - { 17, 11, 118 }, { 18, 11, 27 }, { 20, 11, 67 }, { 5, 0, 679 }, - { 9, 0, 326 }, { 8, 10, 116 }, { 7, 11, 872 }, { 10, 11, 516 }, - { 11, 11, 167 }, { 4, 11, 224 }, { 5, 11, 546 }, { 7, 11, 35 }, - { 8, 11, 11 }, { 8, 11, 12 }, { 9, 11, 315 }, { 9, 11, 533 }, - { 10, 11, 802 }, { 11, 11, 166 }, { 12, 11, 525 }, { 14, 11, 243 }, - { 7, 0, 1128 }, { 7, 11, 1920 }, { 5, 11, 241 }, { 8, 11, 242 }, - { 9, 11, 451 }, { 10, 11, 667 }, { 11, 11, 598 }, { 12, 11, 429 }, - { 6, 0, 737 }, { 5, 10, 160 }, { 7, 10, 363 }, { 7, 10, 589 }, - { 10, 10, 170 }, { 13, 10, 55 }, { 7, 0, 1796 }, { 14, 11, 254 }, - { 4, 0, 574 }, { 7, 0, 350 }, { 7, 0, 1024 }, { 8, 0, 338 }, - { 9, 0, 677 }, { 10, 0, 808 }, { 6, 0, 1096 }, { 9, 11, 516 }, - { 7, 0, 405 }, { 10, 0, 491 }, { 4, 10, 108 }, { 4, 11, 366 }, - { 11, 10, 498 }, { 11, 11, 337 }, { 14, 11, 303 }, { 6, 11, 1736 }, - { 7, 0, 1081 }, { 12, 11, 364 }, { 7, 10, 1005 }, { 12, 10, 609 }, - { 7, 0, 1676 }, { 4, 10, 895 }, { 5, 10, 772 }, { 7, 0, 2037 }, - { 6, 0, 1207 }, { 11, 11, 916 }, { 14, 11, 419 }, { 14, 11, 140 }, - { 20, 11, 41 }, { 6, 11, 331 }, { 8, 11, 623 }, { 9, 0, 944 }, - { 9, 0, 969 }, { 9, 0, 1022 }, { 12, 0, 913 }, { 12, 0, 936 }, - { 15, 0, 177 }, { 15, 0, 193 }, { 4, 10, 926 }, { 5, 10, 983 }, - { 5, 0, 354 }, { 7, 11, 506 }, { 8, 0, 598 }, { 9, 0, 664 }, - { 10, 0, 441 }, { 4, 11, 640 }, { 5, 11, 513 }, { 9, 0, 297 }, - { 4, 10, 538 }, { 6, 10, 294 }, { 7, 10, 1267 }, { 8, 10, 624 }, - { 7, 0, 1772 }, { 7, 11, 1888 }, { 8, 11, 289 }, { 11, 11, 45 }, - { 12, 11, 278 }, { 12, 11, 537 }, { 7, 10, 1325 }, { 10, 0, 751 }, - { 13, 0, 37 }, { 6, 0, 1828 }, { 4, 10, 757 }, { 4, 11, 394 }, - { 6, 0, 257 }, { 7, 0, 1522 }, { 4, 0, 582 }, { 9, 0, 191 }, - { 7, 11, 1931 }, { 7, 11, 574 }, { 7, 11, 1719 }, { 9, 11, 145 }, - { 4, 11, 658 }, { 10, 0, 790 }, { 4, 11, 369 }, { 9, 11, 781 }, - { 10, 11, 144 }, { 11, 11, 385 }, { 13, 11, 161 }, { 13, 11, 228 }, - { 13, 11, 268 }, { 20, 11, 107 }, { 8, 0, 469 }, { 10, 0, 47 }, - { 8, 11, 374 }, { 6, 0, 306 }, { 7, 0, 1140 }, { 7, 0, 1340 }, - { 8, 0, 133 }, { 10, 0, 449 }, { 11, 0, 1011 }, { 7, 10, 1875 }, - { 11, 10, 124 }, { 4, 11, 344 }, { 6, 11, 498 }, { 11, 11, 323 }, - { 9, 0, 299 }, { 4, 0, 837 }, { 5, 11, 906 }, { 5, 0, 329 }, - { 8, 0, 260 }, { 10, 0, 10 }, { 6, 0, 1320 }, { 4, 0, 657 }, - { 18, 0, 158 }, { 7, 0, 1191 }, { 24, 0, 7 }, { 6, 0, 1939 }, - { 8, 0, 974 }, { 10, 0, 996 }, { 7, 0, 1665 }, { 11, 11, 126 }, - { 11, 11, 287 }, { 15, 0, 8 }, { 14, 11, 149 }, { 14, 11, 399 }, - { 15, 11, 57 }, { 5, 0, 66 }, { 7, 0, 1896 }, { 8, 0, 288 }, - { 7, 0, 175 }, { 10, 0, 494 }, { 5, 10, 150 }, { 8, 10, 603 }, - { 9, 10, 593 }, { 9, 10, 634 }, { 10, 10, 173 }, { 11, 10, 462 }, - { 11, 10, 515 }, { 13, 10, 216 }, { 13, 10, 288 }, { 14, 10, 400 }, - { 6, 0, 1643 }, { 8, 11, 21 }, { 4, 0, 21 }, { 5, 0, 91 }, - { 5, 0, 648 }, { 5, 0, 750 }, { 5, 0, 781 }, { 6, 0, 54 }, - { 6, 0, 112 }, { 6, 0, 402 }, { 6, 0, 1732 }, { 7, 0, 315 }, - { 7, 0, 749 }, { 7, 0, 1427 }, { 7, 0, 1900 }, { 9, 0, 78 }, - { 9, 0, 508 }, { 10, 0, 611 }, { 10, 0, 811 }, { 11, 0, 510 }, - { 11, 0, 728 }, { 13, 0, 36 }, { 14, 0, 39 }, { 16, 0, 83 }, - { 17, 0, 124 }, { 20, 0, 30 }, { 4, 0, 668 }, { 8, 0, 570 }, - { 10, 0, 322 }, { 10, 0, 719 }, { 11, 0, 407 }, { 7, 11, 1381 }, - { 8, 11, 193 }, { 12, 10, 108 }, { 13, 10, 291 }, { 4, 11, 616 }, - { 8, 11, 692 }, { 8, 0, 125 }, { 8, 0, 369 }, { 8, 0, 524 }, - { 10, 0, 486 }, { 11, 0, 13 }, { 11, 0, 381 }, { 11, 0, 736 }, - { 11, 0, 766 }, { 11, 0, 845 }, { 13, 0, 114 }, { 13, 0, 292 }, - { 14, 0, 47 }, { 6, 0, 1247 }, { 6, 0, 1684 }, { 6, 0, 1731 }, - { 7, 0, 356 }, { 8, 0, 54 }, { 8, 0, 221 }, { 9, 0, 225 }, - { 9, 0, 356 }, { 10, 0, 77 }, { 10, 0, 446 }, { 10, 0, 731 }, - { 12, 0, 404 }, { 13, 0, 491 }, { 7, 10, 1777 }, { 4, 11, 305 }, - { 4, 10, 493 }, { 16, 10, 55 }, { 4, 0, 951 }, { 6, 0, 1809 }, - { 6, 0, 1849 }, { 8, 0, 846 }, { 8, 0, 866 }, { 8, 0, 899 }, - { 10, 0, 896 }, { 12, 0, 694 }, { 14, 0, 468 }, { 5, 11, 214 }, - { 7, 11, 603 }, { 8, 11, 611 }, { 9, 11, 686 }, { 10, 11, 88 }, - { 11, 11, 459 }, { 11, 11, 496 }, { 12, 11, 463 }, { 12, 11, 590 }, - { 13, 11, 0 }, { 14, 11, 214 }, { 4, 0, 411 }, { 4, 0, 80 }, - { 5, 0, 44 }, { 12, 11, 74 }, { 15, 0, 31 }, { 7, 0, 669 }, - { 6, 10, 568 }, { 7, 10, 1804 }, { 8, 10, 362 }, { 8, 10, 410 }, - { 8, 10, 830 }, { 9, 10, 514 }, { 11, 10, 649 }, { 14, 10, 157 }, - { 7, 0, 673 }, { 6, 11, 1703 }, { 4, 10, 625 }, { 6, 0, 1303 }, - { 5, 0, 299 }, { 7, 0, 1083 }, { 10, 0, 704 }, { 6, 0, 275 }, - { 7, 0, 408 }, { 6, 10, 158 }, { 7, 10, 129 }, { 7, 10, 181 }, - { 8, 10, 276 }, { 8, 10, 377 }, { 10, 10, 523 }, { 11, 10, 816 }, - { 12, 10, 455 }, { 13, 10, 303 }, { 14, 10, 135 }, { 4, 0, 219 }, - { 7, 0, 367 }, { 7, 0, 1713 }, { 7, 0, 1761 }, { 9, 0, 86 }, - { 9, 0, 537 }, { 10, 0, 165 }, { 12, 0, 219 }, { 12, 0, 561 }, - { 8, 0, 216 }, { 4, 10, 1 }, { 4, 11, 737 }, { 6, 11, 317 }, - { 7, 10, 1143 }, { 7, 10, 1463 }, { 9, 10, 207 }, { 9, 10, 390 }, - { 9, 10, 467 }, { 10, 11, 98 }, { 11, 11, 294 }, { 11, 10, 836 }, - { 12, 11, 60 }, { 12, 11, 437 }, { 13, 11, 64 }, { 13, 11, 380 }, - { 14, 11, 430 }, { 6, 11, 1758 }, { 8, 11, 520 }, { 9, 11, 345 }, - { 9, 11, 403 }, { 14, 11, 350 }, { 5, 11, 47 }, { 10, 11, 242 }, - { 10, 11, 579 }, { 5, 11, 139 }, { 7, 11, 1168 }, { 10, 11, 539 }, - { 7, 0, 1319 }, { 4, 10, 295 }, { 4, 10, 723 }, { 5, 10, 895 }, - { 7, 10, 1031 }, { 8, 10, 199 }, { 8, 10, 340 }, { 9, 10, 153 }, - { 9, 10, 215 }, { 10, 10, 21 }, { 10, 10, 59 }, { 10, 10, 80 }, - { 10, 10, 224 }, { 10, 10, 838 }, { 11, 10, 229 }, { 11, 10, 652 }, - { 12, 10, 192 }, { 13, 10, 146 }, { 14, 10, 91 }, { 12, 0, 428 }, - { 9, 10, 51 }, { 5, 0, 514 }, { 5, 10, 309 }, { 12, 10, 211 }, - { 6, 0, 1010 }, { 5, 10, 125 }, { 8, 10, 77 }, { 10, 10, 15 }, - { 4, 0, 55 }, { 5, 0, 301 }, { 6, 0, 571 }, { 14, 0, 49 }, - { 18, 0, 102 }, { 8, 11, 370 }, { 4, 11, 107 }, { 7, 11, 613 }, - { 8, 11, 358 }, { 8, 11, 439 }, { 8, 11, 504 }, { 9, 11, 501 }, - { 10, 11, 383 }, { 11, 11, 477 }, { 4, 11, 229 }, { 5, 0, 364 }, - { 5, 10, 439 }, { 4, 11, 903 }, { 7, 11, 1816 }, { 11, 0, 379 }, - { 12, 10, 76 }, { 4, 0, 76 }, { 4, 0, 971 }, { 7, 0, 1550 }, - { 9, 0, 306 }, { 9, 0, 430 }, { 9, 0, 663 }, { 10, 0, 683 }, - { 10, 0, 921 }, { 11, 0, 427 }, { 11, 0, 753 }, { 12, 0, 334 }, - { 12, 0, 442 }, { 14, 0, 258 }, { 14, 0, 366 }, { 15, 0, 131 }, - { 9, 0, 52 }, { 4, 11, 47 }, { 6, 11, 373 }, { 7, 11, 452 }, - { 7, 11, 543 }, { 7, 11, 1714 }, { 7, 11, 1856 }, { 9, 11, 6 }, - { 11, 11, 257 }, { 11, 11, 391 }, { 4, 10, 8 }, { 7, 10, 1152 }, - { 7, 10, 1153 }, { 7, 10, 1715 }, { 9, 10, 374 }, { 10, 10, 478 }, - { 11, 10, 648 }, { 4, 11, 785 }, { 5, 11, 368 }, { 7, 10, 1099 }, - { 7, 11, 860 }, { 5, 11, 980 }, { 6, 11, 1754 }, { 6, 0, 1258 }, - { 6, 0, 1058 }, { 6, 0, 1359 }, { 7, 11, 536 }, { 7, 11, 1331 }, - { 8, 11, 143 }, { 4, 0, 656 }, { 7, 0, 779 }, { 8, 10, 87 }, - { 5, 11, 19 }, { 6, 11, 533 }, { 18, 11, 126 }, { 7, 0, 144 }, - { 10, 10, 438 }, { 5, 11, 395 }, { 5, 11, 951 }, { 6, 11, 1776 }, - { 7, 0, 1373 }, { 7, 0, 554 }, { 7, 0, 605 }, { 13, 0, 10 }, - { 4, 10, 69 }, { 5, 10, 122 }, { 9, 10, 656 }, { 10, 10, 464 }, - { 5, 10, 849 }, { 6, 10, 1633 }, { 5, 0, 838 }, { 5, 0, 841 }, - { 6, 0, 1649 }, { 5, 0, 1012 }, { 11, 10, 499 }, { 7, 10, 476 }, - { 7, 10, 1592 }, { 10, 10, 87 }, { 6, 0, 251 }, { 7, 0, 365 }, - { 7, 0, 1357 }, { 7, 0, 1497 }, { 8, 0, 154 }, { 13, 0, 281 }, - { 4, 11, 441 }, { 4, 11, 695 }, { 7, 11, 497 }, { 9, 11, 387 }, - { 19, 11, 81 }, { 5, 0, 340 }, { 14, 10, 283 }, { 14, 11, 283 }, - { 6, 0, 810 }, { 7, 11, 1894 }, { 11, 0, 495 }, { 5, 11, 284 }, - { 6, 11, 49 }, { 6, 11, 350 }, { 7, 11, 1 }, { 7, 11, 377 }, - { 7, 11, 1693 }, { 8, 11, 18 }, { 8, 11, 678 }, { 9, 11, 161 }, - { 9, 11, 585 }, { 9, 11, 671 }, { 9, 11, 839 }, { 11, 11, 912 }, - { 13, 11, 427 }, { 5, 10, 859 }, { 7, 10, 1160 }, { 8, 10, 107 }, - { 9, 10, 291 }, { 9, 10, 439 }, { 10, 10, 663 }, { 11, 10, 609 }, - { 12, 10, 197 }, { 8, 0, 261 }, { 9, 0, 144 }, { 9, 0, 466 }, - { 10, 0, 370 }, { 12, 0, 470 }, { 13, 0, 144 }, { 14, 0, 348 }, - { 9, 0, 897 }, { 6, 0, 248 }, { 9, 0, 546 }, { 10, 0, 535 }, - { 11, 0, 681 }, { 13, 0, 135 }, { 4, 0, 358 }, { 7, 0, 1496 }, - { 6, 0, 567 }, { 8, 0, 445 }, { 4, 10, 117 }, { 6, 10, 372 }, - { 7, 10, 1905 }, { 14, 10, 323 }, { 4, 10, 722 }, { 11, 10, 471 }, - { 6, 0, 697 }, { 6, 0, 996 }, { 7, 11, 2007 }, { 9, 11, 101 }, - { 9, 11, 450 }, { 10, 11, 66 }, { 10, 11, 842 }, { 11, 11, 536 }, - { 12, 11, 587 }, { 4, 0, 577 }, { 6, 0, 1336 }, { 9, 10, 5 }, - { 12, 10, 216 }, { 12, 10, 294 }, { 12, 10, 298 }, { 12, 10, 400 }, - { 12, 10, 518 }, { 13, 10, 229 }, { 15, 10, 139 }, { 6, 0, 174 }, - { 10, 0, 917 }, { 6, 10, 1774 }, { 5, 10, 12 }, { 7, 10, 375 }, - { 9, 10, 88 }, { 9, 10, 438 }, { 11, 11, 62 }, { 11, 10, 270 }, - { 6, 11, 1766 }, { 6, 11, 0 }, { 7, 11, 84 }, { 7, 10, 816 }, - { 7, 10, 1241 }, { 9, 10, 283 }, { 9, 10, 520 }, { 10, 10, 213 }, - { 10, 10, 307 }, { 10, 10, 463 }, { 10, 10, 671 }, { 10, 10, 746 }, - { 11, 10, 401 }, { 11, 10, 794 }, { 11, 11, 895 }, { 12, 10, 517 }, - { 17, 11, 11 }, { 18, 10, 107 }, { 19, 10, 115 }, { 5, 0, 878 }, - { 5, 0, 972 }, { 6, 11, 1665 }, { 7, 11, 256 }, { 7, 11, 1388 }, - { 10, 11, 499 }, { 4, 10, 258 }, { 8, 10, 639 }, { 4, 11, 22 }, - { 5, 11, 10 }, { 6, 10, 22 }, { 7, 11, 848 }, { 7, 10, 903 }, - { 7, 10, 1963 }, { 8, 11, 97 }, { 10, 10, 577 }, { 5, 10, 681 }, - { 8, 10, 782 }, { 5, 11, 481 }, { 4, 0, 351 }, { 4, 10, 664 }, - { 5, 10, 804 }, { 11, 10, 1013 }, { 6, 11, 134 }, { 7, 11, 437 }, - { 7, 11, 959 }, { 9, 11, 37 }, { 14, 11, 285 }, { 14, 11, 371 }, - { 16, 11, 60 }, { 7, 11, 486 }, { 8, 11, 155 }, { 11, 11, 93 }, - { 12, 11, 164 }, { 4, 0, 286 }, { 7, 0, 438 }, { 7, 0, 627 }, - { 7, 0, 1516 }, { 8, 0, 40 }, { 9, 0, 56 }, { 9, 0, 294 }, - { 10, 0, 30 }, { 11, 0, 969 }, { 11, 0, 995 }, { 18, 0, 148 }, - { 5, 11, 591 }, { 7, 11, 337 }, { 6, 0, 1950 }, { 5, 10, 32 }, - { 10, 11, 500 }, { 5, 11, 380 }, { 5, 11, 650 }, { 8, 11, 310 }, - { 4, 11, 364 }, { 7, 11, 1156 }, { 7, 11, 1187 }, { 9, 11, 409 }, - { 4, 0, 738 }, { 6, 11, 482 }, { 4, 11, 781 }, { 6, 11, 487 }, - { 7, 11, 926 }, { 8, 11, 263 }, { 11, 11, 500 }, { 7, 11, 418 }, - { 6, 0, 2047 }, { 10, 0, 969 }, { 4, 10, 289 }, { 7, 10, 629 }, - { 7, 10, 1698 }, { 7, 10, 1711 }, { 12, 10, 215 }, { 6, 10, 450 }, - { 8, 10, 109 }, { 6, 0, 818 }, { 8, 10, 705 }, { 5, 0, 866 }, - { 4, 11, 94 }, { 7, 11, 1265 }, { 4, 11, 417 }, { 6, 0, 1467 }, - { 7, 10, 1238 }, { 4, 0, 972 }, { 6, 0, 1851 }, { 6, 0, 1857 }, - { 6, 0, 355 }, { 5, 0, 116 }, { 4, 0, 457 }, { 7, 11, 1411 }, - { 4, 11, 408 }, { 4, 11, 741 }, { 7, 11, 500 }, { 6, 10, 26 }, - { 14, 11, 137 }, { 5, 0, 527 }, { 6, 0, 189 }, { 7, 0, 859 }, - { 8, 0, 267 }, { 11, 0, 104 }, { 11, 0, 554 }, { 15, 0, 60 }, - { 15, 0, 125 }, { 6, 0, 1613 }, { 4, 10, 414 }, { 5, 10, 467 }, - { 9, 10, 654 }, { 10, 10, 451 }, { 12, 10, 59 }, { 13, 10, 375 }, - { 7, 10, 17 }, { 6, 0, 116 }, { 7, 11, 541 }, { 7, 10, 955 }, - { 6, 11, 73 }, { 7, 11, 177 }, { 5, 11, 576 }, { 6, 0, 886 }, - { 5, 0, 487 }, { 4, 0, 86 }, { 5, 0, 667 }, { 5, 0, 753 }, - { 6, 0, 316 }, { 6, 0, 455 }, { 7, 0, 946 }, { 14, 11, 231 }, - { 22, 0, 45 }, { 6, 0, 863 }, { 6, 0, 1953 }, { 6, 10, 280 }, - { 10, 10, 502 }, { 11, 10, 344 }, { 12, 10, 38 }, { 4, 0, 79 }, - { 7, 0, 1773 }, { 10, 0, 450 }, { 11, 0, 589 }, { 13, 0, 332 }, - { 13, 0, 493 }, { 14, 0, 183 }, { 14, 0, 334 }, { 14, 0, 362 }, - { 14, 0, 368 }, { 14, 0, 376 }, { 14, 0, 379 }, { 19, 0, 90 }, - { 19, 0, 103 }, { 19, 0, 127 }, { 20, 0, 90 }, { 5, 10, 45 }, - { 7, 10, 1161 }, { 11, 10, 448 }, { 11, 10, 880 }, { 13, 10, 139 }, - { 13, 10, 407 }, { 15, 10, 16 }, { 17, 10, 95 }, { 18, 10, 66 }, - { 18, 10, 88 }, { 18, 10, 123 }, { 21, 10, 7 }, { 8, 10, 777 }, - { 4, 10, 410 }, { 7, 10, 521 }, { 7, 10, 1778 }, { 7, 11, 538 }, - { 14, 0, 381 }, { 5, 11, 413 }, { 6, 0, 1142 }, { 6, 0, 1189 }, - { 8, 11, 495 }, { 5, 0, 663 }, { 6, 0, 1962 }, { 6, 0, 2003 }, - { 7, 11, 54 }, { 8, 11, 312 }, { 10, 11, 191 }, { 10, 11, 614 }, - { 12, 11, 567 }, { 4, 10, 436 }, { 5, 0, 846 }, { 10, 0, 528 }, - { 11, 0, 504 }, { 7, 10, 1587 }, { 7, 10, 1707 }, { 5, 0, 378 }, - { 8, 0, 465 }, { 9, 0, 286 }, { 10, 0, 185 }, { 10, 0, 562 }, - { 10, 0, 635 }, { 11, 0, 31 }, { 11, 0, 393 }, { 13, 0, 312 }, - { 18, 0, 65 }, { 18, 0, 96 }, { 19, 0, 89 }, { 7, 0, 899 }, - { 14, 0, 325 }, { 6, 11, 468 }, { 7, 11, 567 }, { 7, 11, 1478 }, - { 8, 11, 530 }, { 14, 11, 290 }, { 7, 0, 1880 }, { 9, 0, 680 }, - { 11, 0, 798 }, { 6, 0, 1770 }, { 4, 0, 648 }, { 22, 11, 35 }, - { 5, 0, 945 }, { 6, 0, 1656 }, { 6, 0, 1787 }, { 7, 0, 167 }, - { 8, 0, 824 }, { 9, 0, 391 }, { 10, 0, 375 }, { 11, 0, 185 }, - { 6, 11, 484 }, { 7, 11, 822 }, { 6, 0, 2046 }, { 7, 0, 1645 }, - { 8, 0, 352 }, { 9, 0, 249 }, { 4, 0, 152 }, { 6, 0, 611 }, - { 7, 0, 1733 }, { 6, 11, 1724 }, { 7, 11, 2022 }, { 5, 0, 1006 }, - { 13, 11, 96 }, { 5, 0, 420 }, { 7, 0, 1449 }, { 18, 11, 149 }, - { 7, 0, 832 }, { 7, 10, 663 }, { 5, 0, 351 }, { 5, 0, 40 }, - { 7, 0, 598 }, { 7, 0, 1638 }, { 8, 0, 78 }, { 9, 0, 166 }, - { 9, 0, 640 }, { 9, 0, 685 }, { 9, 0, 773 }, { 11, 0, 215 }, - { 13, 0, 65 }, { 14, 0, 172 }, { 14, 0, 317 }, { 17, 0, 6 }, - { 8, 0, 60 }, { 9, 0, 343 }, { 11, 0, 769 }, { 6, 0, 1354 }, - { 4, 0, 724 }, { 9, 0, 745 }, { 4, 11, 474 }, { 7, 0, 1951 }, - { 8, 0, 765 }, { 8, 0, 772 }, { 12, 0, 671 }, { 7, 0, 108 }, - { 8, 0, 219 }, { 8, 0, 388 }, { 9, 0, 775 }, { 11, 0, 275 }, - { 12, 0, 464 }, { 9, 0, 639 }, { 7, 10, 503 }, { 5, 11, 366 }, - { 5, 0, 15 }, { 6, 0, 56 }, { 7, 0, 1758 }, { 8, 0, 500 }, - { 9, 0, 730 }, { 11, 0, 331 }, { 13, 0, 150 }, { 14, 0, 282 }, - { 5, 11, 305 }, { 9, 11, 560 }, { 13, 11, 208 }, { 4, 10, 113 }, - { 5, 10, 163 }, { 5, 10, 735 }, { 7, 10, 1009 }, { 9, 10, 9 }, - { 9, 10, 771 }, { 12, 10, 90 }, { 13, 10, 138 }, { 13, 10, 410 }, - { 15, 10, 128 }, { 4, 10, 324 }, { 10, 10, 104 }, { 7, 11, 466 }, - { 14, 11, 27 }, { 6, 0, 1886 }, { 5, 0, 205 }, { 6, 0, 438 }, - { 9, 0, 711 }, { 4, 11, 480 }, { 6, 11, 167 }, { 6, 11, 302 }, - { 6, 11, 1642 }, { 7, 11, 130 }, { 7, 11, 656 }, { 7, 11, 837 }, - { 7, 11, 1547 }, { 7, 11, 1657 }, { 8, 11, 429 }, { 9, 11, 228 }, - { 10, 11, 643 }, { 13, 11, 289 }, { 13, 11, 343 }, { 19, 11, 101 }, - { 6, 0, 865 }, { 6, 0, 2025 }, { 8, 0, 965 }, { 7, 11, 278 }, - { 10, 11, 739 }, { 11, 11, 708 }, { 13, 11, 348 }, { 5, 0, 534 }, - { 7, 11, 1922 }, { 9, 0, 691 }, { 4, 10, 935 }, { 5, 10, 823 }, - { 6, 0, 443 }, { 9, 0, 237 }, { 9, 0, 571 }, { 9, 0, 695 }, - { 10, 0, 139 }, { 11, 0, 715 }, { 12, 0, 417 }, { 13, 0, 421 }, - { 5, 10, 269 }, { 7, 10, 434 }, { 7, 10, 891 }, { 8, 10, 339 }, - { 9, 10, 702 }, { 11, 10, 594 }, { 11, 10, 718 }, { 17, 10, 100 }, - { 6, 0, 1555 }, { 7, 0, 878 }, { 9, 10, 485 }, { 13, 10, 264 }, - { 6, 10, 1713 }, { 7, 10, 1810 }, { 11, 10, 866 }, { 12, 10, 103 }, - { 13, 10, 495 }, { 7, 10, 900 }, { 6, 0, 1410 }, { 9, 11, 316 }, - { 11, 11, 256 }, { 4, 0, 995 }, { 7, 0, 1033 }, { 4, 0, 578 }, - { 10, 0, 881 }, { 12, 0, 740 }, { 12, 0, 743 }, { 12, 0, 759 }, - { 4, 0, 822 }, { 5, 0, 923 }, { 14, 10, 143 }, { 7, 11, 1696 }, - { 6, 11, 363 }, { 7, 11, 1955 }, { 8, 11, 725 }, { 4, 0, 924 }, - { 5, 0, 665 }, { 7, 10, 2029 }, { 7, 0, 1901 }, { 4, 0, 265 }, - { 6, 0, 1092 }, { 6, 0, 1417 }, { 7, 0, 807 }, { 7, 0, 950 }, - { 5, 0, 93 }, { 12, 0, 267 }, { 13, 0, 498 }, { 7, 0, 1451 }, - { 5, 11, 813 }, { 7, 11, 2046 }, { 5, 10, 625 }, { 7, 10, 1617 }, - { 7, 0, 747 }, { 6, 0, 788 }, { 9, 0, 828 }, { 7, 0, 184 }, - { 11, 0, 307 }, { 11, 0, 400 }, { 15, 0, 130 }, { 5, 11, 712 }, - { 7, 11, 1855 }, { 8, 10, 425 }, { 8, 10, 693 }, { 9, 10, 720 }, - { 10, 10, 380 }, { 10, 10, 638 }, { 11, 11, 17 }, { 11, 10, 473 }, - { 12, 10, 61 }, { 13, 11, 321 }, { 16, 11, 67 }, { 7, 0, 198 }, - { 6, 11, 320 }, { 7, 11, 781 }, { 7, 11, 1921 }, { 9, 11, 55 }, - { 10, 11, 186 }, { 10, 11, 273 }, { 10, 11, 664 }, { 10, 11, 801 }, - { 11, 11, 996 }, { 11, 11, 997 }, { 13, 11, 157 }, { 14, 11, 170 }, - { 8, 11, 271 }, { 7, 0, 994 }, { 7, 11, 103 }, { 7, 11, 863 }, - { 11, 11, 184 }, { 14, 11, 299 }, { 17, 11, 62 }, { 11, 10, 551 }, - { 14, 10, 159 }, { 5, 0, 233 }, { 5, 0, 320 }, { 6, 0, 140 }, - { 8, 0, 295 }, { 8, 0, 615 }, { 8, 11, 615 }, { 5, 0, 978 }, - { 4, 0, 905 }, { 6, 0, 1701 }, { 9, 0, 843 }, { 4, 10, 168 }, - { 4, 0, 974 }, { 8, 0, 850 }, { 12, 0, 709 }, { 12, 0, 768 }, - { 12, 0, 786 }, { 7, 10, 91 }, { 24, 0, 6 }, { 10, 10, 532 }, - { 7, 10, 1884 }, { 4, 0, 509 }, { 6, 0, 1307 }, { 7, 0, 273 }, - { 5, 11, 77 }, { 7, 11, 1455 }, { 10, 11, 843 }, { 19, 11, 73 }, - { 22, 11, 5 }, { 4, 11, 458 }, { 7, 11, 1420 }, { 6, 11, 109 }, - { 10, 11, 382 }, { 6, 0, 201 }, { 6, 11, 330 }, { 7, 10, 70 }, - { 7, 11, 1084 }, { 10, 10, 240 }, { 11, 11, 142 }, { 19, 10, 93 }, - { 7, 0, 1041 }, { 12, 11, 328 }, { 5, 11, 354 }, { 6, 0, 1040 }, - { 5, 0, 693 }, { 6, 0, 774 }, { 11, 0, 234 }, { 4, 0, 336 }, - { 7, 0, 1399 }, { 11, 10, 392 }, { 20, 0, 22 }, { 20, 11, 22 }, - { 5, 0, 802 }, { 7, 0, 2021 }, { 8, 0, 805 }, { 5, 0, 167 }, - { 5, 0, 899 }, { 6, 0, 410 }, { 9, 0, 777 }, { 9, 0, 789 }, - { 6, 0, 1705 }, { 7, 10, 655 }, { 7, 10, 1844 }, { 4, 10, 145 }, - { 6, 10, 176 }, { 7, 10, 395 }, { 9, 10, 562 }, { 4, 10, 501 }, - { 7, 0, 10 }, { 5, 0, 11 }, { 6, 0, 117 }, { 6, 0, 485 }, - { 7, 0, 1133 }, { 9, 0, 582 }, { 9, 0, 594 }, { 10, 0, 82 }, - { 11, 0, 21 }, { 11, 0, 818 }, { 12, 0, 535 }, { 13, 0, 86 }, - { 20, 0, 91 }, { 23, 0, 13 }, { 6, 10, 509 }, { 4, 0, 264 }, - { 7, 0, 1067 }, { 8, 0, 204 }, { 8, 0, 385 }, { 11, 0, 953 }, - { 11, 11, 737 }, { 10, 0, 56 }, { 6, 0, 1917 }, { 5, 0, 470 }, - { 10, 11, 657 }, { 14, 11, 297 }, { 14, 11, 361 }, { 7, 11, 412 }, - { 7, 0, 1198 }, { 7, 11, 1198 }, { 8, 11, 556 }, { 14, 11, 123 }, - { 14, 11, 192 }, { 15, 11, 27 }, { 7, 11, 1985 }, { 14, 11, 146 }, - { 15, 11, 42 }, { 16, 11, 23 }, { 17, 11, 86 }, { 18, 11, 17 }, - { 11, 0, 1015 }, { 8, 11, 122 }, { 4, 10, 114 }, { 9, 10, 492 }, - { 13, 10, 462 }, { 14, 10, 215 }, { 4, 10, 77 }, { 5, 10, 361 }, - { 6, 10, 139 }, { 6, 10, 401 }, { 6, 10, 404 }, { 7, 10, 413 }, - { 7, 10, 715 }, { 7, 10, 1716 }, { 11, 10, 279 }, { 12, 10, 179 }, - { 12, 10, 258 }, { 13, 10, 244 }, { 14, 10, 358 }, { 6, 10, 1717 }, - { 7, 10, 1061 }, { 8, 10, 82 }, { 11, 10, 250 }, { 12, 10, 420 }, - { 13, 10, 184 }, { 5, 0, 715 }, { 7, 10, 724 }, { 9, 0, 919 }, - { 9, 0, 922 }, { 9, 0, 927 }, { 9, 0, 933 }, { 9, 0, 962 }, - { 9, 0, 1000 }, { 9, 0, 1002 }, { 9, 0, 1021 }, { 12, 0, 890 }, - { 12, 0, 907 }, { 12, 0, 930 }, { 15, 0, 207 }, { 15, 0, 228 }, - { 15, 0, 238 }, { 21, 0, 61 }, { 8, 0, 794 }, { 9, 0, 400 }, - { 10, 0, 298 }, { 14, 0, 228 }, { 5, 11, 430 }, { 5, 11, 932 }, - { 6, 11, 131 }, { 7, 11, 417 }, { 9, 11, 522 }, { 11, 11, 314 }, - { 13, 11, 390 }, { 4, 0, 867 }, { 8, 0, 724 }, { 4, 11, 507 }, - { 9, 11, 261 }, { 4, 11, 343 }, { 5, 11, 511 }, { 6, 0, 190 }, - { 7, 0, 768 }, { 7, 0, 1170 }, { 6, 10, 513 }, { 7, 10, 1052 }, - { 7, 11, 455 }, { 10, 11, 591 }, { 6, 0, 1066 }, { 9, 10, 899 }, - { 14, 0, 67 }, { 19, 0, 60 }, { 4, 0, 948 }, { 18, 0, 174 }, - { 18, 0, 176 }, { 7, 0, 1023 }, { 7, 10, 1417 }, { 12, 10, 382 }, - { 17, 10, 48 }, { 24, 10, 12 }, { 6, 11, 575 }, { 4, 0, 764 }, - { 6, 10, 545 }, { 7, 10, 565 }, { 7, 10, 1669 }, { 10, 10, 114 }, - { 11, 10, 642 }, { 12, 10, 618 }, { 6, 0, 137 }, { 9, 0, 75 }, - { 9, 0, 253 }, { 10, 0, 194 }, { 10, 0, 444 }, { 4, 0, 756 }, - { 5, 10, 5 }, { 8, 0, 1008 }, { 7, 10, 192 }, { 4, 0, 842 }, - { 11, 0, 643 }, { 12, 0, 115 }, { 8, 10, 763 }, { 11, 0, 67 }, - { 5, 10, 759 }, { 4, 0, 821 }, { 5, 0, 760 }, { 7, 0, 542 }, - { 8, 0, 135 }, { 8, 0, 496 }, { 7, 11, 580 }, { 7, 10, 370 }, - { 7, 10, 1007 }, { 7, 10, 1177 }, { 7, 10, 1565 }, { 7, 10, 1237 }, - { 12, 0, 736 }, { 7, 0, 319 }, { 7, 0, 355 }, { 7, 0, 763 }, - { 10, 0, 389 }, { 17, 0, 43 }, { 8, 11, 333 }, { 10, 11, 182 }, - { 4, 10, 87 }, { 5, 10, 250 }, { 13, 10, 298 }, { 10, 0, 786 }, - { 6, 0, 2044 }, { 8, 11, 330 }, { 12, 11, 477 }, { 7, 11, 1338 }, - { 4, 11, 125 }, { 6, 0, 1030 }, { 6, 0, 1083 }, { 4, 11, 721 }, - { 7, 10, 814 }, { 7, 11, 776 }, { 8, 11, 145 }, { 19, 11, 56 }, - { 6, 0, 1226 }, { 4, 10, 57 }, { 7, 10, 1195 }, { 7, 10, 1438 }, - { 7, 10, 1548 }, { 7, 10, 1835 }, { 7, 10, 1904 }, { 9, 10, 757 }, - { 10, 10, 604 }, { 11, 10, 519 }, { 7, 11, 792 }, { 8, 11, 147 }, - { 10, 11, 821 }, { 11, 11, 1021 }, { 9, 11, 797 }, { 4, 0, 58 }, - { 5, 0, 286 }, { 6, 0, 319 }, { 7, 0, 402 }, { 7, 0, 1254 }, - { 7, 0, 1903 }, { 8, 0, 356 }, { 12, 0, 408 }, { 4, 0, 389 }, - { 4, 0, 815 }, { 9, 0, 181 }, { 9, 0, 255 }, { 10, 0, 8 }, - { 10, 0, 29 }, { 10, 0, 816 }, { 11, 0, 311 }, { 11, 0, 561 }, - { 12, 0, 67 }, { 13, 0, 181 }, { 7, 11, 1472 }, { 7, 11, 1554 }, - { 7, 11, 1071 }, { 7, 11, 1541 }, { 7, 11, 1767 }, { 7, 11, 1806 }, - { 7, 11, 1999 }, { 9, 11, 248 }, { 10, 11, 400 }, { 11, 11, 162 }, - { 11, 11, 178 }, { 11, 11, 242 }, { 12, 11, 605 }, { 15, 11, 26 }, - { 16, 11, 44 }, { 5, 11, 168 }, { 5, 11, 930 }, { 8, 11, 74 }, - { 9, 11, 623 }, { 12, 11, 500 }, { 12, 11, 579 }, { 13, 11, 41 }, - { 15, 11, 93 }, { 6, 11, 220 }, { 7, 11, 1101 }, { 13, 11, 105 }, - { 5, 0, 474 }, { 7, 0, 507 }, { 4, 10, 209 }, { 7, 11, 507 }, - { 7, 10, 902 }, { 4, 0, 427 }, { 6, 0, 413 }, { 7, 10, 335 }, - { 7, 10, 1437 }, { 7, 10, 1668 }, { 8, 10, 553 }, { 8, 10, 652 }, - { 8, 10, 656 }, { 9, 10, 558 }, { 11, 10, 743 }, { 21, 10, 18 }, - { 4, 0, 730 }, { 6, 11, 19 }, { 7, 11, 1413 }, { 11, 11, 428 }, - { 5, 0, 373 }, { 4, 10, 559 }, { 7, 11, 96 }, { 8, 11, 401 }, - { 9, 11, 896 }, { 7, 0, 799 }, { 7, 0, 1972 }, { 5, 10, 1017 }, - { 10, 10, 511 }, { 7, 0, 1793 }, { 7, 11, 1961 }, { 7, 11, 1965 }, - { 8, 11, 702 }, { 8, 11, 750 }, { 8, 11, 150 }, { 8, 11, 737 }, - { 12, 11, 366 }, { 4, 0, 322 }, { 5, 10, 709 }, { 8, 11, 800 }, - { 9, 11, 148 }, { 9, 11, 872 }, { 9, 11, 890 }, { 11, 11, 309 }, - { 11, 11, 1001 }, { 13, 11, 267 }, { 13, 11, 323 }, { 6, 10, 1745 }, - { 7, 0, 290 }, { 8, 10, 206 }, { 7, 0, 1651 }, { 17, 0, 89 }, - { 11, 0, 2 }, { 4, 0, 672 }, { 6, 0, 1860 }, { 8, 0, 905 }, - { 10, 0, 844 }, { 10, 0, 846 }, { 10, 0, 858 }, { 12, 0, 699 }, - { 12, 0, 746 }, { 12, 0, 772 }, { 7, 11, 424 }, { 5, 11, 547 }, - { 5, 0, 737 }, { 5, 11, 490 }, { 6, 11, 615 }, { 6, 11, 620 }, - { 7, 11, 683 }, { 6, 0, 746 }, { 6, 0, 1612 }, { 4, 10, 776 }, - { 9, 11, 385 }, { 21, 11, 17 }, { 5, 0, 145 }, { 7, 10, 1272 }, - { 7, 0, 884 }, { 12, 0, 124 }, { 4, 0, 387 }, { 7, 0, 1288 }, - { 5, 11, 133 }, { 8, 10, 406 }, { 8, 11, 187 }, { 6, 0, 679 }, - { 8, 11, 8 }, { 10, 11, 0 }, { 7, 0, 550 }, { 7, 11, 798 }, - { 8, 11, 685 }, { 7, 11, 1086 }, { 17, 11, 46 }, { 8, 10, 175 }, - { 10, 10, 168 }, { 10, 10, 573 }, { 7, 0, 1305 }, { 4, 0, 576 }, - { 7, 0, 1263 }, { 6, 0, 686 }, { 6, 0, 1563 }, { 6, 0, 607 }, - { 5, 0, 919 }, { 6, 0, 1673 }, { 20, 0, 37 }, { 8, 11, 774 }, - { 10, 11, 670 }, { 12, 11, 51 }, { 5, 10, 784 }, { 11, 10, 882 }, - { 4, 0, 82 }, { 5, 0, 333 }, { 5, 0, 904 }, { 6, 0, 207 }, - { 7, 0, 325 }, { 7, 0, 1726 }, { 8, 0, 101 }, { 10, 0, 778 }, - { 11, 0, 220 }, { 7, 11, 371 }, { 4, 0, 958 }, { 5, 0, 903 }, - { 4, 11, 127 }, { 5, 11, 350 }, { 6, 11, 356 }, { 8, 11, 426 }, - { 9, 11, 572 }, { 10, 11, 247 }, { 11, 11, 312 }, { 12, 0, 147 }, - { 6, 11, 59 }, { 7, 11, 885 }, { 9, 11, 603 }, { 13, 11, 397 }, - { 10, 0, 367 }, { 9, 10, 14 }, { 9, 10, 441 }, { 11, 10, 9 }, - { 11, 10, 966 }, { 12, 10, 287 }, { 13, 10, 342 }, { 13, 10, 402 }, - { 15, 10, 110 }, { 15, 10, 163 }, { 6, 0, 690 }, { 4, 0, 705 }, - { 9, 0, 651 }, { 11, 0, 971 }, { 13, 0, 273 }, { 7, 10, 1428 }, - { 7, 10, 1640 }, { 7, 10, 1867 }, { 9, 10, 169 }, { 9, 10, 182 }, - { 9, 10, 367 }, { 9, 10, 478 }, { 9, 10, 506 }, { 9, 10, 551 }, - { 9, 10, 557 }, { 9, 10, 648 }, { 9, 10, 697 }, { 9, 10, 705 }, - { 9, 10, 725 }, { 9, 10, 787 }, { 9, 10, 794 }, { 10, 10, 198 }, - { 10, 10, 214 }, { 10, 10, 267 }, { 10, 10, 275 }, { 10, 10, 456 }, - { 10, 10, 551 }, { 10, 10, 561 }, { 10, 10, 613 }, { 10, 10, 627 }, - { 10, 10, 668 }, { 10, 10, 675 }, { 10, 10, 691 }, { 10, 10, 695 }, - { 10, 10, 707 }, { 10, 10, 715 }, { 11, 10, 183 }, { 11, 10, 201 }, - { 11, 10, 262 }, { 11, 10, 352 }, { 11, 10, 439 }, { 11, 10, 493 }, - { 11, 10, 572 }, { 11, 10, 591 }, { 11, 10, 608 }, { 11, 10, 611 }, - { 11, 10, 646 }, { 11, 10, 674 }, { 11, 10, 711 }, { 11, 10, 751 }, - { 11, 10, 761 }, { 11, 10, 776 }, { 11, 10, 785 }, { 11, 10, 850 }, - { 11, 10, 853 }, { 11, 10, 862 }, { 11, 10, 865 }, { 11, 10, 868 }, - { 11, 10, 875 }, { 11, 10, 898 }, { 11, 10, 902 }, { 11, 10, 903 }, - { 11, 10, 910 }, { 11, 10, 932 }, { 11, 10, 942 }, { 11, 10, 957 }, - { 11, 10, 967 }, { 11, 10, 972 }, { 12, 10, 148 }, { 12, 10, 195 }, - { 12, 10, 220 }, { 12, 10, 237 }, { 12, 10, 318 }, { 12, 10, 339 }, - { 12, 10, 393 }, { 12, 10, 445 }, { 12, 10, 450 }, { 12, 10, 474 }, - { 12, 10, 505 }, { 12, 10, 509 }, { 12, 10, 533 }, { 12, 10, 591 }, - { 12, 10, 594 }, { 12, 10, 597 }, { 12, 10, 621 }, { 12, 10, 633 }, - { 12, 10, 642 }, { 13, 10, 59 }, { 13, 10, 60 }, { 13, 10, 145 }, - { 13, 10, 239 }, { 13, 10, 250 }, { 13, 10, 329 }, { 13, 10, 344 }, - { 13, 10, 365 }, { 13, 10, 372 }, { 13, 10, 387 }, { 13, 10, 403 }, - { 13, 10, 414 }, { 13, 10, 456 }, { 13, 10, 470 }, { 13, 10, 478 }, - { 13, 10, 483 }, { 13, 10, 489 }, { 14, 10, 55 }, { 14, 10, 57 }, - { 14, 10, 81 }, { 14, 10, 90 }, { 14, 10, 148 }, { 14, 10, 239 }, - { 14, 10, 266 }, { 14, 10, 321 }, { 14, 10, 326 }, { 14, 10, 327 }, - { 14, 10, 330 }, { 14, 10, 347 }, { 14, 10, 355 }, { 14, 10, 401 }, - { 14, 10, 404 }, { 14, 10, 411 }, { 14, 10, 414 }, { 14, 10, 416 }, - { 14, 10, 420 }, { 15, 10, 61 }, { 15, 10, 74 }, { 15, 10, 87 }, - { 15, 10, 88 }, { 15, 10, 94 }, { 15, 10, 96 }, { 15, 10, 116 }, - { 15, 10, 149 }, { 15, 10, 154 }, { 16, 10, 50 }, { 16, 10, 63 }, - { 16, 10, 73 }, { 17, 10, 2 }, { 17, 10, 66 }, { 17, 10, 92 }, - { 17, 10, 103 }, { 17, 10, 112 }, { 17, 10, 120 }, { 18, 10, 50 }, - { 18, 10, 54 }, { 18, 10, 82 }, { 18, 10, 86 }, { 18, 10, 90 }, - { 18, 10, 111 }, { 18, 10, 115 }, { 18, 10, 156 }, { 19, 10, 40 }, - { 19, 10, 79 }, { 20, 10, 78 }, { 21, 10, 22 }, { 7, 0, 887 }, - { 5, 10, 161 }, { 7, 10, 839 }, { 14, 11, 98 }, { 6, 0, 90 }, - { 10, 11, 356 }, { 7, 11, 441 }, { 6, 11, 111 }, { 7, 11, 4 }, - { 8, 11, 163 }, { 8, 11, 776 }, { 10, 11, 566 }, { 6, 0, 908 }, - { 6, 0, 1261 }, { 7, 0, 813 }, { 12, 0, 497 }, { 13, 0, 56 }, - { 6, 0, 1235 }, { 7, 0, 429 }, { 7, 11, 1994 }, { 10, 0, 904 }, - { 6, 0, 125 }, { 7, 0, 1277 }, { 9, 0, 772 }, { 23, 0, 12 }, - { 4, 0, 841 }, { 5, 0, 386 }, { 5, 11, 386 }, { 5, 11, 297 }, - { 7, 11, 1038 }, { 6, 0, 860 }, { 6, 0, 1069 }, { 7, 11, 309 }, - { 8, 0, 946 }, { 7, 10, 1814 }, { 13, 11, 418 }, { 8, 11, 363 }, - { 10, 0, 768 }, { 11, 0, 787 }, { 22, 11, 30 }, { 22, 11, 33 }, - { 6, 0, 160 }, { 7, 0, 1106 }, { 9, 0, 770 }, { 11, 0, 112 }, - { 12, 0, 413 }, { 11, 11, 216 }, { 11, 11, 340 }, { 8, 10, 139 }, - { 7, 11, 1390 }, { 7, 11, 808 }, { 4, 11, 280 }, { 12, 0, 271 }, - { 17, 0, 109 }, { 7, 10, 643 }, { 8, 10, 236 }, { 12, 11, 54 }, - { 4, 11, 421 }, { 5, 11, 548 }, { 11, 0, 719 }, { 12, 0, 36 }, - { 13, 0, 337 }, { 7, 0, 581 }, { 9, 0, 644 }, { 9, 0, 699 }, - { 11, 11, 511 }, { 13, 11, 394 }, { 14, 11, 298 }, { 14, 11, 318 }, - { 18, 11, 103 }, { 7, 0, 304 }, { 9, 0, 646 }, { 9, 0, 862 }, - { 11, 0, 696 }, { 12, 0, 208 }, { 15, 0, 79 }, { 19, 0, 108 }, - { 4, 0, 631 }, { 7, 0, 1126 }, { 7, 0, 1536 }, { 7, 11, 1527 }, - { 8, 0, 880 }, { 10, 0, 869 }, { 10, 0, 913 }, { 7, 0, 1513 }, - { 5, 10, 54 }, { 6, 11, 254 }, { 9, 11, 109 }, { 10, 11, 103 }, - { 7, 0, 981 }, { 5, 11, 729 }, { 4, 10, 744 }, { 4, 0, 434 }, - { 6, 0, 550 }, { 7, 0, 930 }, { 10, 0, 476 }, { 13, 0, 452 }, - { 19, 0, 104 }, { 6, 11, 1630 }, { 10, 10, 402 }, { 18, 10, 55 }, - { 5, 0, 553 }, { 10, 0, 824 }, { 8, 0, 452 }, { 8, 0, 151 }, - { 9, 10, 624 }, { 4, 10, 572 }, { 4, 0, 772 }, { 5, 11, 671 }, - { 5, 0, 292 }, { 10, 0, 135 }, { 4, 11, 889 }, { 12, 11, 207 }, - { 9, 0, 504 }, { 6, 10, 43 }, { 7, 10, 38 }, { 8, 10, 248 }, - { 10, 10, 513 }, { 6, 0, 1089 }, { 7, 11, 1910 }, { 4, 11, 627 }, - { 5, 11, 775 }, { 7, 0, 783 }, { 5, 10, 766 }, { 5, 10, 363 }, - { 7, 0, 387 }, { 7, 11, 387 }, { 7, 0, 393 }, { 10, 0, 603 }, - { 11, 0, 206 }, { 7, 11, 202 }, { 11, 11, 362 }, { 11, 11, 948 }, - { 12, 11, 388 }, { 6, 11, 507 }, { 7, 11, 451 }, { 8, 11, 389 }, - { 12, 11, 490 }, { 13, 11, 16 }, { 13, 11, 215 }, { 13, 11, 351 }, - { 18, 11, 132 }, { 19, 11, 125 }, { 4, 0, 912 }, { 9, 0, 232 }, - { 7, 11, 841 }, { 6, 10, 258 }, { 12, 10, 409 }, { 5, 10, 249 }, - { 20, 10, 82 }, { 8, 11, 566 }, { 6, 0, 977 }, { 7, 11, 1214 }, - { 7, 0, 1973 }, { 8, 0, 716 }, { 7, 0, 98 }, { 5, 0, 733 }, - { 5, 11, 912 }, { 6, 11, 1695 }, { 5, 10, 393 }, { 6, 10, 378 }, - { 7, 10, 1981 }, { 9, 10, 32 }, { 9, 10, 591 }, { 10, 10, 685 }, - { 10, 10, 741 }, { 14, 10, 382 }, { 5, 10, 788 }, { 10, 0, 19 }, - { 11, 0, 911 }, { 7, 10, 1968 }, { 13, 10, 509 }, { 5, 0, 668 }, - { 5, 11, 236 }, { 6, 11, 572 }, { 8, 11, 492 }, { 11, 11, 618 }, - { 16, 11, 56 }, { 7, 11, 1789 }, { 4, 0, 360 }, { 5, 0, 635 }, - { 5, 0, 700 }, { 5, 10, 58 }, { 5, 10, 171 }, { 5, 10, 683 }, - { 6, 10, 291 }, { 6, 10, 566 }, { 7, 10, 1650 }, { 11, 10, 523 }, - { 12, 10, 273 }, { 12, 10, 303 }, { 15, 10, 39 }, { 15, 10, 111 }, - { 5, 0, 901 }, { 6, 10, 589 }, { 5, 11, 190 }, { 8, 11, 318 }, - { 12, 0, 656 }, { 7, 0, 726 }, { 24, 0, 9 }, { 4, 10, 917 }, - { 5, 10, 1005 }, { 7, 10, 1598 }, { 6, 11, 491 }, { 4, 10, 919 }, - { 5, 11, 434 }, { 9, 0, 72 }, { 6, 0, 1269 }, { 6, 0, 1566 }, - { 6, 0, 1621 }, { 9, 0, 463 }, { 10, 0, 595 }, { 4, 10, 255 }, - { 5, 10, 302 }, { 6, 10, 132 }, { 7, 10, 128 }, { 7, 10, 283 }, - { 7, 10, 1299 }, { 10, 10, 52 }, { 10, 10, 514 }, { 11, 10, 925 }, - { 13, 10, 92 }, { 14, 10, 309 }, { 7, 0, 1454 }, { 6, 0, 1287 }, - { 11, 0, 600 }, { 13, 0, 245 }, { 9, 10, 173 }, { 8, 0, 989 }, - { 7, 0, 164 }, { 7, 0, 1571 }, { 9, 0, 107 }, { 12, 0, 225 }, - { 6, 0, 1061 }, { 13, 10, 442 }, { 4, 0, 27 }, { 5, 0, 484 }, - { 5, 0, 510 }, { 6, 0, 434 }, { 7, 0, 1000 }, { 7, 0, 1098 }, - { 8, 0, 2 }, { 7, 11, 85 }, { 7, 11, 247 }, { 8, 11, 585 }, - { 10, 11, 163 }, { 10, 11, 316 }, { 11, 11, 103 }, { 14, 11, 0 }, - { 6, 0, 1127 }, { 4, 0, 460 }, { 6, 0, 852 }, { 6, 10, 210 }, - { 4, 0, 932 }, { 5, 0, 891 }, { 6, 0, 588 }, { 19, 11, 83 }, - { 8, 0, 625 }, { 4, 10, 284 }, { 6, 10, 223 }, { 6, 0, 76 }, - { 8, 0, 92 }, { 9, 0, 221 }, { 4, 11, 124 }, { 10, 11, 457 }, - { 11, 11, 121 }, { 11, 11, 169 }, { 11, 11, 422 }, { 11, 11, 870 }, - { 12, 11, 214 }, { 13, 11, 389 }, { 14, 11, 187 }, { 15, 11, 77 }, - { 9, 11, 618 }, { 10, 11, 482 }, { 4, 10, 218 }, { 7, 10, 526 }, - { 15, 10, 137 }, { 13, 0, 9 }, { 14, 0, 104 }, { 14, 0, 311 }, - { 4, 10, 270 }, { 5, 10, 192 }, { 6, 10, 332 }, { 7, 10, 1322 }, - { 12, 10, 661 }, { 7, 11, 1193 }, { 6, 11, 107 }, { 7, 11, 638 }, - { 7, 11, 1632 }, { 9, 11, 396 }, { 4, 0, 763 }, { 4, 0, 622 }, - { 5, 11, 370 }, { 6, 11, 1756 }, { 5, 0, 253 }, { 7, 0, 546 }, - { 9, 0, 73 }, { 10, 0, 110 }, { 14, 0, 185 }, { 17, 0, 119 }, - { 5, 11, 204 }, { 7, 0, 624 }, { 7, 0, 916 }, { 10, 0, 256 }, - { 11, 0, 87 }, { 7, 10, 379 }, { 8, 10, 481 }, { 9, 10, 377 }, - { 5, 0, 212 }, { 12, 0, 35 }, { 13, 0, 382 }, { 5, 11, 970 }, - { 6, 11, 1706 }, { 9, 0, 746 }, { 5, 10, 1003 }, { 6, 10, 149 }, - { 10, 0, 150 }, { 11, 0, 849 }, { 13, 0, 330 }, { 8, 10, 262 }, - { 9, 10, 627 }, { 11, 10, 214 }, { 11, 10, 404 }, { 11, 10, 457 }, - { 11, 10, 780 }, { 11, 10, 913 }, { 13, 10, 401 }, { 14, 10, 200 }, - { 6, 0, 1466 }, { 7, 11, 3 }, { 6, 0, 1299 }, { 4, 11, 35 }, - { 5, 11, 121 }, { 5, 11, 483 }, { 5, 11, 685 }, { 6, 11, 489 }, - { 7, 11, 1204 }, { 8, 11, 394 }, { 7, 10, 742 }, { 4, 10, 142 }, - { 8, 10, 304 }, { 4, 11, 921 }, { 5, 11, 1007 }, { 6, 0, 1518 }, - { 6, 0, 1229 }, { 7, 0, 1175 }, { 5, 0, 816 }, { 12, 0, 159 }, - { 4, 10, 471 }, { 4, 11, 712 }, { 5, 10, 51 }, { 6, 10, 602 }, - { 7, 10, 925 }, { 8, 10, 484 }, { 10, 10, 195 }, { 6, 11, 1629 }, - { 5, 0, 869 }, { 5, 0, 968 }, { 6, 0, 1626 }, { 8, 0, 734 }, - { 8, 0, 784 }, { 4, 0, 542 }, { 6, 0, 1716 }, { 6, 0, 1727 }, - { 7, 0, 1082 }, { 7, 0, 1545 }, { 8, 0, 56 }, { 8, 0, 118 }, - { 8, 0, 412 }, { 8, 0, 564 }, { 9, 0, 888 }, { 9, 0, 908 }, - { 10, 0, 50 }, { 10, 0, 423 }, { 11, 0, 685 }, { 11, 0, 697 }, - { 11, 0, 933 }, { 12, 0, 299 }, { 13, 0, 126 }, { 13, 0, 136 }, - { 13, 0, 170 }, { 13, 0, 190 }, { 8, 10, 688 }, { 4, 10, 697 }, - { 4, 0, 232 }, { 9, 0, 202 }, { 10, 0, 474 }, { 12, 0, 433 }, - { 8, 0, 212 }, { 6, 0, 108 }, { 7, 0, 1003 }, { 7, 0, 1181 }, - { 8, 0, 111 }, { 8, 0, 343 }, { 5, 10, 221 }, { 7, 11, 1255 }, - { 5, 11, 485 }, { 6, 0, 1712 }, { 14, 0, 216 }, { 5, 0, 643 }, - { 6, 0, 516 }, { 4, 11, 285 }, { 5, 11, 317 }, { 6, 11, 301 }, - { 7, 11, 7 }, { 8, 11, 153 }, { 10, 11, 766 }, { 11, 11, 468 }, - { 12, 11, 467 }, { 13, 11, 143 }, { 4, 0, 133 }, { 7, 0, 711 }, - { 7, 0, 1298 }, { 7, 0, 1585 }, { 6, 0, 650 }, { 7, 11, 512 }, - { 6, 0, 99 }, { 7, 0, 1808 }, { 17, 0, 57 }, { 6, 0, 246 }, - { 6, 0, 574 }, { 7, 0, 428 }, { 9, 0, 793 }, { 10, 0, 669 }, - { 11, 0, 485 }, { 11, 0, 840 }, { 12, 0, 300 }, { 14, 0, 250 }, - { 17, 0, 55 }, { 4, 10, 132 }, { 5, 10, 69 }, { 7, 10, 1242 }, - { 8, 0, 1023 }, { 7, 0, 302 }, { 4, 10, 111 }, { 7, 0, 1871 }, - { 4, 0, 728 }, { 9, 0, 252 }, { 4, 10, 767 }, { 6, 0, 461 }, - { 7, 0, 1590 }, { 7, 10, 1416 }, { 7, 10, 2005 }, { 8, 10, 131 }, - { 8, 10, 466 }, { 9, 10, 672 }, { 13, 10, 252 }, { 20, 10, 103 }, - { 6, 0, 323 }, { 7, 0, 1564 }, { 7, 0, 461 }, { 8, 0, 775 }, - { 6, 10, 44 }, { 8, 10, 368 }, { 11, 0, 172 }, { 4, 0, 464 }, - { 4, 10, 570 }, { 5, 10, 120 }, { 9, 11, 269 }, { 6, 10, 227 }, - { 7, 10, 1589 }, { 6, 11, 1719 }, { 6, 11, 1735 }, { 7, 11, 2016 }, - { 7, 11, 2020 }, { 8, 11, 837 }, { 9, 11, 852 }, { 7, 0, 727 }, - { 18, 0, 73 }, { 4, 0, 1023 }, { 7, 11, 852 }, { 7, 10, 1529 }, - { 8, 0, 577 }, { 10, 11, 568 }, { 6, 0, 1037 }, { 8, 11, 67 }, - { 10, 11, 419 }, { 4, 0, 413 }, { 5, 0, 677 }, { 8, 0, 432 }, - { 12, 0, 280 }, { 10, 0, 600 }, { 6, 10, 1667 }, { 7, 11, 967 }, - { 7, 10, 2036 }, { 13, 11, 11 }, { 6, 10, 511 }, { 12, 10, 132 }, - { 6, 0, 799 }, { 5, 10, 568 }, { 6, 10, 138 }, { 7, 10, 1293 }, - { 8, 0, 159 }, { 4, 10, 565 }, { 8, 10, 827 }, { 7, 0, 646 }, - { 7, 0, 1730 }, { 11, 0, 446 }, { 13, 0, 178 }, { 4, 10, 922 }, - { 5, 10, 1023 }, { 7, 11, 11 }, { 4, 0, 395 }, { 11, 0, 145 }, - { 7, 10, 1002 }, { 9, 0, 174 }, { 10, 0, 164 }, { 11, 0, 440 }, - { 11, 0, 514 }, { 11, 0, 841 }, { 15, 0, 98 }, { 21, 0, 20 }, - { 6, 0, 426 }, { 10, 0, 608 }, { 11, 0, 1002 }, { 7, 11, 320 }, - { 8, 11, 51 }, { 12, 11, 481 }, { 12, 11, 570 }, { 20, 11, 106 }, - { 9, 0, 977 }, { 9, 0, 983 }, { 4, 11, 445 }, { 10, 0, 250 }, - { 11, 0, 100 }, { 6, 0, 1982 }, { 8, 10, 402 }, { 5, 11, 239 }, - { 4, 10, 716 }, { 13, 10, 31 }, { 5, 0, 476 }, { 7, 11, 83 }, - { 7, 11, 1990 }, { 8, 11, 130 }, { 11, 11, 720 }, { 8, 10, 691 }, - { 8, 10, 731 }, { 5, 11, 123 }, { 6, 11, 530 }, { 7, 11, 348 }, - { 7, 11, 1419 }, { 5, 0, 76 }, { 6, 0, 458 }, { 6, 0, 497 }, - { 7, 0, 868 }, { 9, 0, 658 }, { 10, 0, 594 }, { 11, 0, 173 }, - { 11, 0, 566 }, { 12, 0, 20 }, { 12, 0, 338 }, { 13, 0, 200 }, - { 9, 11, 139 }, { 10, 11, 399 }, { 11, 11, 469 }, { 12, 11, 634 }, - { 13, 11, 223 }, { 9, 10, 840 }, { 10, 10, 803 }, { 5, 10, 847 }, - { 11, 11, 223 }, { 12, 11, 168 }, { 4, 11, 210 }, { 8, 0, 447 }, - { 9, 10, 53 }, { 9, 10, 268 }, { 9, 10, 901 }, { 10, 10, 518 }, - { 10, 10, 829 }, { 11, 10, 188 }, { 13, 10, 74 }, { 14, 10, 46 }, - { 15, 10, 17 }, { 15, 10, 33 }, { 17, 10, 40 }, { 18, 10, 36 }, - { 19, 10, 20 }, { 22, 10, 1 }, { 24, 10, 2 }, { 4, 0, 526 }, - { 7, 0, 1029 }, { 7, 0, 1054 }, { 19, 11, 59 }, { 22, 11, 2 }, - { 4, 0, 636 }, { 6, 0, 1875 }, { 6, 0, 1920 }, { 9, 0, 999 }, - { 12, 0, 807 }, { 12, 0, 825 }, { 15, 0, 179 }, { 15, 0, 190 }, - { 18, 0, 182 }, { 8, 10, 532 }, { 6, 0, 1699 }, { 7, 0, 660 }, - { 7, 0, 1124 }, { 17, 0, 31 }, { 19, 0, 22 }, { 23, 0, 14 }, - { 7, 10, 681 }, { 4, 11, 430 }, { 12, 10, 677 }, { 4, 10, 684 }, - { 8, 10, 384 }, { 4, 11, 756 }, { 5, 11, 213 }, { 7, 0, 188 }, - { 7, 10, 110 }, { 8, 10, 290 }, { 8, 10, 591 }, { 9, 10, 382 }, - { 9, 10, 649 }, { 11, 10, 71 }, { 11, 10, 155 }, { 11, 10, 313 }, - { 12, 10, 5 }, { 13, 10, 325 }, { 14, 10, 287 }, { 7, 10, 360 }, - { 7, 10, 425 }, { 9, 10, 66 }, { 9, 10, 278 }, { 10, 10, 644 }, - { 14, 11, 164 }, { 4, 0, 279 }, { 7, 0, 301 }, { 9, 0, 362 }, - { 6, 11, 586 }, { 7, 0, 1743 }, { 4, 0, 178 }, { 5, 0, 399 }, - { 4, 10, 900 }, { 5, 10, 861 }, { 5, 10, 254 }, { 7, 10, 985 }, - { 8, 10, 73 }, { 5, 11, 108 }, { 7, 10, 1959 }, { 8, 10, 683 }, - { 5, 11, 219 }, { 4, 11, 193 }, { 5, 11, 916 }, { 7, 11, 364 }, - { 10, 11, 398 }, { 10, 11, 726 }, { 11, 11, 317 }, { 11, 11, 626 }, - { 12, 11, 142 }, { 12, 11, 288 }, { 12, 11, 678 }, { 13, 11, 313 }, - { 15, 11, 113 }, { 18, 11, 114 }, { 21, 11, 30 }, { 22, 11, 53 }, - { 6, 11, 241 }, { 7, 11, 907 }, { 8, 11, 832 }, { 9, 11, 342 }, - { 10, 11, 729 }, { 11, 11, 284 }, { 11, 11, 445 }, { 11, 11, 651 }, - { 11, 11, 863 }, { 13, 11, 398 }, { 18, 11, 99 }, { 4, 0, 872 }, - { 6, 0, 831 }, { 6, 0, 1692 }, { 6, 0, 202 }, { 6, 0, 1006 }, - { 9, 0, 832 }, { 10, 0, 636 }, { 11, 0, 208 }, { 12, 0, 360 }, - { 17, 0, 118 }, { 18, 0, 27 }, { 20, 0, 67 }, { 9, 11, 734 }, - { 4, 10, 725 }, { 7, 11, 993 }, { 10, 11, 666 }, { 6, 0, 1954 }, - { 6, 10, 196 }, { 7, 0, 872 }, { 10, 0, 516 }, { 11, 0, 167 }, - { 5, 10, 831 }, { 4, 11, 562 }, { 9, 11, 254 }, { 11, 11, 879 }, - { 9, 0, 313 }, { 4, 0, 224 }, { 4, 11, 786 }, { 11, 0, 24 }, - { 12, 0, 170 }, { 8, 10, 723 }, { 5, 0, 546 }, { 7, 0, 35 }, - { 8, 0, 11 }, { 8, 0, 12 }, { 9, 0, 315 }, { 9, 0, 533 }, - { 10, 0, 802 }, { 11, 0, 166 }, { 12, 0, 525 }, { 14, 0, 243 }, - { 7, 0, 1937 }, { 13, 10, 80 }, { 13, 10, 437 }, { 17, 10, 74 }, - { 5, 0, 241 }, { 8, 0, 242 }, { 9, 0, 451 }, { 10, 0, 667 }, - { 11, 0, 598 }, { 12, 0, 429 }, { 22, 0, 46 }, { 6, 0, 1273 }, - { 9, 0, 830 }, { 5, 10, 848 }, { 6, 10, 66 }, { 8, 10, 764 }, - { 6, 0, 825 }, { 6, 0, 993 }, { 4, 0, 1006 }, { 10, 0, 327 }, - { 13, 0, 271 }, { 4, 10, 36 }, { 7, 10, 1387 }, { 11, 10, 755 }, - { 6, 0, 1023 }, { 7, 0, 1580 }, { 4, 0, 366 }, { 9, 0, 516 }, - { 4, 10, 887 }, { 6, 0, 1736 }, { 7, 0, 1891 }, { 6, 11, 216 }, - { 7, 11, 901 }, { 7, 11, 1343 }, { 8, 11, 493 }, { 6, 10, 165 }, - { 10, 10, 388 }, { 7, 11, 341 }, { 11, 11, 219 }, { 4, 10, 719 }, - { 7, 10, 155 }, { 6, 0, 1935 }, { 4, 0, 826 }, { 6, 0, 331 }, - { 6, 0, 1605 }, { 8, 0, 623 }, { 11, 0, 139 }, { 11, 0, 171 }, - { 7, 11, 1734 }, { 10, 11, 115 }, { 11, 11, 420 }, { 12, 11, 154 }, - { 13, 11, 404 }, { 14, 11, 346 }, { 15, 11, 54 }, { 15, 11, 112 }, - { 7, 0, 288 }, { 4, 10, 353 }, { 6, 10, 146 }, { 6, 10, 1789 }, - { 7, 10, 990 }, { 7, 10, 1348 }, { 9, 10, 665 }, { 9, 10, 898 }, - { 11, 10, 893 }, { 14, 10, 212 }, { 6, 0, 916 }, { 6, 0, 1592 }, - { 7, 0, 1888 }, { 4, 10, 45 }, { 7, 10, 1257 }, { 5, 11, 1011 }, - { 8, 11, 701 }, { 11, 11, 596 }, { 4, 11, 54 }, { 5, 11, 666 }, - { 7, 11, 1039 }, { 7, 11, 1130 }, { 9, 11, 195 }, { 10, 11, 302 }, - { 6, 0, 1471 }, { 6, 0, 1570 }, { 4, 0, 394 }, { 12, 10, 65 }, - { 8, 10, 816 }, { 7, 0, 1931 }, { 7, 0, 574 }, { 7, 0, 1719 }, - { 6, 11, 467 }, { 4, 0, 658 }, { 9, 0, 781 }, { 10, 0, 144 }, - { 11, 0, 385 }, { 13, 0, 161 }, { 13, 0, 228 }, { 13, 0, 268 }, - { 20, 0, 107 }, { 6, 11, 1669 }, { 8, 0, 374 }, { 7, 0, 735 }, - { 4, 0, 344 }, { 6, 0, 498 }, { 11, 0, 323 }, { 7, 0, 586 }, - { 7, 0, 1063 }, { 6, 10, 559 }, { 6, 10, 1691 }, { 9, 0, 155 }, - { 5, 0, 906 }, { 7, 11, 122 }, { 9, 11, 259 }, { 10, 11, 84 }, - { 11, 11, 470 }, { 12, 11, 541 }, { 13, 11, 379 }, { 6, 0, 1139 }, - { 10, 0, 108 }, { 11, 0, 116 }, { 6, 10, 456 }, { 5, 10, 925 }, - { 5, 11, 82 }, { 5, 11, 131 }, { 7, 11, 1755 }, { 8, 11, 31 }, - { 9, 11, 168 }, { 9, 11, 764 }, { 11, 11, 869 }, { 6, 11, 605 }, - { 5, 11, 278 }, { 9, 11, 68 }, { 4, 11, 163 }, { 5, 11, 201 }, - { 5, 11, 307 }, { 5, 11, 310 }, { 6, 11, 335 }, { 7, 11, 284 }, - { 8, 11, 165 }, { 7, 11, 1660 }, { 6, 11, 33 }, { 7, 11, 1244 }, - { 4, 0, 616 }, { 8, 11, 483 }, { 8, 0, 857 }, { 8, 0, 902 }, - { 8, 0, 910 }, { 10, 0, 879 }, { 12, 0, 726 }, { 4, 11, 199 }, - { 11, 11, 34 }, { 8, 0, 692 }, { 6, 10, 193 }, { 7, 10, 240 }, - { 7, 10, 1682 }, { 10, 10, 51 }, { 10, 10, 640 }, { 11, 10, 410 }, - { 13, 10, 82 }, { 14, 10, 247 }, { 14, 10, 331 }, { 14, 10, 377 }, - { 6, 0, 823 }, { 6, 0, 983 }, { 11, 10, 411 }, { 4, 0, 305 }, - { 8, 10, 633 }, { 10, 11, 203 }, { 6, 0, 681 }, { 6, 11, 326 }, - { 7, 11, 677 }, { 9, 11, 425 }, { 5, 0, 214 }, { 7, 0, 603 }, - { 8, 0, 611 }, { 9, 0, 686 }, { 10, 0, 88 }, { 11, 0, 459 }, - { 11, 0, 496 }, { 12, 0, 463 }, { 12, 0, 590 }, { 13, 0, 0 }, - { 8, 0, 1004 }, { 14, 0, 23 }, { 6, 0, 1703 }, { 19, 11, 8 }, - { 17, 11, 56 }, { 7, 0, 1443 }, { 4, 10, 237 }, { 7, 10, 514 }, - { 6, 0, 714 }, { 17, 0, 19 }, { 5, 11, 358 }, { 7, 11, 473 }, - { 7, 11, 1184 }, { 10, 11, 662 }, { 13, 11, 212 }, { 13, 11, 304 }, - { 13, 11, 333 }, { 17, 11, 98 }, { 4, 0, 737 }, { 10, 0, 98 }, - { 11, 0, 294 }, { 12, 0, 60 }, { 12, 0, 437 }, { 13, 0, 64 }, - { 13, 0, 380 }, { 14, 0, 430 }, { 6, 10, 392 }, { 7, 10, 65 }, - { 7, 10, 2019 }, { 6, 0, 1758 }, { 8, 0, 520 }, { 9, 0, 345 }, - { 9, 0, 403 }, { 14, 0, 350 }, { 5, 0, 47 }, { 10, 0, 242 }, - { 10, 0, 579 }, { 5, 0, 139 }, { 7, 0, 1168 }, { 10, 0, 539 }, - { 6, 0, 1459 }, { 13, 0, 388 }, { 13, 11, 388 }, { 6, 0, 253 }, - { 7, 10, 1260 }, { 7, 10, 1790 }, { 10, 0, 252 }, { 9, 10, 222 }, - { 11, 10, 900 }, { 12, 0, 745 }, { 5, 11, 946 }, { 4, 0, 107 }, - { 7, 0, 613 }, { 8, 0, 439 }, { 8, 0, 504 }, { 9, 0, 501 }, - { 10, 0, 383 }, { 11, 0, 477 }, { 7, 11, 1485 }, { 4, 0, 871 }, - { 7, 11, 411 }, { 7, 11, 590 }, { 8, 11, 631 }, { 9, 11, 323 }, - { 10, 11, 355 }, { 11, 11, 491 }, { 12, 11, 143 }, { 12, 11, 402 }, - { 13, 11, 73 }, { 14, 11, 408 }, { 15, 11, 107 }, { 18, 11, 71 }, - { 4, 0, 229 }, { 4, 0, 903 }, { 12, 0, 71 }, { 5, 0, 549 }, - { 4, 0, 47 }, { 6, 0, 373 }, { 7, 0, 452 }, { 7, 0, 543 }, - { 7, 0, 1828 }, { 7, 0, 1856 }, { 9, 0, 6 }, { 11, 0, 257 }, - { 11, 0, 391 }, { 7, 11, 1467 }, { 8, 11, 328 }, { 10, 11, 544 }, - { 11, 11, 955 }, { 13, 11, 320 }, { 17, 11, 83 }, { 5, 0, 980 }, - { 6, 0, 1754 }, { 8, 0, 865 }, { 5, 0, 705 }, { 9, 0, 606 }, - { 7, 0, 161 }, { 8, 10, 201 }, { 8, 10, 605 }, { 15, 11, 35 }, - { 5, 11, 835 }, { 6, 11, 483 }, { 12, 10, 224 }, { 7, 0, 536 }, - { 7, 0, 1331 }, { 8, 0, 143 }, { 6, 0, 1388 }, { 5, 0, 724 }, - { 10, 0, 305 }, { 11, 0, 151 }, { 12, 0, 33 }, { 12, 0, 121 }, - { 12, 0, 381 }, { 17, 0, 3 }, { 17, 0, 27 }, { 17, 0, 78 }, - { 18, 0, 18 }, { 19, 0, 54 }, { 21, 0, 5 }, { 4, 10, 523 }, - { 5, 10, 638 }, { 5, 0, 19 }, { 6, 0, 533 }, { 5, 0, 395 }, - { 5, 0, 951 }, { 6, 0, 1776 }, { 7, 0, 1908 }, { 4, 0, 846 }, - { 10, 0, 74 }, { 11, 0, 663 }, { 12, 0, 210 }, { 13, 0, 166 }, - { 13, 0, 310 }, { 14, 0, 373 }, { 18, 0, 95 }, { 19, 0, 43 }, - { 6, 10, 242 }, { 7, 10, 227 }, { 7, 10, 1581 }, { 8, 10, 104 }, - { 9, 10, 113 }, { 9, 10, 220 }, { 9, 10, 427 }, { 10, 10, 239 }, - { 11, 10, 579 }, { 11, 10, 1023 }, { 13, 10, 4 }, { 13, 10, 204 }, - { 13, 10, 316 }, { 20, 10, 86 }, { 9, 11, 716 }, { 11, 11, 108 }, - { 13, 11, 123 }, { 14, 11, 252 }, { 19, 11, 38 }, { 21, 11, 3 }, - { 23, 11, 11 }, { 8, 0, 372 }, { 9, 0, 122 }, { 10, 0, 175 }, - { 4, 11, 677 }, { 7, 11, 1374 }, { 8, 11, 540 }, { 7, 10, 861 }, - { 4, 0, 695 }, { 7, 0, 497 }, { 9, 0, 387 }, { 19, 0, 81 }, - { 8, 0, 937 }, { 6, 0, 718 }, { 7, 0, 1328 }, { 8, 10, 494 }, - { 4, 11, 331 }, { 6, 0, 1581 }, { 5, 11, 747 }, { 5, 0, 284 }, - { 6, 0, 49 }, { 6, 0, 350 }, { 7, 0, 1 }, { 7, 0, 377 }, - { 7, 0, 1693 }, { 8, 0, 18 }, { 8, 0, 678 }, { 9, 0, 161 }, - { 9, 0, 585 }, { 9, 0, 671 }, { 9, 0, 839 }, { 11, 0, 912 }, - { 13, 0, 427 }, { 7, 10, 1306 }, { 8, 10, 505 }, { 9, 10, 482 }, - { 10, 10, 126 }, { 11, 10, 225 }, { 12, 10, 347 }, { 12, 10, 449 }, - { 13, 10, 19 }, { 14, 10, 218 }, { 14, 10, 435 }, { 10, 10, 764 }, - { 12, 10, 120 }, { 13, 10, 39 }, { 17, 10, 127 }, { 4, 0, 597 }, - { 5, 10, 268 }, { 6, 0, 1094 }, { 4, 0, 1008 }, { 6, 0, 1973 }, - { 4, 0, 811 }, { 11, 0, 908 }, { 7, 0, 1471 }, { 5, 11, 326 }, - { 4, 10, 384 }, { 7, 10, 1022 }, { 7, 0, 1935 }, { 8, 0, 324 }, - { 12, 0, 42 }, { 4, 11, 691 }, { 7, 11, 1935 }, { 8, 11, 324 }, - { 9, 11, 35 }, { 10, 11, 680 }, { 11, 11, 364 }, { 12, 11, 42 }, - { 13, 11, 357 }, { 18, 11, 16 }, { 7, 0, 2014 }, { 7, 0, 2007 }, - { 9, 0, 101 }, { 9, 0, 450 }, { 10, 0, 66 }, { 10, 0, 842 }, - { 11, 0, 536 }, { 12, 0, 587 }, { 6, 11, 32 }, { 7, 11, 385 }, - { 7, 11, 757 }, { 7, 11, 1916 }, { 8, 11, 37 }, { 8, 11, 94 }, - { 8, 11, 711 }, { 9, 11, 541 }, { 10, 11, 162 }, { 10, 11, 795 }, - { 11, 11, 989 }, { 11, 11, 1010 }, { 12, 11, 14 }, { 14, 11, 308 }, - { 11, 0, 586 }, { 7, 10, 1703 }, { 7, 0, 1077 }, { 11, 0, 28 }, - { 9, 10, 159 }, { 12, 10, 603 }, { 6, 0, 1221 }, { 8, 10, 583 }, - { 6, 11, 152 }, { 6, 11, 349 }, { 6, 11, 1682 }, { 7, 11, 1252 }, - { 8, 11, 112 }, { 9, 11, 435 }, { 9, 11, 668 }, { 10, 11, 290 }, - { 10, 11, 319 }, { 10, 11, 815 }, { 11, 11, 180 }, { 11, 11, 837 }, - { 12, 11, 240 }, { 13, 11, 152 }, { 13, 11, 219 }, { 14, 11, 158 }, - { 11, 0, 62 }, { 4, 10, 515 }, { 8, 10, 632 }, { 8, 10, 697 }, - { 9, 10, 854 }, { 6, 0, 1766 }, { 4, 11, 581 }, { 6, 11, 126 }, - { 7, 11, 573 }, { 8, 11, 397 }, { 14, 11, 44 }, { 22, 0, 28 }, - { 11, 0, 670 }, { 22, 0, 25 }, { 4, 10, 136 }, { 5, 10, 551 }, - { 6, 0, 1665 }, { 7, 0, 256 }, { 7, 0, 1388 }, { 10, 0, 499 }, - { 4, 0, 22 }, { 5, 0, 10 }, { 7, 0, 1576 }, { 8, 0, 97 }, - { 6, 10, 1782 }, { 5, 0, 481 }, { 7, 10, 1287 }, { 9, 10, 44 }, - { 10, 10, 552 }, { 10, 10, 642 }, { 11, 10, 839 }, { 12, 10, 274 }, - { 12, 10, 275 }, { 12, 10, 372 }, { 13, 10, 91 }, { 14, 10, 125 }, - { 5, 11, 926 }, { 7, 11, 1232 }, { 9, 11, 531 }, { 6, 0, 134 }, - { 7, 0, 437 }, { 7, 0, 1824 }, { 9, 0, 37 }, { 14, 0, 285 }, - { 14, 0, 371 }, { 7, 0, 486 }, { 8, 0, 155 }, { 11, 0, 93 }, - { 12, 0, 164 }, { 6, 0, 1391 }, { 6, 0, 1442 }, { 5, 11, 670 }, - { 5, 0, 591 }, { 6, 10, 147 }, { 7, 10, 886 }, { 7, 11, 1957 }, - { 9, 10, 753 }, { 10, 10, 268 }, { 5, 0, 380 }, { 5, 0, 650 }, - { 7, 0, 1173 }, { 8, 0, 310 }, { 4, 0, 364 }, { 7, 0, 1156 }, - { 7, 0, 1187 }, { 9, 0, 409 }, { 7, 11, 1621 }, { 6, 0, 482 }, - { 5, 11, 506 }, { 4, 0, 781 }, { 6, 0, 487 }, { 7, 0, 926 }, - { 8, 0, 263 }, { 11, 0, 500 }, { 10, 10, 137 }, { 7, 11, 242 }, - { 11, 11, 96 }, { 5, 10, 414 }, { 7, 10, 1762 }, { 6, 0, 804 }, - { 5, 11, 834 }, { 7, 11, 1202 }, { 8, 11, 14 }, { 9, 11, 481 }, - { 9, 11, 880 }, { 6, 10, 599 }, { 4, 0, 94 }, { 7, 0, 1265 }, - { 4, 0, 415 }, { 4, 0, 417 }, { 5, 0, 348 }, { 6, 0, 522 }, - { 6, 10, 1749 }, { 7, 11, 1526 }, { 10, 11, 465 }, { 6, 10, 1627 }, - { 4, 0, 1012 }, { 4, 10, 488 }, { 4, 11, 357 }, { 6, 11, 172 }, - { 7, 11, 143 }, { 9, 11, 413 }, { 4, 10, 83 }, { 4, 11, 590 }, - { 18, 11, 76 }, { 12, 10, 676 }, { 7, 11, 287 }, { 8, 11, 355 }, - { 9, 11, 293 }, { 9, 11, 743 }, { 6, 10, 278 }, { 6, 0, 1803 }, - { 18, 0, 165 }, { 24, 0, 21 }, { 5, 11, 169 }, { 7, 11, 333 }, - { 8, 11, 45 }, { 12, 10, 97 }, { 12, 11, 97 }, { 4, 0, 408 }, - { 4, 0, 741 }, { 7, 0, 500 }, { 4, 11, 198 }, { 7, 10, 388 }, - { 7, 10, 644 }, { 11, 10, 781 }, { 4, 11, 24 }, { 5, 11, 140 }, - { 5, 11, 185 }, { 7, 11, 1500 }, { 11, 11, 565 }, { 11, 11, 838 }, - { 6, 0, 1321 }, { 9, 0, 257 }, { 7, 10, 229 }, { 8, 10, 59 }, - { 9, 10, 190 }, { 10, 10, 378 }, { 12, 10, 191 }, { 4, 11, 334 }, - { 5, 11, 593 }, { 7, 11, 1885 }, { 6, 0, 1138 }, { 4, 0, 249 }, - { 6, 0, 73 }, { 7, 0, 177 }, { 5, 0, 576 }, { 14, 0, 231 }, - { 9, 0, 288 }, { 4, 10, 660 }, { 7, 10, 1035 }, { 10, 10, 737 }, - { 7, 0, 1487 }, { 6, 0, 989 }, { 9, 0, 433 }, { 7, 10, 690 }, - { 9, 10, 587 }, { 12, 10, 521 }, { 7, 0, 1264 }, { 7, 0, 1678 }, - { 11, 0, 945 }, { 12, 0, 341 }, { 12, 0, 471 }, { 12, 0, 569 }, - { 4, 11, 709 }, { 5, 11, 897 }, { 5, 11, 224 }, { 13, 11, 174 }, - { 18, 11, 52 }, { 7, 11, 1840 }, { 6, 10, 1744 }, { 12, 0, 87 }, - { 16, 0, 74 }, { 4, 10, 733 }, { 9, 10, 194 }, { 10, 10, 92 }, - { 11, 10, 198 }, { 12, 10, 84 }, { 13, 10, 128 }, { 12, 0, 779 }, - { 7, 0, 538 }, { 4, 11, 608 }, { 5, 11, 497 }, { 5, 0, 413 }, - { 7, 11, 1375 }, { 7, 11, 1466 }, { 10, 11, 331 }, { 8, 0, 495 }, - { 6, 11, 540 }, { 8, 11, 136 }, { 7, 0, 54 }, { 8, 0, 312 }, - { 10, 0, 191 }, { 10, 0, 614 }, { 12, 0, 567 }, { 6, 0, 468 }, - { 7, 0, 567 }, { 7, 0, 1478 }, { 8, 0, 530 }, { 14, 0, 290 }, - { 5, 11, 999 }, { 4, 11, 299 }, { 7, 10, 306 }, { 7, 11, 1004 }, - { 14, 11, 296 }, { 6, 0, 1484 }, { 5, 10, 979 }, { 6, 0, 609 }, - { 9, 0, 815 }, { 12, 11, 137 }, { 14, 11, 9 }, { 14, 11, 24 }, - { 14, 11, 64 }, { 5, 11, 456 }, { 6, 0, 484 }, { 7, 0, 822 }, - { 5, 10, 178 }, { 8, 11, 180 }, { 4, 11, 755 }, { 9, 0, 900 }, - { 7, 0, 1335 }, { 6, 0, 1724 }, { 7, 0, 2022 }, { 7, 11, 1139 }, - { 5, 0, 640 }, { 4, 10, 390 }, { 6, 0, 1831 }, { 10, 11, 633 }, - { 7, 11, 566 }, { 4, 11, 890 }, { 5, 11, 805 }, { 5, 11, 819 }, - { 5, 11, 961 }, { 6, 11, 396 }, { 6, 11, 1631 }, { 6, 11, 1678 }, - { 7, 11, 1967 }, { 7, 11, 2041 }, { 9, 11, 630 }, { 11, 11, 8 }, - { 11, 11, 1019 }, { 12, 11, 176 }, { 13, 11, 225 }, { 14, 11, 292 }, - { 21, 11, 24 }, { 4, 0, 474 }, { 6, 0, 1103 }, { 7, 0, 1504 }, - { 6, 0, 1576 }, { 6, 0, 961 }, { 6, 0, 1034 }, { 12, 0, 655 }, - { 11, 11, 514 }, { 21, 11, 20 }, { 5, 0, 305 }, { 7, 11, 1815 }, - { 7, 11, 1505 }, { 10, 11, 190 }, { 10, 11, 634 }, { 11, 11, 792 }, - { 12, 11, 358 }, { 12, 11, 447 }, { 5, 11, 0 }, { 6, 11, 536 }, - { 7, 11, 604 }, { 13, 11, 445 }, { 17, 11, 126 }, { 7, 0, 1236 }, - { 5, 10, 105 }, { 4, 0, 480 }, { 6, 0, 217 }, { 6, 0, 302 }, - { 6, 0, 1642 }, { 7, 0, 130 }, { 7, 0, 837 }, { 7, 0, 1321 }, - { 7, 0, 1547 }, { 7, 0, 1657 }, { 8, 0, 429 }, { 9, 0, 228 }, - { 13, 0, 289 }, { 13, 0, 343 }, { 19, 0, 101 }, { 6, 11, 232 }, - { 6, 11, 412 }, { 7, 11, 1074 }, { 8, 11, 9 }, { 8, 11, 157 }, - { 8, 11, 786 }, { 9, 11, 196 }, { 9, 11, 352 }, { 9, 11, 457 }, - { 10, 11, 337 }, { 11, 11, 232 }, { 11, 11, 877 }, { 12, 11, 480 }, - { 12, 11, 546 }, { 5, 10, 438 }, { 7, 11, 958 }, { 9, 10, 694 }, - { 12, 10, 627 }, { 13, 11, 38 }, { 13, 10, 210 }, { 4, 11, 382 }, - { 8, 11, 579 }, { 7, 0, 278 }, { 10, 0, 739 }, { 11, 0, 708 }, - { 13, 0, 348 }, { 4, 11, 212 }, { 7, 11, 1206 }, { 7, 11, 1898 }, - { 6, 0, 708 }, { 6, 0, 1344 }, { 24, 10, 11 }, { 9, 11, 768 }, - { 6, 0, 1840 }, { 12, 0, 233 }, { 8, 10, 25 }, { 10, 10, 826 }, - { 6, 0, 2017 }, { 5, 11, 655 }, { 6, 0, 1488 }, { 11, 11, 290 }, - { 4, 10, 308 }, { 6, 0, 1590 }, { 6, 0, 1800 }, { 6, 0, 1259 }, - { 16, 0, 28 }, { 6, 11, 231 }, { 7, 11, 95 }, { 8, 11, 423 }, - { 5, 11, 300 }, { 7, 10, 150 }, { 8, 10, 649 }, { 7, 11, 1874 }, - { 9, 11, 641 }, { 6, 11, 237 }, { 7, 11, 611 }, { 8, 11, 100 }, - { 9, 11, 416 }, { 11, 11, 335 }, { 12, 11, 173 }, { 18, 11, 101 }, - { 9, 0, 45 }, { 6, 10, 521 }, { 17, 0, 36 }, { 14, 11, 26 }, - { 18, 11, 150 }, { 7, 0, 1442 }, { 14, 0, 22 }, { 5, 10, 339 }, - { 15, 10, 41 }, { 15, 10, 166 }, { 19, 10, 66 }, { 8, 0, 378 }, - { 6, 11, 581 }, { 7, 11, 1119 }, { 6, 0, 1507 }, { 19, 11, 117 }, - { 11, 0, 39 }, { 6, 0, 1054 }, { 6, 0, 363 }, { 7, 0, 1955 }, - { 8, 0, 725 }, { 6, 0, 2036 }, { 5, 11, 199 }, { 6, 0, 1871 }, - { 9, 0, 935 }, { 9, 0, 961 }, { 9, 0, 1004 }, { 9, 0, 1016 }, - { 12, 0, 805 }, { 12, 0, 852 }, { 12, 0, 853 }, { 12, 0, 869 }, - { 12, 0, 882 }, { 12, 0, 896 }, { 12, 0, 906 }, { 12, 0, 917 }, - { 12, 0, 940 }, { 15, 0, 170 }, { 15, 0, 176 }, { 15, 0, 188 }, - { 15, 0, 201 }, { 15, 0, 205 }, { 15, 0, 212 }, { 15, 0, 234 }, - { 15, 0, 244 }, { 18, 0, 181 }, { 18, 0, 193 }, { 18, 0, 196 }, - { 18, 0, 201 }, { 18, 0, 202 }, { 18, 0, 210 }, { 18, 0, 217 }, - { 18, 0, 235 }, { 18, 0, 236 }, { 18, 0, 237 }, { 21, 0, 54 }, - { 21, 0, 55 }, { 21, 0, 58 }, { 21, 0, 59 }, { 24, 0, 22 }, - { 6, 10, 1628 }, { 9, 0, 805 }, { 5, 0, 813 }, { 7, 0, 2046 }, - { 14, 11, 42 }, { 5, 0, 712 }, { 6, 0, 1240 }, { 11, 0, 17 }, - { 13, 0, 321 }, { 16, 0, 67 }, { 4, 0, 617 }, { 7, 10, 829 }, - { 6, 0, 320 }, { 7, 0, 781 }, { 7, 0, 1921 }, { 9, 0, 55 }, - { 10, 0, 186 }, { 10, 0, 273 }, { 10, 0, 664 }, { 10, 0, 801 }, - { 11, 0, 996 }, { 11, 0, 997 }, { 13, 0, 157 }, { 14, 0, 170 }, - { 8, 0, 271 }, { 5, 10, 486 }, { 7, 10, 1349 }, { 18, 11, 91 }, - { 19, 11, 70 }, { 10, 0, 445 }, { 7, 10, 1635 }, { 8, 10, 17 }, - { 10, 10, 295 }, { 8, 11, 404 }, { 7, 0, 103 }, { 7, 0, 863 }, - { 11, 0, 184 }, { 17, 0, 62 }, { 10, 10, 558 }, { 9, 0, 659 }, - { 6, 11, 312 }, { 6, 11, 1715 }, { 10, 11, 584 }, { 11, 11, 546 }, - { 11, 11, 692 }, { 12, 11, 259 }, { 12, 11, 295 }, { 13, 11, 46 }, - { 13, 11, 154 }, { 6, 0, 676 }, { 4, 11, 588 }, { 4, 11, 231 }, - { 5, 11, 61 }, { 6, 11, 104 }, { 7, 11, 729 }, { 7, 11, 964 }, - { 7, 11, 1658 }, { 12, 11, 414 }, { 6, 11, 263 }, { 10, 11, 757 }, - { 11, 0, 337 }, { 14, 0, 303 }, { 7, 11, 1363 }, { 4, 11, 320 }, - { 12, 0, 506 }, { 6, 10, 447 }, { 5, 0, 77 }, { 7, 0, 1455 }, - { 10, 0, 843 }, { 19, 0, 73 }, { 7, 10, 577 }, { 7, 10, 1432 }, - { 9, 10, 475 }, { 9, 10, 505 }, { 9, 10, 526 }, { 9, 10, 609 }, - { 9, 10, 689 }, { 9, 10, 726 }, { 9, 10, 735 }, { 9, 10, 738 }, - { 10, 10, 556 }, { 10, 10, 674 }, { 10, 10, 684 }, { 11, 10, 89 }, - { 11, 10, 202 }, { 11, 10, 272 }, { 11, 10, 380 }, { 11, 10, 415 }, - { 11, 10, 505 }, { 11, 10, 537 }, { 11, 10, 550 }, { 11, 10, 562 }, - { 11, 10, 640 }, { 11, 10, 667 }, { 11, 10, 688 }, { 11, 10, 847 }, - { 11, 10, 927 }, { 11, 10, 930 }, { 11, 10, 940 }, { 12, 10, 144 }, - { 12, 10, 325 }, { 12, 10, 329 }, { 12, 10, 389 }, { 12, 10, 403 }, - { 12, 10, 451 }, { 12, 10, 515 }, { 12, 10, 604 }, { 12, 10, 616 }, - { 12, 10, 626 }, { 13, 10, 66 }, { 13, 10, 131 }, { 13, 10, 167 }, - { 13, 10, 236 }, { 13, 10, 368 }, { 13, 10, 411 }, { 13, 10, 434 }, - { 13, 10, 453 }, { 13, 10, 461 }, { 13, 10, 474 }, { 14, 10, 59 }, - { 14, 10, 60 }, { 14, 10, 139 }, { 14, 10, 152 }, { 14, 10, 276 }, - { 14, 10, 353 }, { 14, 10, 402 }, { 15, 10, 28 }, { 15, 10, 81 }, - { 15, 10, 123 }, { 15, 10, 152 }, { 18, 10, 136 }, { 20, 10, 88 }, - { 4, 0, 458 }, { 7, 0, 1420 }, { 6, 0, 109 }, { 10, 0, 382 }, - { 4, 11, 405 }, { 4, 10, 609 }, { 7, 10, 756 }, { 7, 11, 817 }, - { 9, 10, 544 }, { 11, 10, 413 }, { 14, 11, 58 }, { 14, 10, 307 }, - { 16, 10, 25 }, { 17, 11, 37 }, { 18, 11, 124 }, { 6, 0, 330 }, - { 7, 0, 1084 }, { 11, 0, 142 }, { 5, 11, 974 }, { 4, 10, 930 }, - { 5, 10, 947 }, { 5, 10, 939 }, { 14, 11, 394 }, { 16, 0, 91 }, - { 17, 0, 87 }, { 5, 11, 235 }, { 5, 10, 962 }, { 7, 11, 1239 }, - { 11, 11, 131 }, { 12, 11, 370 }, { 11, 0, 492 }, { 5, 10, 651 }, - { 8, 10, 170 }, { 9, 10, 61 }, { 9, 10, 63 }, { 10, 10, 23 }, - { 10, 10, 37 }, { 10, 10, 834 }, { 11, 10, 4 }, { 11, 10, 281 }, - { 11, 10, 503 }, { 11, 10, 677 }, { 12, 10, 96 }, { 12, 10, 130 }, - { 12, 10, 244 }, { 14, 10, 5 }, { 14, 10, 40 }, { 14, 10, 162 }, - { 14, 10, 202 }, { 18, 10, 133 }, { 4, 10, 406 }, { 5, 10, 579 }, - { 12, 10, 492 }, { 22, 10, 15 }, { 9, 11, 137 }, { 10, 11, 221 }, - { 6, 0, 1239 }, { 11, 0, 211 }, { 12, 0, 145 }, { 7, 11, 390 }, - { 10, 11, 140 }, { 7, 11, 1418 }, { 7, 11, 1144 }, { 6, 0, 1049 }, - { 7, 0, 321 }, { 6, 10, 17 }, { 7, 10, 1001 }, { 7, 10, 1982 }, - { 9, 10, 886 }, { 10, 10, 489 }, { 10, 10, 800 }, { 11, 10, 782 }, - { 12, 10, 320 }, { 13, 10, 467 }, { 14, 10, 145 }, { 14, 10, 387 }, - { 15, 10, 119 }, { 17, 10, 17 }, { 5, 11, 407 }, { 11, 11, 489 }, - { 19, 11, 37 }, { 20, 11, 73 }, { 22, 11, 38 }, { 5, 10, 458 }, - { 7, 0, 1985 }, { 7, 10, 1983 }, { 8, 10, 0 }, { 8, 10, 171 }, - { 9, 10, 120 }, { 9, 10, 732 }, { 10, 10, 473 }, { 11, 10, 656 }, - { 11, 10, 998 }, { 18, 10, 0 }, { 18, 10, 2 }, { 19, 10, 21 }, - { 5, 11, 325 }, { 7, 11, 1483 }, { 8, 11, 5 }, { 8, 11, 227 }, - { 9, 11, 105 }, { 10, 11, 585 }, { 12, 11, 614 }, { 8, 0, 122 }, - { 4, 0, 234 }, { 7, 11, 1196 }, { 6, 0, 976 }, { 6, 0, 1098 }, - { 6, 0, 1441 }, { 7, 0, 253 }, { 8, 0, 549 }, { 6, 11, 621 }, - { 13, 11, 504 }, { 16, 11, 19 }, { 4, 10, 519 }, { 5, 0, 430 }, - { 5, 0, 932 }, { 6, 0, 131 }, { 7, 0, 417 }, { 9, 0, 522 }, - { 11, 0, 314 }, { 13, 0, 390 }, { 14, 0, 149 }, { 14, 0, 399 }, - { 15, 0, 57 }, { 5, 10, 907 }, { 6, 10, 31 }, { 6, 11, 218 }, - { 7, 10, 491 }, { 7, 10, 530 }, { 8, 10, 592 }, { 11, 10, 53 }, - { 11, 10, 779 }, { 12, 10, 167 }, { 12, 10, 411 }, { 14, 10, 14 }, - { 14, 10, 136 }, { 15, 10, 72 }, { 16, 10, 17 }, { 16, 10, 72 }, - { 12, 11, 330 }, { 7, 11, 454 }, { 7, 11, 782 }, { 8, 11, 768 }, - { 4, 0, 507 }, { 10, 11, 676 }, { 12, 11, 462 }, { 6, 0, 630 }, - { 9, 0, 811 }, { 4, 10, 208 }, { 5, 10, 106 }, { 6, 10, 531 }, - { 8, 10, 408 }, { 9, 10, 188 }, { 10, 10, 572 }, { 4, 0, 343 }, - { 5, 0, 511 }, { 6, 10, 1693 }, { 6, 11, 164 }, { 4, 0, 448 }, - { 7, 0, 455 }, { 10, 0, 591 }, { 7, 0, 1381 }, { 12, 10, 441 }, - { 22, 11, 50 }, { 9, 10, 449 }, { 10, 10, 192 }, { 10, 10, 740 }, - { 6, 0, 575 }, { 4, 10, 241 }, { 6, 0, 1175 }, { 6, 0, 653 }, - { 6, 0, 1761 }, { 6, 0, 1198 }, { 4, 10, 259 }, { 6, 11, 343 }, - { 7, 11, 195 }, { 9, 11, 226 }, { 10, 11, 197 }, { 10, 11, 575 }, - { 11, 11, 502 }, { 11, 11, 899 }, { 7, 0, 1127 }, { 7, 0, 1572 }, - { 10, 0, 297 }, { 10, 0, 422 }, { 11, 0, 764 }, { 11, 0, 810 }, - { 12, 0, 264 }, { 13, 0, 102 }, { 13, 0, 300 }, { 13, 0, 484 }, - { 14, 0, 147 }, { 14, 0, 229 }, { 17, 0, 71 }, { 18, 0, 118 }, - { 19, 0, 120 }, { 7, 11, 666 }, { 4, 0, 678 }, { 4, 10, 173 }, - { 5, 10, 312 }, { 5, 10, 512 }, { 7, 10, 1285 }, { 7, 10, 1603 }, - { 7, 10, 1691 }, { 9, 10, 464 }, { 11, 10, 195 }, { 12, 10, 279 }, - { 12, 10, 448 }, { 14, 10, 11 }, { 19, 10, 102 }, { 16, 0, 99 }, - { 18, 0, 164 }, { 7, 11, 1125 }, { 9, 11, 143 }, { 11, 11, 61 }, - { 14, 11, 405 }, { 22, 11, 21 }, { 9, 11, 260 }, { 4, 10, 452 }, - { 5, 10, 583 }, { 5, 10, 817 }, { 6, 10, 433 }, { 7, 10, 593 }, - { 7, 10, 720 }, { 7, 10, 1378 }, { 8, 10, 161 }, { 9, 10, 284 }, - { 10, 10, 313 }, { 11, 10, 886 }, { 4, 10, 547 }, { 8, 10, 722 }, - { 14, 0, 35 }, { 14, 0, 191 }, { 13, 0, 45 }, { 10, 0, 121 }, - { 4, 0, 125 }, { 6, 0, 1622 }, { 5, 11, 959 }, { 8, 10, 420 }, - { 11, 10, 193 }, { 4, 0, 721 }, { 7, 10, 409 }, { 8, 0, 145 }, - { 7, 0, 792 }, { 8, 0, 147 }, { 10, 0, 821 }, { 11, 0, 970 }, - { 11, 0, 1021 }, { 8, 11, 173 }, { 6, 11, 266 }, { 4, 0, 715 }, - { 7, 0, 1999 }, { 10, 10, 308 }, { 5, 0, 531 }, { 5, 0, 168 }, - { 5, 0, 930 }, { 8, 0, 74 }, { 9, 0, 623 }, { 12, 0, 500 }, - { 12, 0, 579 }, { 16, 0, 65 }, { 10, 11, 246 }, { 6, 0, 220 }, - { 7, 0, 1101 }, { 13, 0, 105 }, { 14, 11, 314 }, { 5, 10, 1002 }, - { 8, 10, 745 }, { 6, 0, 960 }, { 20, 0, 0 }, { 20, 11, 0 }, - { 4, 0, 1005 }, { 4, 10, 239 }, { 6, 10, 477 }, { 7, 10, 1607 }, - { 11, 10, 68 }, { 11, 10, 617 }, { 6, 0, 19 }, { 7, 0, 1413 }, - { 11, 0, 428 }, { 21, 10, 13 }, { 7, 0, 96 }, { 8, 0, 401 }, - { 8, 0, 703 }, { 9, 0, 896 }, { 8, 11, 300 }, { 6, 0, 1595 }, - { 17, 0, 116 }, { 8, 0, 1021 }, { 7, 0, 1961 }, { 7, 0, 1965 }, - { 7, 0, 2030 }, { 8, 0, 150 }, { 8, 0, 702 }, { 8, 0, 737 }, - { 8, 0, 750 }, { 12, 0, 366 }, { 11, 11, 75 }, { 14, 11, 267 }, - { 4, 10, 367 }, { 8, 0, 800 }, { 9, 0, 148 }, { 9, 0, 872 }, - { 9, 0, 890 }, { 11, 0, 309 }, { 11, 0, 1001 }, { 13, 0, 267 }, - { 13, 0, 323 }, { 5, 11, 427 }, { 5, 11, 734 }, { 7, 11, 478 }, - { 8, 11, 52 }, { 7, 11, 239 }, { 11, 11, 217 }, { 14, 11, 165 }, - { 4, 11, 323 }, { 12, 11, 419 }, { 13, 0, 299 }, { 14, 0, 75 }, - { 6, 11, 87 }, { 6, 11, 1734 }, { 7, 11, 20 }, { 7, 11, 1056 }, - { 8, 11, 732 }, { 9, 11, 406 }, { 9, 11, 911 }, { 10, 11, 694 }, - { 6, 0, 1383 }, { 4, 10, 694 }, { 5, 11, 613 }, { 9, 0, 779 }, - { 4, 0, 598 }, { 12, 10, 687 }, { 6, 0, 970 }, { 7, 0, 424 }, - { 5, 0, 547 }, { 7, 11, 32 }, { 7, 11, 984 }, { 8, 11, 85 }, - { 8, 11, 709 }, { 9, 11, 579 }, { 9, 11, 847 }, { 9, 11, 856 }, - { 10, 11, 799 }, { 11, 11, 258 }, { 11, 11, 1007 }, { 12, 11, 331 }, - { 12, 11, 615 }, { 13, 11, 188 }, { 13, 11, 435 }, { 14, 11, 8 }, - { 15, 11, 165 }, { 16, 11, 27 }, { 20, 11, 40 }, { 6, 0, 1222 }, - { 6, 0, 1385 }, { 4, 0, 876 }, { 10, 11, 151 }, { 7, 10, 213 }, - { 4, 11, 167 }, { 7, 11, 82 }, { 5, 0, 133 }, { 6, 11, 24 }, - { 7, 11, 74 }, { 7, 11, 678 }, { 9, 11, 258 }, { 5, 11, 62 }, - { 6, 11, 534 }, { 7, 11, 684 }, { 7, 11, 1043 }, { 7, 11, 1072 }, - { 8, 11, 280 }, { 8, 11, 541 }, { 8, 11, 686 }, { 10, 11, 519 }, - { 11, 11, 252 }, { 12, 11, 282 }, { 8, 0, 187 }, { 8, 0, 8 }, - { 10, 0, 0 }, { 10, 0, 818 }, { 11, 0, 988 }, { 4, 11, 359 }, - { 11, 0, 429 }, { 15, 0, 51 }, { 7, 10, 1672 }, { 8, 0, 685 }, - { 5, 11, 211 }, { 7, 11, 88 }, { 8, 11, 627 }, { 6, 0, 472 }, - { 8, 0, 132 }, { 6, 11, 145 }, { 13, 11, 336 }, { 4, 10, 751 }, - { 11, 10, 390 }, { 12, 10, 32 }, { 6, 0, 938 }, { 6, 0, 1060 }, - { 4, 11, 263 }, { 4, 10, 409 }, { 5, 10, 78 }, { 9, 0, 874 }, - { 8, 0, 774 }, { 10, 0, 670 }, { 12, 0, 51 }, { 4, 11, 916 }, - { 6, 10, 473 }, { 7, 10, 1602 }, { 10, 10, 698 }, { 12, 10, 212 }, - { 13, 10, 307 }, { 17, 10, 105 }, { 18, 0, 92 }, { 15, 10, 156 }, - { 4, 0, 830 }, { 9, 0, 701 }, { 4, 11, 599 }, { 6, 11, 1634 }, - { 7, 11, 5 }, { 7, 11, 55 }, { 7, 11, 67 }, { 7, 11, 97 }, - { 7, 11, 691 }, { 7, 11, 979 }, { 7, 11, 1697 }, { 8, 11, 207 }, - { 8, 11, 214 }, { 8, 11, 231 }, { 8, 11, 294 }, { 8, 11, 336 }, - { 8, 11, 428 }, { 8, 11, 451 }, { 8, 11, 460 }, { 8, 11, 471 }, - { 8, 11, 622 }, { 8, 11, 626 }, { 8, 11, 679 }, { 8, 11, 759 }, - { 8, 11, 829 }, { 9, 11, 11 }, { 9, 11, 246 }, { 9, 11, 484 }, - { 9, 11, 573 }, { 9, 11, 706 }, { 9, 11, 762 }, { 9, 11, 798 }, - { 9, 11, 855 }, { 9, 11, 870 }, { 9, 11, 912 }, { 10, 11, 303 }, - { 10, 11, 335 }, { 10, 11, 424 }, { 10, 11, 461 }, { 10, 11, 543 }, - { 10, 11, 759 }, { 10, 11, 814 }, { 11, 11, 59 }, { 11, 11, 199 }, - { 11, 11, 235 }, { 11, 11, 475 }, { 11, 11, 590 }, { 11, 11, 929 }, - { 11, 11, 963 }, { 12, 11, 114 }, { 12, 11, 182 }, { 12, 11, 226 }, - { 12, 11, 332 }, { 12, 11, 439 }, { 12, 11, 575 }, { 12, 11, 598 }, - { 13, 11, 8 }, { 13, 11, 125 }, { 13, 11, 194 }, { 13, 11, 287 }, - { 14, 11, 197 }, { 14, 11, 383 }, { 15, 11, 53 }, { 17, 11, 63 }, - { 19, 11, 46 }, { 19, 11, 98 }, { 19, 11, 106 }, { 20, 11, 85 }, - { 4, 0, 127 }, { 5, 0, 350 }, { 6, 0, 356 }, { 8, 0, 426 }, - { 9, 0, 572 }, { 10, 0, 247 }, { 11, 0, 312 }, { 6, 0, 1215 }, - { 6, 0, 59 }, { 9, 0, 603 }, { 13, 0, 397 }, { 7, 11, 1853 }, - { 10, 11, 437 }, { 6, 0, 1762 }, { 19, 11, 126 }, { 7, 10, 883 }, - { 13, 0, 293 }, { 14, 0, 56 }, { 5, 10, 617 }, { 11, 10, 50 }, - { 5, 11, 187 }, { 7, 10, 1518 }, { 11, 10, 694 }, { 7, 0, 441 }, - { 6, 0, 111 }, { 7, 0, 4 }, { 8, 0, 163 }, { 8, 0, 776 }, - { 10, 0, 566 }, { 4, 0, 806 }, { 4, 11, 215 }, { 9, 11, 38 }, - { 10, 11, 3 }, { 11, 11, 23 }, { 11, 11, 127 }, { 11, 11, 796 }, - { 14, 0, 233 }, { 4, 10, 546 }, { 7, 10, 2042 }, { 7, 0, 1994 }, - { 6, 0, 1739 }, { 7, 11, 1530 }, { 8, 0, 393 }, { 5, 0, 297 }, - { 7, 0, 1038 }, { 14, 0, 359 }, { 19, 0, 52 }, { 20, 0, 47 }, - { 7, 0, 309 }, { 4, 10, 313 }, { 5, 10, 577 }, { 8, 10, 184 }, - { 13, 10, 433 }, { 7, 10, 935 }, { 12, 10, 186 }, { 12, 10, 292 }, - { 14, 10, 100 }, { 18, 10, 70 }, { 8, 0, 363 }, { 14, 0, 175 }, - { 11, 10, 402 }, { 12, 10, 109 }, { 12, 10, 431 }, { 13, 10, 179 }, - { 13, 10, 206 }, { 14, 10, 217 }, { 16, 10, 3 }, { 20, 10, 53 }, - { 5, 10, 886 }, { 6, 10, 46 }, { 6, 10, 1790 }, { 7, 10, 14 }, - { 7, 10, 732 }, { 7, 10, 1654 }, { 8, 10, 95 }, { 8, 10, 327 }, - { 8, 10, 616 }, { 9, 10, 892 }, { 10, 10, 598 }, { 10, 10, 769 }, - { 11, 10, 134 }, { 11, 10, 747 }, { 12, 10, 378 }, { 14, 10, 97 }, - { 8, 0, 666 }, { 7, 0, 1675 }, { 6, 0, 655 }, { 6, 0, 1600 }, - { 7, 0, 808 }, { 5, 10, 1021 }, { 4, 11, 28 }, { 5, 11, 440 }, - { 7, 11, 248 }, { 11, 11, 833 }, { 12, 11, 344 }, { 6, 11, 1654 }, - { 4, 0, 280 }, { 12, 0, 54 }, { 4, 0, 421 }, { 5, 0, 548 }, - { 4, 10, 153 }, { 6, 11, 339 }, { 7, 11, 923 }, { 5, 11, 853 }, - { 5, 10, 798 }, { 4, 10, 587 }, { 6, 11, 249 }, { 7, 11, 1234 }, - { 11, 11, 573 }, { 6, 10, 598 }, { 7, 10, 42 }, { 8, 10, 695 }, - { 10, 10, 212 }, { 11, 10, 158 }, { 14, 10, 196 }, { 17, 10, 85 }, - { 7, 0, 249 }, { 5, 10, 957 }, { 5, 10, 1008 }, { 4, 10, 129 }, - { 7, 10, 465 }, { 6, 0, 254 }, { 7, 0, 842 }, { 7, 0, 1659 }, - { 9, 0, 109 }, { 10, 0, 103 }, { 7, 10, 908 }, { 7, 10, 1201 }, - { 9, 10, 755 }, { 11, 10, 906 }, { 12, 10, 527 }, { 18, 10, 7 }, - { 5, 0, 262 }, { 8, 10, 450 }, { 16, 0, 1 }, { 10, 11, 201 }, - { 14, 11, 319 }, { 7, 11, 49 }, { 7, 11, 392 }, { 8, 11, 20 }, - { 8, 11, 172 }, { 8, 11, 690 }, { 9, 11, 383 }, { 9, 11, 845 }, - { 10, 11, 48 }, { 11, 11, 293 }, { 11, 11, 832 }, { 11, 11, 920 }, - { 13, 11, 221 }, { 5, 11, 858 }, { 5, 11, 992 }, { 6, 0, 805 }, - { 11, 10, 1003 }, { 6, 0, 1630 }, { 6, 11, 307 }, { 7, 11, 1512 }, - { 7, 11, 1794 }, { 6, 11, 268 }, { 9, 11, 62 }, { 7, 10, 1868 }, - { 5, 0, 671 }, { 4, 0, 989 }, { 8, 0, 972 }, { 8, 0, 998 }, - { 4, 11, 423 }, { 4, 0, 889 }, { 7, 0, 1382 }, { 7, 0, 1910 }, - { 7, 10, 965 }, { 7, 10, 1460 }, { 7, 10, 1604 }, { 4, 0, 627 }, - { 5, 0, 775 }, { 10, 11, 106 }, { 6, 11, 348 }, { 7, 0, 202 }, - { 11, 0, 362 }, { 11, 0, 948 }, { 12, 0, 388 }, { 10, 11, 771 }, - { 6, 11, 613 }, { 8, 11, 223 }, { 6, 0, 560 }, { 7, 0, 451 }, - { 8, 0, 389 }, { 12, 0, 490 }, { 13, 0, 16 }, { 13, 0, 215 }, - { 13, 0, 351 }, { 18, 0, 132 }, { 19, 0, 125 }, { 7, 0, 841 }, - { 8, 0, 566 }, { 8, 0, 938 }, { 4, 11, 670 }, { 5, 0, 912 }, - { 6, 0, 1695 }, { 12, 11, 55 }, { 9, 11, 40 }, { 11, 11, 136 }, - { 7, 0, 1361 }, { 7, 10, 982 }, { 10, 10, 32 }, { 15, 10, 56 }, - { 11, 11, 259 }, { 12, 11, 270 }, { 5, 0, 236 }, { 6, 0, 572 }, - { 8, 0, 492 }, { 11, 0, 618 }, { 16, 0, 56 }, { 8, 11, 572 }, - { 9, 11, 310 }, { 9, 11, 682 }, { 9, 11, 698 }, { 6, 0, 1854 }, - { 5, 0, 190 }, { 8, 0, 318 }, { 5, 10, 435 }, { 7, 0, 1376 }, - { 4, 11, 296 }, { 6, 11, 352 }, { 7, 11, 401 }, { 7, 11, 1410 }, - { 7, 11, 1594 }, { 7, 11, 1674 }, { 8, 11, 63 }, { 8, 11, 660 }, - { 9, 11, 74 }, { 7, 0, 349 }, { 5, 10, 85 }, { 6, 10, 419 }, - { 7, 10, 305 }, { 7, 10, 361 }, { 7, 10, 1337 }, { 8, 10, 71 }, - { 12, 10, 519 }, { 4, 11, 139 }, { 4, 11, 388 }, { 12, 11, 188 }, - { 6, 0, 1972 }, { 6, 0, 2013 }, { 8, 0, 951 }, { 10, 0, 947 }, - { 10, 0, 974 }, { 10, 0, 1018 }, { 14, 0, 476 }, { 12, 10, 688 }, - { 7, 10, 740 }, { 5, 10, 691 }, { 7, 10, 345 }, { 9, 10, 94 }, - { 12, 10, 169 }, { 9, 0, 344 }, { 5, 10, 183 }, { 6, 10, 582 }, - { 10, 10, 679 }, { 12, 10, 435 }, { 7, 10, 511 }, { 4, 0, 850 }, - { 8, 11, 441 }, { 10, 11, 314 }, { 15, 11, 3 }, { 7, 10, 1993 }, - { 8, 10, 684 }, { 4, 11, 747 }, { 6, 11, 290 }, { 6, 10, 583 }, - { 7, 11, 649 }, { 7, 11, 1479 }, { 7, 11, 1583 }, { 5, 11, 232 }, - { 5, 10, 704 }, { 6, 0, 910 }, { 4, 10, 179 }, { 5, 10, 198 }, - { 5, 10, 697 }, { 7, 10, 347 }, { 7, 10, 971 }, { 8, 10, 181 }, - { 10, 10, 711 }, { 8, 11, 525 }, { 14, 0, 19 }, { 14, 0, 28 }, - { 16, 0, 29 }, { 7, 0, 85 }, { 7, 0, 247 }, { 8, 0, 585 }, - { 10, 0, 163 }, { 4, 0, 487 }, { 7, 11, 472 }, { 7, 11, 1801 }, - { 10, 11, 748 }, { 13, 11, 458 }, { 4, 10, 243 }, { 5, 10, 203 }, - { 7, 10, 19 }, { 7, 10, 71 }, { 7, 10, 113 }, { 10, 10, 405 }, - { 11, 10, 357 }, { 14, 10, 240 }, { 7, 10, 1450 }, { 11, 10, 99 }, - { 4, 11, 425 }, { 10, 0, 145 }, { 19, 0, 83 }, { 6, 10, 492 }, - { 9, 11, 247 }, { 4, 0, 1013 }, { 6, 0, 2033 }, { 5, 10, 134 }, - { 6, 10, 408 }, { 6, 10, 495 }, { 7, 10, 1593 }, { 7, 0, 1922 }, - { 6, 11, 1768 }, { 4, 0, 124 }, { 10, 0, 457 }, { 11, 0, 121 }, - { 11, 0, 169 }, { 11, 0, 870 }, { 11, 0, 874 }, { 12, 0, 214 }, - { 14, 0, 187 }, { 15, 0, 77 }, { 5, 0, 557 }, { 7, 0, 1457 }, - { 11, 0, 66 }, { 5, 11, 943 }, { 6, 11, 1779 }, { 14, 10, 4 }, - { 4, 10, 248 }, { 4, 10, 665 }, { 7, 10, 137 }, { 9, 10, 349 }, - { 7, 0, 1193 }, { 5, 11, 245 }, { 6, 11, 576 }, { 7, 11, 582 }, - { 8, 11, 225 }, { 16, 0, 82 }, { 7, 10, 1270 }, { 11, 10, 612 }, - { 5, 0, 454 }, { 10, 0, 352 }, { 10, 11, 352 }, { 18, 0, 57 }, - { 5, 10, 371 }, { 7, 10, 563 }, { 7, 0, 1333 }, { 6, 0, 107 }, - { 7, 0, 638 }, { 7, 0, 1632 }, { 9, 0, 396 }, { 6, 11, 610 }, - { 5, 0, 370 }, { 6, 0, 1756 }, { 4, 10, 374 }, { 7, 10, 547 }, - { 7, 10, 1700 }, { 7, 10, 1833 }, { 11, 10, 858 }, { 5, 0, 204 }, - { 6, 0, 1305 }, { 9, 10, 311 }, { 13, 10, 42 }, { 5, 0, 970 }, - { 6, 0, 1706 }, { 6, 10, 1647 }, { 7, 10, 1552 }, { 7, 10, 2010 }, - { 9, 10, 494 }, { 9, 10, 509 }, { 13, 11, 455 }, { 15, 11, 99 }, - { 15, 11, 129 }, { 16, 11, 68 }, { 7, 0, 3 }, { 4, 0, 35 }, - { 5, 0, 121 }, { 5, 0, 483 }, { 5, 0, 685 }, { 6, 0, 489 }, - { 6, 0, 782 }, { 6, 0, 1032 }, { 7, 0, 1204 }, { 8, 0, 394 }, - { 4, 0, 921 }, { 5, 0, 1007 }, { 8, 11, 360 }, { 10, 11, 63 }, - { 7, 0, 1696 }, { 6, 0, 1519 }, { 4, 11, 443 }, { 7, 11, 944 }, - { 6, 10, 123 }, { 7, 10, 214 }, { 9, 10, 728 }, { 10, 10, 157 }, - { 11, 10, 346 }, { 11, 10, 662 }, { 15, 10, 106 }, { 9, 0, 981 }, - { 7, 10, 1435 }, { 6, 0, 1072 }, { 4, 0, 712 }, { 6, 0, 1629 }, - { 6, 0, 728 }, { 4, 11, 298 }, { 9, 11, 483 }, { 6, 0, 1177 }, - { 6, 0, 1271 }, { 5, 11, 164 }, { 7, 11, 121 }, { 14, 11, 189 }, - { 7, 0, 1608 }, { 4, 10, 707 }, { 5, 10, 588 }, { 6, 10, 393 }, - { 13, 10, 106 }, { 18, 10, 49 }, { 19, 10, 41 }, { 23, 0, 16 }, - { 23, 11, 16 }, { 6, 10, 211 }, { 7, 10, 1690 }, { 11, 10, 486 }, - { 12, 10, 369 }, { 5, 0, 485 }, { 19, 11, 15 }, { 21, 11, 27 }, - { 4, 11, 172 }, { 9, 11, 611 }, { 10, 11, 436 }, { 12, 11, 673 }, - { 13, 11, 255 }, { 5, 11, 844 }, { 10, 11, 484 }, { 11, 11, 754 }, - { 12, 11, 457 }, { 14, 11, 171 }, { 14, 11, 389 }, { 18, 11, 153 }, - { 4, 0, 285 }, { 5, 0, 27 }, { 5, 0, 317 }, { 6, 0, 301 }, - { 7, 0, 7 }, { 8, 0, 153 }, { 10, 0, 766 }, { 11, 0, 468 }, - { 12, 0, 467 }, { 13, 0, 143 }, { 6, 0, 1462 }, { 9, 11, 263 }, - { 10, 11, 147 }, { 10, 11, 492 }, { 5, 11, 537 }, { 6, 0, 1945 }, - { 6, 0, 1986 }, { 6, 0, 1991 }, { 6, 0, 2038 }, { 6, 10, 219 }, - { 9, 11, 842 }, { 14, 0, 52 }, { 17, 0, 50 }, { 5, 10, 582 }, - { 6, 10, 1646 }, { 7, 10, 99 }, { 7, 10, 1962 }, { 7, 10, 1986 }, - { 8, 10, 515 }, { 8, 10, 773 }, { 9, 10, 23 }, { 9, 10, 491 }, - { 12, 10, 620 }, { 14, 10, 93 }, { 10, 11, 97 }, { 20, 0, 21 }, - { 20, 0, 44 }, { 5, 10, 851 }, { 8, 0, 819 }, { 11, 0, 917 }, - { 5, 11, 230 }, { 5, 11, 392 }, { 6, 11, 420 }, { 8, 10, 762 }, - { 8, 10, 812 }, { 9, 11, 568 }, { 9, 10, 910 }, { 12, 11, 612 }, - { 7, 0, 784 }, { 15, 0, 135 }, { 15, 11, 135 }, { 10, 0, 454 }, - { 12, 0, 324 }, { 4, 11, 0 }, { 5, 11, 41 }, { 7, 11, 1459 }, - { 7, 11, 1469 }, { 7, 11, 1618 }, { 7, 11, 1859 }, { 9, 11, 549 }, - { 11, 11, 905 }, { 4, 10, 98 }, { 7, 10, 1365 }, { 9, 10, 422 }, - { 9, 10, 670 }, { 10, 10, 775 }, { 11, 10, 210 }, { 13, 10, 26 }, - { 13, 10, 457 }, { 13, 10, 476 }, { 6, 0, 1719 }, { 6, 0, 1735 }, - { 7, 0, 2016 }, { 7, 0, 2020 }, { 8, 0, 837 }, { 9, 0, 852 }, - { 5, 11, 696 }, { 7, 0, 852 }, { 4, 0, 952 }, { 6, 10, 1730 }, - { 4, 11, 771 }, { 10, 0, 568 }, { 9, 0, 448 }, { 11, 0, 146 }, - { 8, 0, 67 }, { 10, 0, 419 }, { 5, 11, 921 }, { 9, 10, 147 }, - { 6, 0, 1826 }, { 10, 0, 657 }, { 14, 0, 297 }, { 14, 0, 361 }, - { 6, 0, 666 }, { 6, 0, 767 }, { 6, 0, 1542 }, { 11, 0, 729 }, - { 6, 11, 180 }, { 7, 11, 1137 }, { 8, 11, 751 }, { 11, 11, 805 }, - { 4, 11, 183 }, { 7, 11, 271 }, { 11, 11, 824 }, { 11, 11, 952 }, - { 13, 11, 278 }, { 13, 11, 339 }, { 13, 11, 482 }, { 14, 11, 424 }, - { 20, 11, 99 }, { 4, 0, 669 }, { 5, 11, 477 }, { 5, 11, 596 }, - { 6, 11, 505 }, { 7, 11, 1221 }, { 11, 11, 907 }, { 12, 11, 209 }, - { 13, 11, 214 }, { 7, 11, 1215 }, { 5, 0, 402 }, { 6, 10, 30 }, - { 11, 10, 56 }, { 11, 10, 305 }, { 7, 11, 564 }, { 14, 11, 168 }, - { 11, 0, 152 }, { 7, 0, 912 }, { 7, 10, 1614 }, { 4, 10, 150 }, - { 5, 10, 303 }, { 6, 10, 327 }, { 7, 0, 320 }, { 8, 0, 51 }, - { 9, 0, 868 }, { 10, 0, 833 }, { 12, 0, 481 }, { 12, 0, 570 }, - { 20, 0, 106 }, { 4, 0, 445 }, { 7, 11, 274 }, { 11, 11, 263 }, - { 11, 11, 479 }, { 11, 11, 507 }, { 12, 11, 277 }, { 10, 0, 555 }, - { 11, 0, 308 }, { 19, 0, 95 }, { 6, 11, 1645 }, { 8, 10, 192 }, - { 10, 10, 78 }, { 13, 10, 359 }, { 7, 10, 786 }, { 6, 11, 92 }, - { 6, 11, 188 }, { 7, 11, 1269 }, { 7, 11, 1524 }, { 7, 11, 1876 }, - { 10, 11, 228 }, { 11, 11, 1020 }, { 4, 11, 459 }, { 5, 11, 966 }, - { 11, 0, 386 }, { 6, 10, 1638 }, { 7, 10, 79 }, { 7, 10, 496 }, - { 9, 10, 138 }, { 10, 10, 336 }, { 12, 10, 412 }, { 12, 10, 440 }, - { 14, 10, 305 }, { 5, 0, 239 }, { 7, 0, 83 }, { 7, 0, 1990 }, - { 8, 0, 130 }, { 11, 0, 720 }, { 10, 11, 709 }, { 4, 0, 143 }, - { 5, 0, 550 }, { 5, 0, 752 }, { 5, 0, 123 }, { 6, 0, 530 }, - { 7, 0, 348 }, { 7, 0, 1419 }, { 7, 0, 2024 }, { 6, 11, 18 }, - { 7, 11, 179 }, { 7, 11, 721 }, { 7, 11, 932 }, { 8, 11, 548 }, - { 8, 11, 757 }, { 9, 11, 54 }, { 9, 11, 65 }, { 9, 11, 532 }, - { 9, 11, 844 }, { 10, 11, 113 }, { 10, 11, 117 }, { 10, 11, 236 }, - { 10, 11, 315 }, { 10, 11, 430 }, { 10, 11, 798 }, { 11, 11, 153 }, - { 11, 11, 351 }, { 11, 11, 375 }, { 12, 11, 78 }, { 12, 11, 151 }, - { 12, 11, 392 }, { 14, 11, 248 }, { 15, 11, 23 }, { 7, 10, 204 }, - { 7, 10, 415 }, { 8, 10, 42 }, { 10, 10, 85 }, { 11, 10, 564 }, - { 6, 0, 958 }, { 5, 11, 965 }, { 4, 0, 210 }, { 7, 11, 1429 }, - { 10, 11, 480 }, { 6, 11, 182 }, { 11, 11, 345 }, { 10, 11, 65 }, - { 10, 11, 488 }, { 10, 11, 497 }, { 4, 10, 3 }, { 5, 10, 247 }, - { 5, 10, 644 }, { 7, 10, 744 }, { 7, 10, 1207 }, { 7, 10, 1225 }, - { 7, 10, 1909 }, { 18, 10, 147 }, { 4, 0, 430 }, { 5, 10, 285 }, - { 9, 10, 67 }, { 13, 10, 473 }, { 15, 10, 82 }, { 16, 11, 16 }, - { 7, 11, 1162 }, { 9, 11, 588 }, { 10, 11, 260 }, { 23, 10, 8 }, - { 5, 0, 213 }, { 10, 0, 7 }, { 7, 0, 801 }, { 6, 11, 1786 }, - { 7, 11, 308 }, { 6, 0, 936 }, { 6, 0, 1289 }, { 5, 0, 108 }, - { 4, 0, 885 }, { 5, 0, 219 }, { 11, 0, 587 }, { 4, 0, 193 }, - { 5, 0, 916 }, { 6, 0, 1041 }, { 7, 0, 364 }, { 10, 0, 398 }, - { 10, 0, 726 }, { 11, 0, 317 }, { 11, 0, 626 }, { 12, 0, 142 }, - { 12, 0, 288 }, { 12, 0, 678 }, { 13, 0, 313 }, { 15, 0, 113 }, - { 18, 0, 114 }, { 7, 0, 1165 }, { 6, 0, 241 }, { 9, 0, 342 }, - { 10, 0, 729 }, { 11, 0, 284 }, { 11, 0, 445 }, { 11, 0, 651 }, - { 11, 0, 863 }, { 13, 0, 398 }, { 18, 0, 99 }, { 7, 0, 907 }, - { 8, 0, 832 }, { 9, 0, 303 }, { 4, 10, 29 }, { 6, 10, 532 }, - { 7, 10, 1628 }, { 7, 10, 1648 }, { 9, 10, 350 }, { 10, 10, 433 }, - { 11, 10, 97 }, { 11, 10, 557 }, { 11, 10, 745 }, { 12, 10, 289 }, - { 12, 10, 335 }, { 12, 10, 348 }, { 12, 10, 606 }, { 13, 10, 116 }, - { 13, 10, 233 }, { 13, 10, 466 }, { 14, 10, 181 }, { 14, 10, 209 }, - { 14, 10, 232 }, { 14, 10, 236 }, { 14, 10, 300 }, { 16, 10, 41 }, - { 20, 10, 97 }, { 7, 11, 423 }, { 7, 10, 1692 }, { 8, 11, 588 }, - { 6, 0, 931 }, { 6, 0, 1454 }, { 5, 10, 501 }, { 7, 10, 1704 }, - { 9, 10, 553 }, { 11, 10, 520 }, { 12, 10, 557 }, { 13, 10, 249 }, - { 8, 11, 287 }, { 4, 0, 562 }, { 9, 0, 254 }, { 11, 0, 879 }, - { 4, 0, 786 }, { 14, 11, 32 }, { 18, 11, 85 }, { 20, 11, 2 }, - { 24, 11, 16 }, { 7, 0, 1294 }, { 7, 11, 723 }, { 7, 11, 1135 }, - { 6, 0, 216 }, { 7, 0, 901 }, { 7, 0, 1343 }, { 8, 0, 493 }, - { 6, 11, 403 }, { 7, 11, 719 }, { 8, 11, 809 }, { 8, 11, 834 }, - { 5, 11, 210 }, { 6, 11, 213 }, { 7, 11, 60 }, { 10, 11, 364 }, - { 11, 11, 135 }, { 7, 0, 341 }, { 11, 0, 219 }, { 5, 11, 607 }, - { 8, 11, 326 }, { 8, 11, 490 }, { 4, 11, 701 }, { 5, 11, 472 }, - { 5, 11, 639 }, { 7, 11, 1249 }, { 9, 11, 758 }, { 11, 11, 896 }, - { 7, 11, 380 }, { 7, 11, 1947 }, { 11, 0, 130 }, { 7, 0, 1734 }, - { 10, 0, 115 }, { 11, 0, 420 }, { 12, 0, 154 }, { 13, 0, 404 }, - { 14, 0, 346 }, { 15, 0, 54 }, { 6, 10, 129 }, { 4, 11, 386 }, - { 7, 11, 41 }, { 8, 11, 405 }, { 9, 11, 497 }, { 11, 11, 110 }, - { 11, 11, 360 }, { 15, 11, 37 }, { 16, 11, 84 }, { 13, 11, 282 }, - { 5, 11, 46 }, { 7, 11, 1452 }, { 7, 11, 1480 }, { 8, 11, 634 }, - { 12, 11, 472 }, { 4, 11, 524 }, { 8, 11, 810 }, { 10, 11, 238 }, - { 13, 11, 33 }, { 5, 0, 604 }, { 5, 0, 1011 }, { 8, 0, 701 }, - { 8, 0, 856 }, { 8, 0, 858 }, { 8, 0, 879 }, { 12, 0, 702 }, - { 14, 0, 447 }, { 4, 0, 54 }, { 5, 0, 666 }, { 7, 0, 1039 }, - { 7, 0, 1130 }, { 9, 0, 195 }, { 10, 0, 302 }, { 4, 10, 25 }, - { 5, 10, 60 }, { 6, 10, 504 }, { 7, 10, 614 }, { 7, 10, 1155 }, - { 12, 10, 0 }, { 7, 10, 1248 }, { 11, 10, 621 }, { 11, 10, 702 }, - { 5, 11, 997 }, { 9, 10, 321 }, { 6, 0, 1669 }, { 6, 0, 1791 }, - { 4, 10, 379 }, { 7, 10, 1397 }, { 10, 11, 372 }, { 5, 11, 782 }, - { 5, 11, 829 }, { 6, 11, 1738 }, { 7, 0, 1228 }, { 4, 10, 118 }, - { 6, 10, 274 }, { 6, 10, 361 }, { 7, 10, 75 }, { 13, 10, 441 }, - { 4, 0, 623 }, { 9, 11, 279 }, { 10, 11, 407 }, { 14, 11, 84 }, - { 22, 11, 18 }, { 9, 10, 841 }, { 7, 0, 798 }, { 12, 10, 693 }, - { 5, 10, 314 }, { 6, 10, 221 }, { 7, 10, 419 }, { 10, 10, 650 }, - { 11, 10, 396 }, { 12, 10, 156 }, { 13, 10, 369 }, { 14, 10, 333 }, - { 17, 10, 47 }, { 7, 11, 1372 }, { 7, 0, 122 }, { 9, 0, 259 }, - { 10, 0, 84 }, { 11, 0, 470 }, { 12, 0, 541 }, { 13, 0, 379 }, - { 6, 0, 837 }, { 8, 0, 1013 }, { 4, 11, 78 }, { 5, 11, 96 }, - { 5, 11, 182 }, { 7, 11, 1724 }, { 7, 11, 1825 }, { 10, 11, 394 }, - { 10, 11, 471 }, { 11, 11, 532 }, { 14, 11, 340 }, { 17, 11, 88 }, - { 6, 0, 577 }, { 7, 11, 1964 }, { 4, 10, 913 }, { 6, 0, 460 }, - { 8, 0, 891 }, { 10, 0, 901 }, { 10, 0, 919 }, { 10, 0, 932 }, - { 12, 0, 715 }, { 12, 0, 728 }, { 12, 0, 777 }, { 14, 0, 457 }, - { 16, 0, 103 }, { 5, 0, 82 }, { 5, 0, 131 }, { 7, 0, 1755 }, - { 8, 0, 31 }, { 9, 0, 168 }, { 9, 0, 764 }, { 11, 0, 869 }, - { 8, 10, 475 }, { 6, 0, 605 }, { 5, 10, 1016 }, { 9, 11, 601 }, - { 9, 11, 619 }, { 10, 11, 505 }, { 10, 11, 732 }, { 11, 11, 355 }, - { 12, 11, 139 }, { 7, 10, 602 }, { 8, 10, 179 }, { 10, 10, 781 }, - { 12, 10, 126 }, { 6, 0, 1246 }, { 6, 10, 329 }, { 10, 10, 111 }, - { 6, 11, 215 }, { 7, 11, 1028 }, { 7, 11, 1473 }, { 7, 11, 1721 }, - { 9, 11, 424 }, { 10, 11, 779 }, { 5, 0, 278 }, { 9, 0, 68 }, - { 6, 0, 932 }, { 6, 0, 1084 }, { 16, 0, 86 }, { 4, 0, 163 }, - { 5, 0, 201 }, { 5, 0, 307 }, { 5, 0, 310 }, { 6, 0, 335 }, - { 7, 0, 284 }, { 7, 0, 1660 }, { 8, 0, 165 }, { 8, 0, 781 }, - { 6, 0, 707 }, { 6, 0, 33 }, { 7, 0, 1244 }, { 5, 10, 821 }, - { 6, 11, 67 }, { 6, 10, 1687 }, { 7, 11, 258 }, { 7, 11, 1630 }, - { 9, 11, 354 }, { 9, 11, 675 }, { 10, 11, 830 }, { 14, 11, 80 }, - { 17, 11, 80 }, { 6, 11, 141 }, { 7, 11, 225 }, { 9, 11, 59 }, - { 9, 11, 607 }, { 10, 11, 312 }, { 11, 11, 687 }, { 12, 11, 555 }, - { 13, 11, 373 }, { 13, 11, 494 }, { 20, 11, 58 }, { 6, 0, 1113 }, - { 9, 0, 388 }, { 5, 10, 71 }, { 7, 10, 1407 }, { 9, 10, 704 }, - { 10, 10, 261 }, { 10, 10, 619 }, { 11, 10, 547 }, { 11, 10, 619 }, - { 15, 10, 157 }, { 7, 0, 1953 }, { 8, 0, 720 }, { 10, 0, 203 }, - { 7, 10, 2008 }, { 9, 10, 337 }, { 10, 10, 517 }, { 6, 0, 326 }, - { 7, 0, 677 }, { 9, 0, 425 }, { 11, 11, 81 }, { 7, 0, 1316 }, - { 7, 0, 1412 }, { 7, 0, 1839 }, { 9, 0, 589 }, { 11, 0, 241 }, - { 11, 0, 676 }, { 11, 0, 811 }, { 11, 0, 891 }, { 12, 0, 140 }, - { 12, 0, 346 }, { 12, 0, 479 }, { 13, 0, 140 }, { 13, 0, 381 }, - { 14, 0, 188 }, { 18, 0, 30 }, { 20, 0, 108 }, { 5, 0, 416 }, - { 6, 10, 86 }, { 6, 10, 603 }, { 7, 10, 292 }, { 7, 10, 561 }, - { 8, 10, 257 }, { 8, 10, 382 }, { 9, 10, 721 }, { 9, 10, 778 }, - { 11, 10, 581 }, { 12, 10, 466 }, { 4, 10, 486 }, { 5, 10, 491 }, - { 6, 0, 1300 }, { 4, 10, 72 }, { 7, 0, 847 }, { 6, 10, 265 }, - { 7, 11, 430 }, { 11, 11, 46 }, { 5, 11, 602 }, { 6, 11, 106 }, - { 7, 11, 1786 }, { 7, 11, 1821 }, { 7, 11, 2018 }, { 9, 11, 418 }, - { 9, 11, 763 }, { 5, 0, 358 }, { 7, 0, 535 }, { 7, 0, 1184 }, - { 10, 0, 662 }, { 13, 0, 212 }, { 13, 0, 304 }, { 13, 0, 333 }, - { 17, 0, 98 }, { 5, 11, 65 }, { 6, 11, 416 }, { 7, 11, 1720 }, - { 7, 11, 1924 }, { 8, 11, 677 }, { 10, 11, 109 }, { 11, 11, 14 }, - { 11, 11, 70 }, { 11, 11, 569 }, { 11, 11, 735 }, { 15, 11, 153 }, - { 20, 11, 80 }, { 6, 0, 1823 }, { 8, 0, 839 }, { 8, 0, 852 }, - { 8, 0, 903 }, { 10, 0, 940 }, { 12, 0, 707 }, { 12, 0, 775 }, - { 7, 11, 1229 }, { 6, 0, 1522 }, { 12, 0, 654 }, { 8, 11, 595 }, - { 11, 0, 163 }, { 13, 0, 314 }, { 4, 0, 978 }, { 4, 0, 601 }, - { 6, 0, 2035 }, { 9, 10, 234 }, { 5, 10, 815 }, { 6, 10, 1688 }, - { 6, 10, 1755 }, { 5, 0, 946 }, { 8, 0, 434 }, { 6, 10, 197 }, - { 8, 10, 205 }, { 7, 0, 411 }, { 7, 0, 590 }, { 8, 0, 631 }, - { 9, 0, 323 }, { 10, 0, 355 }, { 11, 0, 491 }, { 12, 0, 143 }, - { 12, 0, 402 }, { 13, 0, 73 }, { 14, 0, 408 }, { 15, 0, 107 }, - { 18, 0, 71 }, { 7, 0, 1467 }, { 8, 0, 328 }, { 10, 0, 544 }, - { 11, 0, 955 }, { 12, 0, 13 }, { 13, 0, 320 }, { 17, 0, 83 }, - { 14, 0, 410 }, { 11, 0, 511 }, { 13, 0, 394 }, { 14, 0, 298 }, - { 14, 0, 318 }, { 18, 0, 103 }, { 6, 10, 452 }, { 7, 10, 312 }, - { 10, 10, 219 }, { 10, 10, 589 }, { 4, 10, 333 }, { 9, 10, 176 }, - { 12, 10, 353 }, { 13, 10, 187 }, { 7, 11, 329 }, { 4, 11, 469 }, - { 5, 0, 835 }, { 6, 0, 483 }, { 6, 11, 1743 }, { 5, 11, 929 }, - { 6, 11, 340 }, { 8, 11, 376 }, { 8, 11, 807 }, { 6, 10, 1685 }, - { 4, 0, 677 }, { 5, 11, 218 }, { 7, 11, 1610 }, { 10, 11, 83 }, - { 5, 11, 571 }, { 7, 11, 1842 }, { 4, 11, 455 }, { 9, 0, 70 }, - { 7, 0, 1405 }, { 7, 10, 135 }, { 8, 10, 7 }, { 8, 10, 62 }, - { 9, 10, 243 }, { 10, 10, 658 }, { 10, 10, 697 }, { 11, 10, 456 }, - { 11, 10, 756 }, { 9, 10, 395 }, { 10, 10, 79 }, { 9, 0, 108 }, - { 6, 11, 161 }, { 7, 11, 372 }, { 9, 11, 597 }, { 4, 11, 349 }, - { 4, 0, 777 }, { 4, 0, 331 }, { 7, 10, 631 }, { 5, 0, 747 }, - { 6, 11, 432 }, { 6, 11, 608 }, { 11, 11, 322 }, { 10, 10, 835 }, - { 5, 11, 468 }, { 7, 11, 1809 }, { 10, 11, 325 }, { 11, 11, 856 }, - { 12, 11, 345 }, { 15, 11, 104 }, { 5, 11, 223 }, { 7, 10, 406 }, - { 7, 10, 459 }, { 8, 10, 606 }, { 11, 10, 726 }, { 4, 11, 566 }, - { 14, 0, 68 }, { 4, 11, 59 }, { 7, 11, 1394 }, { 6, 11, 436 }, - { 11, 11, 481 }, { 4, 11, 48 }, { 5, 11, 271 }, { 7, 11, 953 }, - { 11, 11, 170 }, { 5, 11, 610 }, { 8, 11, 457 }, { 5, 11, 755 }, - { 7, 11, 1217 }, { 5, 10, 612 }, { 4, 11, 197 }, { 4, 0, 505 }, - { 4, 10, 372 }, { 7, 10, 482 }, { 8, 10, 158 }, { 9, 10, 602 }, - { 9, 10, 615 }, { 10, 10, 245 }, { 10, 10, 678 }, { 10, 10, 744 }, - { 11, 10, 248 }, { 11, 10, 806 }, { 5, 0, 326 }, { 5, 10, 854 }, - { 7, 10, 1991 }, { 4, 0, 691 }, { 18, 0, 16 }, { 6, 0, 628 }, - { 9, 0, 35 }, { 10, 0, 680 }, { 10, 0, 793 }, { 11, 0, 364 }, - { 13, 0, 357 }, { 15, 0, 164 }, { 10, 0, 654 }, { 6, 0, 32 }, - { 7, 0, 385 }, { 7, 0, 757 }, { 7, 0, 1916 }, { 8, 0, 37 }, - { 8, 0, 94 }, { 8, 0, 711 }, { 9, 0, 541 }, { 10, 0, 162 }, - { 10, 0, 795 }, { 11, 0, 989 }, { 11, 0, 1010 }, { 12, 0, 14 }, - { 14, 0, 308 }, { 5, 11, 217 }, { 6, 0, 152 }, { 6, 0, 349 }, - { 6, 0, 1682 }, { 7, 0, 1252 }, { 8, 0, 112 }, { 9, 0, 435 }, - { 9, 0, 668 }, { 10, 0, 290 }, { 10, 0, 319 }, { 10, 0, 815 }, - { 11, 0, 180 }, { 11, 0, 837 }, { 12, 0, 240 }, { 13, 0, 152 }, - { 13, 0, 219 }, { 14, 0, 158 }, { 4, 0, 581 }, { 6, 0, 726 }, - { 5, 10, 195 }, { 7, 10, 1685 }, { 6, 0, 126 }, { 7, 0, 573 }, - { 8, 0, 397 }, { 14, 0, 44 }, { 10, 0, 89 }, { 7, 10, 1997 }, - { 8, 10, 730 }, { 11, 10, 1006 }, { 6, 0, 1531 }, { 6, 0, 1167 }, - { 5, 0, 926 }, { 12, 0, 203 }, { 5, 10, 751 }, { 4, 11, 165 }, - { 7, 11, 1398 }, { 7, 11, 1829 }, { 7, 0, 1232 }, { 9, 0, 531 }, - { 7, 10, 821 }, { 6, 0, 943 }, { 5, 0, 670 }, { 4, 0, 880 }, - { 11, 0, 231 }, { 6, 0, 1617 }, { 7, 0, 1957 }, { 5, 11, 9 }, - { 7, 11, 297 }, { 7, 11, 966 }, { 12, 11, 306 }, { 6, 0, 975 }, - { 6, 0, 985 }, { 5, 10, 950 }, { 5, 10, 994 }, { 6, 10, 351 }, - { 12, 11, 21 }, { 23, 11, 7 }, { 5, 11, 146 }, { 6, 11, 411 }, - { 10, 11, 721 }, { 7, 0, 242 }, { 7, 0, 1942 }, { 6, 11, 177 }, - { 7, 11, 467 }, { 5, 0, 421 }, { 7, 10, 47 }, { 9, 10, 684 }, - { 5, 0, 834 }, { 7, 0, 1202 }, { 8, 0, 14 }, { 9, 0, 481 }, - { 9, 0, 880 }, { 10, 0, 465 }, { 6, 0, 688 }, { 9, 0, 834 }, - { 4, 10, 350 }, { 4, 0, 855 }, { 4, 0, 357 }, { 6, 0, 172 }, - { 7, 0, 143 }, { 9, 0, 413 }, { 5, 11, 200 }, { 4, 0, 590 }, - { 7, 10, 1812 }, { 13, 10, 259 }, { 13, 10, 356 }, { 14, 10, 242 }, - { 19, 10, 114 }, { 5, 10, 967 }, { 11, 0, 114 }, { 4, 10, 473 }, - { 7, 10, 623 }, { 8, 10, 808 }, { 9, 10, 871 }, { 9, 10, 893 }, - { 11, 10, 431 }, { 12, 10, 112 }, { 12, 10, 217 }, { 12, 10, 243 }, - { 12, 10, 562 }, { 12, 10, 663 }, { 12, 10, 683 }, { 13, 10, 141 }, - { 13, 10, 197 }, { 13, 10, 227 }, { 13, 10, 406 }, { 13, 10, 487 }, - { 14, 10, 156 }, { 14, 10, 203 }, { 14, 10, 224 }, { 14, 10, 256 }, - { 18, 10, 58 }, { 22, 10, 0 }, { 10, 10, 286 }, { 4, 10, 222 }, - { 7, 10, 286 }, { 8, 10, 629 }, { 5, 0, 169 }, { 7, 0, 333 }, - { 8, 0, 45 }, { 6, 11, 481 }, { 4, 0, 198 }, { 4, 0, 24 }, - { 5, 0, 140 }, { 5, 0, 185 }, { 7, 0, 1500 }, { 11, 0, 565 }, - { 11, 0, 838 }, { 4, 11, 84 }, { 7, 11, 1482 }, { 10, 11, 76 }, - { 10, 11, 142 }, { 5, 0, 585 }, { 13, 10, 306 }, { 5, 11, 1015 }, - { 4, 11, 315 }, { 5, 11, 507 }, { 7, 11, 1370 }, { 8, 10, 146 }, - { 6, 0, 691 }, { 6, 0, 1503 }, { 4, 0, 334 }, { 5, 0, 593 }, - { 4, 10, 465 }, { 7, 10, 1663 }, { 14, 11, 173 }, { 7, 0, 913 }, - { 12, 0, 116 }, { 6, 11, 1722 }, { 6, 0, 1360 }, { 4, 0, 802 }, - { 8, 11, 222 }, { 8, 11, 476 }, { 9, 11, 238 }, { 11, 11, 516 }, - { 11, 11, 575 }, { 15, 11, 109 }, { 18, 11, 100 }, { 6, 0, 308 }, - { 9, 0, 673 }, { 7, 10, 138 }, { 7, 10, 517 }, { 11, 10, 238 }, - { 4, 0, 709 }, { 6, 0, 1876 }, { 6, 0, 1895 }, { 9, 0, 994 }, - { 9, 0, 1006 }, { 12, 0, 829 }, { 12, 0, 888 }, { 12, 0, 891 }, - { 18, 0, 185 }, { 20, 10, 94 }, { 4, 0, 228 }, { 5, 0, 897 }, - { 7, 0, 1840 }, { 5, 10, 495 }, { 7, 10, 834 }, { 9, 10, 733 }, - { 11, 10, 378 }, { 5, 10, 559 }, { 6, 10, 21 }, { 6, 10, 1737 }, - { 7, 10, 1444 }, { 8, 10, 224 }, { 4, 0, 608 }, { 5, 0, 497 }, - { 6, 11, 40 }, { 7, 11, 1781 }, { 6, 0, 1573 }, { 7, 0, 2039 }, - { 6, 0, 540 }, { 8, 0, 136 }, { 4, 0, 897 }, { 5, 0, 786 }, - { 5, 10, 519 }, { 6, 0, 1878 }, { 6, 0, 1884 }, { 9, 0, 938 }, - { 9, 0, 948 }, { 9, 0, 955 }, { 9, 0, 973 }, { 9, 0, 1012 }, - { 12, 0, 895 }, { 12, 0, 927 }, { 15, 0, 254 }, { 6, 0, 1469 }, - { 5, 0, 999 }, { 4, 0, 299 }, { 7, 0, 1004 }, { 4, 0, 745 }, - { 5, 0, 578 }, { 8, 11, 574 }, { 5, 0, 456 }, { 6, 0, 1457 }, - { 7, 0, 1679 }, { 4, 10, 402 }, { 7, 0, 693 }, { 8, 0, 180 }, - { 12, 0, 163 }, { 8, 10, 323 }, { 8, 10, 479 }, { 11, 10, 580 }, - { 14, 10, 201 }, { 5, 10, 59 }, { 7, 10, 672 }, { 4, 11, 354 }, - { 18, 10, 34 }, { 4, 0, 755 }, { 7, 11, 1558 }, { 7, 0, 1740 }, - { 18, 0, 48 }, { 4, 10, 85 }, { 7, 10, 549 }, { 11, 0, 338 }, - { 5, 10, 94 }, { 6, 0, 1091 }, { 7, 11, 469 }, { 12, 0, 695 }, - { 12, 0, 704 }, { 20, 0, 113 }, { 5, 11, 830 }, { 14, 11, 338 }, - { 20, 11, 81 }, { 7, 0, 1464 }, { 6, 10, 11 }, { 7, 10, 187 }, - { 7, 0, 975 }, { 13, 0, 335 }, { 4, 10, 522 }, { 6, 0, 1979 }, - { 5, 11, 496 }, { 7, 11, 203 }, { 4, 10, 52 }, { 7, 10, 661 }, - { 7, 0, 1566 }, { 8, 0, 269 }, { 9, 0, 212 }, { 9, 0, 718 }, - { 14, 0, 15 }, { 14, 0, 132 }, { 14, 0, 227 }, { 4, 0, 890 }, - { 5, 0, 805 }, { 5, 0, 819 }, { 5, 0, 961 }, { 6, 0, 396 }, - { 6, 0, 1631 }, { 6, 0, 1678 }, { 7, 0, 1967 }, { 7, 0, 2041 }, - { 9, 0, 630 }, { 11, 0, 8 }, { 11, 0, 1019 }, { 12, 0, 176 }, - { 13, 0, 225 }, { 14, 0, 292 }, { 21, 0, 24 }, { 4, 10, 383 }, - { 5, 10, 520 }, { 6, 11, 547 }, { 7, 11, 1748 }, { 5, 11, 88 }, - { 9, 11, 239 }, { 18, 11, 128 }, { 7, 11, 650 }, { 7, 11, 1310 }, - { 4, 10, 281 }, { 5, 10, 38 }, { 7, 10, 194 }, { 7, 10, 668 }, - { 7, 10, 1893 }, { 9, 10, 397 }, { 7, 0, 1815 }, { 9, 10, 635 }, - { 11, 10, 559 }, { 7, 0, 1505 }, { 10, 0, 190 }, { 10, 0, 634 }, - { 11, 0, 792 }, { 12, 0, 358 }, { 12, 0, 447 }, { 5, 0, 0 }, - { 6, 0, 536 }, { 7, 0, 604 }, { 13, 0, 445 }, { 17, 0, 126 }, - { 7, 11, 1076 }, { 9, 11, 80 }, { 11, 11, 78 }, { 11, 11, 421 }, - { 11, 11, 534 }, { 12, 11, 545 }, { 8, 0, 966 }, { 10, 0, 1023 }, - { 14, 11, 369 }, { 18, 11, 72 }, { 7, 11, 1641 }, { 6, 0, 232 }, - { 6, 0, 412 }, { 7, 0, 1074 }, { 8, 0, 9 }, { 8, 0, 157 }, - { 8, 0, 786 }, { 9, 0, 196 }, { 9, 0, 352 }, { 9, 0, 457 }, - { 10, 0, 337 }, { 11, 0, 232 }, { 11, 0, 877 }, { 12, 0, 480 }, - { 12, 0, 546 }, { 7, 0, 958 }, { 4, 0, 382 }, { 8, 0, 579 }, - { 4, 0, 212 }, { 7, 0, 1206 }, { 4, 11, 497 }, { 5, 11, 657 }, - { 7, 11, 1584 }, { 4, 0, 681 }, { 8, 0, 971 }, { 10, 0, 965 }, - { 5, 10, 448 }, { 8, 10, 535 }, { 14, 0, 16 }, { 18, 0, 44 }, - { 11, 0, 584 }, { 11, 0, 616 }, { 14, 0, 275 }, { 11, 11, 584 }, - { 11, 11, 616 }, { 14, 11, 275 }, { 8, 11, 13 }, { 7, 10, 610 }, - { 7, 10, 1501 }, { 7, 11, 642 }, { 8, 11, 250 }, { 11, 11, 123 }, - { 11, 11, 137 }, { 13, 11, 48 }, { 14, 11, 95 }, { 5, 0, 655 }, - { 17, 0, 67 }, { 19, 0, 74 }, { 6, 0, 751 }, { 6, 0, 1967 }, - { 6, 0, 231 }, { 8, 0, 423 }, { 5, 0, 300 }, { 10, 0, 1016 }, - { 4, 10, 319 }, { 5, 10, 699 }, { 10, 10, 673 }, { 6, 0, 237 }, - { 7, 0, 611 }, { 8, 0, 100 }, { 9, 0, 416 }, { 11, 0, 335 }, - { 12, 0, 173 }, { 18, 0, 101 }, { 6, 10, 336 }, { 8, 10, 552 }, - { 9, 10, 285 }, { 10, 10, 99 }, { 11, 10, 568 }, { 6, 0, 1370 }, - { 7, 10, 1406 }, { 9, 10, 218 }, { 13, 10, 222 }, { 5, 10, 256 }, - { 7, 0, 1208 }, { 14, 11, 213 }, { 20, 11, 38 }, { 6, 0, 1219 }, - { 7, 11, 1642 }, { 13, 0, 417 }, { 14, 0, 129 }, { 15, 0, 15 }, - { 10, 11, 545 }, { 12, 11, 301 }, { 17, 10, 39 }, { 20, 10, 36 }, - { 5, 0, 199 }, { 4, 11, 904 }, { 5, 11, 794 }, { 12, 0, 427 }, - { 18, 0, 38 }, { 6, 0, 949 }, { 8, 0, 665 }, { 7, 10, 634 }, - { 4, 10, 618 }, { 7, 10, 259 }, { 4, 10, 339 }, { 5, 11, 761 }, - { 13, 10, 169 }, { 4, 10, 759 }, { 5, 0, 688 }, { 7, 0, 539 }, - { 7, 0, 712 }, { 7, 11, 386 }, { 10, 11, 713 }, { 6, 0, 1186 }, - { 6, 11, 7 }, { 6, 11, 35 }, { 7, 11, 147 }, { 7, 11, 1069 }, - { 7, 11, 1568 }, { 7, 11, 1575 }, { 7, 11, 1917 }, { 8, 11, 43 }, - { 8, 11, 208 }, { 9, 11, 128 }, { 9, 11, 866 }, { 10, 11, 20 }, - { 11, 11, 981 }, { 19, 11, 33 }, { 7, 11, 893 }, { 8, 10, 482 }, - { 13, 11, 424 }, { 6, 0, 312 }, { 6, 0, 1715 }, { 10, 0, 584 }, - { 11, 0, 546 }, { 11, 0, 692 }, { 12, 0, 259 }, { 12, 0, 295 }, - { 13, 0, 46 }, { 13, 0, 154 }, { 5, 10, 336 }, { 6, 10, 341 }, - { 6, 10, 478 }, { 6, 10, 1763 }, { 8, 10, 386 }, { 9, 0, 151 }, - { 4, 0, 588 }, { 24, 0, 4 }, { 6, 11, 322 }, { 9, 11, 552 }, - { 11, 11, 274 }, { 13, 11, 209 }, { 13, 11, 499 }, { 14, 11, 85 }, - { 15, 11, 126 }, { 17, 11, 70 }, { 7, 10, 73 }, { 4, 0, 231 }, - { 5, 0, 61 }, { 6, 0, 104 }, { 7, 0, 729 }, { 7, 0, 964 }, - { 7, 0, 1658 }, { 12, 0, 414 }, { 6, 0, 263 }, { 10, 0, 757 }, - { 7, 10, 1971 }, { 4, 0, 612 }, { 5, 0, 561 }, { 4, 0, 320 }, - { 7, 10, 1344 }, { 8, 11, 83 }, { 8, 11, 817 }, { 9, 11, 28 }, - { 9, 11, 29 }, { 9, 11, 885 }, { 10, 11, 387 }, { 11, 11, 633 }, - { 11, 11, 740 }, { 13, 11, 235 }, { 13, 11, 254 }, { 15, 11, 143 }, - { 15, 11, 146 }, { 5, 10, 396 }, { 6, 10, 501 }, { 12, 11, 49 }, - { 4, 0, 225 }, { 4, 10, 929 }, { 5, 10, 799 }, { 8, 10, 46 }, - { 8, 10, 740 }, { 4, 0, 405 }, { 7, 0, 817 }, { 14, 0, 58 }, - { 17, 0, 37 }, { 18, 0, 124 }, { 5, 0, 974 }, { 4, 11, 412 }, - { 5, 11, 581 }, { 4, 10, 892 }, { 5, 10, 770 }, { 4, 0, 996 }, - { 6, 0, 2026 }, { 4, 0, 527 }, { 5, 0, 235 }, { 7, 0, 1239 }, - { 11, 0, 131 }, { 12, 0, 370 }, { 9, 0, 16 }, { 13, 0, 386 }, - { 7, 11, 421 }, { 7, 0, 956 }, { 7, 0, 1157 }, { 7, 0, 1506 }, - { 7, 0, 1606 }, { 7, 0, 1615 }, { 7, 0, 1619 }, { 7, 0, 1736 }, - { 7, 0, 1775 }, { 8, 0, 590 }, { 9, 0, 324 }, { 9, 0, 736 }, - { 9, 0, 774 }, { 9, 0, 776 }, { 9, 0, 784 }, { 10, 0, 567 }, - { 10, 0, 708 }, { 11, 0, 518 }, { 11, 0, 613 }, { 11, 0, 695 }, - { 11, 0, 716 }, { 11, 0, 739 }, { 11, 0, 770 }, { 11, 0, 771 }, - { 11, 0, 848 }, { 11, 0, 857 }, { 11, 0, 931 }, { 11, 0, 947 }, - { 12, 0, 326 }, { 12, 0, 387 }, { 12, 0, 484 }, { 12, 0, 528 }, - { 12, 0, 552 }, { 12, 0, 613 }, { 13, 0, 189 }, { 13, 0, 256 }, - { 13, 0, 340 }, { 13, 0, 432 }, { 13, 0, 436 }, { 13, 0, 440 }, - { 13, 0, 454 }, { 14, 0, 174 }, { 14, 0, 220 }, { 14, 0, 284 }, - { 14, 0, 390 }, { 17, 0, 121 }, { 7, 10, 158 }, { 9, 0, 137 }, - { 10, 0, 221 }, { 4, 11, 110 }, { 10, 11, 415 }, { 10, 11, 597 }, - { 14, 11, 206 }, { 13, 11, 496 }, { 7, 11, 205 }, { 23, 10, 25 }, - { 7, 11, 778 }, { 7, 11, 1656 }, { 7, 10, 2001 }, { 9, 11, 369 }, - { 10, 11, 338 }, { 10, 11, 490 }, { 11, 11, 154 }, { 11, 11, 545 }, - { 11, 11, 775 }, { 13, 11, 77 }, { 13, 11, 274 }, { 4, 11, 444 }, - { 10, 11, 146 }, { 12, 11, 9 }, { 7, 0, 390 }, { 10, 0, 140 }, - { 7, 0, 1144 }, { 6, 0, 464 }, { 7, 10, 1461 }, { 12, 10, 91 }, - { 4, 10, 602 }, { 4, 11, 283 }, { 7, 11, 1194 }, { 5, 0, 407 }, - { 11, 0, 204 }, { 11, 0, 243 }, { 11, 0, 489 }, { 12, 0, 293 }, - { 19, 0, 37 }, { 20, 0, 73 }, { 22, 0, 38 }, { 7, 0, 1218 }, - { 8, 0, 303 }, { 5, 0, 325 }, { 8, 0, 5 }, { 8, 0, 227 }, - { 9, 0, 105 }, { 10, 0, 585 }, { 12, 0, 614 }, { 4, 10, 13 }, - { 5, 10, 567 }, { 7, 10, 1498 }, { 9, 10, 124 }, { 11, 10, 521 }, - { 12, 10, 405 }, { 7, 10, 1006 }, { 7, 0, 800 }, { 10, 0, 12 }, - { 6, 11, 1720 }, { 7, 0, 1783 }, { 4, 10, 735 }, { 10, 10, 812 }, - { 4, 10, 170 }, { 7, 10, 323 }, { 6, 0, 621 }, { 13, 0, 504 }, - { 16, 0, 89 }, { 5, 10, 304 }, { 7, 10, 1403 }, { 9, 11, 216 }, - { 6, 0, 920 }, { 6, 0, 1104 }, { 9, 11, 183 }, { 11, 11, 286 }, - { 4, 0, 376 }, { 5, 10, 742 }, { 6, 0, 218 }, { 8, 0, 641 }, - { 11, 0, 388 }, { 12, 0, 580 }, { 7, 0, 454 }, { 7, 0, 782 }, - { 8, 0, 768 }, { 12, 0, 686 }, { 9, 11, 33 }, { 5, 10, 111 }, - { 16, 0, 0 }, { 10, 0, 676 }, { 12, 0, 462 }, { 6, 0, 164 }, - { 8, 11, 735 }, { 5, 10, 444 }, { 22, 0, 50 }, { 7, 11, 1862 }, - { 12, 11, 491 }, { 12, 11, 520 }, { 13, 11, 383 }, { 14, 11, 244 }, - { 18, 11, 12 }, { 5, 11, 132 }, { 9, 11, 486 }, { 9, 11, 715 }, - { 10, 11, 458 }, { 11, 11, 373 }, { 11, 11, 668 }, { 11, 11, 795 }, - { 11, 11, 897 }, { 12, 11, 272 }, { 12, 11, 424 }, { 12, 11, 539 }, - { 12, 11, 558 }, { 14, 11, 245 }, { 14, 11, 263 }, { 14, 11, 264 }, - { 14, 11, 393 }, { 14, 11, 403 }, { 8, 10, 123 }, { 15, 10, 6 }, - { 16, 10, 7 }, { 6, 0, 285 }, { 8, 0, 654 }, { 11, 0, 749 }, - { 12, 0, 190 }, { 12, 0, 327 }, { 13, 0, 120 }, { 13, 0, 121 }, - { 13, 0, 327 }, { 15, 0, 47 }, { 18, 0, 40 }, { 5, 11, 8 }, - { 6, 11, 89 }, { 6, 11, 400 }, { 7, 11, 1569 }, { 7, 11, 1623 }, - { 7, 11, 1850 }, { 8, 11, 218 }, { 8, 11, 422 }, { 9, 11, 570 }, - { 10, 11, 626 }, { 6, 11, 387 }, { 7, 11, 882 }, { 13, 11, 111 }, - { 6, 0, 343 }, { 7, 0, 195 }, { 9, 0, 226 }, { 10, 0, 197 }, - { 10, 0, 575 }, { 11, 0, 502 }, { 11, 0, 899 }, { 6, 11, 224 }, - { 7, 11, 877 }, { 9, 11, 647 }, { 5, 10, 937 }, { 7, 10, 100 }, - { 7, 11, 790 }, { 22, 0, 29 }, { 19, 0, 8 }, { 6, 0, 1812 }, - { 21, 0, 8 }, { 7, 11, 394 }, { 7, 0, 1125 }, { 9, 0, 143 }, - { 11, 0, 61 }, { 14, 0, 405 }, { 22, 0, 21 }, { 10, 11, 755 }, - { 19, 11, 29 }, { 9, 11, 378 }, { 13, 11, 162 }, { 7, 10, 922 }, - { 5, 10, 619 }, { 5, 10, 698 }, { 6, 0, 1327 }, { 6, 0, 1598 }, - { 9, 0, 575 }, { 9, 11, 569 }, { 12, 11, 12 }, { 12, 11, 81 }, - { 12, 11, 319 }, { 13, 11, 69 }, { 14, 11, 259 }, { 16, 11, 87 }, - { 17, 11, 1 }, { 17, 11, 21 }, { 17, 11, 24 }, { 18, 11, 15 }, - { 18, 11, 56 }, { 18, 11, 59 }, { 18, 11, 127 }, { 18, 11, 154 }, - { 19, 11, 19 }, { 20, 11, 31 }, { 6, 0, 895 }, { 7, 11, 1231 }, - { 5, 0, 959 }, { 7, 11, 124 }, { 8, 11, 38 }, { 5, 11, 261 }, - { 7, 11, 78 }, { 7, 11, 199 }, { 8, 11, 815 }, { 9, 11, 126 }, - { 10, 11, 342 }, { 5, 10, 917 }, { 6, 10, 1659 }, { 7, 0, 1759 }, - { 5, 11, 595 }, { 7, 11, 1863 }, { 8, 0, 173 }, { 6, 0, 266 }, - { 14, 0, 261 }, { 4, 11, 628 }, { 5, 10, 251 }, { 5, 10, 956 }, - { 8, 10, 268 }, { 9, 10, 214 }, { 18, 10, 142 }, { 7, 11, 266 }, - { 8, 11, 804 }, { 7, 11, 208 }, { 6, 11, 79 }, { 7, 11, 1021 }, - { 7, 11, 1519 }, { 11, 11, 704 }, { 13, 11, 396 }, { 5, 10, 346 }, - { 5, 10, 711 }, { 8, 10, 390 }, { 8, 11, 741 }, { 6, 11, 376 }, - { 6, 0, 1427 }, { 6, 0, 1033 }, { 6, 0, 1217 }, { 8, 0, 300 }, - { 5, 10, 624 }, { 6, 11, 100 }, { 7, 11, 244 }, { 7, 11, 632 }, - { 7, 11, 1609 }, { 8, 11, 178 }, { 8, 11, 638 }, { 13, 11, 58 }, - { 6, 0, 584 }, { 5, 10, 783 }, { 7, 10, 1998 }, { 7, 10, 2047 }, - { 5, 0, 427 }, { 5, 0, 734 }, { 7, 0, 478 }, { 8, 0, 52 }, - { 7, 0, 239 }, { 11, 0, 217 }, { 14, 0, 165 }, { 6, 0, 1129 }, - { 6, 0, 168 }, { 6, 0, 1734 }, { 7, 0, 20 }, { 7, 0, 1056 }, - { 8, 0, 732 }, { 9, 0, 406 }, { 9, 0, 911 }, { 10, 0, 694 }, - { 4, 10, 594 }, { 5, 11, 791 }, { 7, 11, 686 }, { 8, 11, 33 }, - { 8, 11, 238 }, { 10, 11, 616 }, { 11, 11, 467 }, { 11, 11, 881 }, - { 13, 11, 217 }, { 13, 11, 253 }, { 14, 11, 268 }, { 9, 11, 476 }, - { 6, 0, 418 }, { 5, 0, 613 }, { 4, 0, 632 }, { 4, 11, 447 }, - { 7, 0, 32 }, { 7, 0, 984 }, { 8, 0, 85 }, { 8, 0, 709 }, - { 9, 0, 579 }, { 9, 0, 847 }, { 9, 0, 856 }, { 10, 0, 799 }, - { 11, 0, 258 }, { 11, 0, 1007 }, { 12, 0, 331 }, { 12, 0, 615 }, - { 13, 0, 188 }, { 13, 0, 435 }, { 14, 0, 8 }, { 15, 0, 165 }, - { 16, 0, 27 }, { 20, 0, 40 }, { 16, 11, 35 }, { 4, 11, 128 }, - { 5, 11, 415 }, { 6, 11, 462 }, { 7, 11, 294 }, { 7, 11, 578 }, - { 10, 11, 710 }, { 11, 11, 86 }, { 5, 0, 694 }, { 8, 0, 909 }, - { 7, 0, 1109 }, { 11, 0, 7 }, { 5, 10, 37 }, { 6, 10, 39 }, - { 6, 10, 451 }, { 7, 10, 218 }, { 7, 10, 1166 }, { 7, 10, 1687 }, - { 8, 10, 662 }, { 16, 10, 2 }, { 8, 11, 587 }, { 6, 11, 427 }, - { 7, 11, 1018 }, { 10, 11, 692 }, { 4, 11, 195 }, { 6, 10, 508 }, - { 7, 11, 802 }, { 4, 0, 167 }, { 7, 0, 82 }, { 5, 0, 62 }, - { 6, 0, 24 }, { 6, 0, 534 }, { 7, 0, 74 }, { 7, 0, 678 }, - { 7, 0, 684 }, { 7, 0, 1043 }, { 7, 0, 1072 }, { 8, 0, 280 }, - { 8, 0, 541 }, { 8, 0, 686 }, { 9, 0, 258 }, { 10, 0, 519 }, - { 11, 0, 252 }, { 12, 0, 282 }, { 10, 0, 33 }, { 4, 0, 359 }, - { 5, 11, 738 }, { 7, 0, 980 }, { 9, 0, 328 }, { 13, 0, 186 }, - { 13, 0, 364 }, { 7, 10, 635 }, { 7, 10, 796 }, { 8, 10, 331 }, - { 9, 10, 330 }, { 9, 10, 865 }, { 10, 10, 119 }, { 10, 10, 235 }, - { 11, 10, 111 }, { 11, 10, 129 }, { 11, 10, 240 }, { 12, 10, 31 }, - { 12, 10, 66 }, { 12, 10, 222 }, { 12, 10, 269 }, { 12, 10, 599 }, - { 12, 10, 684 }, { 12, 10, 689 }, { 12, 10, 691 }, { 14, 10, 345 }, - { 9, 10, 527 }, { 6, 0, 596 }, { 7, 0, 585 }, { 7, 10, 702 }, - { 6, 11, 1683 }, { 5, 0, 211 }, { 6, 0, 145 }, { 13, 0, 336 }, - { 6, 0, 1130 }, { 7, 0, 873 }, { 6, 10, 37 }, { 7, 10, 1666 }, - { 8, 10, 195 }, { 8, 10, 316 }, { 9, 10, 178 }, { 9, 10, 276 }, - { 9, 10, 339 }, { 9, 10, 536 }, { 10, 10, 102 }, { 10, 10, 362 }, - { 10, 10, 785 }, { 11, 10, 55 }, { 11, 10, 149 }, { 11, 10, 773 }, - { 13, 10, 416 }, { 13, 10, 419 }, { 14, 10, 38 }, { 14, 10, 41 }, - { 14, 10, 210 }, { 8, 0, 840 }, { 8, 0, 841 }, { 4, 0, 263 }, - { 5, 11, 3 }, { 8, 11, 578 }, { 9, 11, 118 }, { 10, 11, 705 }, - { 12, 11, 383 }, { 13, 11, 279 }, { 4, 0, 916 }, { 5, 11, 229 }, - { 5, 10, 645 }, { 15, 0, 155 }, { 16, 0, 79 }, { 8, 11, 102 }, - { 10, 11, 578 }, { 10, 11, 672 }, { 12, 11, 496 }, { 13, 11, 408 }, - { 14, 11, 121 }, { 17, 11, 106 }, { 4, 0, 599 }, { 5, 0, 592 }, - { 6, 0, 1634 }, { 7, 0, 5 }, { 7, 0, 55 }, { 7, 0, 67 }, - { 7, 0, 97 }, { 7, 0, 691 }, { 7, 0, 979 }, { 7, 0, 1600 }, - { 7, 0, 1697 }, { 8, 0, 207 }, { 8, 0, 214 }, { 8, 0, 231 }, - { 8, 0, 294 }, { 8, 0, 336 }, { 8, 0, 428 }, { 8, 0, 471 }, - { 8, 0, 622 }, { 8, 0, 626 }, { 8, 0, 679 }, { 8, 0, 759 }, - { 8, 0, 829 }, { 9, 0, 11 }, { 9, 0, 246 }, { 9, 0, 484 }, - { 9, 0, 573 }, { 9, 0, 706 }, { 9, 0, 762 }, { 9, 0, 798 }, - { 9, 0, 855 }, { 9, 0, 870 }, { 9, 0, 912 }, { 10, 0, 303 }, - { 10, 0, 335 }, { 10, 0, 424 }, { 10, 0, 461 }, { 10, 0, 543 }, - { 10, 0, 759 }, { 10, 0, 814 }, { 11, 0, 59 }, { 11, 0, 199 }, - { 11, 0, 235 }, { 11, 0, 590 }, { 11, 0, 631 }, { 11, 0, 929 }, - { 11, 0, 963 }, { 11, 0, 987 }, { 12, 0, 114 }, { 12, 0, 182 }, - { 12, 0, 226 }, { 12, 0, 332 }, { 12, 0, 439 }, { 12, 0, 575 }, - { 12, 0, 598 }, { 12, 0, 675 }, { 13, 0, 8 }, { 13, 0, 125 }, - { 13, 0, 194 }, { 13, 0, 287 }, { 14, 0, 197 }, { 14, 0, 383 }, - { 15, 0, 53 }, { 17, 0, 63 }, { 19, 0, 46 }, { 19, 0, 98 }, - { 19, 0, 106 }, { 20, 0, 85 }, { 7, 0, 1356 }, { 4, 10, 290 }, - { 6, 10, 70 }, { 7, 10, 1292 }, { 10, 10, 762 }, { 11, 10, 288 }, - { 22, 11, 55 }, { 4, 0, 593 }, { 8, 11, 115 }, { 8, 11, 350 }, - { 9, 11, 489 }, { 10, 11, 128 }, { 11, 11, 306 }, { 12, 11, 373 }, - { 14, 11, 30 }, { 17, 11, 79 }, { 19, 11, 80 }, { 7, 11, 1235 }, - { 6, 0, 1392 }, { 4, 11, 230 }, { 5, 11, 702 }, { 19, 0, 126 }, - { 7, 10, 131 }, { 7, 10, 422 }, { 8, 10, 210 }, { 12, 10, 573 }, - { 6, 0, 1179 }, { 11, 11, 435 }, { 11, 10, 797 }, { 6, 11, 1728 }, - { 4, 0, 162 }, { 18, 11, 26 }, { 19, 11, 42 }, { 20, 11, 43 }, - { 21, 11, 0 }, { 23, 11, 27 }, { 24, 11, 14 }, { 4, 10, 936 }, - { 6, 0, 765 }, { 5, 10, 453 }, { 6, 10, 441 }, { 5, 0, 187 }, - { 7, 0, 1286 }, { 6, 0, 635 }, { 6, 0, 904 }, { 6, 0, 1210 }, - { 6, 0, 1489 }, { 4, 0, 215 }, { 8, 0, 890 }, { 9, 0, 38 }, - { 10, 0, 923 }, { 11, 0, 23 }, { 11, 0, 127 }, { 11, 0, 796 }, - { 6, 0, 1165 }, { 6, 0, 1306 }, { 7, 0, 716 }, { 13, 0, 97 }, - { 13, 0, 251 }, { 4, 10, 653 }, { 8, 0, 657 }, { 18, 10, 80 }, - { 5, 11, 622 }, { 7, 11, 1032 }, { 11, 11, 26 }, { 11, 11, 213 }, - { 11, 11, 707 }, { 12, 11, 380 }, { 13, 11, 226 }, { 13, 11, 355 }, - { 6, 0, 299 }, { 5, 11, 70 }, { 6, 11, 334 }, { 9, 11, 171 }, - { 11, 11, 637 }, { 12, 11, 202 }, { 14, 11, 222 }, { 17, 11, 42 }, - { 14, 0, 134 }, { 4, 11, 23 }, { 5, 11, 313 }, { 5, 11, 1014 }, - { 6, 11, 50 }, { 6, 11, 51 }, { 7, 11, 142 }, { 7, 11, 384 }, - { 9, 11, 783 }, { 11, 11, 741 }, { 4, 11, 141 }, { 7, 11, 559 }, - { 8, 11, 640 }, { 9, 11, 460 }, { 12, 11, 183 }, { 13, 11, 488 }, - { 8, 11, 614 }, { 7, 10, 1368 }, { 8, 10, 232 }, { 8, 10, 361 }, - { 10, 10, 682 }, { 10, 10, 742 }, { 9, 10, 534 }, { 6, 0, 1082 }, - { 12, 0, 658 }, { 9, 10, 27 }, { 7, 0, 2002 }, { 14, 10, 12 }, - { 4, 0, 28 }, { 5, 0, 440 }, { 7, 0, 248 }, { 11, 0, 833 }, - { 12, 0, 344 }, { 7, 10, 736 }, { 11, 10, 264 }, { 6, 10, 1657 }, - { 6, 0, 1654 }, { 10, 0, 531 }, { 5, 11, 222 }, { 9, 11, 140 }, - { 10, 11, 534 }, { 6, 0, 634 }, { 6, 0, 798 }, { 6, 0, 840 }, - { 10, 11, 503 }, { 7, 10, 127 }, { 5, 0, 853 }, { 5, 11, 154 }, - { 7, 11, 1491 }, { 10, 11, 379 }, { 10, 11, 485 }, { 6, 0, 249 }, - { 7, 0, 1234 }, { 11, 0, 573 }, { 5, 11, 716 }, { 7, 11, 1570 }, - { 12, 11, 542 }, { 8, 10, 364 }, { 10, 0, 527 }, { 4, 11, 91 }, - { 5, 11, 388 }, { 5, 11, 845 }, { 6, 11, 206 }, { 6, 11, 252 }, - { 6, 11, 365 }, { 7, 11, 136 }, { 7, 11, 531 }, { 8, 11, 264 }, - { 8, 11, 621 }, { 6, 0, 1419 }, { 7, 11, 1441 }, { 7, 0, 49 }, - { 7, 0, 392 }, { 8, 0, 20 }, { 8, 0, 172 }, { 8, 0, 690 }, - { 9, 0, 383 }, { 9, 0, 845 }, { 10, 0, 48 }, { 11, 0, 293 }, - { 11, 0, 832 }, { 11, 0, 920 }, { 11, 0, 984 }, { 13, 0, 221 }, - { 5, 0, 858 }, { 5, 0, 992 }, { 5, 0, 728 }, { 9, 10, 792 }, - { 5, 10, 909 }, { 9, 10, 849 }, { 10, 10, 805 }, { 7, 0, 525 }, - { 7, 0, 1579 }, { 8, 0, 497 }, { 8, 0, 573 }, { 6, 0, 268 }, - { 9, 0, 62 }, { 7, 11, 576 }, { 6, 0, 1201 }, { 5, 11, 771 }, - { 5, 11, 863 }, { 5, 11, 898 }, { 6, 11, 1632 }, { 6, 11, 1644 }, - { 6, 11, 1780 }, { 5, 11, 331 }, { 7, 0, 193 }, { 7, 0, 1105 }, - { 10, 0, 495 }, { 7, 10, 397 }, { 8, 10, 124 }, { 8, 10, 619 }, - { 9, 10, 305 }, { 11, 10, 40 }, { 12, 10, 349 }, { 13, 10, 134 }, - { 13, 10, 295 }, { 14, 10, 155 }, { 15, 10, 120 }, { 18, 10, 105 }, - { 10, 0, 106 }, { 6, 0, 859 }, { 5, 11, 107 }, { 7, 11, 201 }, - { 8, 11, 518 }, { 6, 11, 446 }, { 7, 11, 1817 }, { 13, 0, 23 }, - { 4, 10, 262 }, { 7, 10, 342 }, { 5, 10, 641 }, { 9, 11, 851 }, - { 6, 0, 925 }, { 9, 0, 813 }, { 4, 11, 504 }, { 6, 0, 613 }, - { 8, 0, 223 }, { 4, 10, 99 }, { 6, 10, 250 }, { 6, 10, 346 }, - { 8, 10, 127 }, { 10, 10, 81 }, { 8, 0, 953 }, { 4, 10, 915 }, - { 11, 11, 892 }, { 5, 10, 75 }, { 9, 10, 517 }, { 10, 10, 470 }, - { 12, 10, 155 }, { 13, 10, 224 }, { 4, 0, 666 }, { 7, 0, 1017 }, - { 7, 11, 996 }, { 10, 11, 390 }, { 5, 11, 883 }, { 5, 11, 975 }, - { 14, 10, 83 }, { 14, 11, 83 }, { 4, 0, 670 }, { 5, 11, 922 }, - { 6, 11, 1707 }, { 7, 0, 216 }, { 9, 0, 40 }, { 11, 0, 136 }, - { 7, 11, 787 }, { 5, 10, 954 }, { 5, 11, 993 }, { 7, 11, 515 }, - { 9, 11, 91 }, { 11, 0, 259 }, { 7, 0, 1114 }, { 9, 0, 310 }, - { 9, 0, 682 }, { 10, 0, 440 }, { 13, 0, 40 }, { 6, 10, 304 }, - { 8, 10, 418 }, { 11, 10, 341 }, { 11, 10, 675 }, { 14, 0, 296 }, - { 9, 10, 410 }, { 11, 10, 425 }, { 10, 11, 377 }, { 12, 11, 363 }, - { 13, 11, 68 }, { 13, 11, 94 }, { 14, 11, 108 }, { 14, 11, 306 }, - { 7, 0, 1401 }, { 7, 0, 1476 }, { 4, 0, 296 }, { 6, 0, 475 }, - { 7, 0, 401 }, { 7, 0, 1410 }, { 7, 0, 1594 }, { 7, 0, 1674 }, - { 8, 0, 63 }, { 8, 0, 660 }, { 9, 0, 74 }, { 4, 0, 139 }, - { 4, 0, 388 }, { 12, 0, 188 }, { 4, 0, 797 }, { 4, 11, 766 }, - { 5, 11, 103 }, { 7, 11, 921 }, { 8, 11, 580 }, { 8, 11, 593 }, - { 8, 11, 630 }, { 10, 11, 28 }, { 4, 11, 911 }, { 5, 11, 867 }, - { 5, 11, 1013 }, { 6, 10, 14 }, { 6, 0, 1572 }, { 6, 10, 1708 }, - { 21, 0, 39 }, { 5, 10, 113 }, { 6, 10, 243 }, { 7, 10, 1865 }, - { 11, 10, 161 }, { 16, 10, 37 }, { 17, 10, 99 }, { 7, 11, 1563 }, - { 13, 11, 182 }, { 5, 11, 135 }, { 6, 11, 519 }, { 7, 11, 1722 }, - { 10, 11, 271 }, { 11, 11, 261 }, { 17, 11, 54 }, { 4, 10, 274 }, - { 6, 0, 1594 }, { 4, 11, 300 }, { 5, 11, 436 }, { 7, 11, 484 }, - { 4, 0, 747 }, { 6, 0, 290 }, { 7, 0, 649 }, { 7, 0, 1479 }, - { 7, 0, 1583 }, { 5, 11, 535 }, { 19, 11, 82 }, { 5, 0, 232 }, - { 9, 0, 887 }, { 7, 10, 166 }, { 8, 0, 521 }, { 4, 0, 14 }, - { 7, 0, 472 }, { 7, 0, 1801 }, { 10, 0, 748 }, { 13, 0, 458 }, - { 6, 0, 741 }, { 6, 0, 992 }, { 16, 0, 111 }, { 9, 10, 304 }, - { 4, 0, 425 }, { 5, 11, 387 }, { 7, 11, 557 }, { 12, 11, 547 }, - { 14, 11, 86 }, { 7, 11, 1747 }, { 5, 10, 654 }, { 7, 11, 1489 }, - { 7, 0, 789 }, { 4, 11, 6 }, { 5, 11, 708 }, { 8, 11, 75 }, - { 6, 10, 273 }, { 10, 10, 188 }, { 13, 10, 377 }, { 18, 10, 77 }, - { 6, 0, 1593 }, { 4, 11, 303 }, { 7, 11, 619 }, { 10, 11, 547 }, - { 10, 11, 687 }, { 11, 11, 122 }, { 12, 11, 601 }, { 6, 0, 1768 }, - { 7, 10, 410 }, { 10, 11, 772 }, { 11, 0, 233 }, { 11, 10, 524 }, - { 5, 0, 943 }, { 6, 0, 1779 }, { 6, 10, 1785 }, { 8, 11, 529 }, - { 4, 0, 955 }, { 5, 0, 245 }, { 6, 0, 576 }, { 7, 0, 582 }, - { 8, 0, 225 }, { 4, 10, 780 }, { 14, 0, 241 }, { 6, 0, 1943 }, - { 4, 11, 106 }, { 7, 11, 310 }, { 7, 11, 1785 }, { 10, 11, 690 }, - { 11, 11, 717 }, { 6, 0, 1284 }, { 5, 11, 890 }, { 5, 11, 988 }, - { 6, 11, 626 }, { 14, 11, 431 }, { 10, 11, 706 }, { 17, 11, 32 }, - { 9, 11, 332 }, { 4, 11, 698 }, { 7, 0, 709 }, { 5, 10, 948 }, - { 10, 11, 17 }, { 8, 0, 554 }, { 6, 0, 1564 }, { 11, 10, 941 }, - { 4, 0, 443 }, { 6, 0, 909 }, { 6, 11, 84 }, { 14, 0, 280 }, - { 4, 10, 532 }, { 5, 10, 706 }, { 7, 10, 662 }, { 4, 0, 729 }, - { 5, 10, 837 }, { 6, 10, 1651 }, { 11, 10, 985 }, { 7, 10, 1861 }, - { 4, 0, 348 }, { 24, 11, 3 }, { 5, 11, 986 }, { 6, 11, 130 }, - { 7, 11, 1582 }, { 8, 11, 458 }, { 10, 11, 101 }, { 10, 11, 318 }, - { 10, 11, 823 }, { 6, 0, 758 }, { 4, 0, 298 }, { 9, 0, 848 }, - { 4, 10, 330 }, { 7, 10, 933 }, { 7, 10, 2012 }, { 8, 10, 292 }, - { 7, 11, 1644 }, { 9, 11, 129 }, { 6, 0, 1422 }, { 9, 0, 829 }, - { 7, 10, 767 }, { 5, 0, 164 }, { 7, 0, 121 }, { 14, 0, 189 }, - { 7, 0, 812 }, { 7, 0, 1261 }, { 7, 0, 1360 }, { 9, 0, 632 }, - { 12, 0, 352 }, { 7, 11, 1788 }, { 11, 0, 556 }, { 7, 11, 997 }, - { 17, 10, 114 }, { 4, 0, 172 }, { 9, 0, 611 }, { 10, 0, 436 }, - { 12, 0, 673 }, { 13, 0, 255 }, { 9, 10, 883 }, { 11, 0, 530 }, - { 10, 10, 274 }, { 5, 0, 844 }, { 6, 0, 984 }, { 13, 0, 232 }, - { 18, 0, 35 }, { 4, 10, 703 }, { 7, 10, 207 }, { 4, 10, 571 }, - { 9, 0, 263 }, { 10, 0, 147 }, { 10, 0, 492 }, { 7, 11, 1756 }, - { 9, 11, 98 }, { 5, 10, 873 }, { 5, 10, 960 }, { 8, 10, 823 }, - { 9, 10, 881 }, { 5, 0, 537 }, { 4, 0, 859 }, { 7, 11, 1046 }, - { 11, 11, 160 }, { 9, 0, 842 }, { 11, 10, 283 }, { 5, 10, 33 }, - { 6, 10, 470 }, { 11, 10, 424 }, { 6, 11, 45 }, { 7, 11, 433 }, - { 8, 11, 129 }, { 9, 11, 21 }, { 10, 11, 392 }, { 11, 11, 79 }, - { 12, 11, 499 }, { 13, 11, 199 }, { 13, 11, 451 }, { 7, 0, 1291 }, - { 7, 10, 1882 }, { 7, 11, 558 }, { 8, 11, 353 }, { 6, 0, 1482 }, - { 5, 0, 230 }, { 5, 0, 392 }, { 6, 0, 420 }, { 9, 0, 568 }, - { 12, 0, 612 }, { 6, 0, 262 }, { 7, 10, 90 }, { 7, 10, 664 }, - { 7, 10, 830 }, { 7, 10, 1380 }, { 7, 10, 2025 }, { 8, 11, 81 }, - { 8, 10, 448 }, { 8, 10, 828 }, { 9, 11, 189 }, { 9, 11, 201 }, - { 11, 11, 478 }, { 11, 11, 712 }, { 13, 11, 338 }, { 14, 0, 31 }, - { 5, 11, 353 }, { 23, 11, 26 }, { 4, 0, 753 }, { 4, 0, 0 }, - { 5, 0, 41 }, { 7, 0, 1459 }, { 7, 0, 1469 }, { 7, 0, 1859 }, - { 9, 0, 549 }, { 11, 0, 905 }, { 9, 10, 417 }, { 9, 10, 493 }, - { 7, 11, 1113 }, { 5, 0, 696 }, { 13, 11, 448 }, { 6, 10, 295 }, - { 4, 0, 834 }, { 4, 0, 771 }, { 5, 10, 1019 }, { 6, 11, 25 }, - { 7, 11, 855 }, { 7, 11, 1258 }, { 16, 11, 32 }, { 6, 0, 1076 }, - { 5, 0, 921 }, { 5, 0, 674 }, { 4, 11, 4 }, { 7, 11, 1118 }, - { 7, 11, 1320 }, { 7, 11, 1706 }, { 8, 11, 277 }, { 9, 11, 622 }, - { 10, 11, 9 }, { 11, 11, 724 }, { 12, 11, 350 }, { 12, 11, 397 }, - { 13, 11, 28 }, { 13, 11, 159 }, { 15, 11, 89 }, { 18, 11, 5 }, - { 19, 11, 9 }, { 20, 11, 34 }, { 22, 11, 47 }, { 6, 10, 208 }, - { 6, 0, 444 }, { 8, 0, 308 }, { 6, 0, 180 }, { 7, 0, 1137 }, - { 8, 0, 751 }, { 11, 0, 805 }, { 4, 0, 183 }, { 7, 0, 271 }, - { 11, 0, 824 }, { 11, 0, 952 }, { 13, 0, 278 }, { 13, 0, 339 }, - { 13, 0, 482 }, { 14, 0, 424 }, { 20, 0, 99 }, { 7, 11, 317 }, - { 7, 11, 569 }, { 4, 0, 19 }, { 5, 0, 477 }, { 5, 0, 596 }, - { 6, 0, 505 }, { 7, 0, 1221 }, { 11, 0, 907 }, { 12, 0, 209 }, - { 13, 0, 214 }, { 7, 0, 1215 }, { 6, 0, 271 }, { 7, 0, 398 }, - { 8, 0, 387 }, { 10, 0, 344 }, { 7, 10, 448 }, { 7, 10, 1629 }, - { 7, 10, 1813 }, { 8, 10, 442 }, { 9, 10, 710 }, { 10, 10, 282 }, - { 10, 10, 722 }, { 11, 10, 844 }, { 12, 10, 104 }, { 12, 10, 625 }, - { 6, 11, 255 }, { 5, 10, 787 }, { 6, 0, 1645 }, { 11, 11, 956 }, - { 23, 11, 3 }, { 6, 0, 92 }, { 6, 0, 188 }, { 7, 0, 209 }, - { 7, 0, 1269 }, { 7, 0, 1524 }, { 7, 0, 1876 }, { 8, 0, 661 }, - { 10, 0, 42 }, { 10, 0, 228 }, { 11, 0, 58 }, { 11, 0, 1020 }, - { 12, 0, 58 }, { 12, 0, 118 }, { 13, 0, 32 }, { 4, 0, 459 }, - { 5, 0, 966 }, { 4, 11, 536 }, { 7, 11, 1141 }, { 10, 11, 723 }, - { 11, 11, 371 }, { 12, 0, 330 }, { 6, 0, 1557 }, { 7, 11, 285 }, - { 7, 11, 876 }, { 8, 10, 491 }, { 7, 11, 560 }, { 6, 0, 18 }, - { 7, 0, 179 }, { 7, 0, 932 }, { 8, 0, 548 }, { 8, 0, 757 }, - { 9, 0, 54 }, { 9, 0, 65 }, { 9, 0, 532 }, { 9, 0, 844 }, - { 10, 0, 113 }, { 10, 0, 117 }, { 10, 0, 315 }, { 10, 0, 560 }, - { 10, 0, 622 }, { 10, 0, 798 }, { 11, 0, 153 }, { 11, 0, 351 }, - { 11, 0, 375 }, { 12, 0, 78 }, { 12, 0, 151 }, { 12, 0, 392 }, - { 12, 0, 666 }, { 14, 0, 248 }, { 15, 0, 23 }, { 6, 0, 1742 }, - { 4, 11, 690 }, { 4, 10, 403 }, { 5, 10, 441 }, { 7, 10, 450 }, - { 10, 10, 840 }, { 11, 10, 101 }, { 12, 10, 193 }, { 13, 10, 430 }, - { 5, 0, 965 }, { 6, 0, 182 }, { 10, 0, 65 }, { 10, 0, 488 }, - { 10, 0, 497 }, { 7, 11, 1346 }, { 6, 0, 973 }, { 6, 0, 1158 }, - { 10, 11, 200 }, { 19, 11, 2 }, { 23, 11, 22 }, { 4, 11, 190 }, - { 5, 11, 554 }, { 5, 10, 679 }, { 7, 0, 328 }, { 9, 10, 326 }, - { 5, 11, 1001 }, { 9, 0, 588 }, { 10, 0, 260 }, { 5, 11, 446 }, - { 7, 10, 1128 }, { 7, 10, 1796 }, { 19, 11, 119 }, { 6, 0, 1786 }, - { 6, 0, 1328 }, { 6, 0, 1985 }, { 8, 0, 962 }, { 10, 0, 1017 }, - { 7, 0, 308 }, { 11, 0, 508 }, { 4, 10, 574 }, { 7, 10, 350 }, - { 7, 10, 1024 }, { 8, 10, 338 }, { 9, 10, 677 }, { 10, 10, 808 }, - { 10, 11, 752 }, { 7, 10, 1081 }, { 9, 11, 96 }, { 7, 10, 1676 }, - { 7, 10, 2037 }, { 8, 0, 588 }, { 4, 11, 304 }, { 5, 0, 614 }, - { 12, 0, 793 }, { 8, 0, 287 }, { 9, 10, 297 }, { 13, 10, 37 }, - { 6, 11, 53 }, { 6, 11, 199 }, { 7, 11, 1408 }, { 8, 11, 32 }, - { 8, 11, 93 }, { 9, 11, 437 }, { 10, 11, 397 }, { 10, 11, 629 }, - { 11, 11, 593 }, { 11, 11, 763 }, { 13, 11, 326 }, { 17, 11, 35 }, - { 6, 11, 105 }, { 9, 11, 320 }, { 10, 11, 506 }, { 10, 11, 794 }, - { 5, 11, 114 }, { 5, 11, 255 }, { 13, 11, 285 }, { 12, 0, 290 }, - { 7, 11, 2035 }, { 8, 11, 19 }, { 9, 11, 89 }, { 10, 11, 831 }, - { 6, 0, 1136 }, { 7, 0, 719 }, { 8, 0, 796 }, { 8, 0, 809 }, - { 8, 0, 834 }, { 6, 10, 306 }, { 7, 10, 1140 }, { 7, 10, 1340 }, - { 8, 10, 133 }, { 10, 10, 449 }, { 11, 10, 1011 }, { 5, 0, 210 }, - { 6, 0, 213 }, { 7, 0, 60 }, { 10, 0, 364 }, { 11, 0, 135 }, - { 5, 0, 607 }, { 8, 0, 326 }, { 8, 0, 490 }, { 10, 11, 176 }, - { 4, 0, 701 }, { 5, 0, 472 }, { 7, 0, 380 }, { 9, 0, 758 }, - { 7, 0, 1947 }, { 6, 0, 1079 }, { 10, 0, 278 }, { 10, 11, 391 }, - { 5, 10, 329 }, { 8, 10, 260 }, { 11, 11, 156 }, { 4, 0, 386 }, - { 7, 0, 41 }, { 8, 0, 405 }, { 8, 0, 728 }, { 9, 0, 497 }, - { 11, 0, 110 }, { 11, 0, 360 }, { 15, 0, 37 }, { 16, 0, 84 }, - { 5, 0, 46 }, { 7, 0, 1452 }, { 7, 0, 1480 }, { 8, 0, 634 }, - { 12, 0, 472 }, { 8, 0, 961 }, { 4, 0, 524 }, { 8, 0, 810 }, - { 10, 0, 238 }, { 13, 0, 33 }, { 4, 10, 657 }, { 24, 10, 7 }, - { 5, 0, 532 }, { 5, 0, 997 }, { 7, 10, 1665 }, { 7, 11, 594 }, - { 7, 11, 851 }, { 7, 11, 1858 }, { 9, 11, 411 }, { 9, 11, 574 }, - { 9, 11, 666 }, { 9, 11, 737 }, { 10, 11, 346 }, { 10, 11, 712 }, - { 11, 11, 246 }, { 11, 11, 432 }, { 11, 11, 517 }, { 11, 11, 647 }, - { 11, 11, 679 }, { 11, 11, 727 }, { 12, 11, 304 }, { 12, 11, 305 }, - { 12, 11, 323 }, { 12, 11, 483 }, { 12, 11, 572 }, { 12, 11, 593 }, - { 12, 11, 602 }, { 13, 11, 95 }, { 13, 11, 101 }, { 13, 11, 171 }, - { 13, 11, 315 }, { 13, 11, 378 }, { 13, 11, 425 }, { 13, 11, 475 }, - { 14, 11, 63 }, { 14, 11, 380 }, { 14, 11, 384 }, { 15, 11, 133 }, - { 18, 11, 112 }, { 20, 11, 72 }, { 5, 11, 955 }, { 8, 11, 814 }, - { 6, 0, 1301 }, { 5, 10, 66 }, { 7, 10, 1896 }, { 8, 10, 288 }, - { 5, 11, 56 }, { 6, 10, 1643 }, { 6, 0, 1298 }, { 20, 11, 100 }, - { 5, 0, 782 }, { 5, 0, 829 }, { 6, 0, 671 }, { 6, 0, 1156 }, - { 6, 0, 1738 }, { 9, 11, 621 }, { 4, 0, 306 }, { 5, 0, 570 }, - { 7, 0, 1347 }, { 5, 10, 91 }, { 5, 10, 648 }, { 5, 10, 750 }, - { 5, 10, 781 }, { 6, 10, 54 }, { 6, 10, 112 }, { 6, 10, 402 }, - { 6, 10, 1732 }, { 7, 10, 315 }, { 7, 10, 749 }, { 7, 10, 1900 }, - { 9, 10, 78 }, { 9, 10, 508 }, { 10, 10, 611 }, { 10, 10, 811 }, - { 11, 10, 510 }, { 11, 10, 728 }, { 13, 10, 36 }, { 14, 10, 39 }, - { 16, 10, 83 }, { 17, 10, 124 }, { 20, 10, 30 }, { 8, 10, 570 }, - { 9, 11, 477 }, { 13, 11, 78 }, { 4, 11, 639 }, { 10, 11, 4 }, - { 10, 10, 322 }, { 10, 10, 719 }, { 11, 10, 407 }, { 11, 11, 638 }, - { 12, 11, 177 }, { 20, 11, 57 }, { 7, 0, 1823 }, { 11, 0, 693 }, - { 7, 0, 759 }, { 5, 11, 758 }, { 8, 10, 125 }, { 8, 10, 369 }, - { 8, 10, 524 }, { 10, 10, 486 }, { 11, 10, 13 }, { 11, 10, 381 }, - { 11, 10, 736 }, { 11, 10, 766 }, { 11, 10, 845 }, { 13, 10, 114 }, - { 13, 10, 292 }, { 14, 10, 47 }, { 7, 0, 1932 }, { 6, 10, 1684 }, - { 6, 10, 1731 }, { 7, 10, 356 }, { 8, 10, 54 }, { 8, 10, 221 }, - { 9, 10, 225 }, { 9, 10, 356 }, { 10, 10, 77 }, { 10, 10, 446 }, - { 10, 10, 731 }, { 12, 10, 404 }, { 13, 10, 491 }, { 7, 11, 552 }, - { 7, 11, 1112 }, { 4, 0, 78 }, { 5, 0, 96 }, { 5, 0, 182 }, - { 6, 0, 1257 }, { 7, 0, 1724 }, { 7, 0, 1825 }, { 10, 0, 394 }, - { 10, 0, 471 }, { 11, 0, 532 }, { 14, 0, 340 }, { 17, 0, 88 }, - { 11, 11, 328 }, { 7, 0, 1964 }, { 4, 10, 411 }, { 4, 10, 80 }, - { 5, 10, 44 }, { 9, 11, 133 }, { 5, 11, 110 }, { 6, 11, 169 }, - { 6, 11, 1702 }, { 7, 11, 400 }, { 8, 11, 538 }, { 9, 11, 184 }, - { 9, 11, 524 }, { 12, 11, 218 }, { 4, 0, 521 }, { 5, 10, 299 }, - { 7, 10, 1083 }, { 12, 11, 554 }, { 6, 11, 133 }, { 9, 11, 353 }, - { 12, 11, 628 }, { 18, 11, 79 }, { 6, 0, 215 }, { 7, 0, 584 }, - { 7, 0, 1028 }, { 7, 0, 1473 }, { 7, 0, 1721 }, { 9, 0, 424 }, - { 10, 0, 779 }, { 7, 0, 857 }, { 7, 0, 1209 }, { 7, 10, 1713 }, - { 9, 10, 537 }, { 10, 10, 165 }, { 12, 10, 219 }, { 12, 10, 561 }, - { 4, 10, 219 }, { 6, 11, 93 }, { 7, 11, 1422 }, { 7, 10, 1761 }, - { 7, 11, 1851 }, { 8, 11, 673 }, { 9, 10, 86 }, { 9, 11, 529 }, - { 12, 11, 43 }, { 9, 11, 371 }, { 8, 0, 671 }, { 5, 0, 328 }, - { 7, 0, 918 }, { 4, 0, 529 }, { 9, 11, 25 }, { 10, 11, 467 }, - { 10, 11, 559 }, { 4, 11, 335 }, { 7, 11, 942 }, { 6, 0, 716 }, - { 6, 0, 1509 }, { 6, 0, 67 }, { 7, 0, 258 }, { 7, 0, 1630 }, - { 9, 0, 354 }, { 9, 0, 675 }, { 10, 0, 830 }, { 14, 0, 80 }, - { 17, 0, 80 }, { 12, 10, 428 }, { 6, 0, 1112 }, { 6, 0, 141 }, - { 7, 0, 225 }, { 9, 0, 59 }, { 9, 0, 607 }, { 10, 0, 312 }, - { 11, 0, 687 }, { 12, 0, 555 }, { 13, 0, 373 }, { 13, 0, 494 }, - { 20, 0, 58 }, { 5, 10, 514 }, { 8, 11, 39 }, { 10, 11, 773 }, - { 11, 11, 84 }, { 12, 11, 205 }, { 14, 11, 1 }, { 8, 0, 783 }, - { 5, 11, 601 }, { 5, 11, 870 }, { 8, 11, 594 }, { 4, 10, 55 }, - { 5, 10, 301 }, { 6, 10, 571 }, { 14, 10, 49 }, { 18, 10, 102 }, - { 4, 11, 181 }, { 6, 11, 1652 }, { 5, 10, 364 }, { 4, 11, 97 }, - { 5, 11, 147 }, { 6, 11, 286 }, { 7, 11, 1362 }, { 13, 11, 176 }, - { 4, 10, 76 }, { 7, 10, 1550 }, { 9, 10, 306 }, { 9, 10, 430 }, - { 9, 10, 663 }, { 10, 10, 683 }, { 11, 10, 427 }, { 11, 10, 753 }, - { 12, 10, 334 }, { 12, 10, 442 }, { 14, 10, 258 }, { 14, 10, 366 }, - { 15, 10, 131 }, { 9, 10, 52 }, { 6, 0, 955 }, { 6, 0, 1498 }, - { 6, 11, 375 }, { 7, 11, 169 }, { 7, 11, 254 }, { 8, 11, 780 }, - { 7, 0, 430 }, { 11, 0, 46 }, { 14, 0, 343 }, { 14, 11, 343 }, - { 7, 0, 1183 }, { 5, 0, 602 }, { 7, 0, 2018 }, { 9, 0, 418 }, - { 9, 0, 803 }, { 7, 11, 1447 }, { 8, 0, 677 }, { 7, 11, 1044 }, - { 11, 11, 285 }, { 4, 10, 656 }, { 7, 10, 779 }, { 7, 10, 144 }, - { 5, 11, 629 }, { 7, 11, 1549 }, { 7, 10, 1373 }, { 10, 11, 209 }, - { 7, 10, 554 }, { 7, 10, 605 }, { 13, 10, 10 }, { 5, 10, 838 }, - { 5, 10, 841 }, { 6, 10, 1649 }, { 5, 10, 1012 }, { 6, 0, 1357 }, - { 6, 0, 1380 }, { 16, 0, 53 }, { 6, 0, 590 }, { 7, 10, 365 }, - { 7, 10, 1357 }, { 7, 10, 1497 }, { 8, 10, 154 }, { 13, 10, 281 }, - { 5, 10, 340 }, { 4, 11, 420 }, { 7, 0, 329 }, { 19, 11, 32 }, - { 4, 0, 469 }, { 10, 11, 429 }, { 11, 10, 495 }, { 8, 10, 261 }, - { 9, 10, 144 }, { 9, 10, 466 }, { 10, 10, 370 }, { 12, 10, 470 }, - { 13, 10, 144 }, { 14, 10, 348 }, { 14, 0, 460 }, { 4, 11, 325 }, - { 9, 10, 897 }, { 10, 11, 125 }, { 6, 0, 1743 }, { 6, 10, 248 }, - { 9, 10, 546 }, { 10, 10, 535 }, { 11, 10, 681 }, { 13, 10, 135 }, - { 4, 0, 990 }, { 5, 0, 929 }, { 6, 0, 340 }, { 8, 0, 376 }, - { 8, 0, 807 }, { 8, 0, 963 }, { 8, 0, 980 }, { 10, 0, 1007 }, - { 6, 0, 1603 }, { 12, 0, 250 }, { 4, 11, 714 }, { 5, 11, 469 }, - { 6, 10, 567 }, { 8, 10, 445 }, { 5, 0, 218 }, { 7, 0, 1610 }, - { 8, 0, 646 }, { 10, 0, 83 }, { 11, 11, 138 }, { 12, 11, 40 }, - { 7, 0, 1512 }, { 7, 0, 1794 }, { 7, 11, 1216 }, { 11, 0, 0 }, - { 16, 0, 78 }, { 4, 11, 718 }, { 5, 0, 571 }, { 4, 0, 455 }, - { 6, 0, 1012 }, { 5, 11, 124 }, { 5, 11, 144 }, { 6, 11, 548 }, - { 7, 11, 15 }, { 7, 11, 153 }, { 9, 11, 629 }, { 14, 11, 10 }, - { 6, 11, 75 }, { 7, 11, 1531 }, { 8, 11, 416 }, { 9, 11, 240 }, - { 9, 11, 275 }, { 10, 11, 100 }, { 11, 11, 658 }, { 11, 11, 979 }, - { 12, 11, 86 }, { 13, 11, 468 }, { 14, 11, 66 }, { 14, 11, 207 }, - { 15, 11, 20 }, { 15, 11, 25 }, { 16, 11, 58 }, { 4, 10, 577 }, - { 5, 11, 141 }, { 5, 11, 915 }, { 6, 11, 1783 }, { 7, 11, 211 }, - { 7, 11, 698 }, { 7, 11, 1353 }, { 9, 11, 83 }, { 9, 11, 281 }, - { 10, 11, 376 }, { 10, 11, 431 }, { 11, 11, 543 }, { 12, 11, 664 }, - { 13, 11, 280 }, { 13, 11, 428 }, { 14, 11, 61 }, { 14, 11, 128 }, - { 17, 11, 52 }, { 17, 11, 81 }, { 6, 0, 161 }, { 7, 0, 372 }, - { 9, 0, 597 }, { 4, 0, 349 }, { 10, 11, 702 }, { 11, 11, 245 }, - { 6, 0, 524 }, { 6, 10, 174 }, { 6, 0, 432 }, { 9, 0, 751 }, - { 11, 0, 322 }, { 19, 11, 94 }, { 4, 11, 338 }, { 5, 11, 400 }, - { 5, 0, 468 }, { 10, 0, 325 }, { 11, 0, 856 }, { 12, 0, 345 }, - { 15, 0, 104 }, { 5, 0, 223 }, { 4, 0, 566 }, { 4, 11, 221 }, - { 5, 11, 659 }, { 5, 11, 989 }, { 7, 11, 697 }, { 7, 11, 1211 }, - { 10, 11, 284 }, { 7, 11, 1070 }, { 4, 0, 59 }, { 7, 0, 1394 }, - { 6, 0, 436 }, { 11, 0, 481 }, { 5, 10, 878 }, { 5, 10, 972 }, - { 4, 0, 48 }, { 5, 0, 271 }, { 7, 0, 953 }, { 5, 0, 610 }, - { 8, 0, 457 }, { 4, 0, 773 }, { 5, 0, 618 }, { 9, 0, 756 }, - { 5, 0, 755 }, { 7, 0, 1217 }, { 10, 11, 507 }, { 4, 10, 351 }, - { 4, 0, 197 }, { 15, 11, 78 }, { 4, 11, 188 }, { 7, 11, 805 }, - { 11, 11, 276 }, { 14, 11, 293 }, { 5, 11, 884 }, { 11, 11, 991 }, - { 4, 10, 286 }, { 10, 0, 259 }, { 10, 0, 428 }, { 7, 10, 438 }, - { 7, 10, 627 }, { 7, 10, 1516 }, { 8, 10, 40 }, { 9, 10, 56 }, - { 9, 10, 294 }, { 11, 10, 969 }, { 11, 10, 995 }, { 18, 10, 148 }, - { 4, 0, 356 }, { 5, 0, 217 }, { 5, 0, 492 }, { 5, 0, 656 }, - { 8, 0, 544 }, { 8, 11, 544 }, { 5, 0, 259 }, { 6, 0, 1230 }, - { 7, 0, 414 }, { 7, 0, 854 }, { 14, 0, 107 }, { 4, 0, 1007 }, - { 15, 0, 14 }, { 16, 0, 5 }, { 6, 0, 1580 }, { 4, 10, 738 }, - { 4, 11, 596 }, { 4, 0, 673 }, { 5, 10, 866 }, { 6, 0, 1843 }, - { 7, 11, 1847 }, { 4, 0, 165 }, { 7, 0, 1398 }, { 7, 0, 1829 }, - { 7, 11, 1634 }, { 19, 11, 65 }, { 6, 0, 885 }, { 6, 0, 1009 }, - { 9, 0, 809 }, { 5, 10, 116 }, { 4, 10, 457 }, { 8, 11, 770 }, - { 9, 0, 498 }, { 12, 0, 181 }, { 10, 11, 361 }, { 14, 11, 316 }, - { 6, 11, 595 }, { 5, 0, 9 }, { 7, 0, 297 }, { 7, 0, 966 }, - { 12, 0, 306 }, { 4, 11, 89 }, { 5, 11, 489 }, { 6, 11, 315 }, - { 7, 11, 553 }, { 7, 11, 1745 }, { 10, 11, 243 }, { 6, 0, 1487 }, - { 4, 0, 437 }, { 5, 0, 146 }, { 6, 0, 411 }, { 10, 0, 721 }, - { 5, 10, 527 }, { 6, 10, 189 }, { 7, 10, 859 }, { 11, 10, 104 }, - { 11, 10, 554 }, { 15, 10, 60 }, { 15, 10, 125 }, { 6, 11, 1658 }, - { 9, 11, 3 }, { 10, 11, 154 }, { 11, 11, 641 }, { 13, 11, 85 }, - { 13, 11, 201 }, { 13, 11, 346 }, { 6, 0, 177 }, { 7, 0, 467 }, - { 6, 0, 1377 }, { 6, 10, 116 }, { 8, 11, 645 }, { 4, 11, 166 }, - { 5, 11, 505 }, { 6, 11, 1670 }, { 9, 11, 110 }, { 5, 10, 487 }, - { 4, 10, 86 }, { 5, 10, 667 }, { 5, 10, 753 }, { 6, 10, 316 }, - { 6, 10, 455 }, { 7, 10, 946 }, { 5, 0, 200 }, { 4, 0, 959 }, - { 6, 0, 1928 }, { 6, 0, 1957 }, { 11, 11, 203 }, { 22, 10, 45 }, - { 4, 10, 79 }, { 7, 10, 1773 }, { 10, 10, 450 }, { 11, 10, 589 }, - { 13, 10, 332 }, { 13, 10, 493 }, { 14, 10, 183 }, { 14, 10, 334 }, - { 14, 10, 362 }, { 14, 10, 368 }, { 14, 10, 376 }, { 14, 10, 379 }, - { 19, 10, 90 }, { 19, 10, 103 }, { 19, 10, 127 }, { 20, 10, 90 }, - { 6, 0, 1435 }, { 7, 11, 1275 }, { 6, 0, 481 }, { 7, 11, 445 }, - { 8, 11, 307 }, { 8, 11, 704 }, { 10, 11, 41 }, { 10, 11, 439 }, - { 11, 11, 237 }, { 11, 11, 622 }, { 12, 11, 201 }, { 7, 11, 869 }, - { 4, 0, 84 }, { 7, 0, 1482 }, { 10, 0, 76 }, { 10, 0, 142 }, - { 11, 11, 277 }, { 16, 11, 14 }, { 7, 11, 1977 }, { 4, 11, 189 }, - { 5, 11, 713 }, { 8, 11, 57 }, { 5, 0, 1015 }, { 10, 11, 371 }, - { 4, 0, 315 }, { 5, 0, 507 }, { 7, 0, 1370 }, { 4, 11, 552 }, - { 14, 10, 381 }, { 9, 0, 759 }, { 16, 0, 31 }, { 16, 0, 39 }, - { 16, 0, 75 }, { 18, 0, 24 }, { 20, 0, 42 }, { 24, 0, 1 }, - { 6, 0, 712 }, { 6, 0, 1722 }, { 5, 10, 663 }, { 5, 10, 846 }, - { 8, 0, 222 }, { 8, 0, 476 }, { 9, 0, 238 }, { 11, 0, 516 }, - { 11, 0, 575 }, { 15, 0, 109 }, { 18, 0, 100 }, { 7, 0, 1402 }, - { 7, 0, 1414 }, { 12, 0, 456 }, { 5, 10, 378 }, { 8, 10, 465 }, - { 9, 10, 286 }, { 10, 10, 185 }, { 10, 10, 562 }, { 10, 10, 635 }, - { 11, 10, 31 }, { 11, 10, 393 }, { 13, 10, 312 }, { 18, 10, 65 }, - { 18, 10, 96 }, { 19, 10, 89 }, { 4, 0, 986 }, { 6, 0, 1958 }, - { 6, 0, 2032 }, { 8, 0, 934 }, { 10, 0, 985 }, { 7, 10, 1880 }, - { 9, 10, 680 }, { 11, 10, 798 }, { 6, 10, 1770 }, { 17, 11, 49 }, - { 4, 11, 614 }, { 4, 10, 648 }, { 5, 10, 945 }, { 6, 10, 1656 }, - { 6, 10, 1787 }, { 7, 10, 167 }, { 8, 10, 824 }, { 9, 10, 391 }, - { 10, 10, 375 }, { 11, 10, 185 }, { 10, 11, 661 }, { 7, 0, 1273 }, - { 7, 11, 1945 }, { 7, 0, 706 }, { 7, 0, 1058 }, { 10, 0, 538 }, - { 7, 10, 1645 }, { 8, 10, 352 }, { 9, 10, 249 }, { 4, 10, 152 }, - { 11, 0, 92 }, { 11, 0, 196 }, { 11, 0, 409 }, { 11, 0, 450 }, - { 11, 0, 666 }, { 11, 0, 777 }, { 12, 0, 262 }, { 13, 0, 385 }, - { 13, 0, 393 }, { 15, 0, 115 }, { 16, 0, 45 }, { 17, 0, 82 }, - { 5, 10, 1006 }, { 6, 0, 40 }, { 7, 0, 1781 }, { 9, 11, 614 }, - { 11, 11, 327 }, { 5, 10, 420 }, { 7, 10, 1449 }, { 7, 0, 431 }, - { 10, 0, 97 }, { 7, 10, 832 }, { 6, 0, 423 }, { 7, 0, 665 }, - { 7, 0, 1210 }, { 7, 0, 237 }, { 8, 0, 664 }, { 9, 0, 42 }, - { 9, 0, 266 }, { 9, 0, 380 }, { 9, 0, 645 }, { 10, 0, 177 }, - { 10, 0, 276 }, { 7, 0, 264 }, { 5, 10, 351 }, { 8, 0, 213 }, - { 5, 10, 40 }, { 7, 10, 598 }, { 7, 10, 1638 }, { 9, 10, 166 }, - { 9, 10, 640 }, { 9, 10, 685 }, { 9, 10, 773 }, { 11, 10, 215 }, - { 13, 10, 65 }, { 14, 10, 172 }, { 14, 10, 317 }, { 17, 10, 6 }, - { 5, 11, 84 }, { 6, 11, 163 }, { 8, 10, 60 }, { 9, 10, 343 }, - { 11, 10, 769 }, { 9, 0, 455 }, { 5, 11, 410 }, { 8, 0, 906 }, - { 12, 0, 700 }, { 12, 0, 706 }, { 12, 0, 729 }, { 21, 11, 33 }, - { 22, 11, 40 }, { 7, 10, 1951 }, { 8, 10, 765 }, { 8, 10, 772 }, - { 12, 10, 671 }, { 7, 10, 108 }, { 8, 10, 219 }, { 8, 10, 388 }, - { 9, 10, 639 }, { 9, 10, 775 }, { 11, 10, 275 }, { 12, 10, 464 }, - { 5, 11, 322 }, { 7, 11, 1941 }, { 8, 11, 186 }, { 9, 11, 262 }, - { 10, 11, 187 }, { 14, 11, 208 }, { 18, 11, 130 }, { 11, 0, 624 }, - { 8, 0, 574 }, { 5, 11, 227 }, { 12, 11, 29 }, { 7, 11, 1546 }, - { 11, 11, 299 }, { 14, 11, 407 }, { 5, 10, 15 }, { 6, 10, 56 }, - { 7, 10, 1758 }, { 8, 10, 500 }, { 9, 10, 730 }, { 11, 10, 331 }, - { 13, 10, 150 }, { 14, 10, 282 }, { 7, 11, 1395 }, { 8, 11, 486 }, - { 9, 11, 236 }, { 9, 11, 878 }, { 10, 11, 218 }, { 11, 11, 95 }, - { 19, 11, 17 }, { 19, 11, 31 }, { 7, 11, 2043 }, { 4, 0, 354 }, - { 18, 11, 4 }, { 12, 11, 80 }, { 7, 0, 1558 }, { 6, 10, 1886 }, - { 5, 10, 205 }, { 6, 10, 438 }, { 9, 10, 711 }, { 5, 11, 522 }, - { 5, 10, 534 }, { 7, 0, 235 }, { 7, 0, 1475 }, { 15, 0, 68 }, - { 18, 0, 120 }, { 9, 10, 691 }, { 4, 0, 942 }, { 6, 0, 1813 }, - { 8, 0, 917 }, { 10, 0, 884 }, { 12, 0, 696 }, { 12, 0, 717 }, - { 12, 0, 723 }, { 12, 0, 738 }, { 12, 0, 749 }, { 12, 0, 780 }, - { 16, 0, 97 }, { 18, 0, 169 }, { 6, 10, 443 }, { 8, 11, 562 }, - { 9, 10, 237 }, { 9, 10, 571 }, { 9, 10, 695 }, { 10, 10, 139 }, - { 11, 10, 715 }, { 12, 10, 417 }, { 13, 10, 421 }, { 7, 0, 957 }, - { 5, 0, 830 }, { 6, 11, 1771 }, { 18, 0, 23 }, { 5, 0, 496 }, - { 6, 0, 694 }, { 7, 0, 203 }, { 7, 11, 1190 }, { 9, 11, 620 }, - { 9, 11, 132 }, { 6, 0, 547 }, { 6, 0, 1549 }, { 8, 11, 258 }, - { 9, 11, 208 }, { 9, 11, 359 }, { 4, 0, 864 }, { 5, 0, 88 }, - { 9, 0, 239 }, { 7, 11, 493 }, { 4, 11, 317 }, { 7, 11, 1279 }, - { 4, 11, 477 }, { 4, 10, 578 }, { 5, 11, 63 }, { 5, 11, 509 }, - { 7, 0, 650 }, { 7, 0, 1310 }, { 7, 0, 1076 }, { 9, 0, 80 }, - { 11, 0, 78 }, { 11, 0, 421 }, { 11, 0, 534 }, { 12, 0, 545 }, - { 4, 11, 288 }, { 12, 0, 553 }, { 14, 0, 118 }, { 5, 10, 923 }, - { 7, 0, 274 }, { 11, 0, 479 }, { 11, 0, 507 }, { 8, 11, 89 }, - { 8, 11, 620 }, { 9, 11, 49 }, { 10, 11, 774 }, { 11, 11, 628 }, - { 12, 11, 322 }, { 15, 11, 124 }, { 4, 0, 497 }, { 7, 0, 1584 }, - { 7, 0, 261 }, { 7, 0, 1115 }, { 7, 0, 1354 }, { 7, 0, 1404 }, - { 7, 0, 1588 }, { 7, 0, 1705 }, { 7, 0, 1902 }, { 9, 0, 465 }, - { 10, 0, 248 }, { 10, 0, 349 }, { 10, 0, 647 }, { 11, 0, 527 }, - { 11, 0, 660 }, { 11, 0, 669 }, { 12, 0, 529 }, { 13, 0, 305 }, - { 4, 10, 924 }, { 5, 10, 665 }, { 8, 0, 13 }, { 6, 0, 791 }, - { 10, 11, 120 }, { 7, 0, 642 }, { 8, 0, 250 }, { 11, 0, 123 }, - { 11, 0, 137 }, { 13, 0, 48 }, { 14, 0, 95 }, { 4, 10, 265 }, - { 7, 10, 807 }, { 7, 10, 950 }, { 5, 10, 93 }, { 12, 10, 267 }, - { 7, 0, 1429 }, { 4, 0, 949 }, { 10, 0, 885 }, { 10, 0, 891 }, - { 10, 0, 900 }, { 10, 0, 939 }, { 12, 0, 760 }, { 14, 0, 449 }, - { 11, 11, 366 }, { 4, 0, 818 }, { 6, 11, 85 }, { 7, 10, 994 }, - { 7, 0, 330 }, { 5, 10, 233 }, { 5, 10, 320 }, { 6, 10, 140 }, - { 8, 10, 295 }, { 4, 0, 1004 }, { 8, 0, 982 }, { 8, 0, 993 }, - { 5, 10, 978 }, { 4, 10, 905 }, { 6, 10, 1701 }, { 9, 10, 843 }, - { 10, 0, 545 }, { 12, 0, 301 }, { 6, 0, 947 }, { 6, 0, 1062 }, - { 6, 0, 1188 }, { 4, 0, 904 }, { 5, 0, 794 }, { 24, 10, 6 }, - { 6, 0, 1372 }, { 7, 11, 608 }, { 5, 11, 279 }, { 6, 11, 235 }, - { 7, 11, 468 }, { 8, 11, 446 }, { 9, 11, 637 }, { 10, 11, 717 }, - { 11, 11, 738 }, { 12, 11, 514 }, { 4, 10, 509 }, { 5, 11, 17 }, - { 6, 11, 371 }, { 9, 11, 528 }, { 4, 0, 693 }, { 4, 11, 115 }, - { 5, 11, 669 }, { 6, 11, 407 }, { 8, 11, 311 }, { 11, 11, 10 }, - { 13, 11, 5 }, { 11, 0, 377 }, { 7, 10, 273 }, { 9, 11, 381 }, - { 7, 0, 695 }, { 7, 0, 386 }, { 10, 0, 713 }, { 7, 10, 1041 }, - { 6, 0, 1291 }, { 6, 0, 7 }, { 6, 0, 35 }, { 7, 0, 147 }, - { 7, 0, 1069 }, { 7, 0, 1568 }, { 7, 0, 1575 }, { 7, 0, 1917 }, - { 8, 0, 43 }, { 8, 0, 208 }, { 9, 0, 128 }, { 9, 0, 866 }, - { 10, 0, 20 }, { 11, 0, 981 }, { 19, 0, 33 }, { 7, 0, 893 }, - { 13, 0, 424 }, { 11, 10, 234 }, { 22, 11, 56 }, { 5, 11, 779 }, - { 5, 11, 807 }, { 6, 11, 1655 }, { 6, 11, 1676 }, { 5, 10, 802 }, - { 7, 10, 2021 }, { 8, 10, 805 }, { 4, 11, 196 }, { 5, 10, 167 }, - { 5, 11, 558 }, { 5, 10, 899 }, { 5, 11, 949 }, { 6, 10, 410 }, - { 9, 10, 777 }, { 9, 10, 789 }, { 6, 10, 1705 }, { 8, 0, 904 }, - { 12, 0, 787 }, { 6, 0, 322 }, { 9, 0, 552 }, { 11, 0, 274 }, - { 13, 0, 209 }, { 13, 0, 499 }, { 14, 0, 85 }, { 15, 0, 126 }, - { 17, 0, 70 }, { 7, 10, 10 }, { 5, 10, 11 }, { 6, 10, 117 }, - { 6, 10, 485 }, { 7, 10, 1133 }, { 9, 10, 582 }, { 9, 10, 594 }, - { 11, 10, 21 }, { 11, 10, 818 }, { 12, 10, 535 }, { 13, 10, 86 }, - { 4, 10, 264 }, { 7, 10, 1067 }, { 8, 10, 204 }, { 8, 10, 385 }, - { 11, 10, 953 }, { 4, 11, 752 }, { 10, 10, 56 }, { 5, 10, 470 }, - { 6, 0, 1808 }, { 8, 0, 83 }, { 8, 0, 742 }, { 8, 0, 817 }, - { 9, 0, 28 }, { 9, 0, 29 }, { 9, 0, 885 }, { 10, 0, 387 }, - { 11, 0, 633 }, { 11, 0, 740 }, { 13, 0, 235 }, { 13, 0, 254 }, - { 15, 0, 143 }, { 15, 0, 146 }, { 12, 0, 49 }, { 6, 0, 1832 }, - { 4, 11, 227 }, { 5, 11, 159 }, { 5, 11, 409 }, { 7, 11, 80 }, - { 10, 11, 294 }, { 10, 11, 479 }, { 12, 11, 418 }, { 14, 11, 50 }, - { 14, 11, 249 }, { 14, 11, 295 }, { 7, 11, 1470 }, { 8, 11, 66 }, - { 8, 11, 137 }, { 8, 11, 761 }, { 9, 11, 638 }, { 11, 11, 80 }, - { 11, 11, 212 }, { 11, 11, 368 }, { 11, 11, 418 }, { 12, 11, 8 }, - { 13, 11, 15 }, { 16, 11, 61 }, { 17, 11, 59 }, { 19, 11, 28 }, - { 20, 11, 84 }, { 11, 10, 1015 }, { 10, 11, 468 }, { 7, 0, 421 }, - { 6, 0, 415 }, { 7, 0, 1049 }, { 9, 0, 442 }, { 6, 11, 38 }, - { 7, 11, 1220 }, { 8, 11, 185 }, { 8, 11, 256 }, { 9, 11, 22 }, - { 9, 11, 331 }, { 10, 11, 738 }, { 11, 11, 205 }, { 11, 11, 540 }, - { 11, 11, 746 }, { 13, 11, 399 }, { 13, 11, 465 }, { 14, 11, 88 }, - { 14, 11, 194 }, { 11, 0, 289 }, { 5, 10, 715 }, { 4, 0, 110 }, - { 10, 0, 415 }, { 10, 0, 597 }, { 14, 0, 206 }, { 4, 11, 159 }, - { 6, 11, 115 }, { 7, 11, 252 }, { 7, 11, 257 }, { 7, 11, 1928 }, - { 8, 11, 69 }, { 9, 11, 384 }, { 10, 11, 91 }, { 10, 11, 615 }, - { 12, 11, 375 }, { 14, 11, 235 }, { 18, 11, 117 }, { 19, 11, 123 }, - { 5, 11, 911 }, { 8, 11, 278 }, { 7, 0, 205 }, { 7, 0, 2000 }, - { 8, 10, 794 }, { 9, 10, 400 }, { 10, 10, 298 }, { 14, 10, 228 }, - { 7, 11, 1774 }, { 4, 11, 151 }, { 7, 11, 1567 }, { 8, 11, 351 }, - { 9, 11, 322 }, { 8, 10, 724 }, { 5, 11, 990 }, { 7, 0, 1539 }, - { 11, 0, 512 }, { 13, 0, 205 }, { 19, 0, 30 }, { 22, 0, 36 }, - { 23, 0, 19 }, { 7, 11, 1539 }, { 5, 11, 194 }, { 7, 11, 1662 }, - { 9, 11, 90 }, { 12, 11, 180 }, { 6, 10, 190 }, { 7, 10, 768 }, - { 7, 10, 1170 }, { 6, 0, 1340 }, { 4, 0, 283 }, { 7, 0, 1194 }, - { 5, 11, 425 }, { 5, 11, 971 }, { 12, 0, 549 }, { 14, 10, 67 }, - { 19, 10, 60 }, { 7, 10, 1023 }, { 6, 0, 1720 }, { 10, 11, 587 }, - { 5, 11, 72 }, { 6, 11, 264 }, { 7, 11, 21 }, { 7, 11, 46 }, - { 7, 11, 2013 }, { 8, 11, 215 }, { 8, 11, 513 }, { 10, 11, 266 }, - { 11, 11, 22 }, { 5, 0, 319 }, { 7, 0, 534 }, { 6, 10, 137 }, - { 9, 10, 75 }, { 9, 10, 253 }, { 10, 10, 194 }, { 10, 10, 444 }, - { 7, 0, 1180 }, { 20, 0, 112 }, { 6, 11, 239 }, { 7, 11, 118 }, - { 10, 11, 95 }, { 11, 11, 603 }, { 13, 11, 443 }, { 14, 11, 160 }, - { 15, 11, 4 }, { 6, 11, 431 }, { 5, 11, 874 }, { 6, 11, 1677 }, - { 11, 10, 643 }, { 12, 10, 115 }, { 15, 11, 0 }, { 6, 0, 967 }, - { 6, 11, 65 }, { 7, 11, 939 }, { 7, 11, 1172 }, { 7, 11, 1671 }, - { 9, 11, 540 }, { 10, 11, 696 }, { 11, 11, 265 }, { 11, 11, 732 }, - { 11, 11, 928 }, { 11, 11, 937 }, { 12, 11, 399 }, { 13, 11, 438 }, - { 21, 11, 19 }, { 9, 11, 200 }, { 7, 0, 1940 }, { 5, 10, 760 }, - { 7, 10, 542 }, { 8, 10, 135 }, { 8, 10, 496 }, { 12, 11, 44 }, - { 7, 11, 1655 }, { 8, 11, 305 }, { 7, 10, 319 }, { 7, 10, 355 }, - { 7, 10, 763 }, { 10, 10, 389 }, { 17, 10, 43 }, { 8, 0, 735 }, - { 10, 10, 786 }, { 9, 11, 19 }, { 4, 11, 696 }, { 5, 0, 132 }, - { 9, 0, 486 }, { 9, 0, 715 }, { 10, 0, 458 }, { 11, 0, 373 }, - { 11, 0, 668 }, { 11, 0, 795 }, { 11, 0, 897 }, { 12, 0, 272 }, - { 12, 0, 424 }, { 12, 0, 539 }, { 12, 0, 558 }, { 14, 0, 245 }, - { 14, 0, 263 }, { 14, 0, 264 }, { 14, 0, 393 }, { 14, 0, 403 }, - { 10, 0, 38 }, { 11, 0, 784 }, { 4, 0, 838 }, { 4, 11, 302 }, - { 7, 11, 1766 }, { 5, 0, 379 }, { 5, 0, 8 }, { 6, 0, 89 }, - { 6, 0, 400 }, { 7, 0, 1569 }, { 7, 0, 1623 }, { 7, 0, 1850 }, - { 8, 0, 218 }, { 8, 0, 422 }, { 9, 0, 570 }, { 10, 0, 626 }, - { 4, 11, 726 }, { 5, 11, 630 }, { 4, 0, 1017 }, { 10, 0, 660 }, - { 6, 0, 387 }, { 7, 0, 882 }, { 13, 0, 111 }, { 6, 0, 224 }, - { 7, 0, 877 }, { 9, 0, 647 }, { 4, 10, 58 }, { 5, 10, 286 }, - { 6, 10, 319 }, { 7, 10, 402 }, { 7, 10, 1254 }, { 7, 10, 1903 }, - { 8, 10, 356 }, { 12, 10, 408 }, { 7, 0, 790 }, { 9, 0, 510 }, - { 10, 0, 53 }, { 4, 10, 389 }, { 9, 10, 181 }, { 10, 10, 29 }, - { 10, 10, 816 }, { 11, 10, 311 }, { 11, 10, 561 }, { 12, 10, 67 }, - { 13, 10, 181 }, { 14, 0, 458 }, { 6, 11, 118 }, { 7, 11, 215 }, - { 7, 11, 1521 }, { 12, 11, 11 }, { 6, 0, 954 }, { 7, 0, 394 }, - { 6, 0, 1367 }, { 5, 11, 225 }, { 5, 10, 373 }, { 4, 0, 882 }, - { 7, 0, 1409 }, { 7, 10, 1972 }, { 7, 10, 1793 }, { 4, 11, 370 }, - { 5, 11, 756 }, { 7, 11, 1326 }, { 22, 11, 13 }, { 7, 11, 354 }, - { 10, 11, 410 }, { 11, 11, 815 }, { 6, 11, 1662 }, { 7, 11, 48 }, - { 8, 11, 771 }, { 10, 11, 116 }, { 13, 11, 104 }, { 14, 11, 105 }, - { 14, 11, 184 }, { 15, 11, 168 }, { 19, 11, 92 }, { 20, 11, 68 }, - { 7, 0, 124 }, { 8, 0, 38 }, { 5, 0, 261 }, { 7, 0, 78 }, - { 7, 0, 199 }, { 8, 0, 815 }, { 9, 0, 126 }, { 10, 0, 342 }, - { 12, 0, 647 }, { 4, 0, 628 }, { 12, 0, 724 }, { 7, 0, 266 }, - { 8, 0, 804 }, { 7, 10, 1651 }, { 17, 10, 89 }, { 7, 0, 208 }, - { 6, 0, 1178 }, { 6, 0, 79 }, { 7, 0, 1519 }, { 4, 10, 672 }, - { 5, 10, 737 }, { 8, 0, 741 }, { 4, 11, 120 }, { 4, 0, 710 }, - { 6, 0, 376 }, { 6, 0, 606 }, { 6, 0, 1347 }, { 6, 0, 1494 }, - { 6, 0, 850 }, { 6, 0, 1553 }, { 9, 0, 821 }, { 5, 10, 145 }, - { 6, 11, 593 }, { 7, 0, 1311 }, { 12, 0, 135 }, { 4, 0, 467 }, - { 5, 0, 405 }, { 6, 0, 544 }, { 5, 11, 820 }, { 7, 11, 931 }, - { 6, 0, 100 }, { 7, 0, 244 }, { 7, 0, 632 }, { 7, 0, 1609 }, - { 8, 0, 178 }, { 8, 0, 638 }, { 13, 0, 58 }, { 4, 10, 387 }, - { 7, 10, 1288 }, { 6, 11, 151 }, { 6, 11, 1675 }, { 7, 11, 383 }, - { 23, 11, 10 }, { 4, 0, 481 }, { 7, 10, 550 }, { 6, 0, 1378 }, - { 6, 11, 1624 }, { 11, 11, 11 }, { 12, 11, 422 }, { 13, 11, 262 }, - { 14, 11, 360 }, { 5, 0, 791 }, { 4, 11, 43 }, { 5, 11, 344 }, - { 5, 11, 357 }, { 7, 0, 1227 }, { 12, 0, 978 }, { 7, 0, 686 }, - { 8, 0, 33 }, { 8, 0, 238 }, { 10, 0, 616 }, { 11, 0, 467 }, - { 11, 0, 881 }, { 13, 0, 217 }, { 13, 0, 253 }, { 14, 0, 268 }, - { 9, 0, 857 }, { 8, 0, 467 }, { 8, 0, 1006 }, { 7, 11, 148 }, - { 8, 11, 284 }, { 13, 11, 63 }, { 4, 10, 576 }, { 7, 10, 1263 }, - { 5, 11, 888 }, { 5, 10, 919 }, { 6, 10, 1673 }, { 20, 10, 37 }, - { 20, 11, 37 }, { 4, 0, 447 }, { 4, 11, 711 }, { 4, 0, 128 }, - { 5, 0, 415 }, { 6, 0, 462 }, { 7, 0, 294 }, { 7, 0, 578 }, - { 10, 0, 710 }, { 11, 0, 86 }, { 4, 10, 82 }, { 5, 10, 333 }, - { 5, 10, 904 }, { 6, 10, 207 }, { 7, 10, 325 }, { 7, 10, 1726 }, - { 8, 10, 101 }, { 10, 10, 778 }, { 11, 10, 220 }, { 8, 0, 587 }, - { 9, 11, 440 }, { 5, 10, 903 }, { 6, 0, 427 }, { 7, 0, 1018 }, - { 10, 0, 692 }, { 4, 0, 195 }, { 7, 0, 802 }, { 12, 10, 147 }, - { 6, 0, 1546 }, { 6, 0, 684 }, { 4, 10, 705 }, { 8, 0, 345 }, - { 11, 11, 678 }, { 12, 11, 307 }, { 5, 0, 365 }, { 6, 0, 1683 }, - { 4, 11, 65 }, { 5, 11, 479 }, { 5, 11, 1004 }, { 7, 11, 1913 }, - { 8, 11, 317 }, { 9, 11, 302 }, { 10, 11, 612 }, { 13, 11, 22 }, - { 10, 0, 472 }, { 4, 11, 261 }, { 7, 11, 510 }, { 6, 10, 90 }, - { 14, 0, 433 }, { 23, 0, 28 }, { 4, 11, 291 }, { 7, 11, 101 }, - { 9, 11, 515 }, { 12, 11, 152 }, { 12, 11, 443 }, { 13, 11, 392 }, - { 14, 11, 357 }, { 12, 0, 997 }, { 5, 0, 3 }, { 8, 0, 578 }, - { 9, 0, 118 }, { 10, 0, 705 }, { 13, 0, 279 }, { 7, 11, 1266 }, - { 7, 10, 813 }, { 12, 10, 497 }, { 13, 10, 56 }, { 5, 0, 229 }, - { 6, 10, 125 }, { 7, 10, 1277 }, { 8, 0, 102 }, { 10, 0, 578 }, - { 10, 0, 672 }, { 12, 0, 496 }, { 13, 0, 408 }, { 14, 0, 121 }, - { 17, 0, 106 }, { 23, 10, 12 }, { 6, 0, 866 }, { 6, 0, 1080 }, - { 8, 0, 1022 }, { 4, 11, 130 }, { 7, 11, 843 }, { 5, 11, 42 }, - { 5, 11, 879 }, { 7, 11, 245 }, { 7, 11, 324 }, { 7, 11, 1532 }, - { 11, 11, 463 }, { 11, 11, 472 }, { 13, 11, 363 }, { 16, 11, 52 }, - { 22, 0, 55 }, { 8, 0, 115 }, { 8, 0, 350 }, { 9, 0, 489 }, - { 10, 0, 128 }, { 11, 0, 306 }, { 12, 0, 373 }, { 14, 0, 30 }, - { 17, 0, 79 }, { 19, 0, 80 }, { 4, 11, 134 }, { 5, 11, 372 }, - { 6, 0, 657 }, { 6, 0, 933 }, { 7, 11, 1147 }, { 4, 0, 230 }, - { 5, 0, 702 }, { 6, 0, 1728 }, { 4, 0, 484 }, { 18, 0, 26 }, - { 19, 0, 42 }, { 20, 0, 43 }, { 21, 0, 0 }, { 23, 0, 27 }, - { 24, 0, 14 }, { 7, 0, 185 }, { 7, 0, 703 }, { 6, 0, 417 }, - { 10, 0, 618 }, { 7, 10, 1106 }, { 9, 10, 770 }, { 11, 10, 112 }, - { 12, 10, 413 }, { 6, 0, 803 }, { 4, 11, 644 }, { 6, 0, 1262 }, - { 7, 11, 540 }, { 12, 10, 271 }, { 17, 10, 109 }, { 7, 11, 123 }, - { 4, 0, 633 }, { 6, 11, 623 }, { 4, 11, 908 }, { 5, 11, 359 }, - { 5, 11, 508 }, { 6, 11, 1723 }, { 7, 11, 343 }, { 7, 11, 1996 }, - { 7, 11, 2026 }, { 7, 0, 479 }, { 10, 0, 262 }, { 7, 10, 304 }, - { 9, 10, 646 }, { 9, 10, 862 }, { 11, 10, 696 }, { 12, 10, 208 }, - { 15, 10, 79 }, { 19, 10, 108 }, { 4, 11, 341 }, { 7, 11, 480 }, - { 6, 0, 830 }, { 5, 0, 70 }, { 5, 0, 622 }, { 6, 0, 334 }, - { 7, 0, 1032 }, { 9, 0, 171 }, { 11, 0, 26 }, { 11, 0, 213 }, - { 11, 0, 637 }, { 11, 0, 707 }, { 12, 0, 202 }, { 12, 0, 380 }, - { 13, 0, 226 }, { 13, 0, 355 }, { 14, 0, 222 }, { 17, 0, 42 }, - { 7, 10, 981 }, { 15, 0, 217 }, { 9, 11, 114 }, { 4, 0, 23 }, - { 4, 0, 141 }, { 5, 0, 313 }, { 5, 0, 1014 }, { 6, 0, 50 }, - { 6, 0, 51 }, { 7, 0, 142 }, { 7, 0, 384 }, { 7, 0, 559 }, - { 8, 0, 640 }, { 9, 0, 460 }, { 9, 0, 783 }, { 11, 0, 741 }, - { 12, 0, 183 }, { 13, 0, 488 }, { 13, 0, 360 }, { 7, 0, 1586 }, - { 7, 11, 1995 }, { 8, 11, 299 }, { 11, 11, 890 }, { 12, 11, 674 }, - { 4, 10, 434 }, { 7, 0, 652 }, { 6, 10, 550 }, { 7, 0, 766 }, - { 5, 10, 553 }, { 10, 10, 824 }, { 7, 0, 737 }, { 8, 0, 298 }, - { 8, 10, 452 }, { 4, 11, 238 }, { 5, 11, 503 }, { 6, 11, 179 }, - { 7, 11, 2003 }, { 8, 11, 381 }, { 8, 11, 473 }, { 9, 11, 149 }, - { 10, 11, 183 }, { 15, 11, 45 }, { 15, 11, 86 }, { 5, 10, 292 }, - { 5, 0, 222 }, { 9, 0, 655 }, { 10, 0, 534 }, { 10, 10, 135 }, - { 4, 11, 121 }, { 5, 11, 156 }, { 5, 11, 349 }, { 9, 11, 136 }, - { 10, 11, 605 }, { 14, 11, 342 }, { 19, 11, 107 }, { 9, 0, 906 }, - { 6, 0, 1013 }, { 6, 0, 1250 }, { 6, 0, 1956 }, { 6, 0, 2009 }, - { 8, 0, 991 }, { 16, 0, 120 }, { 7, 11, 1192 }, { 10, 0, 503 }, - { 5, 0, 154 }, { 7, 0, 1491 }, { 10, 0, 379 }, { 10, 0, 485 }, - { 6, 0, 1867 }, { 6, 0, 1914 }, { 6, 0, 1925 }, { 9, 0, 917 }, - { 9, 0, 925 }, { 9, 0, 932 }, { 9, 0, 951 }, { 9, 0, 1007 }, - { 9, 0, 1013 }, { 12, 0, 806 }, { 12, 0, 810 }, { 12, 0, 814 }, - { 12, 0, 816 }, { 12, 0, 824 }, { 12, 0, 832 }, { 12, 0, 837 }, - { 12, 0, 863 }, { 12, 0, 868 }, { 12, 0, 870 }, { 12, 0, 889 }, - { 12, 0, 892 }, { 12, 0, 900 }, { 12, 0, 902 }, { 12, 0, 908 }, - { 12, 0, 933 }, { 12, 0, 942 }, { 12, 0, 949 }, { 12, 0, 954 }, - { 15, 0, 175 }, { 15, 0, 203 }, { 15, 0, 213 }, { 15, 0, 218 }, - { 15, 0, 225 }, { 15, 0, 231 }, { 15, 0, 239 }, { 15, 0, 248 }, - { 15, 0, 252 }, { 18, 0, 190 }, { 18, 0, 204 }, { 18, 0, 215 }, - { 18, 0, 216 }, { 18, 0, 222 }, { 18, 0, 225 }, { 18, 0, 230 }, - { 18, 0, 239 }, { 18, 0, 241 }, { 21, 0, 42 }, { 21, 0, 43 }, - { 21, 0, 44 }, { 21, 0, 45 }, { 21, 0, 46 }, { 21, 0, 53 }, - { 24, 0, 27 }, { 24, 0, 31 }, { 5, 0, 716 }, { 7, 0, 844 }, - { 4, 0, 91 }, { 5, 0, 388 }, { 5, 0, 845 }, { 6, 0, 206 }, - { 6, 0, 252 }, { 6, 0, 365 }, { 7, 0, 136 }, { 7, 0, 531 }, - { 8, 0, 621 }, { 7, 10, 393 }, { 10, 10, 603 }, { 11, 10, 206 }, - { 6, 11, 80 }, { 6, 11, 1694 }, { 7, 11, 173 }, { 7, 11, 1974 }, - { 9, 11, 547 }, { 10, 11, 730 }, { 14, 11, 18 }, { 22, 11, 39 }, - { 9, 0, 748 }, { 4, 11, 923 }, { 6, 11, 1711 }, { 4, 10, 912 }, - { 9, 10, 232 }, { 7, 10, 98 }, { 7, 10, 1973 }, { 8, 10, 716 }, - { 14, 0, 103 }, { 5, 10, 733 }, { 4, 11, 595 }, { 12, 0, 158 }, - { 18, 0, 8 }, { 19, 0, 62 }, { 20, 0, 6 }, { 22, 0, 4 }, - { 23, 0, 2 }, { 23, 0, 9 }, { 5, 11, 240 }, { 6, 11, 459 }, - { 7, 11, 12 }, { 7, 11, 114 }, { 7, 11, 502 }, { 7, 11, 1751 }, - { 7, 11, 1753 }, { 7, 11, 1805 }, { 8, 11, 658 }, { 9, 11, 1 }, - { 11, 11, 959 }, { 13, 11, 446 }, { 14, 11, 211 }, { 7, 0, 576 }, - { 5, 0, 771 }, { 5, 0, 863 }, { 5, 0, 898 }, { 6, 0, 648 }, - { 6, 0, 1632 }, { 6, 0, 1644 }, { 6, 0, 1780 }, { 5, 0, 331 }, - { 7, 11, 633 }, { 7, 11, 905 }, { 7, 11, 909 }, { 7, 11, 1538 }, - { 9, 11, 767 }, { 12, 11, 636 }, { 12, 0, 632 }, { 5, 0, 107 }, - { 7, 0, 201 }, { 8, 0, 518 }, { 6, 0, 446 }, { 7, 0, 1817 }, - { 6, 11, 490 }, { 9, 0, 851 }, { 13, 0, 510 }, { 7, 11, 250 }, - { 8, 11, 506 }, { 8, 11, 507 }, { 4, 0, 504 }, { 9, 10, 72 }, - { 4, 11, 158 }, { 4, 11, 140 }, { 7, 11, 362 }, { 8, 11, 209 }, - { 9, 11, 10 }, { 9, 11, 160 }, { 9, 11, 503 }, { 10, 11, 689 }, - { 11, 11, 350 }, { 11, 11, 553 }, { 11, 11, 725 }, { 12, 11, 252 }, - { 12, 11, 583 }, { 13, 11, 192 }, { 13, 11, 352 }, { 14, 11, 269 }, - { 14, 11, 356 }, { 20, 11, 50 }, { 6, 11, 597 }, { 7, 11, 1318 }, - { 7, 10, 1454 }, { 5, 0, 883 }, { 5, 0, 975 }, { 8, 0, 392 }, - { 20, 0, 7 }, { 6, 11, 228 }, { 7, 11, 1341 }, { 9, 11, 408 }, - { 10, 11, 343 }, { 11, 11, 348 }, { 11, 10, 600 }, { 12, 11, 99 }, - { 13, 10, 245 }, { 18, 11, 1 }, { 18, 11, 11 }, { 19, 11, 4 }, - { 6, 11, 296 }, { 5, 0, 922 }, { 6, 0, 1707 }, { 4, 11, 557 }, - { 4, 11, 548 }, { 7, 10, 164 }, { 7, 10, 1571 }, { 9, 10, 107 }, - { 12, 10, 225 }, { 7, 11, 197 }, { 8, 11, 142 }, { 8, 11, 325 }, - { 9, 11, 150 }, { 9, 11, 596 }, { 10, 11, 350 }, { 10, 11, 353 }, - { 11, 11, 74 }, { 11, 11, 315 }, { 14, 11, 423 }, { 15, 11, 141 }, - { 5, 0, 993 }, { 7, 0, 515 }, { 9, 0, 91 }, { 4, 0, 131 }, - { 8, 0, 200 }, { 5, 10, 484 }, { 5, 10, 510 }, { 6, 10, 434 }, - { 7, 10, 1000 }, { 7, 10, 1098 }, { 8, 10, 2 }, { 24, 0, 10 }, - { 4, 11, 62 }, { 5, 11, 83 }, { 6, 11, 399 }, { 6, 11, 579 }, - { 7, 11, 692 }, { 7, 11, 846 }, { 7, 11, 1015 }, { 7, 11, 1799 }, - { 8, 11, 403 }, { 9, 11, 394 }, { 10, 11, 133 }, { 12, 11, 4 }, - { 12, 11, 297 }, { 12, 11, 452 }, { 16, 11, 81 }, { 18, 11, 19 }, - { 18, 11, 25 }, { 21, 11, 14 }, { 22, 11, 12 }, { 23, 11, 18 }, - { 12, 11, 459 }, { 4, 11, 177 }, { 7, 0, 1433 }, { 9, 0, 365 }, - { 9, 11, 365 }, { 4, 10, 460 }, { 5, 0, 103 }, { 6, 0, 2004 }, - { 7, 0, 921 }, { 8, 0, 580 }, { 8, 0, 593 }, { 8, 0, 630 }, - { 10, 0, 28 }, { 5, 11, 411 }, { 7, 11, 653 }, { 4, 10, 932 }, - { 5, 10, 891 }, { 4, 0, 911 }, { 5, 0, 867 }, { 5, 0, 1013 }, - { 7, 0, 2034 }, { 8, 0, 798 }, { 8, 0, 813 }, { 7, 11, 439 }, - { 10, 11, 727 }, { 11, 11, 260 }, { 11, 11, 684 }, { 8, 10, 625 }, - { 5, 11, 208 }, { 7, 11, 753 }, { 7, 11, 1528 }, { 5, 0, 461 }, - { 7, 0, 1925 }, { 12, 0, 39 }, { 13, 0, 265 }, { 13, 0, 439 }, - { 6, 10, 76 }, { 6, 0, 853 }, { 8, 10, 92 }, { 9, 10, 221 }, - { 5, 0, 135 }, { 6, 0, 519 }, { 7, 0, 1722 }, { 10, 0, 271 }, - { 11, 0, 261 }, { 17, 0, 54 }, { 11, 11, 814 }, { 14, 0, 338 }, - { 20, 0, 81 }, { 4, 0, 300 }, { 5, 0, 436 }, { 5, 0, 419 }, - { 5, 0, 687 }, { 7, 0, 864 }, { 9, 0, 470 }, { 7, 11, 864 }, - { 9, 0, 836 }, { 5, 11, 242 }, { 6, 0, 1937 }, { 4, 10, 763 }, - { 5, 11, 953 }, { 4, 10, 622 }, { 4, 0, 393 }, { 5, 10, 253 }, - { 8, 0, 357 }, { 10, 0, 745 }, { 14, 0, 426 }, { 17, 0, 94 }, - { 19, 0, 57 }, { 7, 10, 546 }, { 5, 11, 615 }, { 18, 11, 37 }, - { 9, 10, 73 }, { 10, 10, 110 }, { 14, 10, 185 }, { 17, 10, 119 }, - { 11, 0, 703 }, { 7, 10, 624 }, { 7, 10, 916 }, { 10, 10, 256 }, - { 11, 10, 87 }, { 5, 11, 290 }, { 5, 10, 212 }, { 12, 10, 35 }, - { 13, 10, 382 }, { 4, 11, 380 }, { 5, 11, 52 }, { 7, 11, 277 }, - { 9, 11, 368 }, { 11, 11, 791 }, { 5, 0, 387 }, { 10, 11, 138 }, - { 11, 11, 476 }, { 4, 0, 6 }, { 5, 0, 708 }, { 8, 0, 75 }, - { 7, 0, 1351 }, { 9, 0, 581 }, { 10, 0, 639 }, { 11, 0, 453 }, - { 12, 0, 584 }, { 4, 0, 303 }, { 10, 0, 772 }, { 7, 10, 1175 }, - { 4, 0, 749 }, { 5, 10, 816 }, { 6, 11, 256 }, { 7, 11, 307 }, - { 7, 11, 999 }, { 7, 11, 1481 }, { 7, 11, 1732 }, { 7, 11, 1738 }, - { 8, 11, 265 }, { 9, 11, 414 }, { 11, 11, 316 }, { 12, 11, 52 }, - { 13, 11, 420 }, { 19, 11, 100 }, { 7, 11, 1296 }, { 6, 0, 1065 }, - { 5, 10, 869 }, { 5, 10, 968 }, { 6, 10, 1626 }, { 8, 10, 734 }, - { 8, 10, 784 }, { 4, 10, 542 }, { 6, 10, 1716 }, { 6, 10, 1727 }, - { 7, 10, 1082 }, { 7, 10, 1545 }, { 8, 10, 56 }, { 8, 10, 118 }, - { 8, 10, 412 }, { 8, 10, 564 }, { 9, 10, 888 }, { 9, 10, 908 }, - { 10, 10, 50 }, { 10, 10, 423 }, { 11, 10, 685 }, { 11, 10, 697 }, - { 11, 10, 933 }, { 12, 10, 299 }, { 13, 10, 126 }, { 13, 10, 136 }, - { 13, 10, 170 }, { 13, 10, 190 }, { 6, 0, 226 }, { 4, 0, 106 }, - { 7, 0, 310 }, { 11, 0, 717 }, { 5, 11, 723 }, { 5, 0, 890 }, - { 5, 0, 988 }, { 4, 10, 232 }, { 9, 10, 202 }, { 10, 10, 474 }, - { 12, 10, 433 }, { 6, 0, 626 }, { 14, 0, 431 }, { 10, 0, 706 }, - { 22, 0, 44 }, { 13, 0, 51 }, { 6, 10, 108 }, { 7, 10, 1003 }, - { 7, 10, 1181 }, { 8, 10, 111 }, { 8, 10, 343 }, { 4, 0, 698 }, - { 5, 11, 109 }, { 6, 11, 1784 }, { 7, 11, 1895 }, { 12, 11, 296 }, - { 12, 11, 302 }, { 6, 0, 828 }, { 6, 10, 1712 }, { 10, 0, 17 }, - { 7, 0, 1929 }, { 4, 10, 133 }, { 5, 11, 216 }, { 7, 10, 711 }, - { 7, 10, 1298 }, { 7, 10, 1585 }, { 7, 11, 1879 }, { 9, 11, 141 }, - { 9, 11, 270 }, { 9, 11, 679 }, { 10, 11, 159 }, { 10, 11, 553 }, - { 11, 11, 197 }, { 11, 11, 438 }, { 12, 11, 538 }, { 12, 11, 559 }, - { 13, 11, 193 }, { 13, 11, 423 }, { 14, 11, 144 }, { 14, 11, 166 }, - { 14, 11, 167 }, { 15, 11, 67 }, { 19, 11, 84 }, { 13, 11, 127 }, - { 7, 11, 1872 }, { 9, 11, 81 }, { 6, 10, 99 }, { 7, 10, 1808 }, - { 17, 10, 57 }, { 6, 11, 391 }, { 5, 0, 689 }, { 6, 0, 84 }, - { 7, 0, 1250 }, { 6, 10, 574 }, { 7, 10, 428 }, { 10, 10, 669 }, - { 11, 10, 485 }, { 11, 10, 840 }, { 12, 10, 300 }, { 14, 10, 250 }, - { 7, 11, 322 }, { 8, 11, 249 }, { 7, 11, 432 }, { 7, 11, 1649 }, - { 7, 10, 1871 }, { 9, 10, 252 }, { 6, 11, 155 }, { 12, 11, 234 }, - { 7, 0, 871 }, { 19, 0, 27 }, { 19, 11, 27 }, { 12, 0, 498 }, - { 5, 0, 986 }, { 6, 0, 130 }, { 10, 0, 823 }, { 6, 0, 1793 }, - { 7, 0, 1582 }, { 8, 0, 458 }, { 10, 0, 101 }, { 10, 0, 318 }, - { 10, 0, 945 }, { 12, 0, 734 }, { 16, 0, 104 }, { 18, 0, 177 }, - { 6, 10, 323 }, { 7, 10, 1564 }, { 5, 11, 632 }, { 10, 11, 526 }, - { 10, 0, 435 }, { 7, 10, 461 }, { 8, 10, 775 }, { 6, 11, 144 }, - { 7, 11, 948 }, { 7, 11, 1042 }, { 7, 11, 1857 }, { 8, 11, 235 }, - { 8, 11, 461 }, { 9, 11, 453 }, { 9, 11, 530 }, { 10, 11, 354 }, - { 17, 11, 77 }, { 19, 11, 99 }, { 20, 11, 79 }, { 10, 0, 966 }, - { 7, 0, 1644 }, { 9, 0, 129 }, { 7, 0, 997 }, { 8, 0, 502 }, - { 5, 11, 196 }, { 6, 11, 486 }, { 7, 11, 212 }, { 8, 11, 309 }, - { 8, 11, 346 }, { 7, 10, 727 }, { 18, 10, 73 }, { 4, 0, 823 }, - { 4, 11, 686 }, { 7, 0, 1927 }, { 4, 0, 762 }, { 7, 0, 1756 }, - { 9, 0, 98 }, { 8, 10, 577 }, { 24, 0, 8 }, { 4, 11, 30 }, - { 5, 11, 43 }, { 24, 11, 8 }, { 7, 0, 1046 }, { 11, 0, 160 }, - { 7, 0, 492 }, { 4, 10, 413 }, { 5, 10, 677 }, { 7, 11, 492 }, - { 8, 10, 432 }, { 12, 10, 280 }, { 6, 0, 45 }, { 7, 0, 433 }, - { 8, 0, 129 }, { 9, 0, 21 }, { 10, 0, 392 }, { 11, 0, 79 }, - { 12, 0, 499 }, { 13, 0, 199 }, { 13, 0, 451 }, { 7, 0, 558 }, - { 8, 0, 353 }, { 4, 11, 220 }, { 7, 11, 1535 }, { 9, 11, 93 }, - { 11, 11, 474 }, { 7, 10, 646 }, { 7, 10, 1730 }, { 11, 10, 446 }, - { 13, 10, 178 }, { 5, 0, 785 }, { 6, 0, 1145 }, { 8, 0, 81 }, - { 9, 0, 189 }, { 9, 0, 201 }, { 11, 0, 478 }, { 11, 0, 712 }, - { 13, 0, 338 }, { 5, 0, 353 }, { 23, 0, 26 }, { 11, 0, 762 }, - { 4, 10, 395 }, { 6, 0, 2024 }, { 4, 0, 611 }, { 5, 0, 606 }, - { 9, 10, 174 }, { 10, 10, 164 }, { 11, 10, 440 }, { 11, 10, 841 }, - { 15, 10, 98 }, { 6, 10, 426 }, { 10, 10, 608 }, { 11, 10, 1002 }, - { 10, 10, 250 }, { 6, 0, 25 }, { 7, 0, 855 }, { 7, 0, 1258 }, - { 16, 0, 32 }, { 7, 11, 1725 }, { 10, 11, 393 }, { 5, 11, 263 }, - { 6, 11, 414 }, { 6, 0, 2011 }, { 5, 10, 476 }, { 4, 0, 4 }, - { 7, 0, 1118 }, { 7, 0, 1320 }, { 7, 0, 1706 }, { 8, 0, 277 }, - { 9, 0, 622 }, { 10, 0, 9 }, { 11, 0, 724 }, { 12, 0, 350 }, - { 12, 0, 397 }, { 13, 0, 28 }, { 13, 0, 159 }, { 15, 0, 89 }, - { 18, 0, 5 }, { 19, 0, 9 }, { 20, 0, 34 }, { 22, 0, 47 }, - { 6, 11, 178 }, { 6, 11, 1750 }, { 8, 11, 251 }, { 9, 11, 690 }, - { 10, 11, 155 }, { 10, 11, 196 }, { 10, 11, 373 }, { 11, 11, 698 }, - { 13, 11, 155 }, { 20, 11, 93 }, { 5, 11, 97 }, { 9, 11, 393 }, - { 7, 0, 764 }, { 11, 0, 461 }, { 12, 0, 172 }, { 5, 10, 76 }, - { 6, 10, 458 }, { 6, 10, 497 }, { 7, 10, 868 }, { 9, 10, 658 }, - { 10, 10, 594 }, { 11, 10, 566 }, { 12, 10, 338 }, { 13, 10, 200 }, - { 6, 0, 1449 }, { 10, 11, 40 }, { 6, 11, 1639 }, { 6, 0, 1445 }, - { 6, 0, 1168 }, { 4, 10, 526 }, { 7, 10, 1029 }, { 7, 10, 1054 }, - { 4, 11, 191 }, { 7, 11, 934 }, { 8, 11, 647 }, { 17, 11, 97 }, - { 4, 10, 636 }, { 6, 0, 233 }, { 7, 10, 660 }, { 7, 10, 1124 }, - { 17, 10, 31 }, { 19, 10, 22 }, { 23, 10, 14 }, { 6, 10, 1699 }, - { 8, 11, 110 }, { 12, 11, 246 }, { 15, 11, 162 }, { 19, 11, 64 }, - { 20, 11, 8 }, { 20, 11, 95 }, { 22, 11, 24 }, { 24, 11, 17 }, - { 5, 11, 165 }, { 9, 11, 346 }, { 10, 11, 655 }, { 5, 11, 319 }, - { 7, 11, 534 }, { 6, 0, 255 }, { 9, 0, 216 }, { 8, 11, 128 }, - { 11, 11, 179 }, { 9, 0, 183 }, { 11, 0, 286 }, { 11, 0, 956 }, - { 23, 0, 3 }, { 4, 0, 536 }, { 7, 0, 1141 }, { 10, 0, 723 }, - { 11, 0, 371 }, { 4, 10, 279 }, { 7, 10, 301 }, { 9, 10, 362 }, - { 7, 0, 285 }, { 5, 11, 57 }, { 6, 11, 101 }, { 6, 11, 1663 }, - { 7, 11, 132 }, { 7, 11, 1048 }, { 7, 11, 1154 }, { 7, 11, 1415 }, - { 7, 11, 1507 }, { 12, 11, 493 }, { 15, 11, 105 }, { 23, 11, 15 }, - { 5, 11, 459 }, { 7, 11, 1073 }, { 7, 10, 1743 }, { 8, 11, 241 }, - { 8, 11, 334 }, { 4, 10, 178 }, { 5, 10, 399 }, { 7, 0, 560 }, - { 4, 0, 690 }, { 7, 0, 1246 }, { 18, 0, 157 }, { 19, 0, 63 }, - { 10, 0, 599 }, { 11, 0, 33 }, { 12, 0, 571 }, { 21, 0, 1 }, - { 6, 11, 324 }, { 6, 11, 520 }, { 7, 11, 338 }, { 7, 11, 1616 }, - { 7, 11, 1729 }, { 8, 11, 228 }, { 9, 11, 69 }, { 11, 11, 750 }, - { 7, 0, 1862 }, { 12, 0, 491 }, { 12, 0, 520 }, { 13, 0, 383 }, - { 14, 0, 244 }, { 7, 11, 734 }, { 6, 10, 1692 }, { 10, 0, 448 }, - { 11, 0, 630 }, { 17, 0, 117 }, { 6, 10, 202 }, { 7, 11, 705 }, - { 12, 10, 360 }, { 17, 10, 118 }, { 18, 10, 27 }, { 20, 10, 67 }, - { 4, 11, 73 }, { 6, 11, 612 }, { 7, 11, 927 }, { 7, 11, 1822 }, - { 8, 11, 217 }, { 9, 11, 472 }, { 9, 11, 765 }, { 9, 11, 766 }, - { 10, 11, 408 }, { 11, 11, 51 }, { 11, 11, 793 }, { 12, 11, 266 }, - { 15, 11, 158 }, { 20, 11, 89 }, { 22, 11, 32 }, { 4, 0, 190 }, - { 5, 0, 554 }, { 5, 0, 1001 }, { 5, 11, 389 }, { 8, 11, 636 }, - { 9, 11, 229 }, { 5, 0, 446 }, { 7, 10, 872 }, { 10, 10, 516 }, - { 11, 10, 167 }, { 9, 10, 313 }, { 4, 10, 224 }, { 6, 0, 1313 }, - { 5, 10, 546 }, { 7, 10, 35 }, { 8, 10, 11 }, { 8, 10, 12 }, - { 9, 10, 315 }, { 9, 10, 533 }, { 10, 10, 802 }, { 11, 10, 166 }, - { 12, 10, 525 }, { 14, 10, 243 }, { 6, 0, 636 }, { 9, 0, 837 }, - { 5, 10, 241 }, { 8, 10, 242 }, { 9, 10, 451 }, { 10, 10, 667 }, - { 11, 10, 598 }, { 12, 10, 429 }, { 22, 10, 46 }, { 22, 11, 46 }, - { 8, 11, 472 }, { 11, 0, 278 }, { 14, 0, 73 }, { 13, 11, 185 }, - { 4, 0, 868 }, { 6, 0, 972 }, { 4, 10, 366 }, { 9, 10, 516 }, - { 10, 0, 1010 }, { 5, 11, 189 }, { 6, 10, 1736 }, { 7, 11, 442 }, - { 7, 11, 443 }, { 8, 11, 281 }, { 12, 11, 174 }, { 13, 11, 83 }, - { 13, 11, 261 }, { 11, 11, 384 }, { 6, 11, 2 }, { 7, 11, 191 }, - { 7, 11, 446 }, { 7, 11, 758 }, { 7, 11, 1262 }, { 7, 11, 1737 }, - { 8, 11, 22 }, { 8, 11, 270 }, { 8, 11, 612 }, { 9, 11, 4 }, - { 9, 11, 167 }, { 9, 11, 312 }, { 9, 11, 436 }, { 10, 11, 156 }, - { 10, 11, 216 }, { 10, 11, 311 }, { 10, 11, 623 }, { 11, 11, 72 }, - { 11, 11, 330 }, { 11, 11, 455 }, { 12, 11, 101 }, { 12, 11, 321 }, - { 12, 11, 504 }, { 12, 11, 530 }, { 12, 11, 543 }, { 13, 11, 17 }, - { 13, 11, 156 }, { 13, 11, 334 }, { 14, 11, 48 }, { 15, 11, 70 }, - { 17, 11, 60 }, { 20, 11, 64 }, { 6, 10, 331 }, { 8, 10, 623 }, - { 7, 0, 1231 }, { 4, 0, 304 }, { 6, 11, 60 }, { 7, 11, 670 }, - { 7, 11, 1327 }, { 8, 11, 411 }, { 8, 11, 435 }, { 9, 11, 653 }, - { 9, 11, 740 }, { 10, 11, 385 }, { 11, 11, 222 }, { 11, 11, 324 }, - { 11, 11, 829 }, { 12, 11, 611 }, { 7, 0, 506 }, { 6, 11, 166 }, - { 7, 11, 374 }, { 7, 11, 1174 }, { 14, 11, 43 }, { 18, 11, 21 }, - { 7, 11, 1694 }, { 7, 10, 1888 }, { 5, 11, 206 }, { 6, 11, 398 }, - { 7, 11, 50 }, { 22, 0, 26 }, { 6, 0, 53 }, { 6, 0, 199 }, - { 7, 0, 1408 }, { 8, 0, 32 }, { 8, 0, 93 }, { 10, 0, 397 }, - { 10, 0, 629 }, { 11, 0, 593 }, { 11, 0, 763 }, { 13, 0, 326 }, - { 17, 0, 35 }, { 6, 0, 105 }, { 4, 10, 394 }, { 4, 0, 843 }, - { 10, 0, 794 }, { 11, 0, 704 }, { 13, 0, 396 }, { 5, 0, 114 }, - { 5, 0, 255 }, { 13, 0, 285 }, { 6, 0, 619 }, { 7, 0, 898 }, - { 7, 0, 1092 }, { 8, 0, 485 }, { 18, 0, 28 }, { 19, 0, 116 }, - { 7, 10, 1931 }, { 9, 0, 145 }, { 7, 10, 574 }, { 7, 10, 1719 }, - { 7, 0, 2035 }, { 8, 0, 19 }, { 9, 0, 89 }, { 10, 0, 831 }, - { 4, 10, 658 }, { 6, 11, 517 }, { 7, 11, 1159 }, { 10, 11, 621 }, - { 11, 11, 192 }, { 7, 0, 1933 }, { 7, 11, 1933 }, { 9, 10, 781 }, - { 10, 10, 144 }, { 11, 10, 385 }, { 13, 10, 161 }, { 13, 10, 228 }, - { 13, 10, 268 }, { 20, 10, 107 }, { 8, 10, 374 }, { 10, 11, 223 }, - { 11, 11, 645 }, { 7, 0, 1728 }, { 7, 11, 64 }, { 7, 11, 289 }, - { 8, 11, 245 }, { 4, 10, 344 }, { 6, 10, 498 }, { 11, 10, 323 }, - { 8, 0, 746 }, { 7, 10, 1063 }, { 9, 10, 155 }, { 4, 0, 987 }, - { 6, 0, 1964 }, { 6, 0, 1974 }, { 6, 0, 1990 }, { 8, 0, 995 }, - { 5, 11, 609 }, { 5, 10, 906 }, { 6, 0, 1550 }, { 6, 0, 874 }, - { 5, 11, 129 }, { 6, 11, 61 }, { 7, 11, 947 }, { 4, 0, 1018 }, - { 6, 0, 1938 }, { 6, 0, 2021 }, { 6, 0, 2039 }, { 4, 0, 814 }, - { 11, 0, 126 }, { 11, 0, 287 }, { 6, 0, 1264 }, { 5, 0, 955 }, - { 8, 0, 814 }, { 13, 11, 506 }, { 4, 11, 314 }, { 6, 0, 981 }, - { 11, 11, 1000 }, { 5, 0, 56 }, { 8, 0, 892 }, { 8, 0, 915 }, - { 12, 0, 776 }, { 20, 0, 100 }, { 10, 0, 4 }, { 10, 0, 13 }, - { 11, 0, 638 }, { 20, 0, 57 }, { 20, 11, 74 }, { 5, 0, 738 }, - { 4, 10, 616 }, { 5, 11, 637 }, { 8, 10, 692 }, { 5, 0, 758 }, - { 4, 10, 305 }, { 9, 11, 590 }, { 5, 11, 280 }, { 7, 11, 1226 }, - { 6, 11, 494 }, { 7, 0, 1112 }, { 5, 11, 281 }, { 13, 0, 44 }, - { 14, 0, 214 }, { 5, 10, 214 }, { 7, 10, 603 }, { 8, 10, 611 }, - { 9, 10, 686 }, { 10, 10, 88 }, { 11, 10, 459 }, { 11, 10, 496 }, - { 12, 10, 463 }, { 12, 10, 590 }, { 11, 0, 328 }, { 7, 11, 1064 }, - { 9, 0, 133 }, { 7, 0, 168 }, { 13, 0, 196 }, { 13, 0, 237 }, - { 6, 10, 1703 }, { 6, 0, 1152 }, { 7, 0, 1245 }, { 5, 0, 110 }, - { 6, 0, 169 }, { 6, 0, 1702 }, { 7, 0, 400 }, { 8, 0, 538 }, - { 9, 0, 184 }, { 9, 0, 524 }, { 12, 0, 218 }, { 6, 0, 1816 }, - { 10, 0, 871 }, { 12, 0, 769 }, { 12, 0, 785 }, { 4, 11, 630 }, - { 7, 11, 33 }, { 7, 11, 120 }, { 8, 11, 489 }, { 9, 11, 319 }, - { 10, 11, 820 }, { 11, 11, 1004 }, { 12, 11, 379 }, { 13, 11, 117 }, - { 13, 11, 412 }, { 14, 11, 25 }, { 15, 11, 52 }, { 15, 11, 161 }, - { 16, 11, 47 }, { 21, 11, 2 }, { 6, 0, 133 }, { 8, 0, 413 }, - { 9, 0, 353 }, { 11, 0, 993 }, { 17, 10, 19 }, { 4, 11, 937 }, - { 5, 11, 801 }, { 6, 0, 978 }, { 6, 0, 93 }, { 6, 0, 1508 }, - { 7, 0, 1422 }, { 7, 0, 1851 }, { 8, 0, 673 }, { 9, 0, 529 }, - { 12, 0, 43 }, { 6, 0, 317 }, { 10, 0, 512 }, { 4, 10, 737 }, - { 11, 10, 294 }, { 12, 10, 60 }, { 12, 10, 437 }, { 13, 10, 64 }, - { 13, 10, 380 }, { 14, 10, 430 }, { 9, 0, 371 }, { 7, 11, 1591 }, - { 16, 11, 43 }, { 6, 10, 1758 }, { 8, 10, 520 }, { 9, 10, 345 }, - { 9, 10, 403 }, { 14, 10, 350 }, { 5, 0, 526 }, { 10, 10, 242 }, - { 10, 10, 579 }, { 9, 0, 25 }, { 10, 0, 467 }, { 10, 0, 559 }, - { 5, 10, 139 }, { 7, 10, 1168 }, { 10, 10, 539 }, { 4, 0, 335 }, - { 7, 0, 942 }, { 12, 0, 754 }, { 4, 11, 365 }, { 11, 0, 182 }, - { 14, 0, 195 }, { 14, 11, 29 }, { 5, 11, 7 }, { 11, 11, 774 }, - { 4, 11, 746 }, { 7, 11, 1090 }, { 8, 0, 39 }, { 10, 0, 773 }, - { 11, 0, 84 }, { 12, 0, 205 }, { 14, 0, 1 }, { 5, 0, 601 }, - { 5, 0, 870 }, { 5, 11, 360 }, { 8, 11, 237 }, { 4, 0, 181 }, - { 8, 0, 370 }, { 6, 0, 1652 }, { 8, 0, 358 }, { 4, 10, 107 }, - { 7, 10, 613 }, { 8, 10, 439 }, { 8, 10, 504 }, { 9, 10, 501 }, - { 10, 10, 383 }, { 11, 10, 477 }, { 4, 10, 229 }, { 9, 11, 785 }, - { 4, 0, 97 }, { 5, 0, 147 }, { 6, 0, 286 }, { 7, 0, 1362 }, - { 13, 0, 176 }, { 6, 0, 537 }, { 7, 0, 788 }, { 7, 0, 1816 }, - { 4, 10, 903 }, { 12, 10, 71 }, { 6, 0, 743 }, { 6, 0, 1223 }, - { 6, 0, 375 }, { 7, 0, 169 }, { 7, 0, 254 }, { 8, 0, 780 }, - { 7, 11, 1493 }, { 7, 0, 1714 }, { 4, 10, 47 }, { 6, 10, 373 }, - { 7, 10, 452 }, { 7, 10, 543 }, { 7, 10, 1856 }, { 9, 10, 6 }, - { 11, 10, 257 }, { 11, 10, 391 }, { 6, 0, 896 }, { 8, 0, 1003 }, - { 7, 0, 1447 }, { 9, 11, 341 }, { 5, 10, 980 }, { 6, 10, 1754 }, - { 17, 11, 22 }, { 4, 11, 277 }, { 5, 11, 608 }, { 6, 11, 493 }, - { 7, 11, 457 }, { 12, 11, 384 }, { 7, 10, 536 }, { 7, 10, 1331 }, - { 8, 10, 143 }, { 12, 0, 744 }, { 7, 11, 27 }, { 7, 11, 316 }, - { 18, 0, 126 }, { 5, 10, 19 }, { 6, 10, 533 }, { 4, 0, 788 }, - { 11, 0, 41 }, { 5, 11, 552 }, { 5, 11, 586 }, { 5, 11, 676 }, - { 6, 11, 448 }, { 8, 11, 244 }, { 11, 11, 1 }, { 11, 11, 41 }, - { 13, 11, 3 }, { 16, 11, 54 }, { 17, 11, 4 }, { 18, 11, 13 }, - { 4, 0, 985 }, { 6, 0, 1801 }, { 4, 11, 401 }, { 9, 11, 264 }, - { 5, 10, 395 }, { 5, 10, 951 }, { 6, 10, 1776 }, { 5, 0, 629 }, - { 7, 0, 1549 }, { 11, 10, 663 }, { 12, 10, 210 }, { 13, 10, 166 }, - { 13, 10, 310 }, { 14, 10, 373 }, { 19, 10, 43 }, { 9, 11, 543 }, - { 10, 11, 524 }, { 11, 11, 30 }, { 12, 11, 524 }, { 14, 11, 315 }, - { 16, 11, 18 }, { 20, 11, 26 }, { 20, 11, 65 }, { 4, 11, 205 }, - { 5, 11, 623 }, { 7, 11, 104 }, { 8, 11, 519 }, { 5, 0, 293 }, - { 6, 0, 601 }, { 7, 11, 579 }, { 9, 11, 41 }, { 9, 11, 244 }, - { 9, 11, 669 }, { 10, 11, 5 }, { 11, 11, 861 }, { 11, 11, 951 }, - { 11, 11, 980 }, { 4, 11, 717 }, { 4, 10, 695 }, { 7, 10, 497 }, - { 9, 10, 387 }, { 19, 10, 81 }, { 4, 0, 420 }, { 14, 0, 37 }, - { 6, 0, 1134 }, { 6, 0, 1900 }, { 12, 0, 830 }, { 12, 0, 878 }, - { 12, 0, 894 }, { 15, 0, 221 }, { 15, 0, 245 }, { 4, 11, 489 }, - { 7, 0, 1570 }, { 12, 0, 542 }, { 8, 0, 933 }, { 8, 0, 957 }, - { 6, 0, 1371 }, { 7, 0, 31 }, { 8, 0, 373 }, { 5, 10, 284 }, - { 6, 10, 49 }, { 6, 10, 350 }, { 7, 10, 377 }, { 7, 10, 1693 }, - { 8, 10, 678 }, { 9, 10, 161 }, { 9, 10, 585 }, { 9, 10, 671 }, - { 9, 10, 839 }, { 11, 10, 912 }, { 13, 10, 427 }, { 7, 11, 892 }, - { 4, 0, 325 }, { 10, 0, 125 }, { 11, 11, 47 }, { 4, 10, 597 }, - { 10, 0, 323 }, { 6, 0, 1547 }, { 7, 11, 1605 }, { 9, 11, 473 }, - { 11, 11, 962 }, { 18, 11, 139 }, { 11, 10, 908 }, { 7, 11, 819 }, - { 9, 11, 26 }, { 9, 11, 392 }, { 10, 11, 152 }, { 10, 11, 226 }, - { 11, 11, 19 }, { 12, 11, 276 }, { 12, 11, 426 }, { 12, 11, 589 }, - { 13, 11, 460 }, { 15, 11, 97 }, { 19, 11, 48 }, { 20, 11, 104 }, - { 7, 11, 51 }, { 4, 0, 718 }, { 7, 0, 1216 }, { 6, 0, 1896 }, - { 6, 0, 1905 }, { 6, 0, 1912 }, { 9, 0, 947 }, { 9, 0, 974 }, - { 12, 0, 809 }, { 12, 0, 850 }, { 12, 0, 858 }, { 12, 0, 874 }, - { 12, 0, 887 }, { 12, 0, 904 }, { 12, 0, 929 }, { 12, 0, 948 }, - { 12, 0, 952 }, { 15, 0, 198 }, { 15, 0, 206 }, { 15, 0, 220 }, - { 15, 0, 227 }, { 15, 0, 247 }, { 18, 0, 188 }, { 21, 0, 48 }, - { 21, 0, 50 }, { 24, 0, 25 }, { 24, 0, 29 }, { 7, 11, 761 }, - { 7, 11, 1051 }, { 9, 11, 545 }, { 5, 0, 124 }, { 5, 0, 144 }, - { 6, 0, 548 }, { 7, 0, 15 }, { 7, 0, 153 }, { 9, 0, 629 }, - { 7, 11, 606 }, { 7, 10, 2014 }, { 7, 10, 2007 }, { 9, 11, 46 }, - { 9, 10, 101 }, { 9, 10, 450 }, { 10, 10, 66 }, { 10, 10, 842 }, - { 11, 10, 536 }, { 12, 10, 587 }, { 6, 0, 75 }, { 7, 0, 1531 }, - { 8, 0, 416 }, { 9, 0, 240 }, { 9, 0, 275 }, { 10, 0, 100 }, - { 11, 0, 658 }, { 11, 0, 979 }, { 12, 0, 86 }, { 14, 0, 207 }, - { 15, 0, 20 }, { 15, 0, 25 }, { 5, 0, 141 }, { 5, 0, 915 }, - { 6, 0, 1783 }, { 7, 0, 211 }, { 7, 0, 698 }, { 7, 0, 1353 }, - { 9, 0, 83 }, { 9, 0, 281 }, { 10, 0, 376 }, { 10, 0, 431 }, - { 11, 0, 543 }, { 12, 0, 664 }, { 13, 0, 280 }, { 13, 0, 428 }, - { 14, 0, 61 }, { 14, 0, 128 }, { 17, 0, 52 }, { 17, 0, 81 }, - { 4, 11, 674 }, { 7, 0, 533 }, { 21, 0, 6 }, { 4, 11, 770 }, - { 5, 0, 538 }, { 5, 11, 79 }, { 7, 11, 1027 }, { 7, 11, 1477 }, - { 11, 11, 52 }, { 11, 10, 62 }, { 4, 0, 338 }, { 5, 0, 400 }, - { 5, 11, 789 }, { 6, 11, 195 }, { 4, 11, 251 }, { 4, 11, 688 }, - { 7, 11, 513 }, { 7, 11, 1284 }, { 9, 11, 87 }, { 10, 11, 365 }, - { 6, 10, 1766 }, { 6, 0, 0 }, { 7, 0, 84 }, { 11, 0, 895 }, - { 17, 0, 11 }, { 11, 0, 892 }, { 4, 0, 221 }, { 5, 0, 659 }, - { 7, 0, 697 }, { 7, 0, 1211 }, { 10, 0, 284 }, { 5, 0, 989 }, - { 5, 11, 889 }, { 4, 11, 160 }, { 5, 11, 330 }, { 7, 11, 1434 }, - { 8, 11, 174 }, { 6, 10, 1665 }, { 7, 10, 256 }, { 7, 10, 1388 }, - { 10, 10, 499 }, { 11, 10, 670 }, { 7, 0, 848 }, { 4, 10, 22 }, - { 5, 10, 10 }, { 8, 10, 97 }, { 10, 0, 507 }, { 5, 10, 481 }, - { 4, 0, 188 }, { 7, 0, 805 }, { 5, 0, 884 }, { 6, 0, 732 }, - { 11, 0, 991 }, { 7, 11, 968 }, { 11, 11, 636 }, { 15, 11, 145 }, - { 17, 11, 34 }, { 19, 11, 50 }, { 23, 11, 20 }, { 7, 0, 959 }, - { 16, 0, 60 }, { 6, 10, 134 }, { 7, 10, 437 }, { 9, 10, 37 }, - { 14, 10, 285 }, { 14, 10, 371 }, { 7, 10, 486 }, { 8, 10, 155 }, - { 11, 10, 93 }, { 12, 10, 164 }, { 6, 0, 1653 }, { 7, 0, 337 }, - { 5, 10, 591 }, { 6, 0, 1989 }, { 8, 0, 922 }, { 8, 0, 978 }, - { 5, 11, 374 }, { 4, 0, 638 }, { 10, 0, 500 }, { 5, 11, 731 }, - { 5, 10, 380 }, { 5, 10, 650 }, { 8, 10, 310 }, { 10, 11, 381 }, - { 4, 10, 364 }, { 7, 10, 1156 }, { 7, 10, 1187 }, { 9, 10, 409 }, - { 9, 11, 224 }, { 12, 0, 166 }, { 6, 10, 482 }, { 4, 11, 626 }, - { 5, 11, 642 }, { 6, 11, 425 }, { 10, 11, 202 }, { 11, 11, 141 }, - { 4, 10, 781 }, { 6, 10, 487 }, { 7, 10, 926 }, { 8, 10, 263 }, - { 11, 10, 500 }, { 7, 0, 418 }, { 4, 10, 94 }, { 7, 10, 1265 }, - { 8, 0, 760 }, { 4, 10, 417 }, { 8, 11, 835 }, { 5, 10, 348 }, - { 6, 10, 522 }, { 6, 0, 1277 }, { 6, 0, 1538 }, { 11, 11, 541 }, - { 7, 11, 1597 }, { 5, 11, 384 }, { 8, 11, 455 }, { 12, 11, 48 }, - { 8, 0, 770 }, { 5, 11, 264 }, { 6, 11, 184 }, { 4, 0, 89 }, - { 5, 0, 489 }, { 6, 0, 315 }, { 7, 0, 553 }, { 7, 0, 1745 }, - { 10, 0, 243 }, { 4, 10, 408 }, { 4, 10, 741 }, { 7, 10, 500 }, - { 6, 0, 1396 }, { 5, 0, 560 }, { 6, 0, 1658 }, { 9, 0, 3 }, - { 10, 0, 154 }, { 11, 0, 641 }, { 13, 0, 85 }, { 13, 0, 201 }, - { 13, 0, 346 }, { 7, 11, 1595 }, { 5, 11, 633 }, { 6, 11, 28 }, - { 7, 11, 219 }, { 7, 11, 1323 }, { 9, 11, 769 }, { 12, 11, 185 }, - { 7, 11, 785 }, { 7, 11, 359 }, { 8, 11, 243 }, { 12, 11, 175 }, - { 10, 0, 586 }, { 7, 0, 1271 }, { 6, 10, 73 }, { 4, 11, 105 }, - { 4, 0, 166 }, { 5, 0, 505 }, { 6, 0, 1670 }, { 5, 10, 576 }, - { 4, 11, 324 }, { 10, 11, 104 }, { 14, 10, 231 }, { 6, 0, 637 }, - { 7, 10, 1264 }, { 7, 10, 1678 }, { 11, 10, 945 }, { 12, 10, 341 }, - { 12, 10, 471 }, { 12, 10, 569 }, { 23, 11, 21 }, { 23, 11, 23 }, - { 8, 11, 559 }, { 13, 11, 109 }, { 6, 0, 1947 }, { 7, 0, 445 }, - { 8, 0, 307 }, { 8, 0, 704 }, { 10, 0, 41 }, { 10, 0, 439 }, - { 11, 0, 237 }, { 11, 0, 622 }, { 12, 0, 201 }, { 7, 11, 963 }, - { 7, 0, 1977 }, { 4, 0, 189 }, { 5, 0, 713 }, { 8, 0, 57 }, - { 10, 0, 371 }, { 7, 10, 538 }, { 4, 0, 552 }, { 6, 0, 883 }, - { 5, 10, 413 }, { 6, 0, 923 }, { 4, 11, 758 }, { 10, 11, 215 }, - { 8, 10, 495 }, { 7, 10, 54 }, { 8, 10, 312 }, { 10, 10, 191 }, - { 10, 10, 614 }, { 12, 10, 567 }, { 7, 11, 351 }, { 11, 11, 128 }, - { 7, 0, 875 }, { 6, 10, 468 }, { 7, 10, 1478 }, { 8, 10, 530 }, - { 14, 10, 290 }, { 7, 0, 1788 }, { 17, 0, 49 }, { 5, 11, 918 }, - { 12, 11, 398 }, { 20, 11, 39 }, { 21, 11, 11 }, { 22, 11, 41 }, - { 10, 0, 661 }, { 6, 10, 484 }, { 7, 10, 822 }, { 7, 0, 1945 }, - { 6, 0, 794 }, { 9, 10, 900 }, { 7, 10, 1335 }, { 6, 10, 1724 }, - { 7, 10, 2022 }, { 4, 11, 340 }, { 6, 0, 1135 }, { 4, 0, 784 }, - { 5, 0, 745 }, { 5, 0, 84 }, { 6, 0, 163 }, { 5, 0, 410 }, - { 4, 0, 976 }, { 5, 11, 985 }, { 7, 11, 509 }, { 7, 11, 529 }, - { 17, 11, 96 }, { 4, 10, 474 }, { 6, 0, 703 }, { 7, 11, 1919 }, - { 5, 0, 322 }, { 8, 0, 186 }, { 9, 0, 262 }, { 10, 0, 187 }, - { 14, 0, 208 }, { 7, 10, 1504 }, { 5, 0, 227 }, { 9, 0, 560 }, - { 13, 0, 208 }, { 5, 10, 305 }, { 4, 11, 247 }, { 7, 0, 1395 }, - { 8, 0, 486 }, { 9, 0, 236 }, { 9, 0, 878 }, { 10, 0, 218 }, - { 11, 0, 95 }, { 19, 0, 17 }, { 19, 0, 31 }, { 7, 0, 2043 }, - { 8, 0, 672 }, { 13, 0, 448 }, { 4, 11, 184 }, { 5, 11, 390 }, - { 6, 11, 337 }, { 7, 11, 23 }, { 7, 11, 494 }, { 7, 11, 618 }, - { 7, 11, 1456 }, { 8, 11, 27 }, { 8, 11, 599 }, { 10, 11, 153 }, - { 11, 11, 710 }, { 7, 0, 466 }, { 7, 10, 1236 }, { 6, 0, 167 }, - { 7, 0, 186 }, { 7, 0, 656 }, { 10, 0, 643 }, { 4, 10, 480 }, - { 6, 10, 302 }, { 6, 10, 1642 }, { 7, 10, 837 }, { 7, 10, 1547 }, - { 7, 10, 1657 }, { 8, 10, 429 }, { 9, 10, 228 }, { 13, 10, 289 }, - { 13, 10, 343 }, { 19, 10, 101 }, { 6, 0, 1428 }, { 6, 0, 1440 }, - { 5, 0, 412 }, { 7, 10, 278 }, { 10, 10, 739 }, { 11, 10, 708 }, - { 13, 10, 348 }, { 6, 0, 1118 }, { 8, 0, 562 }, { 20, 11, 46 }, - { 9, 0, 316 }, { 11, 0, 256 }, { 6, 0, 1771 }, { 7, 0, 1190 }, - { 9, 0, 132 }, { 10, 11, 227 }, { 11, 11, 497 }, { 11, 11, 709 }, - { 12, 11, 415 }, { 15, 0, 66 }, { 6, 11, 360 }, { 7, 11, 1664 }, - { 8, 11, 478 }, { 16, 10, 28 }, { 4, 0, 317 }, { 7, 0, 1279 }, - { 5, 0, 63 }, { 5, 0, 509 }, { 8, 11, 699 }, { 17, 10, 36 }, - { 6, 0, 1475 }, { 11, 11, 343 }, { 14, 11, 127 }, { 4, 11, 739 }, - { 4, 0, 288 }, { 7, 11, 1757 }, { 8, 0, 89 }, { 8, 0, 620 }, - { 9, 0, 608 }, { 11, 0, 628 }, { 12, 0, 322 }, { 15, 0, 124 }, - { 6, 0, 1225 }, { 7, 0, 1189 }, { 4, 11, 67 }, { 5, 11, 422 }, - { 6, 10, 363 }, { 7, 11, 1037 }, { 7, 11, 1289 }, { 7, 11, 1555 }, - { 7, 10, 1955 }, { 8, 10, 725 }, { 9, 11, 741 }, { 17, 11, 108 }, - { 6, 0, 1468 }, { 6, 0, 689 }, { 6, 0, 1451 }, { 10, 0, 120 }, - { 23, 0, 1 }, { 9, 10, 805 }, { 14, 0, 329 }, { 5, 10, 813 }, - { 7, 10, 2046 }, { 7, 0, 226 }, { 10, 11, 96 }, { 7, 0, 1855 }, - { 5, 10, 712 }, { 11, 10, 17 }, { 13, 10, 321 }, { 16, 10, 67 }, - { 9, 0, 461 }, { 6, 10, 320 }, { 7, 10, 781 }, { 7, 10, 1921 }, - { 9, 10, 55 }, { 10, 10, 186 }, { 10, 10, 273 }, { 10, 10, 664 }, - { 10, 10, 801 }, { 11, 10, 996 }, { 11, 10, 997 }, { 13, 10, 157 }, - { 14, 10, 170 }, { 8, 11, 203 }, { 8, 10, 271 }, { 11, 11, 823 }, - { 11, 11, 846 }, { 12, 11, 482 }, { 13, 11, 133 }, { 13, 11, 277 }, - { 13, 11, 302 }, { 13, 11, 464 }, { 14, 11, 205 }, { 14, 11, 221 }, - { 7, 0, 1346 }, { 4, 11, 449 }, { 5, 11, 718 }, { 6, 0, 85 }, - { 14, 0, 299 }, { 7, 10, 103 }, { 7, 10, 863 }, { 11, 10, 184 }, - { 17, 10, 62 }, { 4, 11, 355 }, { 6, 11, 311 }, { 9, 11, 256 }, - { 10, 11, 404 }, { 9, 10, 659 }, { 10, 11, 758 }, { 5, 11, 827 }, - { 5, 11, 64 }, { 12, 11, 581 }, { 6, 0, 1171 }, { 4, 11, 442 }, - { 7, 11, 1047 }, { 7, 11, 1352 }, { 7, 11, 1643 }, { 4, 0, 980 }, - { 5, 11, 977 }, { 6, 11, 288 }, { 7, 11, 528 }, { 7, 11, 1065 }, - { 5, 0, 279 }, { 6, 0, 235 }, { 7, 0, 468 }, { 8, 0, 446 }, - { 9, 0, 637 }, { 10, 0, 717 }, { 11, 0, 738 }, { 12, 0, 514 }, - { 4, 0, 293 }, { 11, 10, 337 }, { 14, 10, 303 }, { 8, 11, 285 }, - { 5, 0, 17 }, { 6, 0, 371 }, { 9, 0, 528 }, { 12, 0, 364 }, - { 4, 11, 254 }, { 5, 10, 77 }, { 7, 10, 1455 }, { 10, 10, 843 }, - { 19, 10, 73 }, { 22, 0, 5 }, { 4, 10, 458 }, { 6, 11, 12 }, - { 7, 11, 1219 }, { 17, 11, 73 }, { 7, 10, 1420 }, { 6, 10, 109 }, - { 10, 10, 382 }, { 7, 11, 125 }, { 6, 10, 330 }, { 7, 10, 1084 }, - { 11, 10, 142 }, { 6, 11, 369 }, { 6, 11, 502 }, { 7, 11, 1036 }, - { 8, 11, 348 }, { 9, 11, 452 }, { 10, 11, 26 }, { 11, 11, 224 }, - { 11, 11, 387 }, { 11, 11, 772 }, { 12, 11, 95 }, { 12, 11, 629 }, - { 13, 11, 195 }, { 13, 11, 207 }, { 13, 11, 241 }, { 14, 11, 260 }, - { 14, 11, 270 }, { 15, 11, 140 }, { 4, 11, 269 }, { 5, 11, 480 }, - { 7, 11, 532 }, { 7, 11, 1197 }, { 7, 11, 1358 }, { 8, 11, 291 }, - { 11, 11, 349 }, { 14, 11, 396 }, { 22, 0, 48 }, { 10, 0, 601 }, - { 13, 0, 353 }, { 13, 0, 376 }, { 5, 0, 779 }, { 5, 0, 807 }, - { 6, 0, 1655 }, { 6, 0, 1676 }, { 14, 11, 223 }, { 4, 0, 196 }, - { 5, 0, 558 }, { 5, 0, 949 }, { 20, 11, 15 }, { 7, 11, 1764 }, - { 6, 0, 1322 }, { 4, 0, 752 }, { 11, 0, 737 }, { 7, 11, 657 }, - { 8, 11, 533 }, { 7, 0, 412 }, { 4, 0, 227 }, { 5, 0, 159 }, - { 5, 0, 409 }, { 7, 0, 80 }, { 8, 0, 556 }, { 10, 0, 479 }, - { 12, 0, 418 }, { 14, 0, 50 }, { 14, 0, 123 }, { 14, 0, 192 }, - { 14, 0, 249 }, { 14, 0, 295 }, { 15, 0, 27 }, { 7, 0, 1470 }, - { 8, 0, 66 }, { 8, 0, 137 }, { 8, 0, 761 }, { 9, 0, 638 }, - { 11, 0, 80 }, { 11, 0, 212 }, { 11, 0, 368 }, { 11, 0, 418 }, - { 12, 0, 8 }, { 13, 0, 15 }, { 16, 0, 61 }, { 17, 0, 59 }, - { 19, 0, 28 }, { 20, 0, 84 }, { 7, 10, 1985 }, { 4, 11, 211 }, - { 4, 11, 332 }, { 5, 11, 335 }, { 6, 11, 238 }, { 7, 11, 269 }, - { 7, 11, 811 }, { 7, 11, 1797 }, { 8, 10, 122 }, { 8, 11, 836 }, - { 9, 11, 507 }, { 13, 11, 242 }, { 6, 0, 683 }, { 6, 0, 1252 }, - { 4, 0, 873 }, { 4, 10, 234 }, { 6, 0, 835 }, { 6, 0, 38 }, - { 7, 0, 1220 }, { 8, 0, 185 }, { 8, 0, 256 }, { 9, 0, 22 }, - { 9, 0, 331 }, { 10, 0, 738 }, { 11, 0, 205 }, { 11, 0, 540 }, - { 11, 0, 746 }, { 13, 0, 465 }, { 14, 0, 88 }, { 14, 0, 194 }, - { 10, 0, 986 }, { 5, 11, 1009 }, { 12, 11, 582 }, { 18, 11, 131 }, - { 4, 0, 159 }, { 6, 0, 115 }, { 7, 0, 252 }, { 7, 0, 257 }, - { 7, 0, 1928 }, { 8, 0, 69 }, { 9, 0, 384 }, { 10, 0, 91 }, - { 10, 0, 615 }, { 12, 0, 375 }, { 14, 0, 235 }, { 18, 0, 117 }, - { 19, 0, 123 }, { 5, 0, 911 }, { 8, 0, 278 }, { 5, 10, 430 }, - { 5, 10, 932 }, { 6, 10, 131 }, { 7, 10, 417 }, { 9, 10, 522 }, - { 11, 10, 314 }, { 13, 10, 390 }, { 14, 10, 149 }, { 14, 10, 399 }, - { 15, 10, 57 }, { 4, 0, 151 }, { 7, 0, 1567 }, { 8, 0, 749 }, - { 5, 11, 228 }, { 6, 11, 203 }, { 7, 11, 156 }, { 8, 11, 347 }, - { 9, 11, 265 }, { 4, 10, 507 }, { 10, 0, 989 }, { 12, 0, 956 }, - { 5, 0, 990 }, { 5, 0, 194 }, { 6, 0, 927 }, { 7, 0, 1662 }, - { 9, 0, 90 }, { 12, 0, 564 }, { 4, 10, 343 }, { 5, 10, 511 }, - { 5, 0, 425 }, { 7, 10, 455 }, { 10, 10, 591 }, { 4, 0, 774 }, - { 7, 11, 476 }, { 7, 11, 1592 }, { 10, 11, 87 }, { 5, 0, 971 }, - { 7, 10, 1381 }, { 5, 11, 318 }, { 19, 11, 121 }, { 5, 11, 291 }, - { 7, 11, 765 }, { 9, 11, 389 }, { 12, 11, 548 }, { 6, 10, 575 }, - { 4, 0, 827 }, { 12, 0, 646 }, { 12, 0, 705 }, { 12, 0, 712 }, - { 12, 0, 714 }, { 11, 0, 752 }, { 9, 0, 662 }, { 5, 0, 72 }, - { 6, 0, 264 }, { 7, 0, 21 }, { 7, 0, 46 }, { 7, 0, 2013 }, - { 8, 0, 215 }, { 8, 0, 513 }, { 10, 0, 266 }, { 11, 0, 22 }, - { 11, 11, 522 }, { 6, 0, 239 }, { 7, 0, 118 }, { 10, 0, 95 }, - { 11, 0, 603 }, { 13, 0, 443 }, { 14, 0, 160 }, { 15, 0, 4 }, - { 6, 0, 431 }, { 6, 0, 669 }, { 7, 10, 1127 }, { 7, 10, 1572 }, - { 10, 10, 297 }, { 10, 10, 422 }, { 11, 10, 764 }, { 11, 10, 810 }, - { 12, 10, 264 }, { 13, 10, 102 }, { 13, 10, 300 }, { 13, 10, 484 }, - { 14, 10, 147 }, { 14, 10, 229 }, { 17, 10, 71 }, { 18, 10, 118 }, - { 19, 10, 120 }, { 5, 0, 874 }, { 6, 0, 1677 }, { 15, 0, 0 }, - { 10, 11, 525 }, { 11, 11, 82 }, { 6, 0, 65 }, { 7, 0, 939 }, - { 7, 0, 1172 }, { 7, 0, 1671 }, { 9, 0, 540 }, { 10, 0, 696 }, - { 11, 0, 265 }, { 11, 0, 732 }, { 11, 0, 928 }, { 11, 0, 937 }, - { 13, 0, 438 }, { 6, 0, 1350 }, { 8, 11, 547 }, { 4, 11, 422 }, - { 5, 11, 355 }, { 17, 11, 0 }, { 9, 11, 905 }, { 5, 0, 682 }, - { 7, 0, 1887 }, { 4, 0, 809 }, { 4, 0, 696 }, { 5, 11, 865 }, - { 6, 0, 1074 }, { 6, 0, 1472 }, { 14, 10, 35 }, { 14, 10, 191 }, - { 5, 11, 914 }, { 6, 11, 1625 }, { 5, 11, 234 }, { 7, 11, 1383 }, - { 9, 11, 780 }, { 4, 10, 125 }, { 4, 0, 726 }, { 5, 0, 630 }, - { 8, 0, 802 }, { 8, 0, 838 }, { 4, 10, 721 }, { 6, 0, 1337 }, - { 7, 0, 776 }, { 19, 0, 56 }, { 8, 10, 145 }, { 4, 0, 970 }, - { 7, 10, 792 }, { 8, 10, 147 }, { 10, 10, 821 }, { 11, 10, 1021 }, - { 11, 10, 970 }, { 8, 0, 940 }, { 9, 0, 797 }, { 7, 11, 1312 }, - { 9, 0, 248 }, { 10, 0, 400 }, { 7, 11, 816 }, { 7, 11, 1241 }, - { 7, 10, 1999 }, { 9, 11, 283 }, { 9, 11, 520 }, { 10, 11, 213 }, - { 10, 11, 307 }, { 10, 11, 463 }, { 10, 11, 671 }, { 10, 11, 746 }, - { 11, 11, 401 }, { 11, 11, 794 }, { 12, 11, 517 }, { 18, 11, 107 }, - { 19, 11, 115 }, { 6, 0, 1951 }, { 6, 0, 2040 }, { 7, 11, 339 }, - { 13, 0, 41 }, { 15, 0, 93 }, { 5, 10, 168 }, { 5, 10, 930 }, - { 8, 10, 74 }, { 9, 10, 623 }, { 12, 10, 500 }, { 12, 10, 579 }, - { 6, 0, 118 }, { 7, 0, 215 }, { 7, 0, 1521 }, { 12, 0, 11 }, - { 6, 10, 220 }, { 7, 10, 1101 }, { 13, 10, 105 }, { 6, 11, 421 }, - { 7, 11, 61 }, { 7, 11, 1540 }, { 10, 11, 11 }, { 10, 11, 501 }, - { 7, 0, 615 }, { 10, 0, 251 }, { 12, 11, 631 }, { 7, 0, 1044 }, - { 6, 10, 19 }, { 7, 10, 1413 }, { 11, 10, 428 }, { 5, 0, 225 }, - { 7, 10, 96 }, { 8, 10, 401 }, { 8, 10, 703 }, { 9, 10, 896 }, - { 17, 10, 116 }, { 6, 11, 102 }, { 7, 11, 72 }, { 15, 11, 142 }, - { 19, 11, 67 }, { 7, 10, 1961 }, { 7, 10, 1965 }, { 8, 10, 702 }, - { 8, 10, 750 }, { 7, 10, 2030 }, { 8, 10, 150 }, { 8, 10, 737 }, - { 12, 10, 366 }, { 23, 11, 30 }, { 4, 0, 370 }, { 5, 0, 756 }, - { 7, 0, 1326 }, { 7, 11, 823 }, { 8, 10, 800 }, { 9, 10, 148 }, - { 9, 10, 872 }, { 9, 10, 890 }, { 11, 10, 309 }, { 11, 10, 1001 }, - { 13, 10, 267 }, { 13, 10, 323 }, { 6, 0, 1662 }, { 7, 0, 48 }, - { 8, 0, 771 }, { 10, 0, 116 }, { 13, 0, 104 }, { 14, 0, 105 }, - { 14, 0, 184 }, { 15, 0, 168 }, { 19, 0, 92 }, { 20, 0, 68 }, - { 10, 0, 209 }, { 7, 11, 1870 }, { 7, 11, 68 }, { 8, 11, 48 }, - { 8, 11, 88 }, { 8, 11, 582 }, { 8, 11, 681 }, { 9, 11, 373 }, - { 9, 11, 864 }, { 11, 11, 157 }, { 11, 11, 336 }, { 11, 11, 843 }, - { 20, 11, 27 }, { 6, 0, 930 }, { 4, 11, 88 }, { 5, 11, 137 }, - { 5, 11, 174 }, { 5, 11, 777 }, { 6, 11, 1664 }, { 6, 11, 1725 }, - { 7, 11, 77 }, { 7, 11, 426 }, { 7, 11, 1317 }, { 7, 11, 1355 }, - { 8, 11, 126 }, { 8, 11, 563 }, { 9, 11, 523 }, { 9, 11, 750 }, - { 10, 11, 310 }, { 10, 11, 836 }, { 11, 11, 42 }, { 11, 11, 318 }, - { 11, 11, 731 }, { 12, 11, 68 }, { 12, 11, 92 }, { 12, 11, 507 }, - { 12, 11, 692 }, { 13, 11, 81 }, { 13, 11, 238 }, { 13, 11, 374 }, - { 18, 11, 138 }, { 19, 11, 78 }, { 19, 11, 111 }, { 20, 11, 55 }, - { 20, 11, 77 }, { 20, 11, 92 }, { 4, 11, 938 }, { 7, 11, 1831 }, - { 5, 10, 547 }, { 7, 10, 424 }, { 8, 11, 617 }, { 10, 11, 351 }, - { 6, 0, 1286 }, { 6, 11, 1668 }, { 7, 11, 1499 }, { 8, 11, 117 }, - { 9, 11, 314 }, { 10, 11, 174 }, { 6, 0, 759 }, { 6, 0, 894 }, - { 7, 11, 707 }, { 11, 11, 563 }, { 4, 0, 120 }, { 7, 0, 1894 }, - { 9, 0, 385 }, { 21, 0, 17 }, { 10, 0, 429 }, { 5, 11, 403 }, - { 5, 0, 820 }, { 7, 0, 931 }, { 10, 0, 199 }, { 5, 10, 133 }, - { 6, 0, 151 }, { 6, 0, 1675 }, { 7, 0, 383 }, { 23, 0, 10 }, - { 6, 0, 761 }, { 8, 10, 187 }, { 8, 0, 365 }, { 10, 10, 0 }, - { 10, 10, 818 }, { 11, 10, 988 }, { 4, 11, 44 }, { 5, 11, 311 }, - { 6, 11, 156 }, { 7, 11, 639 }, { 7, 11, 762 }, { 7, 11, 1827 }, - { 9, 11, 8 }, { 9, 11, 462 }, { 20, 11, 83 }, { 4, 11, 346 }, - { 7, 11, 115 }, { 9, 11, 180 }, { 9, 11, 456 }, { 10, 11, 363 }, - { 8, 10, 685 }, { 7, 0, 1086 }, { 17, 0, 46 }, { 6, 0, 1624 }, - { 11, 0, 11 }, { 12, 0, 422 }, { 13, 0, 444 }, { 14, 0, 360 }, - { 6, 0, 1020 }, { 6, 0, 1260 }, { 6, 0, 1589 }, { 4, 0, 43 }, - { 5, 0, 344 }, { 5, 0, 357 }, { 14, 0, 472 }, { 22, 0, 58 }, - { 6, 0, 1864 }, { 6, 0, 1866 }, { 6, 0, 1868 }, { 6, 0, 1869 }, - { 6, 0, 1874 }, { 6, 0, 1877 }, { 6, 0, 1903 }, { 6, 0, 1911 }, - { 9, 0, 920 }, { 9, 0, 921 }, { 9, 0, 924 }, { 9, 0, 946 }, - { 9, 0, 959 }, { 9, 0, 963 }, { 9, 0, 970 }, { 9, 0, 997 }, - { 9, 0, 1008 }, { 9, 0, 1017 }, { 12, 0, 795 }, { 12, 0, 797 }, - { 12, 0, 798 }, { 12, 0, 800 }, { 12, 0, 803 }, { 12, 0, 811 }, - { 12, 0, 820 }, { 12, 0, 821 }, { 12, 0, 839 }, { 12, 0, 841 }, - { 12, 0, 848 }, { 12, 0, 911 }, { 12, 0, 921 }, { 12, 0, 922 }, - { 12, 0, 925 }, { 12, 0, 937 }, { 12, 0, 944 }, { 12, 0, 945 }, - { 12, 0, 953 }, { 15, 0, 184 }, { 15, 0, 191 }, { 15, 0, 199 }, - { 15, 0, 237 }, { 15, 0, 240 }, { 15, 0, 243 }, { 15, 0, 246 }, - { 18, 0, 203 }, { 21, 0, 40 }, { 21, 0, 52 }, { 21, 0, 57 }, - { 24, 0, 23 }, { 24, 0, 28 }, { 24, 0, 30 }, { 6, 0, 725 }, - { 17, 11, 58 }, { 5, 0, 888 }, { 9, 10, 874 }, { 4, 0, 711 }, - { 8, 10, 774 }, { 10, 10, 670 }, { 12, 10, 51 }, { 16, 11, 40 }, - { 6, 11, 185 }, { 7, 11, 1899 }, { 11, 11, 673 }, { 9, 10, 701 }, - { 9, 0, 440 }, { 4, 11, 327 }, { 5, 11, 478 }, { 7, 11, 1332 }, - { 8, 11, 753 }, { 12, 11, 227 }, { 4, 10, 127 }, { 5, 10, 350 }, - { 6, 10, 356 }, { 8, 10, 426 }, { 9, 10, 572 }, { 10, 10, 247 }, - { 11, 10, 312 }, { 5, 11, 1020 }, { 5, 11, 1022 }, { 4, 11, 103 }, - { 5, 11, 401 }, { 6, 0, 1913 }, { 6, 0, 1926 }, { 6, 0, 1959 }, - { 9, 0, 914 }, { 9, 0, 939 }, { 9, 0, 952 }, { 9, 0, 979 }, - { 9, 0, 990 }, { 9, 0, 998 }, { 9, 0, 1003 }, { 9, 0, 1023 }, - { 12, 0, 827 }, { 12, 0, 834 }, { 12, 0, 845 }, { 12, 0, 912 }, - { 12, 0, 935 }, { 12, 0, 951 }, { 15, 0, 172 }, { 15, 0, 174 }, - { 18, 0, 198 }, { 21, 0, 63 }, { 5, 0, 958 }, { 5, 0, 987 }, - { 4, 11, 499 }, { 7, 11, 1421 }, { 7, 0, 885 }, { 6, 10, 59 }, - { 6, 10, 1762 }, { 9, 10, 603 }, { 13, 10, 397 }, { 10, 11, 62 }, - { 13, 11, 164 }, { 4, 0, 847 }, { 7, 0, 326 }, { 11, 0, 276 }, - { 14, 0, 293 }, { 4, 0, 65 }, { 5, 0, 479 }, { 5, 0, 1004 }, - { 7, 0, 1913 }, { 8, 0, 317 }, { 9, 0, 302 }, { 10, 0, 612 }, - { 13, 0, 22 }, { 4, 11, 96 }, { 4, 0, 261 }, { 7, 0, 510 }, - { 7, 0, 1514 }, { 6, 10, 111 }, { 7, 10, 4 }, { 8, 10, 163 }, - { 8, 10, 776 }, { 10, 10, 566 }, { 4, 0, 291 }, { 9, 0, 515 }, - { 12, 0, 152 }, { 12, 0, 443 }, { 13, 0, 392 }, { 14, 0, 357 }, - { 7, 11, 399 }, { 7, 11, 1492 }, { 4, 0, 589 }, { 11, 0, 282 }, - { 6, 11, 563 }, { 7, 10, 1994 }, { 5, 10, 297 }, { 7, 10, 1038 }, - { 4, 0, 130 }, { 7, 0, 843 }, { 7, 0, 1562 }, { 5, 0, 42 }, - { 5, 0, 879 }, { 7, 0, 245 }, { 7, 0, 324 }, { 7, 0, 1532 }, - { 11, 0, 463 }, { 11, 0, 472 }, { 13, 0, 363 }, { 16, 0, 52 }, - { 4, 0, 134 }, { 5, 0, 372 }, { 5, 0, 680 }, { 8, 10, 363 }, - { 6, 0, 1997 }, { 8, 0, 935 }, { 8, 0, 977 }, { 4, 0, 810 }, - { 7, 0, 1634 }, { 7, 10, 1675 }, { 7, 0, 1390 }, { 4, 11, 910 }, - { 5, 11, 832 }, { 7, 10, 808 }, { 8, 11, 266 }, { 11, 11, 578 }, - { 4, 0, 644 }, { 4, 0, 982 }, { 10, 0, 867 }, { 4, 10, 280 }, - { 7, 0, 540 }, { 12, 10, 54 }, { 7, 0, 123 }, { 6, 0, 1978 }, - { 4, 10, 421 }, { 5, 10, 548 }, { 6, 0, 623 }, { 8, 0, 789 }, - { 4, 0, 908 }, { 5, 0, 359 }, { 5, 0, 508 }, { 6, 0, 1723 }, - { 7, 0, 343 }, { 7, 0, 1996 }, { 7, 0, 2026 }, { 6, 0, 1220 }, - { 4, 0, 341 }, { 7, 0, 480 }, { 6, 10, 254 }, { 9, 10, 109 }, - { 10, 10, 103 }, { 6, 0, 888 }, { 8, 11, 528 }, { 9, 11, 348 }, - { 7, 0, 1995 }, { 8, 0, 299 }, { 11, 0, 890 }, { 12, 0, 674 }, - { 4, 11, 20 }, { 5, 11, 616 }, { 7, 11, 1094 }, { 6, 10, 1630 }, - { 4, 0, 238 }, { 5, 0, 503 }, { 6, 0, 179 }, { 7, 0, 2003 }, - { 8, 0, 381 }, { 8, 0, 473 }, { 9, 0, 149 }, { 10, 0, 788 }, - { 15, 0, 45 }, { 15, 0, 86 }, { 20, 0, 110 }, { 22, 0, 57 }, - { 5, 10, 671 }, { 4, 11, 26 }, { 5, 11, 429 }, { 6, 11, 245 }, - { 7, 11, 704 }, { 7, 11, 1379 }, { 7, 11, 1474 }, { 4, 0, 121 }, - { 5, 0, 156 }, { 5, 0, 349 }, { 9, 0, 431 }, { 10, 0, 605 }, - { 14, 0, 342 }, { 7, 11, 943 }, { 11, 11, 614 }, { 4, 10, 889 }, - { 4, 11, 621 }, { 7, 10, 1382 }, { 7, 11, 1382 }, { 7, 10, 1910 }, - { 4, 10, 627 }, { 5, 10, 775 }, { 5, 11, 542 }, { 5, 11, 868 }, - { 8, 11, 433 }, { 6, 0, 1373 }, { 7, 0, 1011 }, { 11, 10, 362 }, - { 11, 10, 948 }, { 12, 10, 388 }, { 6, 0, 80 }, { 7, 0, 173 }, - { 9, 0, 547 }, { 10, 0, 730 }, { 14, 0, 18 }, { 22, 0, 39 }, - { 7, 11, 1495 }, { 6, 0, 1694 }, { 7, 0, 1974 }, { 12, 0, 196 }, - { 4, 0, 923 }, { 6, 0, 507 }, { 6, 0, 1711 }, { 7, 10, 451 }, - { 8, 10, 389 }, { 12, 10, 490 }, { 13, 10, 16 }, { 13, 10, 215 }, - { 13, 10, 351 }, { 18, 10, 132 }, { 19, 10, 125 }, { 6, 0, 646 }, - { 6, 0, 1047 }, { 7, 10, 841 }, { 8, 10, 566 }, { 6, 0, 1611 }, - { 7, 0, 1214 }, { 11, 0, 926 }, { 4, 11, 525 }, { 4, 0, 595 }, - { 5, 0, 240 }, { 6, 0, 459 }, { 7, 0, 12 }, { 7, 0, 114 }, - { 7, 0, 949 }, { 7, 0, 1753 }, { 7, 0, 1805 }, { 8, 0, 658 }, - { 9, 0, 1 }, { 11, 0, 959 }, { 13, 0, 446 }, { 5, 10, 912 }, - { 6, 10, 1695 }, { 4, 0, 446 }, { 7, 11, 62 }, { 12, 11, 45 }, - { 19, 11, 112 }, { 5, 10, 236 }, { 6, 10, 572 }, { 8, 10, 492 }, - { 11, 10, 618 }, { 16, 10, 56 }, { 5, 10, 190 }, { 8, 10, 318 }, - { 7, 10, 1376 }, { 4, 11, 223 }, { 6, 11, 359 }, { 11, 11, 3 }, - { 13, 11, 108 }, { 14, 11, 89 }, { 16, 11, 22 }, { 4, 11, 647 }, - { 6, 0, 490 }, { 6, 0, 491 }, { 6, 0, 1584 }, { 7, 11, 685 }, - { 10, 11, 220 }, { 7, 0, 250 }, { 8, 0, 507 }, { 4, 0, 158 }, - { 4, 0, 140 }, { 7, 0, 362 }, { 8, 0, 209 }, { 9, 0, 10 }, - { 9, 0, 160 }, { 9, 0, 503 }, { 9, 0, 614 }, { 10, 0, 689 }, - { 11, 0, 327 }, { 11, 0, 553 }, { 11, 0, 725 }, { 11, 0, 767 }, - { 12, 0, 252 }, { 12, 0, 583 }, { 13, 0, 192 }, { 14, 0, 269 }, - { 14, 0, 356 }, { 20, 0, 50 }, { 19, 0, 1 }, { 19, 0, 26 }, - { 22, 0, 9 }, { 4, 11, 109 }, { 6, 0, 228 }, { 7, 0, 1341 }, - { 9, 0, 408 }, { 10, 0, 343 }, { 4, 0, 373 }, { 5, 0, 283 }, - { 6, 0, 480 }, { 7, 0, 609 }, { 10, 0, 860 }, { 10, 0, 878 }, - { 6, 0, 779 }, { 6, 0, 1209 }, { 4, 0, 557 }, { 7, 11, 263 }, - { 7, 11, 628 }, { 8, 11, 349 }, { 4, 0, 548 }, { 7, 0, 197 }, - { 8, 0, 142 }, { 8, 0, 325 }, { 9, 0, 150 }, { 9, 0, 596 }, - { 10, 0, 350 }, { 10, 0, 353 }, { 11, 0, 74 }, { 11, 0, 315 }, - { 12, 0, 662 }, { 12, 0, 681 }, { 14, 0, 423 }, { 15, 0, 141 }, - { 4, 11, 40 }, { 10, 11, 67 }, { 11, 11, 117 }, { 11, 11, 768 }, - { 11, 11, 935 }, { 7, 11, 992 }, { 8, 11, 301 }, { 9, 11, 722 }, - { 12, 11, 63 }, { 13, 11, 29 }, { 14, 11, 161 }, { 15, 11, 18 }, - { 6, 0, 1490 }, { 10, 11, 532 }, { 5, 0, 580 }, { 7, 0, 378 }, - { 7, 0, 674 }, { 7, 0, 1424 }, { 15, 0, 83 }, { 16, 0, 11 }, - { 15, 11, 83 }, { 16, 11, 11 }, { 6, 0, 1057 }, { 6, 0, 1335 }, - { 10, 0, 316 }, { 7, 10, 85 }, { 7, 10, 247 }, { 8, 10, 585 }, - { 10, 10, 163 }, { 4, 0, 169 }, { 5, 0, 83 }, { 6, 0, 399 }, - { 6, 0, 579 }, { 6, 0, 1513 }, { 7, 0, 692 }, { 7, 0, 846 }, - { 7, 0, 1015 }, { 7, 0, 1799 }, { 8, 0, 403 }, { 9, 0, 394 }, - { 10, 0, 133 }, { 12, 0, 4 }, { 12, 0, 297 }, { 12, 0, 452 }, - { 16, 0, 81 }, { 18, 0, 25 }, { 21, 0, 14 }, { 22, 0, 12 }, - { 23, 0, 18 }, { 6, 0, 1106 }, { 7, 0, 1546 }, { 11, 0, 299 }, - { 14, 0, 407 }, { 6, 0, 1192 }, { 4, 0, 177 }, { 5, 0, 411 }, - { 7, 0, 653 }, { 7, 0, 439 }, { 10, 0, 727 }, { 11, 0, 260 }, - { 11, 0, 684 }, { 10, 10, 145 }, { 19, 10, 83 }, { 5, 0, 208 }, - { 7, 0, 753 }, { 7, 0, 1528 }, { 9, 11, 617 }, { 7, 10, 1922 }, - { 7, 11, 825 }, { 11, 0, 422 }, { 13, 0, 389 }, { 4, 10, 124 }, - { 10, 10, 457 }, { 11, 10, 121 }, { 11, 10, 169 }, { 11, 10, 870 }, - { 12, 10, 214 }, { 14, 10, 187 }, { 15, 10, 77 }, { 11, 0, 615 }, - { 15, 0, 58 }, { 11, 11, 615 }, { 15, 11, 58 }, { 9, 0, 618 }, - { 10, 0, 482 }, { 6, 0, 1952 }, { 6, 0, 1970 }, { 14, 0, 505 }, - { 7, 10, 1193 }, { 7, 11, 1838 }, { 5, 0, 242 }, { 7, 10, 1333 }, - { 6, 10, 107 }, { 7, 10, 638 }, { 7, 10, 1632 }, { 9, 10, 396 }, - { 5, 0, 953 }, { 5, 10, 370 }, { 6, 10, 1756 }, { 5, 11, 28 }, - { 6, 11, 204 }, { 10, 11, 320 }, { 10, 11, 583 }, { 13, 11, 502 }, - { 14, 11, 72 }, { 14, 11, 274 }, { 14, 11, 312 }, { 14, 11, 344 }, - { 15, 11, 159 }, { 16, 11, 62 }, { 16, 11, 69 }, { 17, 11, 30 }, - { 18, 11, 42 }, { 18, 11, 53 }, { 18, 11, 84 }, { 18, 11, 140 }, - { 19, 11, 68 }, { 19, 11, 85 }, { 20, 11, 5 }, { 20, 11, 45 }, - { 20, 11, 101 }, { 22, 11, 7 }, { 22, 11, 20 }, { 4, 11, 558 }, - { 6, 11, 390 }, { 7, 11, 162 }, { 7, 11, 689 }, { 9, 11, 360 }, - { 10, 11, 653 }, { 11, 0, 802 }, { 13, 0, 67 }, { 5, 10, 204 }, - { 5, 0, 290 }, { 5, 10, 970 }, { 6, 10, 1706 }, { 4, 0, 380 }, - { 5, 0, 52 }, { 7, 0, 277 }, { 9, 0, 368 }, { 11, 0, 791 }, - { 5, 11, 856 }, { 6, 11, 1672 }, { 6, 11, 1757 }, { 6, 11, 1781 }, - { 7, 11, 1150 }, { 7, 11, 1425 }, { 7, 11, 1453 }, { 12, 11, 513 }, - { 5, 11, 92 }, { 7, 10, 3 }, { 10, 11, 736 }, { 12, 11, 102 }, - { 4, 0, 112 }, { 5, 0, 653 }, { 5, 10, 483 }, { 5, 10, 685 }, - { 6, 10, 489 }, { 7, 10, 1204 }, { 8, 10, 394 }, { 4, 10, 921 }, - { 6, 0, 1028 }, { 5, 10, 1007 }, { 5, 11, 590 }, { 9, 11, 213 }, - { 17, 11, 91 }, { 7, 10, 1696 }, { 10, 0, 138 }, { 11, 0, 476 }, - { 5, 0, 725 }, { 5, 0, 727 }, { 7, 0, 1811 }, { 4, 0, 979 }, - { 6, 0, 1821 }, { 6, 0, 1838 }, { 8, 0, 876 }, { 8, 0, 883 }, - { 8, 0, 889 }, { 8, 0, 893 }, { 8, 0, 895 }, { 10, 0, 934 }, - { 12, 0, 720 }, { 14, 0, 459 }, { 20, 0, 123 }, { 7, 11, 551 }, - { 4, 0, 38 }, { 6, 0, 435 }, { 7, 0, 307 }, { 7, 0, 999 }, - { 7, 0, 1481 }, { 7, 0, 1732 }, { 7, 0, 1738 }, { 8, 0, 371 }, - { 9, 0, 414 }, { 11, 0, 316 }, { 12, 0, 52 }, { 13, 0, 420 }, - { 19, 0, 100 }, { 7, 0, 1296 }, { 4, 10, 712 }, { 6, 10, 1629 }, - { 5, 0, 723 }, { 6, 0, 651 }, { 8, 11, 191 }, { 9, 11, 791 }, - { 10, 11, 93 }, { 11, 11, 301 }, { 16, 11, 13 }, { 17, 11, 23 }, - { 18, 11, 135 }, { 19, 11, 12 }, { 20, 11, 1 }, { 20, 11, 12 }, - { 20, 11, 14 }, { 8, 11, 503 }, { 6, 11, 466 }, { 7, 11, 671 }, - { 6, 0, 1200 }, { 6, 0, 1330 }, { 7, 0, 1255 }, { 6, 0, 986 }, - { 5, 0, 109 }, { 6, 0, 1784 }, { 7, 0, 1895 }, { 12, 0, 296 }, - { 12, 0, 302 }, { 7, 11, 983 }, { 5, 10, 485 }, { 6, 0, 660 }, - { 6, 0, 800 }, { 5, 0, 216 }, { 5, 0, 294 }, { 6, 0, 591 }, - { 7, 0, 1879 }, { 9, 0, 141 }, { 9, 0, 270 }, { 9, 0, 679 }, - { 10, 0, 159 }, { 11, 0, 197 }, { 11, 0, 438 }, { 12, 0, 538 }, - { 12, 0, 559 }, { 14, 0, 144 }, { 14, 0, 167 }, { 15, 0, 67 }, - { 4, 10, 285 }, { 5, 10, 317 }, { 6, 10, 301 }, { 7, 10, 7 }, - { 8, 10, 153 }, { 10, 10, 766 }, { 11, 10, 468 }, { 12, 10, 467 }, - { 13, 10, 143 }, { 8, 0, 945 }, { 6, 0, 1090 }, { 9, 0, 81 }, - { 12, 11, 468 }, { 19, 11, 96 }, { 20, 11, 24 }, { 6, 0, 391 }, - { 10, 11, 241 }, { 7, 0, 322 }, { 8, 0, 249 }, { 6, 0, 1412 }, - { 7, 11, 795 }, { 5, 0, 632 }, { 10, 0, 526 }, { 8, 10, 819 }, - { 6, 0, 144 }, { 7, 0, 948 }, { 7, 0, 1042 }, { 8, 0, 235 }, - { 8, 0, 461 }, { 9, 0, 453 }, { 9, 0, 796 }, { 10, 0, 354 }, - { 17, 0, 77 }, { 7, 11, 954 }, { 11, 10, 917 }, { 6, 0, 940 }, - { 6, 0, 1228 }, { 4, 0, 362 }, { 7, 0, 52 }, { 7, 0, 303 }, - { 6, 11, 549 }, { 8, 11, 34 }, { 8, 11, 283 }, { 9, 11, 165 }, - { 10, 11, 475 }, { 7, 11, 370 }, { 7, 11, 1007 }, { 7, 11, 1177 }, - { 7, 11, 1565 }, { 5, 11, 652 }, { 5, 11, 701 }, { 7, 11, 449 }, - { 5, 0, 196 }, { 6, 0, 486 }, { 7, 0, 212 }, { 8, 0, 309 }, - { 8, 0, 346 }, { 6, 10, 1719 }, { 6, 10, 1735 }, { 7, 10, 2016 }, - { 7, 10, 2020 }, { 8, 10, 837 }, { 9, 10, 852 }, { 6, 11, 159 }, - { 6, 11, 364 }, { 7, 11, 516 }, { 7, 11, 1439 }, { 9, 11, 518 }, - { 7, 0, 1912 }, { 7, 0, 1290 }, { 4, 0, 686 }, { 13, 11, 151 }, - { 10, 0, 625 }, { 8, 0, 706 }, { 10, 10, 568 }, { 11, 0, 412 }, - { 4, 0, 30 }, { 5, 0, 43 }, { 8, 10, 67 }, { 10, 10, 419 }, - { 7, 0, 967 }, { 13, 0, 11 }, { 12, 0, 758 }, { 14, 0, 441 }, - { 14, 0, 462 }, { 10, 10, 657 }, { 14, 10, 297 }, { 14, 10, 361 }, - { 11, 10, 729 }, { 4, 0, 220 }, { 7, 0, 1535 }, { 7, 11, 501 }, - { 9, 11, 111 }, { 10, 11, 141 }, { 11, 11, 332 }, { 13, 11, 43 }, - { 13, 11, 429 }, { 14, 11, 130 }, { 14, 11, 415 }, { 17, 11, 102 }, - { 4, 0, 950 }, { 6, 0, 1859 }, { 7, 0, 11 }, { 8, 0, 873 }, - { 12, 0, 710 }, { 12, 0, 718 }, { 12, 0, 748 }, { 12, 0, 765 }, - { 20, 0, 124 }, { 5, 11, 149 }, { 5, 11, 935 }, { 8, 11, 233 }, - { 14, 11, 291 }, { 6, 0, 1579 }, { 7, 0, 890 }, { 8, 10, 51 }, - { 9, 10, 868 }, { 10, 10, 833 }, { 12, 10, 481 }, { 12, 10, 570 }, - { 20, 10, 106 }, { 13, 0, 2 }, { 4, 10, 445 }, { 8, 11, 801 }, - { 7, 0, 1774 }, { 7, 0, 1725 }, { 10, 0, 393 }, { 5, 0, 263 }, - { 6, 0, 414 }, { 4, 11, 322 }, { 5, 10, 239 }, { 7, 0, 456 }, - { 7, 10, 1990 }, { 8, 10, 130 }, { 11, 10, 720 }, { 9, 0, 818 }, - { 5, 10, 123 }, { 6, 10, 530 }, { 7, 10, 348 }, { 7, 10, 1419 }, - { 7, 10, 2024 }, { 6, 0, 178 }, { 6, 0, 1750 }, { 8, 0, 251 }, - { 9, 0, 690 }, { 10, 0, 155 }, { 10, 0, 196 }, { 10, 0, 373 }, - { 11, 0, 698 }, { 13, 0, 155 }, { 20, 0, 93 }, { 5, 0, 97 }, - { 9, 0, 393 }, { 6, 0, 674 }, { 11, 0, 223 }, { 12, 0, 168 }, - { 4, 10, 210 }, { 11, 11, 464 }, { 6, 0, 1639 }, { 18, 0, 159 }, - { 11, 11, 2 }, { 7, 0, 934 }, { 8, 0, 647 }, { 17, 0, 97 }, - { 19, 0, 59 }, { 22, 0, 2 }, { 4, 0, 191 }, { 5, 0, 165 }, - { 9, 0, 346 }, { 10, 0, 655 }, { 11, 0, 885 }, { 4, 10, 430 }, - { 7, 11, 357 }, { 5, 0, 877 }, { 5, 10, 213 }, { 5, 11, 406 }, - { 8, 0, 128 }, { 11, 0, 179 }, { 6, 11, 69 }, { 7, 11, 117 }, - { 7, 0, 1297 }, { 11, 11, 43 }, { 13, 11, 72 }, { 13, 11, 142 }, - { 7, 11, 1830 }, { 14, 0, 164 }, { 5, 0, 57 }, { 6, 0, 101 }, - { 6, 0, 586 }, { 6, 0, 1663 }, { 7, 0, 132 }, { 7, 0, 1154 }, - { 7, 0, 1415 }, { 7, 0, 1507 }, { 12, 0, 493 }, { 15, 0, 105 }, - { 23, 0, 15 }, { 5, 0, 459 }, { 7, 0, 1073 }, { 8, 0, 241 }, - { 8, 0, 334 }, { 5, 11, 826 }, { 5, 10, 108 }, { 5, 10, 219 }, - { 10, 11, 132 }, { 11, 11, 191 }, { 11, 11, 358 }, { 11, 11, 460 }, - { 6, 0, 324 }, { 6, 0, 520 }, { 7, 0, 338 }, { 7, 0, 1729 }, - { 8, 0, 228 }, { 11, 0, 750 }, { 21, 0, 30 }, { 22, 0, 53 }, - { 4, 10, 193 }, { 5, 10, 916 }, { 7, 10, 364 }, { 10, 10, 398 }, - { 10, 10, 726 }, { 11, 10, 317 }, { 11, 10, 626 }, { 12, 10, 142 }, - { 12, 10, 288 }, { 12, 10, 678 }, { 13, 10, 313 }, { 15, 10, 113 }, - { 18, 10, 114 }, { 6, 11, 110 }, { 7, 11, 1681 }, { 7, 0, 910 }, - { 6, 10, 241 }, { 7, 10, 907 }, { 8, 10, 832 }, { 9, 10, 342 }, - { 10, 10, 729 }, { 11, 10, 284 }, { 11, 10, 445 }, { 11, 10, 651 }, - { 11, 10, 863 }, { 13, 10, 398 }, { 18, 10, 99 }, { 7, 0, 705 }, - { 9, 0, 734 }, { 5, 11, 1000 }, { 7, 11, 733 }, { 9, 11, 583 }, - { 4, 0, 73 }, { 6, 0, 612 }, { 7, 0, 927 }, { 7, 0, 1822 }, - { 8, 0, 217 }, { 9, 0, 765 }, { 9, 0, 766 }, { 10, 0, 408 }, - { 11, 0, 51 }, { 11, 0, 793 }, { 12, 0, 266 }, { 15, 0, 158 }, - { 20, 0, 89 }, { 22, 0, 32 }, { 7, 0, 1330 }, { 4, 11, 297 }, - { 6, 11, 529 }, { 7, 11, 152 }, { 7, 11, 713 }, { 7, 11, 1845 }, - { 8, 11, 710 }, { 8, 11, 717 }, { 12, 11, 639 }, { 5, 0, 389 }, - { 8, 0, 636 }, { 6, 0, 1409 }, { 4, 10, 562 }, { 9, 10, 254 }, - { 11, 10, 879 }, { 6, 0, 893 }, { 4, 10, 786 }, { 4, 11, 520 }, - { 7, 11, 575 }, { 8, 0, 21 }, { 12, 0, 721 }, { 8, 0, 959 }, - { 7, 11, 1428 }, { 7, 11, 1640 }, { 9, 11, 169 }, { 9, 11, 182 }, - { 9, 11, 367 }, { 9, 11, 478 }, { 9, 11, 506 }, { 9, 11, 551 }, - { 9, 11, 648 }, { 9, 11, 651 }, { 9, 11, 697 }, { 9, 11, 705 }, - { 9, 11, 725 }, { 9, 11, 787 }, { 9, 11, 794 }, { 10, 11, 198 }, - { 10, 11, 214 }, { 10, 11, 267 }, { 10, 11, 275 }, { 10, 11, 456 }, - { 10, 11, 551 }, { 10, 11, 561 }, { 10, 11, 613 }, { 10, 11, 627 }, - { 10, 11, 668 }, { 10, 11, 675 }, { 10, 11, 691 }, { 10, 11, 695 }, - { 10, 11, 707 }, { 10, 11, 715 }, { 11, 11, 183 }, { 11, 11, 201 }, - { 11, 11, 244 }, { 11, 11, 262 }, { 11, 11, 352 }, { 11, 11, 439 }, - { 11, 11, 493 }, { 11, 11, 572 }, { 11, 11, 591 }, { 11, 11, 608 }, - { 11, 11, 611 }, { 11, 11, 646 }, { 11, 11, 674 }, { 11, 11, 711 }, - { 11, 11, 751 }, { 11, 11, 761 }, { 11, 11, 776 }, { 11, 11, 785 }, - { 11, 11, 850 }, { 11, 11, 853 }, { 11, 11, 862 }, { 11, 11, 865 }, - { 11, 11, 868 }, { 11, 11, 898 }, { 11, 11, 902 }, { 11, 11, 903 }, - { 11, 11, 910 }, { 11, 11, 932 }, { 11, 11, 942 }, { 11, 11, 957 }, - { 11, 11, 967 }, { 11, 11, 972 }, { 12, 11, 148 }, { 12, 11, 195 }, - { 12, 11, 220 }, { 12, 11, 237 }, { 12, 11, 318 }, { 12, 11, 339 }, - { 12, 11, 393 }, { 12, 11, 445 }, { 12, 11, 450 }, { 12, 11, 474 }, - { 12, 11, 509 }, { 12, 11, 533 }, { 12, 11, 591 }, { 12, 11, 594 }, - { 12, 11, 597 }, { 12, 11, 621 }, { 12, 11, 633 }, { 12, 11, 642 }, - { 13, 11, 59 }, { 13, 11, 60 }, { 13, 11, 145 }, { 13, 11, 239 }, - { 13, 11, 250 }, { 13, 11, 273 }, { 13, 11, 329 }, { 13, 11, 344 }, - { 13, 11, 365 }, { 13, 11, 372 }, { 13, 11, 387 }, { 13, 11, 403 }, - { 13, 11, 414 }, { 13, 11, 456 }, { 13, 11, 478 }, { 13, 11, 483 }, - { 13, 11, 489 }, { 14, 11, 55 }, { 14, 11, 57 }, { 14, 11, 81 }, - { 14, 11, 90 }, { 14, 11, 148 }, { 14, 11, 239 }, { 14, 11, 266 }, - { 14, 11, 321 }, { 14, 11, 326 }, { 14, 11, 327 }, { 14, 11, 330 }, - { 14, 11, 347 }, { 14, 11, 355 }, { 14, 11, 401 }, { 14, 11, 411 }, - { 14, 11, 414 }, { 14, 11, 416 }, { 14, 11, 420 }, { 15, 11, 61 }, - { 15, 11, 74 }, { 15, 11, 87 }, { 15, 11, 88 }, { 15, 11, 94 }, - { 15, 11, 96 }, { 15, 11, 116 }, { 15, 11, 149 }, { 15, 11, 154 }, - { 16, 11, 50 }, { 16, 11, 63 }, { 16, 11, 73 }, { 17, 11, 2 }, - { 17, 11, 66 }, { 17, 11, 92 }, { 17, 11, 103 }, { 17, 11, 112 }, - { 18, 11, 50 }, { 18, 11, 54 }, { 18, 11, 82 }, { 18, 11, 86 }, - { 18, 11, 90 }, { 18, 11, 111 }, { 18, 11, 115 }, { 18, 11, 156 }, - { 19, 11, 40 }, { 19, 11, 79 }, { 20, 11, 78 }, { 21, 11, 22 }, - { 9, 11, 170 }, { 6, 0, 1433 }, { 7, 11, 1307 }, { 11, 11, 411 }, - { 5, 0, 189 }, { 7, 0, 442 }, { 7, 0, 443 }, { 8, 0, 281 }, - { 12, 0, 174 }, { 13, 0, 261 }, { 6, 10, 216 }, { 7, 10, 901 }, - { 7, 10, 1343 }, { 8, 10, 493 }, { 5, 11, 397 }, { 6, 11, 154 }, - { 7, 10, 341 }, { 7, 11, 676 }, { 8, 11, 443 }, { 8, 11, 609 }, - { 9, 11, 24 }, { 9, 11, 325 }, { 10, 11, 35 }, { 11, 10, 219 }, - { 11, 11, 535 }, { 11, 11, 672 }, { 11, 11, 1018 }, { 12, 11, 637 }, - { 16, 11, 30 }, { 6, 0, 2 }, { 7, 0, 191 }, { 7, 0, 446 }, - { 7, 0, 1262 }, { 7, 0, 1737 }, { 8, 0, 22 }, { 8, 0, 270 }, - { 8, 0, 612 }, { 9, 0, 4 }, { 9, 0, 312 }, { 9, 0, 436 }, - { 9, 0, 626 }, { 10, 0, 216 }, { 10, 0, 311 }, { 10, 0, 521 }, - { 10, 0, 623 }, { 11, 0, 72 }, { 11, 0, 330 }, { 11, 0, 455 }, - { 12, 0, 321 }, { 12, 0, 504 }, { 12, 0, 530 }, { 12, 0, 543 }, - { 13, 0, 17 }, { 13, 0, 156 }, { 13, 0, 334 }, { 14, 0, 131 }, - { 17, 0, 60 }, { 20, 0, 64 }, { 7, 0, 354 }, { 10, 0, 410 }, - { 11, 0, 815 }, { 11, 10, 130 }, { 7, 10, 1734 }, { 9, 11, 631 }, - { 12, 0, 425 }, { 15, 0, 112 }, { 10, 10, 115 }, { 11, 10, 420 }, - { 13, 10, 404 }, { 14, 10, 346 }, { 15, 10, 54 }, { 6, 0, 60 }, - { 6, 0, 166 }, { 7, 0, 374 }, { 7, 0, 670 }, { 7, 0, 1327 }, - { 8, 0, 411 }, { 8, 0, 435 }, { 9, 0, 653 }, { 9, 0, 740 }, - { 10, 0, 385 }, { 11, 0, 222 }, { 11, 0, 324 }, { 11, 0, 829 }, - { 12, 0, 611 }, { 7, 0, 1611 }, { 13, 0, 14 }, { 15, 0, 44 }, - { 19, 0, 13 }, { 20, 0, 76 }, { 5, 11, 981 }, { 4, 11, 56 }, - { 7, 11, 1791 }, { 8, 11, 607 }, { 8, 11, 651 }, { 11, 11, 465 }, - { 11, 11, 835 }, { 12, 11, 337 }, { 13, 11, 480 }, { 6, 0, 1478 }, - { 5, 10, 1011 }, { 8, 10, 701 }, { 11, 0, 596 }, { 5, 0, 206 }, - { 6, 0, 398 }, { 4, 10, 54 }, { 5, 10, 666 }, { 7, 10, 1039 }, - { 7, 10, 1130 }, { 9, 10, 195 }, { 10, 10, 302 }, { 7, 0, 50 }, - { 9, 11, 158 }, { 10, 11, 411 }, { 7, 11, 1120 }, { 6, 0, 517 }, - { 7, 0, 1159 }, { 10, 0, 621 }, { 11, 0, 192 }, { 6, 10, 1669 }, - { 4, 0, 592 }, { 6, 0, 600 }, { 7, 0, 1653 }, { 10, 0, 223 }, - { 11, 0, 645 }, { 8, 11, 139 }, { 7, 0, 64 }, { 8, 0, 245 }, - { 14, 0, 278 }, { 6, 11, 622 }, { 7, 11, 1030 }, { 8, 0, 604 }, - { 6, 0, 1502 }, { 10, 0, 265 }, { 13, 11, 168 }, { 7, 0, 1763 }, - { 12, 0, 310 }, { 7, 10, 798 }, { 11, 11, 719 }, { 7, 11, 160 }, - { 10, 11, 624 }, { 14, 11, 279 }, { 4, 11, 363 }, { 7, 10, 122 }, - { 9, 10, 259 }, { 10, 10, 84 }, { 11, 10, 470 }, { 12, 10, 541 }, - { 13, 10, 379 }, { 5, 0, 129 }, { 6, 0, 61 }, { 7, 0, 947 }, - { 6, 0, 1356 }, { 7, 11, 1191 }, { 13, 0, 505 }, { 13, 0, 506 }, - { 11, 0, 1000 }, { 5, 10, 82 }, { 5, 10, 131 }, { 7, 10, 1755 }, - { 8, 10, 31 }, { 9, 10, 168 }, { 9, 10, 764 }, { 11, 10, 869 }, - { 6, 0, 966 }, { 6, 10, 605 }, { 6, 11, 292 }, { 5, 11, 177 }, - { 6, 11, 616 }, { 7, 11, 827 }, { 9, 11, 525 }, { 10, 11, 656 }, - { 7, 11, 1486 }, { 10, 11, 31 }, { 5, 10, 278 }, { 9, 10, 68 }, - { 4, 10, 163 }, { 5, 10, 201 }, { 5, 10, 307 }, { 5, 10, 310 }, - { 6, 10, 335 }, { 7, 10, 284 }, { 8, 10, 165 }, { 6, 0, 839 }, - { 7, 10, 1660 }, { 8, 10, 781 }, { 6, 10, 33 }, { 7, 10, 1244 }, - { 5, 0, 637 }, { 4, 11, 161 }, { 5, 11, 631 }, { 9, 0, 590 }, - { 7, 10, 1953 }, { 8, 10, 720 }, { 5, 0, 280 }, { 7, 0, 1226 }, - { 10, 10, 203 }, { 6, 0, 1386 }, { 5, 0, 281 }, { 6, 0, 1026 }, - { 6, 10, 326 }, { 7, 10, 677 }, { 9, 10, 425 }, { 7, 11, 1557 }, - { 7, 11, 1684 }, { 7, 0, 1064 }, { 9, 11, 469 }, { 9, 11, 709 }, - { 12, 11, 512 }, { 14, 11, 65 }, { 17, 11, 12 }, { 6, 0, 917 }, - { 10, 11, 229 }, { 11, 11, 73 }, { 11, 11, 376 }, { 11, 11, 433 }, - { 7, 0, 555 }, { 9, 0, 192 }, { 13, 0, 30 }, { 13, 0, 49 }, - { 15, 0, 150 }, { 16, 0, 76 }, { 20, 0, 52 }, { 7, 10, 1316 }, - { 7, 10, 1412 }, { 7, 10, 1839 }, { 9, 10, 589 }, { 11, 10, 241 }, - { 11, 10, 676 }, { 11, 10, 811 }, { 11, 10, 891 }, { 12, 10, 140 }, - { 12, 10, 346 }, { 12, 10, 479 }, { 13, 10, 381 }, { 14, 10, 188 }, - { 18, 10, 30 }, { 21, 0, 15 }, { 6, 0, 1882 }, { 6, 0, 1883 }, - { 6, 0, 1897 }, { 9, 0, 945 }, { 9, 0, 1014 }, { 9, 0, 1020 }, - { 12, 0, 823 }, { 12, 0, 842 }, { 12, 0, 866 }, { 12, 0, 934 }, - { 15, 0, 242 }, { 18, 0, 208 }, { 6, 0, 965 }, { 6, 0, 1499 }, - { 7, 0, 33 }, { 7, 0, 120 }, { 8, 0, 489 }, { 9, 0, 319 }, - { 10, 0, 820 }, { 11, 0, 1004 }, { 12, 0, 379 }, { 12, 0, 679 }, - { 13, 0, 117 }, { 13, 0, 412 }, { 14, 0, 25 }, { 15, 0, 52 }, - { 15, 0, 161 }, { 16, 0, 47 }, { 21, 0, 2 }, { 6, 11, 558 }, - { 7, 11, 651 }, { 8, 11, 421 }, { 9, 11, 0 }, { 10, 11, 34 }, - { 4, 0, 937 }, { 5, 0, 801 }, { 7, 0, 473 }, { 5, 10, 358 }, - { 7, 10, 1184 }, { 10, 10, 662 }, { 13, 10, 212 }, { 13, 10, 304 }, - { 13, 10, 333 }, { 17, 10, 98 }, { 4, 0, 877 }, { 6, 0, 693 }, - { 6, 0, 824 }, { 4, 0, 365 }, { 7, 11, 1832 }, { 10, 11, 374 }, - { 5, 0, 7 }, { 11, 0, 774 }, { 4, 0, 734 }, { 5, 0, 662 }, - { 6, 0, 430 }, { 4, 0, 746 }, { 7, 0, 1090 }, { 5, 0, 360 }, - { 8, 0, 237 }, { 10, 0, 231 }, { 19, 0, 124 }, { 10, 11, 348 }, - { 6, 11, 6 }, { 7, 11, 81 }, { 7, 11, 771 }, { 7, 11, 1731 }, - { 9, 11, 405 }, { 10, 11, 421 }, { 6, 0, 740 }, { 9, 0, 822 }, - { 5, 10, 946 }, { 7, 0, 1485 }, { 8, 0, 929 }, { 7, 10, 411 }, - { 8, 10, 631 }, { 9, 10, 323 }, { 10, 10, 355 }, { 11, 10, 491 }, - { 12, 10, 143 }, { 12, 10, 402 }, { 13, 10, 73 }, { 14, 10, 408 }, - { 15, 10, 107 }, { 18, 10, 71 }, { 7, 10, 590 }, { 5, 11, 881 }, - { 5, 11, 885 }, { 22, 11, 25 }, { 4, 0, 852 }, { 5, 11, 142 }, - { 6, 11, 546 }, { 7, 10, 1467 }, { 8, 10, 328 }, { 10, 10, 544 }, - { 11, 10, 955 }, { 13, 10, 320 }, { 17, 10, 83 }, { 9, 0, 17 }, - { 10, 0, 291 }, { 11, 10, 511 }, { 13, 10, 394 }, { 14, 10, 298 }, - { 14, 10, 318 }, { 18, 10, 103 }, { 5, 11, 466 }, { 11, 11, 571 }, - { 12, 11, 198 }, { 13, 11, 283 }, { 14, 11, 186 }, { 15, 11, 21 }, - { 15, 11, 103 }, { 6, 0, 1001 }, { 4, 11, 185 }, { 5, 11, 257 }, - { 5, 11, 839 }, { 5, 11, 936 }, { 7, 11, 171 }, { 9, 11, 399 }, - { 10, 11, 258 }, { 10, 11, 395 }, { 10, 11, 734 }, { 11, 11, 1014 }, - { 12, 11, 23 }, { 13, 11, 350 }, { 14, 11, 150 }, { 19, 11, 6 }, - { 15, 0, 35 }, { 4, 0, 831 }, { 5, 10, 835 }, { 6, 10, 483 }, - { 4, 0, 277 }, { 5, 0, 608 }, { 6, 0, 493 }, { 7, 0, 457 }, - { 12, 0, 384 }, { 7, 11, 404 }, { 7, 11, 1377 }, { 7, 11, 1430 }, - { 7, 11, 2017 }, { 8, 11, 149 }, { 8, 11, 239 }, { 8, 11, 512 }, - { 8, 11, 793 }, { 8, 11, 818 }, { 9, 11, 474 }, { 9, 11, 595 }, - { 10, 11, 122 }, { 10, 11, 565 }, { 10, 11, 649 }, { 10, 11, 783 }, - { 11, 11, 239 }, { 11, 11, 295 }, { 11, 11, 447 }, { 11, 11, 528 }, - { 11, 11, 639 }, { 11, 11, 800 }, { 11, 11, 936 }, { 12, 11, 25 }, - { 12, 11, 73 }, { 12, 11, 77 }, { 12, 11, 157 }, { 12, 11, 316 }, - { 12, 11, 390 }, { 12, 11, 391 }, { 12, 11, 394 }, { 12, 11, 395 }, - { 12, 11, 478 }, { 12, 11, 503 }, { 12, 11, 592 }, { 12, 11, 680 }, - { 13, 11, 50 }, { 13, 11, 53 }, { 13, 11, 132 }, { 13, 11, 198 }, - { 13, 11, 275 }, { 13, 11, 322 }, { 13, 11, 415 }, { 14, 11, 71 }, - { 14, 11, 257 }, { 14, 11, 395 }, { 15, 11, 71 }, { 15, 11, 136 }, - { 17, 11, 123 }, { 18, 11, 93 }, { 19, 11, 58 }, { 6, 0, 1351 }, - { 7, 0, 27 }, { 7, 0, 316 }, { 8, 11, 712 }, { 8, 0, 984 }, - { 5, 0, 552 }, { 9, 0, 264 }, { 4, 0, 401 }, { 6, 0, 710 }, - { 6, 0, 1111 }, { 6, 0, 1343 }, { 6, 0, 1211 }, { 9, 0, 543 }, - { 10, 0, 524 }, { 11, 0, 108 }, { 11, 0, 653 }, { 12, 0, 524 }, - { 13, 0, 123 }, { 14, 0, 252 }, { 16, 0, 18 }, { 19, 0, 38 }, - { 20, 0, 26 }, { 20, 0, 65 }, { 21, 0, 3 }, { 23, 0, 11 }, - { 4, 0, 205 }, { 5, 0, 623 }, { 7, 0, 104 }, { 8, 0, 519 }, - { 9, 0, 716 }, { 4, 10, 677 }, { 4, 11, 377 }, { 24, 11, 13 }, - { 7, 11, 1673 }, { 7, 0, 579 }, { 9, 0, 41 }, { 9, 0, 244 }, - { 9, 0, 669 }, { 10, 0, 5 }, { 11, 0, 861 }, { 11, 0, 951 }, - { 11, 0, 980 }, { 4, 0, 717 }, { 8, 0, 1011 }, { 4, 0, 805 }, - { 4, 11, 180 }, { 7, 11, 1906 }, { 4, 10, 777 }, { 4, 10, 331 }, - { 4, 0, 489 }, { 6, 0, 1024 }, { 4, 11, 491 }, { 5, 10, 747 }, - { 7, 11, 1182 }, { 4, 11, 171 }, { 10, 11, 234 }, { 4, 11, 586 }, - { 7, 11, 1186 }, { 10, 11, 631 }, { 7, 0, 892 }, { 7, 11, 336 }, - { 9, 11, 931 }, { 10, 11, 334 }, { 20, 11, 71 }, { 9, 0, 473 }, - { 6, 0, 864 }, { 12, 0, 659 }, { 11, 11, 926 }, { 7, 0, 819 }, - { 9, 0, 26 }, { 9, 0, 392 }, { 10, 0, 152 }, { 10, 0, 226 }, - { 11, 0, 19 }, { 12, 0, 276 }, { 12, 0, 426 }, { 12, 0, 589 }, - { 13, 0, 460 }, { 15, 0, 97 }, { 19, 0, 48 }, { 20, 0, 104 }, - { 7, 0, 51 }, { 5, 10, 326 }, { 4, 10, 691 }, { 18, 10, 16 }, - { 9, 0, 130 }, { 11, 0, 765 }, { 10, 10, 680 }, { 10, 10, 793 }, - { 13, 10, 357 }, { 5, 11, 765 }, { 8, 0, 229 }, { 6, 10, 32 }, - { 7, 10, 385 }, { 7, 10, 757 }, { 7, 10, 1916 }, { 8, 10, 94 }, - { 8, 10, 711 }, { 9, 10, 541 }, { 10, 10, 162 }, { 10, 10, 795 }, - { 11, 10, 989 }, { 11, 10, 1010 }, { 12, 10, 14 }, { 14, 10, 308 }, - { 7, 11, 474 }, { 9, 11, 578 }, { 4, 0, 674 }, { 4, 0, 770 }, - { 5, 0, 79 }, { 7, 0, 1027 }, { 7, 0, 1477 }, { 11, 0, 52 }, - { 5, 11, 424 }, { 6, 0, 1666 }, { 6, 0, 409 }, { 6, 10, 349 }, - { 6, 10, 1682 }, { 7, 10, 1252 }, { 8, 10, 112 }, { 8, 11, 714 }, - { 9, 10, 435 }, { 9, 10, 668 }, { 10, 10, 290 }, { 10, 10, 319 }, - { 10, 10, 815 }, { 11, 10, 180 }, { 11, 10, 837 }, { 12, 10, 240 }, - { 13, 10, 152 }, { 13, 10, 219 }, { 14, 10, 158 }, { 5, 0, 789 }, - { 6, 0, 195 }, { 4, 0, 251 }, { 4, 0, 688 }, { 7, 0, 513 }, - { 7, 0, 1284 }, { 4, 10, 581 }, { 9, 11, 420 }, { 10, 11, 269 }, - { 10, 11, 285 }, { 10, 11, 576 }, { 11, 11, 397 }, { 13, 11, 175 }, - { 17, 11, 90 }, { 6, 10, 126 }, { 7, 10, 573 }, { 8, 10, 397 }, - { 14, 10, 44 }, { 4, 11, 429 }, { 5, 0, 889 }, { 4, 0, 160 }, - { 5, 0, 330 }, { 7, 0, 1434 }, { 8, 0, 174 }, { 7, 11, 18 }, - { 7, 11, 699 }, { 7, 11, 1966 }, { 8, 11, 752 }, { 9, 11, 273 }, - { 9, 11, 412 }, { 9, 11, 703 }, { 10, 11, 71 }, { 10, 11, 427 }, - { 10, 11, 508 }, { 18, 11, 97 }, { 6, 0, 872 }, { 6, 0, 899 }, - { 5, 10, 926 }, { 6, 0, 1126 }, { 6, 0, 918 }, { 4, 11, 53 }, - { 5, 11, 186 }, { 7, 11, 752 }, { 7, 0, 268 }, { 8, 0, 569 }, - { 6, 0, 1224 }, { 6, 0, 1361 }, { 7, 10, 1232 }, { 9, 10, 531 }, - { 8, 11, 575 }, { 10, 11, 289 }, { 11, 11, 319 }, { 5, 10, 670 }, - { 4, 11, 675 }, { 5, 0, 374 }, { 7, 10, 1957 }, { 5, 0, 731 }, - { 11, 0, 190 }, { 15, 0, 49 }, { 11, 11, 190 }, { 15, 11, 49 }, - { 4, 0, 626 }, { 5, 0, 506 }, { 5, 0, 642 }, { 6, 0, 425 }, - { 10, 0, 202 }, { 11, 0, 141 }, { 9, 0, 444 }, { 7, 10, 242 }, - { 7, 10, 1942 }, { 6, 11, 209 }, { 8, 11, 468 }, { 9, 11, 210 }, - { 11, 11, 36 }, { 12, 11, 28 }, { 12, 11, 630 }, { 13, 11, 21 }, - { 13, 11, 349 }, { 14, 11, 7 }, { 17, 11, 13 }, { 4, 11, 342 }, - { 7, 11, 1179 }, { 5, 10, 834 }, { 7, 10, 1202 }, { 8, 10, 14 }, - { 9, 10, 481 }, { 9, 10, 880 }, { 4, 11, 928 }, { 5, 11, 910 }, - { 4, 11, 318 }, { 4, 11, 496 }, { 7, 11, 856 }, { 11, 11, 654 }, - { 8, 0, 835 }, { 7, 0, 1526 }, { 10, 10, 465 }, { 23, 0, 17 }, - { 7, 0, 477 }, { 4, 10, 357 }, { 6, 10, 172 }, { 7, 10, 143 }, - { 9, 10, 413 }, { 6, 0, 1374 }, { 10, 0, 994 }, { 18, 0, 76 }, - { 4, 10, 590 }, { 7, 0, 287 }, { 8, 0, 355 }, { 9, 0, 293 }, - { 9, 0, 743 }, { 6, 0, 1389 }, { 7, 11, 915 }, { 8, 11, 247 }, - { 19, 11, 0 }, { 4, 11, 202 }, { 5, 11, 382 }, { 6, 11, 454 }, - { 7, 11, 936 }, { 7, 11, 1803 }, { 8, 11, 758 }, { 9, 11, 375 }, - { 9, 11, 895 }, { 10, 11, 743 }, { 10, 11, 792 }, { 11, 11, 978 }, - { 11, 11, 1012 }, { 14, 11, 109 }, { 5, 0, 384 }, { 8, 0, 455 }, - { 12, 0, 48 }, { 4, 11, 390 }, { 5, 10, 169 }, { 7, 10, 333 }, - { 8, 10, 45 }, { 5, 0, 264 }, { 6, 0, 184 }, { 10, 11, 791 }, - { 5, 11, 717 }, { 4, 10, 198 }, { 6, 11, 445 }, { 7, 11, 332 }, - { 9, 11, 909 }, { 8, 0, 1001 }, { 4, 10, 24 }, { 5, 10, 140 }, - { 5, 10, 185 }, { 7, 10, 1500 }, { 11, 10, 565 }, { 11, 10, 838 }, - { 6, 11, 578 }, { 5, 0, 633 }, { 6, 0, 28 }, { 7, 0, 1323 }, - { 4, 0, 851 }, { 8, 11, 267 }, { 7, 0, 359 }, { 8, 0, 243 }, - { 12, 0, 175 }, { 4, 10, 334 }, { 5, 10, 593 }, { 13, 11, 87 }, - { 8, 11, 766 }, { 10, 0, 287 }, { 12, 0, 138 }, { 10, 11, 287 }, - { 12, 11, 138 }, { 4, 0, 105 }, { 4, 0, 740 }, { 12, 10, 116 }, - { 6, 0, 857 }, { 7, 11, 1841 }, { 6, 0, 1402 }, { 9, 0, 819 }, - { 4, 11, 584 }, { 4, 10, 709 }, { 5, 10, 897 }, { 5, 0, 224 }, - { 13, 0, 174 }, { 18, 0, 52 }, { 7, 10, 1840 }, { 4, 10, 608 }, - { 5, 10, 497 }, { 11, 11, 60 }, { 4, 0, 758 }, { 7, 0, 1649 }, - { 4, 11, 226 }, { 4, 11, 326 }, { 7, 11, 1770 }, { 5, 11, 426 }, - { 8, 11, 30 }, { 9, 11, 2 }, { 11, 11, 549 }, { 19, 11, 122 }, - { 7, 10, 2039 }, { 6, 10, 540 }, { 8, 10, 136 }, { 4, 0, 573 }, - { 8, 0, 655 }, { 4, 10, 897 }, { 5, 10, 786 }, { 7, 0, 351 }, - { 11, 0, 128 }, { 5, 10, 999 }, { 4, 10, 299 }, { 7, 10, 1004 }, - { 5, 0, 918 }, { 4, 11, 345 }, { 4, 11, 385 }, { 7, 11, 265 }, - { 7, 11, 587 }, { 5, 10, 456 }, { 8, 10, 180 }, { 6, 0, 687 }, - { 6, 0, 1537 }, { 4, 11, 347 }, { 5, 11, 423 }, { 5, 11, 996 }, - { 7, 11, 1329 }, { 4, 10, 755 }, { 7, 11, 1259 }, { 9, 11, 125 }, - { 11, 11, 65 }, { 12, 11, 285 }, { 5, 11, 136 }, { 6, 11, 136 }, - { 8, 11, 644 }, { 6, 0, 1525 }, { 4, 0, 1009 }, { 7, 0, 1139 }, - { 11, 10, 338 }, { 4, 0, 340 }, { 7, 10, 1464 }, { 8, 0, 847 }, - { 10, 0, 861 }, { 10, 0, 876 }, { 10, 0, 889 }, { 10, 0, 922 }, - { 10, 0, 929 }, { 10, 0, 933 }, { 12, 0, 784 }, { 12, 0, 791 }, - { 11, 0, 176 }, { 9, 11, 134 }, { 10, 11, 2 }, { 10, 11, 27 }, - { 10, 11, 333 }, { 11, 11, 722 }, { 15, 11, 1 }, { 4, 11, 433 }, - { 5, 11, 719 }, { 5, 0, 985 }, { 7, 0, 509 }, { 7, 0, 529 }, - { 17, 0, 96 }, { 4, 0, 615 }, { 4, 10, 890 }, { 5, 10, 805 }, - { 5, 10, 819 }, { 5, 10, 961 }, { 6, 10, 396 }, { 6, 10, 1631 }, - { 6, 10, 1678 }, { 7, 10, 1967 }, { 7, 10, 2041 }, { 9, 10, 630 }, - { 11, 10, 8 }, { 11, 10, 1019 }, { 12, 10, 176 }, { 13, 10, 225 }, - { 14, 10, 292 }, { 21, 10, 24 }, { 7, 0, 1919 }, { 6, 0, 1131 }, - { 16, 11, 21 }, { 16, 11, 51 }, { 7, 10, 1815 }, { 4, 0, 247 }, - { 7, 10, 1505 }, { 10, 10, 190 }, { 10, 10, 634 }, { 11, 10, 792 }, - { 12, 10, 358 }, { 12, 10, 447 }, { 5, 10, 0 }, { 6, 10, 536 }, - { 7, 10, 604 }, { 13, 10, 445 }, { 17, 10, 126 }, { 4, 0, 184 }, - { 5, 0, 390 }, { 6, 0, 337 }, { 7, 0, 23 }, { 7, 0, 494 }, - { 7, 0, 618 }, { 7, 0, 1456 }, { 8, 0, 27 }, { 8, 0, 599 }, - { 10, 0, 153 }, { 11, 0, 710 }, { 6, 10, 232 }, { 6, 10, 412 }, - { 7, 10, 1074 }, { 8, 10, 9 }, { 8, 10, 157 }, { 8, 10, 786 }, - { 9, 10, 196 }, { 9, 10, 352 }, { 9, 10, 457 }, { 10, 10, 337 }, - { 11, 10, 232 }, { 11, 10, 877 }, { 12, 10, 480 }, { 12, 10, 546 }, - { 13, 0, 38 }, { 7, 10, 958 }, { 4, 10, 382 }, { 8, 10, 579 }, - { 4, 10, 212 }, { 7, 10, 1206 }, { 4, 11, 555 }, { 8, 11, 536 }, - { 10, 11, 288 }, { 11, 11, 139 }, { 11, 11, 171 }, { 9, 11, 370 }, - { 10, 11, 90 }, { 4, 0, 1015 }, { 6, 0, 1088 }, { 5, 10, 655 }, - { 7, 11, 977 }, { 6, 0, 1585 }, { 17, 10, 67 }, { 19, 10, 74 }, - { 10, 0, 227 }, { 11, 0, 497 }, { 11, 0, 709 }, { 12, 0, 415 }, - { 6, 0, 360 }, { 7, 0, 1664 }, { 8, 0, 478 }, { 7, 0, 95 }, - { 6, 10, 231 }, { 8, 10, 423 }, { 12, 11, 65 }, { 4, 11, 257 }, - { 7, 11, 2031 }, { 7, 11, 1768 }, { 5, 10, 300 }, { 11, 11, 211 }, - { 8, 0, 699 }, { 6, 10, 237 }, { 7, 10, 611 }, { 8, 10, 100 }, - { 9, 10, 416 }, { 11, 10, 335 }, { 12, 10, 173 }, { 18, 10, 101 }, - { 14, 0, 26 }, { 18, 0, 150 }, { 6, 0, 581 }, { 7, 0, 1119 }, - { 7, 10, 1208 }, { 4, 0, 739 }, { 6, 11, 83 }, { 6, 11, 1733 }, - { 7, 11, 1389 }, { 9, 0, 869 }, { 4, 0, 67 }, { 5, 0, 422 }, - { 7, 0, 1037 }, { 7, 0, 1289 }, { 7, 0, 1555 }, { 9, 0, 741 }, - { 17, 0, 108 }, { 5, 10, 199 }, { 12, 10, 427 }, { 18, 10, 38 }, - { 8, 0, 464 }, { 14, 0, 42 }, { 10, 0, 96 }, { 8, 11, 501 }, - { 9, 11, 696 }, { 6, 11, 592 }, { 4, 0, 512 }, { 4, 0, 966 }, - { 5, 0, 342 }, { 6, 0, 1855 }, { 8, 0, 869 }, { 8, 0, 875 }, - { 8, 0, 901 }, { 16, 0, 26 }, { 8, 0, 203 }, { 11, 0, 823 }, - { 11, 0, 846 }, { 12, 0, 482 }, { 13, 0, 277 }, { 13, 0, 302 }, - { 13, 0, 464 }, { 14, 0, 205 }, { 14, 0, 221 }, { 4, 0, 449 }, - { 5, 0, 718 }, { 7, 11, 1718 }, { 9, 11, 95 }, { 9, 11, 274 }, - { 10, 11, 279 }, { 10, 11, 317 }, { 10, 11, 420 }, { 11, 11, 303 }, - { 11, 11, 808 }, { 12, 11, 134 }, { 12, 11, 367 }, { 13, 11, 149 }, - { 13, 11, 347 }, { 14, 11, 349 }, { 14, 11, 406 }, { 18, 11, 22 }, - { 18, 11, 89 }, { 18, 11, 122 }, { 19, 11, 47 }, { 5, 11, 26 }, - { 4, 0, 355 }, { 6, 0, 311 }, { 9, 0, 256 }, { 10, 0, 404 }, - { 4, 11, 550 }, { 10, 0, 758 }, { 6, 10, 312 }, { 6, 10, 1715 }, - { 10, 10, 584 }, { 11, 10, 546 }, { 11, 10, 692 }, { 12, 10, 259 }, - { 12, 10, 295 }, { 13, 10, 46 }, { 13, 10, 154 }, { 8, 11, 822 }, - { 5, 0, 827 }, { 4, 11, 902 }, { 5, 11, 809 }, { 6, 11, 122 }, - { 7, 11, 896 }, { 5, 0, 64 }, { 12, 0, 581 }, { 4, 0, 442 }, - { 6, 0, 739 }, { 7, 0, 1047 }, { 7, 0, 1352 }, { 7, 0, 1643 }, - { 7, 11, 1911 }, { 9, 11, 449 }, { 10, 11, 192 }, { 10, 11, 740 }, - { 7, 11, 262 }, { 4, 10, 588 }, { 5, 11, 620 }, { 5, 0, 977 }, - { 6, 0, 288 }, { 7, 0, 528 }, { 4, 11, 34 }, { 5, 11, 574 }, - { 7, 11, 279 }, { 7, 11, 1624 }, { 8, 11, 601 }, { 6, 0, 1375 }, - { 4, 10, 231 }, { 5, 10, 61 }, { 6, 10, 104 }, { 7, 10, 729 }, - { 7, 10, 964 }, { 7, 10, 1658 }, { 12, 10, 414 }, { 6, 10, 263 }, - { 10, 10, 757 }, { 4, 10, 320 }, { 4, 0, 254 }, { 7, 0, 1309 }, - { 5, 11, 332 }, { 7, 11, 1309 }, { 6, 11, 261 }, { 8, 11, 182 }, - { 11, 11, 943 }, { 4, 10, 225 }, { 6, 0, 12 }, { 7, 0, 1219 }, - { 4, 0, 275 }, { 12, 0, 376 }, { 6, 11, 1721 }, { 13, 11, 490 }, - { 4, 11, 933 }, { 5, 11, 880 }, { 6, 0, 951 }, { 6, 0, 1109 }, - { 6, 0, 1181 }, { 7, 0, 154 }, { 4, 10, 405 }, { 7, 10, 817 }, - { 14, 10, 58 }, { 17, 10, 37 }, { 18, 10, 124 }, { 6, 0, 1520 }, - { 5, 10, 974 }, { 6, 0, 1753 }, { 6, 0, 369 }, { 6, 0, 502 }, - { 7, 0, 1036 }, { 8, 0, 348 }, { 9, 0, 452 }, { 10, 0, 26 }, - { 11, 0, 224 }, { 11, 0, 387 }, { 11, 0, 772 }, { 12, 0, 95 }, - { 12, 0, 629 }, { 13, 0, 195 }, { 13, 0, 207 }, { 13, 0, 241 }, - { 14, 0, 260 }, { 14, 0, 270 }, { 15, 0, 140 }, { 4, 0, 269 }, - { 5, 0, 480 }, { 7, 0, 532 }, { 7, 0, 1197 }, { 7, 0, 1358 }, - { 8, 0, 291 }, { 11, 0, 349 }, { 14, 0, 396 }, { 5, 10, 235 }, - { 7, 10, 1239 }, { 11, 10, 131 }, { 12, 10, 370 }, { 7, 10, 956 }, - { 7, 10, 1157 }, { 7, 10, 1506 }, { 7, 10, 1606 }, { 7, 10, 1615 }, - { 7, 10, 1619 }, { 7, 10, 1736 }, { 7, 10, 1775 }, { 8, 10, 590 }, - { 9, 10, 324 }, { 9, 10, 736 }, { 9, 10, 774 }, { 9, 10, 776 }, - { 9, 10, 784 }, { 10, 10, 567 }, { 10, 10, 708 }, { 11, 10, 518 }, - { 11, 10, 613 }, { 11, 10, 695 }, { 11, 10, 716 }, { 11, 10, 739 }, - { 11, 10, 770 }, { 11, 10, 771 }, { 11, 10, 848 }, { 11, 10, 857 }, - { 11, 10, 931 }, { 11, 10, 947 }, { 12, 10, 326 }, { 12, 10, 387 }, - { 12, 10, 484 }, { 12, 10, 528 }, { 12, 10, 552 }, { 12, 10, 613 }, - { 13, 10, 189 }, { 13, 10, 256 }, { 13, 10, 340 }, { 13, 10, 432 }, - { 13, 10, 436 }, { 13, 10, 440 }, { 13, 10, 454 }, { 14, 10, 174 }, - { 14, 10, 220 }, { 14, 10, 284 }, { 14, 10, 390 }, { 17, 10, 121 }, - { 8, 11, 598 }, { 9, 11, 664 }, { 10, 11, 441 }, { 9, 10, 137 }, - { 10, 10, 221 }, { 5, 11, 812 }, { 20, 0, 15 }, { 6, 0, 1341 }, - { 6, 0, 1017 }, { 4, 11, 137 }, { 7, 11, 1178 }, { 7, 11, 1520 }, - { 7, 10, 390 }, { 10, 10, 140 }, { 7, 11, 1260 }, { 7, 11, 1790 }, - { 9, 11, 191 }, { 7, 10, 1144 }, { 6, 0, 1810 }, { 7, 0, 657 }, - { 8, 0, 886 }, { 10, 0, 857 }, { 14, 0, 440 }, { 16, 0, 96 }, - { 8, 0, 533 }, { 6, 11, 1661 }, { 7, 11, 1975 }, { 7, 11, 2009 }, - { 7, 11, 2011 }, { 6, 0, 1453 }, { 6, 10, 464 }, { 4, 11, 715 }, - { 5, 10, 407 }, { 11, 10, 204 }, { 11, 10, 243 }, { 11, 10, 489 }, - { 12, 10, 293 }, { 19, 10, 37 }, { 20, 10, 73 }, { 22, 10, 38 }, - { 5, 11, 703 }, { 4, 0, 211 }, { 7, 0, 1483 }, { 5, 10, 325 }, - { 8, 10, 5 }, { 8, 10, 227 }, { 9, 10, 105 }, { 10, 10, 585 }, - { 12, 10, 614 }, { 4, 0, 332 }, { 5, 0, 335 }, { 6, 0, 238 }, - { 7, 0, 269 }, { 7, 0, 811 }, { 7, 0, 1797 }, { 8, 0, 836 }, - { 9, 0, 507 }, { 13, 0, 242 }, { 5, 11, 89 }, { 7, 11, 1915 }, - { 9, 11, 185 }, { 9, 11, 235 }, { 9, 11, 496 }, { 10, 11, 64 }, - { 10, 11, 270 }, { 10, 11, 403 }, { 10, 11, 469 }, { 10, 11, 529 }, - { 10, 11, 590 }, { 11, 11, 140 }, { 11, 11, 860 }, { 13, 11, 1 }, - { 13, 11, 422 }, { 14, 11, 341 }, { 14, 11, 364 }, { 17, 11, 93 }, - { 18, 11, 113 }, { 19, 11, 97 }, { 19, 11, 113 }, { 5, 11, 695 }, - { 16, 0, 19 }, { 5, 11, 6 }, { 6, 11, 183 }, { 6, 10, 621 }, - { 7, 11, 680 }, { 7, 11, 978 }, { 7, 11, 1013 }, { 7, 11, 1055 }, - { 12, 11, 230 }, { 13, 11, 172 }, { 13, 10, 504 }, { 18, 11, 29 }, - { 8, 0, 156 }, { 5, 0, 1009 }, { 6, 11, 29 }, { 11, 11, 63 }, - { 6, 0, 820 }, { 6, 10, 218 }, { 7, 10, 454 }, { 7, 10, 782 }, - { 8, 10, 768 }, { 12, 10, 686 }, { 5, 0, 228 }, { 6, 0, 203 }, - { 7, 0, 156 }, { 8, 0, 347 }, { 9, 0, 265 }, { 18, 0, 39 }, - { 20, 0, 54 }, { 21, 0, 31 }, { 22, 0, 3 }, { 23, 0, 0 }, - { 15, 11, 8 }, { 18, 11, 39 }, { 20, 11, 54 }, { 21, 11, 31 }, - { 22, 11, 3 }, { 23, 11, 0 }, { 7, 0, 1131 }, { 7, 0, 1468 }, - { 16, 10, 0 }, { 6, 0, 1276 }, { 10, 10, 676 }, { 12, 10, 462 }, - { 4, 11, 311 }, { 6, 11, 1740 }, { 7, 11, 170 }, { 8, 11, 90 }, - { 8, 11, 177 }, { 8, 11, 415 }, { 11, 11, 714 }, { 14, 11, 281 }, - { 6, 10, 164 }, { 6, 0, 1792 }, { 10, 0, 849 }, { 22, 10, 50 }, - { 5, 0, 291 }, { 5, 0, 318 }, { 7, 0, 765 }, { 9, 0, 389 }, - { 12, 0, 548 }, { 8, 11, 522 }, { 14, 11, 328 }, { 11, 11, 91 }, - { 13, 11, 129 }, { 15, 11, 101 }, { 17, 11, 125 }, { 4, 11, 494 }, - { 6, 11, 74 }, { 7, 11, 44 }, { 7, 11, 407 }, { 8, 11, 551 }, - { 12, 11, 17 }, { 15, 11, 5 }, { 20, 11, 11 }, { 4, 11, 276 }, - { 5, 11, 296 }, { 6, 10, 343 }, { 7, 10, 195 }, { 7, 11, 1777 }, - { 9, 10, 226 }, { 10, 10, 197 }, { 10, 10, 575 }, { 11, 10, 502 }, - { 11, 10, 899 }, { 10, 0, 525 }, { 11, 0, 82 }, { 14, 0, 453 }, - { 4, 11, 7 }, { 5, 11, 90 }, { 5, 11, 158 }, { 6, 11, 542 }, - { 7, 11, 221 }, { 7, 11, 1574 }, { 9, 11, 490 }, { 10, 11, 540 }, - { 11, 11, 443 }, { 11, 11, 757 }, { 7, 0, 666 }, { 22, 10, 29 }, - { 22, 11, 29 }, { 4, 0, 422 }, { 19, 10, 8 }, { 5, 0, 355 }, - { 17, 0, 0 }, { 6, 0, 1873 }, { 9, 0, 918 }, { 7, 11, 588 }, - { 9, 11, 175 }, { 10, 11, 530 }, { 15, 11, 31 }, { 11, 0, 165 }, - { 7, 10, 1125 }, { 9, 10, 143 }, { 14, 10, 405 }, { 22, 10, 21 }, - { 9, 0, 260 }, { 9, 0, 905 }, { 5, 11, 872 }, { 6, 11, 57 }, - { 6, 11, 479 }, { 6, 11, 562 }, { 7, 11, 471 }, { 7, 11, 1060 }, - { 9, 11, 447 }, { 9, 11, 454 }, { 13, 11, 6 }, { 10, 11, 704 }, - { 5, 0, 865 }, { 5, 0, 914 }, { 6, 0, 1625 }, { 5, 0, 234 }, - { 7, 0, 1383 }, { 5, 11, 31 }, { 6, 11, 614 }, { 17, 11, 61 }, - { 7, 11, 1200 }, { 10, 11, 460 }, { 6, 11, 424 }, { 7, 11, 1866 }, - { 8, 0, 306 }, { 5, 10, 959 }, { 12, 11, 30 }, { 13, 11, 148 }, - { 14, 11, 87 }, { 14, 11, 182 }, { 16, 11, 42 }, { 18, 11, 92 }, - { 20, 11, 70 }, { 6, 0, 1919 }, { 6, 0, 1921 }, { 9, 0, 923 }, - { 9, 0, 930 }, { 9, 0, 941 }, { 9, 0, 949 }, { 9, 0, 987 }, - { 9, 0, 988 }, { 9, 0, 992 }, { 12, 0, 802 }, { 12, 0, 815 }, - { 12, 0, 856 }, { 12, 0, 885 }, { 12, 0, 893 }, { 12, 0, 898 }, - { 12, 0, 919 }, { 12, 0, 920 }, { 12, 0, 941 }, { 12, 0, 947 }, - { 15, 0, 183 }, { 15, 0, 185 }, { 15, 0, 189 }, { 15, 0, 197 }, - { 15, 0, 202 }, { 15, 0, 233 }, { 18, 0, 218 }, { 18, 0, 219 }, - { 18, 0, 233 }, { 15, 11, 156 }, { 7, 10, 1759 }, { 8, 10, 173 }, - { 13, 0, 163 }, { 13, 0, 180 }, { 18, 0, 78 }, { 20, 0, 35 }, - { 5, 11, 13 }, { 6, 11, 142 }, { 6, 10, 266 }, { 6, 11, 97 }, - { 7, 11, 116 }, { 8, 11, 322 }, { 8, 11, 755 }, { 9, 11, 548 }, - { 10, 11, 714 }, { 11, 11, 884 }, { 13, 11, 324 }, { 7, 0, 1312 }, - { 9, 0, 814 }, { 9, 11, 676 }, { 5, 0, 707 }, { 7, 0, 1493 }, - { 6, 0, 421 }, { 7, 0, 61 }, { 7, 0, 1540 }, { 10, 0, 11 }, - { 10, 0, 501 }, { 12, 0, 733 }, { 12, 0, 766 }, { 7, 11, 866 }, - { 7, 11, 1163 }, { 9, 0, 341 }, { 14, 0, 98 }, { 17, 11, 115 }, - { 7, 11, 1111 }, { 8, 10, 300 }, { 8, 0, 1014 }, { 8, 11, 1 }, - { 9, 11, 112 }, { 10, 11, 326 }, { 4, 11, 730 }, { 5, 11, 488 }, - { 6, 11, 527 }, { 7, 11, 489 }, { 7, 11, 1636 }, { 8, 11, 121 }, - { 8, 11, 144 }, { 8, 11, 359 }, { 9, 11, 193 }, { 9, 11, 241 }, - { 9, 11, 336 }, { 9, 11, 882 }, { 11, 11, 266 }, { 11, 11, 372 }, - { 11, 11, 944 }, { 12, 11, 401 }, { 12, 11, 641 }, { 6, 0, 971 }, - { 6, 0, 1121 }, { 6, 0, 102 }, { 7, 0, 72 }, { 15, 0, 142 }, - { 19, 0, 67 }, { 23, 0, 30 }, { 7, 0, 823 }, { 6, 0, 1045 }, - { 5, 10, 427 }, { 5, 10, 734 }, { 7, 10, 478 }, { 8, 10, 52 }, - { 7, 0, 1930 }, { 11, 10, 217 }, { 14, 10, 165 }, { 6, 0, 1512 }, - { 7, 0, 1870 }, { 9, 11, 31 }, { 10, 11, 244 }, { 10, 11, 699 }, - { 12, 11, 149 }, { 13, 11, 497 }, { 5, 11, 377 }, { 17, 11, 101 }, - { 10, 11, 158 }, { 13, 11, 13 }, { 13, 11, 137 }, { 13, 11, 258 }, - { 14, 11, 111 }, { 14, 11, 225 }, { 14, 11, 253 }, { 14, 11, 304 }, - { 14, 11, 339 }, { 14, 11, 417 }, { 18, 11, 33 }, { 6, 0, 87 }, - { 6, 10, 1734 }, { 7, 10, 20 }, { 7, 10, 1056 }, { 8, 10, 732 }, - { 9, 10, 406 }, { 9, 10, 911 }, { 10, 10, 694 }, { 6, 0, 1243 }, - { 9, 0, 245 }, { 7, 0, 68 }, { 8, 0, 48 }, { 8, 0, 88 }, - { 8, 0, 582 }, { 8, 0, 681 }, { 9, 0, 373 }, { 9, 0, 864 }, - { 11, 0, 157 }, { 11, 0, 336 }, { 11, 0, 843 }, { 20, 0, 27 }, - { 8, 11, 663 }, { 16, 11, 8 }, { 5, 10, 613 }, { 4, 0, 88 }, - { 5, 0, 137 }, { 5, 0, 174 }, { 5, 0, 777 }, { 6, 0, 1664 }, - { 6, 0, 1725 }, { 7, 0, 77 }, { 7, 0, 426 }, { 7, 0, 1317 }, - { 7, 0, 1355 }, { 8, 0, 126 }, { 8, 0, 563 }, { 9, 0, 523 }, - { 9, 0, 750 }, { 10, 0, 310 }, { 10, 0, 836 }, { 11, 0, 42 }, - { 11, 0, 318 }, { 11, 0, 731 }, { 12, 0, 68 }, { 12, 0, 92 }, - { 12, 0, 507 }, { 12, 0, 692 }, { 13, 0, 81 }, { 13, 0, 238 }, - { 13, 0, 374 }, { 14, 0, 436 }, { 18, 0, 138 }, { 19, 0, 78 }, - { 19, 0, 111 }, { 20, 0, 55 }, { 20, 0, 77 }, { 20, 0, 92 }, - { 13, 0, 418 }, { 4, 0, 938 }, { 9, 0, 625 }, { 10, 0, 351 }, - { 5, 11, 843 }, { 7, 10, 32 }, { 7, 10, 984 }, { 8, 10, 85 }, - { 8, 10, 709 }, { 9, 10, 579 }, { 9, 10, 847 }, { 9, 10, 856 }, - { 10, 10, 799 }, { 11, 10, 258 }, { 11, 10, 1007 }, { 12, 10, 331 }, - { 12, 10, 615 }, { 13, 10, 188 }, { 13, 10, 435 }, { 14, 10, 8 }, - { 15, 10, 165 }, { 16, 10, 27 }, { 20, 10, 40 }, { 6, 0, 1668 }, - { 7, 0, 1499 }, { 8, 0, 117 }, { 9, 0, 314 }, { 10, 0, 174 }, - { 7, 0, 707 }, { 4, 11, 554 }, { 5, 11, 536 }, { 5, 0, 403 }, - { 5, 11, 207 }, { 9, 11, 79 }, { 11, 11, 625 }, { 17, 11, 7 }, - { 4, 11, 424 }, { 8, 11, 785 }, { 4, 10, 167 }, { 7, 10, 82 }, - { 9, 0, 7 }, { 23, 0, 6 }, { 9, 11, 7 }, { 23, 11, 6 }, - { 6, 0, 282 }, { 5, 10, 62 }, { 6, 10, 534 }, { 7, 10, 74 }, - { 7, 10, 678 }, { 7, 10, 684 }, { 7, 10, 1043 }, { 7, 10, 1072 }, - { 8, 10, 280 }, { 8, 10, 541 }, { 8, 10, 686 }, { 9, 10, 258 }, - { 10, 10, 519 }, { 11, 10, 252 }, { 12, 10, 282 }, { 10, 10, 33 }, - { 4, 10, 359 }, { 4, 0, 44 }, { 5, 0, 311 }, { 6, 0, 156 }, - { 7, 0, 639 }, { 7, 0, 762 }, { 7, 0, 1827 }, { 9, 0, 8 }, - { 9, 0, 462 }, { 20, 0, 83 }, { 7, 11, 769 }, { 9, 11, 18 }, - { 10, 11, 358 }, { 4, 0, 346 }, { 7, 0, 115 }, { 9, 0, 180 }, - { 9, 0, 456 }, { 10, 0, 363 }, { 4, 11, 896 }, { 6, 11, 1777 }, - { 5, 10, 211 }, { 7, 0, 761 }, { 7, 0, 1051 }, { 9, 0, 545 }, - { 6, 10, 145 }, { 13, 10, 336 }, { 7, 11, 750 }, { 9, 11, 223 }, - { 11, 11, 27 }, { 11, 11, 466 }, { 12, 11, 624 }, { 14, 11, 265 }, - { 18, 11, 61 }, { 6, 0, 752 }, { 6, 0, 768 }, { 6, 0, 1195 }, - { 6, 0, 1254 }, { 6, 0, 1619 }, { 9, 0, 835 }, { 6, 0, 1936 }, - { 8, 0, 930 }, { 8, 0, 960 }, { 4, 10, 263 }, { 4, 11, 249 }, - { 12, 0, 653 }, { 4, 10, 916 }, { 4, 11, 603 }, { 5, 11, 661 }, - { 8, 0, 344 }, { 4, 11, 11 }, { 6, 11, 128 }, { 7, 11, 231 }, - { 7, 11, 1533 }, { 10, 11, 725 }, { 6, 0, 1483 }, { 6, 0, 875 }, - { 6, 0, 185 }, { 7, 0, 1899 }, { 9, 0, 875 }, { 11, 0, 673 }, - { 15, 10, 155 }, { 16, 10, 79 }, { 7, 0, 93 }, { 7, 0, 210 }, - { 7, 0, 1223 }, { 8, 0, 451 }, { 8, 0, 460 }, { 11, 0, 353 }, - { 11, 0, 475 }, { 4, 10, 599 }, { 6, 10, 1634 }, { 7, 10, 67 }, - { 7, 10, 691 }, { 7, 10, 979 }, { 7, 10, 1697 }, { 8, 10, 207 }, - { 8, 10, 214 }, { 8, 10, 231 }, { 8, 10, 294 }, { 8, 10, 336 }, - { 8, 10, 428 }, { 8, 10, 471 }, { 8, 10, 622 }, { 8, 10, 626 }, - { 8, 10, 679 }, { 8, 10, 759 }, { 8, 10, 829 }, { 9, 10, 11 }, - { 9, 10, 246 }, { 9, 10, 484 }, { 9, 10, 573 }, { 9, 10, 706 }, - { 9, 10, 762 }, { 9, 10, 798 }, { 9, 10, 855 }, { 9, 10, 870 }, - { 9, 10, 912 }, { 10, 10, 303 }, { 10, 10, 335 }, { 10, 10, 424 }, - { 10, 10, 461 }, { 10, 10, 543 }, { 10, 10, 759 }, { 10, 10, 814 }, - { 11, 10, 59 }, { 11, 10, 235 }, { 11, 10, 590 }, { 11, 10, 929 }, - { 11, 10, 963 }, { 11, 10, 987 }, { 12, 10, 114 }, { 12, 10, 182 }, - { 12, 10, 226 }, { 12, 10, 332 }, { 12, 10, 439 }, { 12, 10, 575 }, - { 12, 10, 598 }, { 12, 10, 675 }, { 13, 10, 8 }, { 13, 10, 125 }, - { 13, 10, 194 }, { 13, 10, 287 }, { 14, 10, 197 }, { 14, 10, 383 }, - { 15, 10, 53 }, { 17, 10, 63 }, { 19, 10, 46 }, { 19, 10, 98 }, - { 19, 10, 106 }, { 20, 10, 85 }, { 4, 11, 476 }, { 4, 0, 327 }, - { 5, 0, 478 }, { 7, 0, 1332 }, { 8, 0, 753 }, { 5, 0, 1020 }, - { 5, 0, 1022 }, { 7, 11, 1807 }, { 4, 0, 103 }, { 5, 0, 401 }, - { 4, 0, 499 }, { 7, 0, 1421 }, { 10, 0, 207 }, { 13, 0, 164 }, - { 19, 10, 126 }, { 9, 11, 20 }, { 10, 11, 324 }, { 11, 11, 488 }, - { 4, 0, 96 }, { 9, 11, 280 }, { 10, 11, 134 }, { 7, 0, 968 }, - { 5, 10, 187 }, { 7, 10, 1286 }, { 5, 11, 112 }, { 6, 11, 103 }, - { 6, 11, 150 }, { 8, 0, 914 }, { 10, 0, 3 }, { 4, 10, 215 }, - { 9, 10, 38 }, { 11, 10, 23 }, { 11, 10, 127 }, { 11, 10, 796 }, - { 7, 0, 399 }, { 6, 0, 563 }, { 9, 0, 224 }, { 6, 0, 704 }, - { 6, 0, 1214 }, { 4, 11, 708 }, { 8, 11, 15 }, { 9, 11, 50 }, - { 9, 11, 386 }, { 11, 11, 18 }, { 11, 11, 529 }, { 12, 11, 228 }, - { 4, 11, 563 }, { 7, 11, 109 }, { 7, 11, 592 }, { 7, 11, 637 }, - { 7, 11, 770 }, { 7, 11, 1701 }, { 8, 11, 436 }, { 8, 11, 463 }, - { 9, 11, 60 }, { 9, 11, 335 }, { 9, 11, 904 }, { 10, 11, 73 }, - { 11, 11, 434 }, { 12, 11, 585 }, { 13, 11, 331 }, { 18, 11, 110 }, - { 20, 11, 60 }, { 6, 0, 1559 }, { 4, 11, 502 }, { 6, 11, 347 }, - { 10, 11, 161 }, { 4, 11, 33 }, { 5, 11, 102 }, { 5, 11, 500 }, - { 6, 11, 284 }, { 7, 11, 1079 }, { 7, 11, 1423 }, { 7, 11, 1702 }, - { 8, 11, 470 }, { 9, 11, 554 }, { 9, 11, 723 }, { 11, 11, 333 }, - { 7, 11, 246 }, { 7, 11, 840 }, { 6, 11, 10 }, { 8, 11, 571 }, - { 9, 11, 739 }, { 15, 11, 91 }, { 8, 0, 861 }, { 10, 0, 905 }, - { 12, 0, 730 }, { 12, 0, 789 }, { 5, 11, 626 }, { 6, 0, 946 }, - { 5, 0, 746 }, { 12, 0, 333 }, { 14, 0, 332 }, { 12, 11, 333 }, - { 14, 11, 332 }, { 5, 11, 18 }, { 6, 11, 526 }, { 13, 11, 24 }, - { 13, 11, 110 }, { 19, 11, 5 }, { 19, 11, 44 }, { 4, 0, 910 }, - { 5, 0, 832 }, { 7, 10, 2002 }, { 10, 11, 768 }, { 11, 11, 787 }, - { 4, 11, 309 }, { 5, 11, 462 }, { 7, 11, 970 }, { 7, 11, 1097 }, - { 4, 10, 28 }, { 5, 10, 440 }, { 7, 10, 248 }, { 11, 10, 833 }, - { 12, 10, 344 }, { 6, 10, 1654 }, { 6, 0, 632 }, { 6, 0, 652 }, - { 6, 0, 1272 }, { 6, 0, 1384 }, { 6, 0, 1560 }, { 6, 11, 1704 }, - { 6, 0, 1393 }, { 5, 10, 853 }, { 6, 10, 249 }, { 7, 10, 1234 }, - { 11, 10, 573 }, { 5, 11, 86 }, { 7, 11, 743 }, { 9, 11, 85 }, - { 10, 11, 281 }, { 10, 11, 432 }, { 11, 11, 490 }, { 12, 11, 251 }, - { 13, 11, 118 }, { 14, 11, 378 }, { 18, 11, 143 }, { 5, 11, 524 }, - { 5, 11, 744 }, { 6, 0, 1514 }, { 10, 0, 201 }, { 14, 0, 319 }, - { 7, 0, 717 }, { 10, 0, 510 }, { 7, 10, 392 }, { 8, 10, 20 }, - { 8, 10, 172 }, { 8, 10, 690 }, { 9, 10, 383 }, { 9, 10, 845 }, - { 11, 10, 293 }, { 11, 10, 832 }, { 11, 10, 920 }, { 11, 10, 984 }, - { 13, 10, 221 }, { 6, 0, 1381 }, { 5, 10, 858 }, { 5, 10, 992 }, - { 8, 0, 528 }, { 9, 0, 348 }, { 10, 11, 107 }, { 12, 11, 436 }, - { 4, 0, 20 }, { 5, 0, 616 }, { 6, 0, 1251 }, { 4, 11, 927 }, - { 10, 11, 123 }, { 12, 11, 670 }, { 13, 11, 371 }, { 14, 11, 142 }, - { 18, 11, 94 }, { 6, 0, 1163 }, { 7, 11, 1149 }, { 9, 11, 156 }, - { 6, 0, 307 }, { 5, 11, 778 }, { 7, 0, 1091 }, { 7, 0, 1765 }, - { 5, 11, 502 }, { 6, 10, 268 }, { 9, 10, 62 }, { 8, 11, 196 }, - { 10, 11, 283 }, { 11, 11, 406 }, { 4, 0, 26 }, { 5, 0, 429 }, - { 6, 0, 245 }, { 7, 0, 704 }, { 7, 0, 1379 }, { 7, 0, 1474 }, - { 5, 11, 855 }, { 4, 0, 881 }, { 4, 0, 621 }, { 7, 11, 1596 }, - { 7, 11, 1400 }, { 9, 11, 446 }, { 10, 11, 45 }, { 6, 0, 736 }, - { 10, 10, 106 }, { 5, 0, 542 }, { 6, 0, 348 }, { 5, 0, 868 }, - { 8, 0, 433 }, { 7, 0, 1495 }, { 10, 0, 771 }, { 6, 10, 613 }, - { 8, 10, 223 }, { 10, 0, 215 }, { 13, 0, 124 }, { 8, 11, 391 }, - { 7, 11, 172 }, { 4, 10, 670 }, { 12, 0, 55 }, { 9, 10, 40 }, - { 11, 10, 136 }, { 7, 0, 62 }, { 19, 0, 112 }, { 4, 0, 856 }, - { 4, 11, 568 }, { 12, 0, 270 }, { 11, 10, 259 }, { 8, 0, 572 }, - { 9, 0, 698 }, { 4, 11, 732 }, { 9, 10, 310 }, { 9, 10, 682 }, - { 14, 10, 296 }, { 6, 0, 939 }, { 8, 11, 733 }, { 7, 11, 1435 }, - { 7, 10, 1401 }, { 7, 10, 1476 }, { 6, 0, 352 }, { 4, 10, 296 }, - { 7, 10, 401 }, { 7, 10, 1410 }, { 7, 10, 1594 }, { 7, 10, 1674 }, - { 8, 10, 63 }, { 8, 10, 660 }, { 9, 10, 74 }, { 4, 11, 428 }, - { 5, 11, 668 }, { 4, 10, 139 }, { 4, 10, 388 }, { 12, 10, 188 }, - { 7, 11, 2015 }, { 12, 11, 665 }, { 4, 0, 647 }, { 18, 0, 10 }, - { 10, 0, 220 }, { 14, 0, 464 }, { 4, 0, 109 }, { 6, 0, 1746 }, - { 6, 0, 515 }, { 4, 10, 747 }, { 6, 11, 1623 }, { 6, 11, 1681 }, - { 7, 10, 649 }, { 7, 10, 1479 }, { 7, 10, 1583 }, { 5, 10, 232 }, - { 7, 0, 566 }, { 9, 10, 887 }, { 4, 0, 40 }, { 10, 0, 67 }, - { 11, 0, 117 }, { 11, 0, 768 }, { 11, 0, 935 }, { 4, 0, 801 }, - { 7, 0, 992 }, { 8, 0, 301 }, { 9, 0, 722 }, { 12, 0, 63 }, - { 13, 0, 29 }, { 14, 0, 161 }, { 15, 0, 18 }, { 11, 0, 923 }, - { 6, 11, 1748 }, { 8, 11, 715 }, { 9, 11, 802 }, { 10, 11, 46 }, - { 10, 11, 819 }, { 13, 11, 308 }, { 14, 11, 351 }, { 14, 11, 363 }, - { 18, 11, 67 }, { 9, 11, 745 }, { 7, 0, 1145 }, { 4, 10, 14 }, - { 7, 10, 1801 }, { 10, 10, 748 }, { 13, 10, 458 }, { 4, 11, 63 }, - { 5, 11, 347 }, { 6, 11, 474 }, { 7, 0, 568 }, { 4, 10, 425 }, - { 7, 11, 577 }, { 7, 11, 1432 }, { 9, 11, 475 }, { 9, 11, 505 }, - { 9, 11, 526 }, { 9, 11, 609 }, { 9, 11, 689 }, { 9, 11, 726 }, - { 9, 11, 735 }, { 9, 11, 738 }, { 10, 11, 556 }, { 10, 11, 674 }, - { 10, 11, 684 }, { 11, 11, 89 }, { 11, 11, 202 }, { 11, 11, 272 }, - { 11, 11, 380 }, { 11, 11, 415 }, { 11, 11, 505 }, { 11, 11, 537 }, - { 11, 11, 550 }, { 11, 11, 562 }, { 11, 11, 640 }, { 11, 11, 667 }, - { 11, 11, 688 }, { 11, 11, 847 }, { 11, 11, 927 }, { 11, 11, 930 }, - { 11, 11, 940 }, { 12, 11, 144 }, { 12, 11, 325 }, { 12, 11, 329 }, - { 12, 11, 389 }, { 12, 11, 403 }, { 12, 11, 451 }, { 12, 11, 515 }, - { 12, 11, 604 }, { 12, 11, 616 }, { 12, 11, 626 }, { 13, 11, 66 }, - { 13, 11, 131 }, { 13, 11, 167 }, { 13, 11, 236 }, { 13, 11, 368 }, - { 13, 11, 411 }, { 13, 11, 434 }, { 13, 11, 453 }, { 13, 11, 461 }, - { 13, 11, 474 }, { 14, 11, 59 }, { 14, 11, 60 }, { 14, 11, 139 }, - { 14, 11, 152 }, { 14, 11, 276 }, { 14, 11, 353 }, { 14, 11, 402 }, - { 15, 11, 28 }, { 15, 11, 81 }, { 15, 11, 123 }, { 15, 11, 152 }, - { 18, 11, 136 }, { 20, 11, 88 }, { 9, 0, 247 }, { 7, 11, 1622 }, - { 9, 11, 544 }, { 11, 11, 413 }, { 16, 11, 25 }, { 4, 0, 645 }, - { 7, 0, 825 }, { 6, 10, 1768 }, { 7, 11, 89 }, { 12, 0, 328 }, - { 5, 10, 943 }, { 6, 10, 1779 }, { 6, 0, 1363 }, { 5, 10, 245 }, - { 6, 10, 576 }, { 7, 10, 582 }, { 8, 10, 225 }, { 6, 0, 1280 }, - { 5, 11, 824 }, { 5, 11, 941 }, { 7, 11, 440 }, { 8, 11, 230 }, - { 11, 11, 106 }, { 5, 0, 28 }, { 6, 0, 204 }, { 10, 0, 320 }, - { 10, 0, 583 }, { 13, 0, 502 }, { 14, 0, 72 }, { 14, 0, 274 }, - { 14, 0, 312 }, { 14, 0, 344 }, { 15, 0, 159 }, { 16, 0, 62 }, - { 16, 0, 69 }, { 17, 0, 30 }, { 18, 0, 42 }, { 18, 0, 53 }, - { 18, 0, 84 }, { 18, 0, 140 }, { 19, 0, 68 }, { 19, 0, 85 }, - { 20, 0, 5 }, { 20, 0, 45 }, { 20, 0, 101 }, { 22, 0, 7 }, - { 22, 0, 20 }, { 4, 0, 558 }, { 6, 0, 390 }, { 7, 0, 162 }, - { 7, 0, 689 }, { 9, 0, 360 }, { 10, 0, 653 }, { 6, 0, 764 }, - { 6, 0, 862 }, { 9, 0, 833 }, { 5, 0, 856 }, { 6, 0, 1672 }, - { 6, 0, 1757 }, { 6, 0, 1781 }, { 5, 0, 92 }, { 10, 0, 736 }, - { 12, 0, 102 }, { 6, 0, 1927 }, { 6, 0, 1944 }, { 8, 0, 924 }, - { 8, 0, 948 }, { 10, 0, 967 }, { 10, 0, 978 }, { 6, 0, 1479 }, - { 5, 0, 590 }, { 8, 0, 360 }, { 9, 0, 213 }, { 10, 0, 63 }, - { 6, 0, 1521 }, { 6, 0, 709 }, { 6, 0, 891 }, { 4, 10, 443 }, - { 13, 0, 477 }, { 14, 0, 120 }, { 20, 0, 61 }, { 4, 11, 914 }, - { 5, 11, 800 }, { 5, 11, 852 }, { 10, 11, 54 }, { 13, 11, 115 }, - { 4, 11, 918 }, { 5, 11, 876 }, { 11, 11, 152 }, { 4, 11, 92 }, - { 5, 11, 274 }, { 7, 11, 1901 }, { 9, 11, 800 }, { 10, 11, 693 }, - { 11, 11, 482 }, { 11, 11, 734 }, { 11, 11, 789 }, { 9, 0, 483 }, - { 4, 10, 298 }, { 6, 0, 1213 }, { 13, 11, 498 }, { 7, 11, 1451 }, - { 5, 11, 743 }, { 4, 0, 1022 }, { 10, 0, 1000 }, { 12, 0, 957 }, - { 12, 0, 980 }, { 12, 0, 1013 }, { 14, 0, 481 }, { 16, 0, 116 }, - { 8, 0, 503 }, { 17, 0, 29 }, { 4, 11, 49 }, { 7, 11, 280 }, - { 7, 11, 1633 }, { 7, 0, 1712 }, { 6, 0, 466 }, { 8, 11, 47 }, - { 5, 10, 164 }, { 7, 10, 121 }, { 14, 10, 189 }, { 7, 10, 812 }, - { 7, 10, 1261 }, { 7, 10, 1360 }, { 9, 10, 632 }, { 12, 10, 352 }, - { 11, 10, 556 }, { 4, 0, 731 }, { 5, 11, 272 }, { 5, 11, 908 }, - { 5, 11, 942 }, { 7, 11, 1008 }, { 7, 11, 1560 }, { 8, 11, 197 }, - { 9, 11, 47 }, { 11, 11, 538 }, { 11, 11, 742 }, { 4, 10, 172 }, - { 9, 10, 611 }, { 10, 10, 436 }, { 12, 10, 673 }, { 13, 10, 255 }, - { 5, 10, 844 }, { 10, 0, 484 }, { 11, 0, 754 }, { 12, 0, 457 }, - { 14, 0, 171 }, { 14, 0, 389 }, { 18, 0, 153 }, { 9, 10, 263 }, - { 10, 10, 147 }, { 10, 10, 492 }, { 9, 11, 891 }, { 10, 0, 241 }, - { 5, 10, 537 }, { 6, 0, 2005 }, { 8, 0, 964 }, { 9, 10, 842 }, - { 23, 11, 8 }, { 4, 11, 407 }, { 4, 11, 560 }, { 7, 11, 1884 }, - { 6, 0, 1100 }, { 6, 0, 1242 }, { 7, 0, 954 }, { 5, 10, 230 }, - { 5, 10, 392 }, { 6, 10, 420 }, { 9, 10, 568 }, { 12, 10, 612 }, - { 4, 11, 475 }, { 11, 11, 35 }, { 11, 11, 90 }, { 13, 11, 7 }, - { 13, 11, 71 }, { 13, 11, 177 }, { 14, 11, 422 }, { 8, 11, 332 }, - { 7, 0, 1958 }, { 6, 0, 549 }, { 8, 0, 34 }, { 8, 0, 283 }, - { 9, 0, 165 }, { 10, 0, 475 }, { 10, 0, 952 }, { 12, 0, 966 }, - { 12, 0, 994 }, { 5, 0, 652 }, { 5, 0, 701 }, { 7, 0, 449 }, - { 4, 0, 655 }, { 7, 0, 850 }, { 17, 0, 75 }, { 18, 0, 137 }, - { 4, 0, 146 }, { 7, 0, 1618 }, { 8, 0, 670 }, { 5, 10, 41 }, - { 7, 10, 1459 }, { 7, 10, 1469 }, { 7, 10, 1859 }, { 9, 10, 549 }, - { 11, 10, 905 }, { 5, 10, 696 }, { 6, 0, 159 }, { 6, 0, 364 }, - { 7, 0, 516 }, { 9, 0, 518 }, { 7, 0, 1439 }, { 6, 11, 222 }, - { 7, 11, 636 }, { 7, 11, 1620 }, { 8, 11, 409 }, { 9, 11, 693 }, - { 11, 11, 77 }, { 13, 0, 151 }, { 13, 11, 45 }, { 6, 0, 1027 }, - { 4, 11, 336 }, { 4, 10, 771 }, { 11, 11, 392 }, { 10, 11, 121 }, - { 11, 11, 175 }, { 21, 11, 16 }, { 8, 0, 950 }, { 10, 0, 983 }, - { 5, 10, 921 }, { 7, 0, 993 }, { 6, 10, 180 }, { 7, 10, 1137 }, - { 8, 10, 751 }, { 11, 10, 805 }, { 7, 0, 501 }, { 9, 0, 111 }, - { 10, 0, 141 }, { 11, 0, 332 }, { 13, 0, 43 }, { 13, 0, 429 }, - { 14, 0, 130 }, { 14, 0, 415 }, { 17, 0, 102 }, { 4, 10, 183 }, - { 5, 11, 882 }, { 7, 10, 271 }, { 11, 10, 824 }, { 11, 10, 952 }, - { 13, 10, 278 }, { 13, 10, 339 }, { 13, 10, 482 }, { 14, 10, 424 }, - { 20, 10, 99 }, { 4, 10, 19 }, { 5, 10, 477 }, { 5, 10, 596 }, - { 6, 10, 505 }, { 7, 10, 1221 }, { 11, 10, 907 }, { 12, 10, 209 }, - { 13, 10, 214 }, { 7, 10, 1215 }, { 5, 0, 452 }, { 4, 11, 426 }, - { 5, 0, 149 }, { 8, 0, 233 }, { 5, 0, 935 }, { 6, 11, 58 }, - { 7, 11, 654 }, { 7, 11, 745 }, { 7, 11, 1969 }, { 8, 11, 240 }, - { 8, 11, 675 }, { 9, 11, 479 }, { 9, 11, 731 }, { 10, 11, 330 }, - { 10, 11, 593 }, { 10, 11, 817 }, { 11, 11, 32 }, { 11, 11, 133 }, - { 11, 11, 221 }, { 17, 11, 68 }, { 12, 0, 582 }, { 18, 0, 131 }, - { 7, 11, 102 }, { 9, 11, 538 }, { 8, 0, 801 }, { 6, 10, 1645 }, - { 4, 0, 70 }, { 6, 10, 92 }, { 6, 10, 188 }, { 7, 10, 1269 }, - { 7, 10, 1524 }, { 7, 10, 1876 }, { 10, 10, 228 }, { 11, 10, 1020 }, - { 4, 10, 459 }, { 5, 10, 966 }, { 10, 0, 369 }, { 16, 0, 36 }, - { 12, 10, 330 }, { 13, 11, 366 }, { 7, 0, 721 }, { 10, 0, 236 }, - { 12, 0, 204 }, { 6, 10, 18 }, { 7, 10, 932 }, { 8, 10, 757 }, - { 9, 10, 54 }, { 9, 10, 65 }, { 9, 10, 844 }, { 10, 10, 113 }, - { 10, 10, 315 }, { 10, 10, 798 }, { 11, 10, 153 }, { 12, 10, 151 }, - { 12, 10, 392 }, { 12, 10, 666 }, { 14, 10, 248 }, { 7, 0, 241 }, - { 10, 0, 430 }, { 8, 10, 548 }, { 9, 10, 532 }, { 10, 10, 117 }, - { 11, 10, 351 }, { 11, 10, 375 }, { 15, 10, 23 }, { 6, 10, 1742 }, - { 5, 10, 965 }, { 5, 11, 566 }, { 6, 11, 48 }, { 7, 11, 63 }, - { 6, 10, 182 }, { 10, 10, 65 }, { 10, 10, 488 }, { 10, 10, 497 }, - { 6, 11, 114 }, { 7, 11, 1224 }, { 7, 11, 1556 }, { 8, 11, 3 }, - { 6, 0, 1817 }, { 8, 11, 576 }, { 9, 11, 267 }, { 6, 0, 1078 }, - { 16, 0, 16 }, { 9, 10, 588 }, { 10, 10, 260 }, { 10, 0, 1021 }, - { 5, 0, 406 }, { 6, 0, 2022 }, { 5, 11, 933 }, { 6, 0, 69 }, - { 7, 0, 117 }, { 7, 0, 1830 }, { 8, 11, 427 }, { 4, 0, 432 }, - { 7, 0, 824 }, { 6, 10, 1786 }, { 5, 0, 826 }, { 11, 11, 67 }, - { 5, 11, 759 }, { 7, 10, 308 }, { 9, 0, 816 }, { 5, 0, 1000 }, - { 4, 0, 297 }, { 6, 0, 529 }, { 7, 0, 152 }, { 7, 0, 713 }, - { 7, 0, 1845 }, { 8, 0, 710 }, { 8, 0, 717 }, { 12, 0, 639 }, - { 12, 0, 685 }, { 7, 0, 423 }, { 8, 10, 588 }, { 8, 10, 287 }, - { 8, 0, 510 }, { 6, 0, 1048 }, { 6, 0, 618 }, { 7, 11, 56 }, - { 7, 11, 1989 }, { 8, 11, 337 }, { 8, 11, 738 }, { 9, 11, 600 }, - { 10, 11, 483 }, { 12, 11, 37 }, { 13, 11, 447 }, { 14, 11, 92 }, - { 4, 0, 520 }, { 7, 0, 575 }, { 8, 0, 990 }, { 10, 0, 977 }, - { 7, 11, 774 }, { 9, 11, 347 }, { 11, 11, 24 }, { 12, 11, 170 }, - { 8, 11, 379 }, { 12, 10, 290 }, { 4, 11, 328 }, { 4, 0, 321 }, - { 6, 0, 569 }, { 4, 11, 101 }, { 7, 11, 1171 }, { 7, 0, 723 }, - { 7, 0, 1135 }, { 5, 11, 833 }, { 8, 11, 744 }, { 7, 10, 719 }, - { 8, 10, 809 }, { 8, 10, 834 }, { 8, 0, 921 }, { 8, 10, 796 }, - { 5, 10, 210 }, { 6, 10, 213 }, { 7, 10, 60 }, { 10, 10, 364 }, - { 11, 10, 135 }, { 5, 0, 397 }, { 6, 0, 154 }, { 7, 0, 676 }, - { 8, 0, 443 }, { 8, 0, 609 }, { 9, 0, 24 }, { 9, 0, 325 }, - { 10, 0, 35 }, { 11, 0, 535 }, { 11, 0, 672 }, { 11, 0, 1018 }, - { 12, 0, 637 }, { 16, 0, 30 }, { 5, 10, 607 }, { 8, 10, 326 }, - { 8, 10, 490 }, { 4, 10, 701 }, { 5, 10, 472 }, { 6, 11, 9 }, - { 6, 11, 397 }, { 7, 11, 53 }, { 7, 11, 1742 }, { 9, 10, 758 }, - { 10, 11, 632 }, { 11, 11, 828 }, { 12, 11, 146 }, { 7, 10, 380 }, - { 7, 10, 1947 }, { 20, 11, 109 }, { 10, 10, 278 }, { 10, 11, 278 }, - { 6, 0, 856 }, { 7, 0, 139 }, { 4, 10, 386 }, { 8, 10, 405 }, - { 8, 10, 728 }, { 9, 10, 497 }, { 11, 10, 110 }, { 11, 10, 360 }, - { 15, 10, 37 }, { 16, 10, 84 }, { 13, 0, 282 }, { 5, 0, 981 }, - { 5, 0, 288 }, { 7, 10, 1452 }, { 7, 10, 1480 }, { 8, 10, 634 }, - { 12, 10, 472 }, { 7, 0, 1890 }, { 8, 11, 367 }, { 10, 11, 760 }, - { 14, 11, 79 }, { 20, 11, 17 }, { 24, 11, 0 }, { 4, 10, 524 }, - { 8, 10, 810 }, { 4, 0, 56 }, { 7, 0, 1791 }, { 8, 0, 607 }, - { 8, 0, 651 }, { 11, 0, 465 }, { 11, 0, 835 }, { 12, 0, 337 }, - { 13, 0, 480 }, { 10, 10, 238 }, { 13, 10, 33 }, { 11, 11, 417 }, - { 12, 11, 223 }, { 12, 11, 265 }, { 9, 0, 158 }, { 10, 0, 411 }, - { 12, 0, 261 }, { 5, 10, 532 }, { 5, 10, 997 }, { 12, 11, 186 }, - { 12, 11, 292 }, { 14, 11, 100 }, { 18, 11, 70 }, { 6, 0, 1403 }, - { 8, 0, 617 }, { 6, 0, 1205 }, { 11, 0, 563 }, { 4, 0, 242 }, - { 6, 0, 333 }, { 4, 11, 186 }, { 5, 11, 157 }, { 8, 11, 168 }, - { 10, 11, 6 }, { 4, 0, 369 }, { 5, 11, 875 }, { 5, 10, 782 }, - { 5, 10, 829 }, { 6, 10, 1738 }, { 6, 0, 622 }, { 7, 11, 1272 }, - { 6, 0, 1407 }, { 7, 11, 111 }, { 8, 11, 581 }, { 7, 10, 1823 }, - { 11, 10, 693 }, { 7, 0, 160 }, { 10, 0, 624 }, { 14, 0, 279 }, - { 4, 0, 363 }, { 10, 11, 589 }, { 12, 11, 111 }, { 13, 11, 260 }, - { 14, 11, 82 }, { 18, 11, 63 }, { 19, 11, 45 }, { 7, 11, 1364 }, - { 7, 11, 1907 }, { 13, 11, 158 }, { 4, 11, 404 }, { 4, 11, 659 }, - { 7, 11, 675 }, { 13, 11, 211 }, { 14, 11, 133 }, { 14, 11, 204 }, - { 15, 11, 64 }, { 15, 11, 69 }, { 15, 11, 114 }, { 16, 11, 10 }, - { 19, 11, 23 }, { 19, 11, 35 }, { 19, 11, 39 }, { 19, 11, 51 }, - { 19, 11, 71 }, { 19, 11, 75 }, { 24, 11, 15 }, { 4, 10, 78 }, - { 5, 10, 96 }, { 5, 10, 182 }, { 7, 10, 1724 }, { 7, 10, 1825 }, - { 10, 10, 394 }, { 10, 10, 471 }, { 11, 10, 532 }, { 14, 10, 340 }, - { 17, 10, 88 }, { 7, 10, 1964 }, { 5, 11, 391 }, { 11, 11, 887 }, - { 14, 11, 365 }, { 14, 11, 375 }, { 5, 11, 540 }, { 6, 11, 1697 }, - { 7, 11, 222 }, { 8, 11, 341 }, { 6, 11, 78 }, { 9, 0, 601 }, - { 9, 0, 619 }, { 10, 0, 505 }, { 10, 0, 732 }, { 11, 0, 355 }, - { 12, 0, 139 }, { 6, 0, 292 }, { 11, 0, 174 }, { 5, 0, 177 }, - { 6, 0, 616 }, { 7, 0, 827 }, { 9, 0, 525 }, { 10, 0, 656 }, - { 10, 0, 31 }, { 6, 10, 215 }, { 7, 10, 1028 }, { 7, 10, 1473 }, - { 7, 10, 1721 }, { 9, 10, 424 }, { 10, 10, 779 }, { 7, 10, 584 }, - { 8, 11, 293 }, { 6, 0, 685 }, { 7, 11, 1868 }, { 5, 11, 460 }, - { 7, 0, 647 }, { 6, 10, 67 }, { 7, 10, 1630 }, { 9, 10, 354 }, - { 9, 10, 675 }, { 10, 10, 830 }, { 14, 10, 80 }, { 17, 10, 80 }, - { 4, 0, 161 }, { 5, 0, 631 }, { 6, 10, 141 }, { 7, 10, 225 }, - { 9, 10, 59 }, { 9, 10, 607 }, { 10, 10, 312 }, { 11, 10, 687 }, - { 12, 10, 555 }, { 13, 10, 373 }, { 13, 10, 494 }, { 20, 10, 58 }, - { 7, 11, 965 }, { 7, 11, 1460 }, { 7, 11, 1604 }, { 8, 10, 783 }, - { 6, 11, 388 }, { 6, 0, 722 }, { 6, 0, 1267 }, { 4, 11, 511 }, - { 9, 11, 333 }, { 9, 11, 379 }, { 10, 11, 602 }, { 11, 11, 441 }, - { 11, 11, 723 }, { 11, 11, 976 }, { 12, 11, 357 }, { 6, 0, 1797 }, - { 7, 0, 1684 }, { 9, 0, 469 }, { 9, 0, 709 }, { 12, 0, 512 }, - { 14, 0, 65 }, { 17, 0, 12 }, { 5, 11, 938 }, { 8, 11, 707 }, - { 7, 0, 1230 }, { 8, 0, 531 }, { 10, 0, 229 }, { 11, 0, 73 }, - { 11, 0, 376 }, { 11, 0, 433 }, { 12, 0, 268 }, { 12, 0, 640 }, - { 14, 0, 119 }, { 7, 10, 430 }, { 11, 10, 46 }, { 6, 0, 558 }, - { 7, 0, 651 }, { 8, 0, 421 }, { 9, 0, 0 }, { 10, 0, 34 }, - { 11, 0, 1008 }, { 6, 0, 106 }, { 7, 0, 1786 }, { 7, 0, 1821 }, - { 9, 0, 102 }, { 9, 0, 763 }, { 5, 10, 602 }, { 7, 10, 2018 }, - { 9, 10, 418 }, { 5, 0, 65 }, { 6, 0, 416 }, { 7, 0, 1720 }, - { 7, 0, 1924 }, { 10, 0, 109 }, { 11, 0, 14 }, { 11, 0, 70 }, - { 11, 0, 569 }, { 11, 0, 735 }, { 15, 0, 153 }, { 20, 0, 80 }, - { 8, 10, 677 }, { 7, 11, 1625 }, { 9, 11, 772 }, { 8, 0, 595 }, - { 6, 11, 469 }, { 7, 11, 1709 }, { 10, 11, 515 }, { 7, 0, 1832 }, - { 10, 0, 374 }, { 9, 0, 106 }, { 9, 0, 163 }, { 9, 0, 296 }, - { 10, 0, 167 }, { 10, 0, 172 }, { 10, 0, 777 }, { 11, 0, 16 }, - { 6, 0, 6 }, { 7, 0, 81 }, { 7, 0, 771 }, { 7, 0, 1731 }, - { 9, 0, 405 }, { 10, 0, 421 }, { 4, 11, 500 }, { 7, 11, 938 }, - { 5, 11, 68 }, { 6, 11, 383 }, { 5, 0, 881 }, { 5, 0, 885 }, - { 6, 0, 854 }, { 6, 0, 1132 }, { 6, 0, 1495 }, { 6, 0, 1526 }, - { 6, 0, 1533 }, { 6, 0, 1577 }, { 4, 11, 337 }, { 6, 11, 353 }, - { 7, 11, 1934 }, { 8, 11, 488 }, { 9, 11, 429 }, { 7, 11, 236 }, - { 7, 11, 1795 }, { 8, 11, 259 }, { 9, 11, 135 }, { 9, 11, 177 }, - { 10, 11, 825 }, { 11, 11, 115 }, { 11, 11, 370 }, { 11, 11, 405 }, - { 11, 11, 604 }, { 12, 11, 10 }, { 12, 11, 667 }, { 12, 11, 669 }, - { 13, 11, 76 }, { 14, 11, 310 }, { 15, 11, 76 }, { 15, 11, 147 }, - { 20, 11, 23 }, { 5, 0, 142 }, { 6, 0, 546 }, { 4, 11, 15 }, - { 5, 11, 22 }, { 6, 11, 244 }, { 7, 11, 40 }, { 7, 11, 200 }, - { 7, 11, 906 }, { 7, 11, 1199 }, { 9, 11, 616 }, { 10, 11, 716 }, - { 11, 11, 635 }, { 11, 11, 801 }, { 12, 11, 458 }, { 5, 0, 466 }, - { 11, 0, 571 }, { 12, 0, 198 }, { 13, 0, 283 }, { 14, 0, 186 }, - { 15, 0, 21 }, { 15, 0, 103 }, { 7, 10, 329 }, { 4, 0, 185 }, - { 5, 0, 257 }, { 5, 0, 839 }, { 5, 0, 936 }, { 9, 0, 399 }, - { 10, 0, 258 }, { 10, 0, 395 }, { 10, 0, 734 }, { 11, 0, 1014 }, - { 12, 0, 23 }, { 13, 0, 350 }, { 14, 0, 150 }, { 19, 0, 6 }, - { 7, 11, 1735 }, { 12, 11, 36 }, { 13, 11, 337 }, { 5, 11, 598 }, - { 7, 11, 791 }, { 8, 11, 108 }, { 9, 11, 123 }, { 4, 10, 469 }, - { 7, 0, 404 }, { 7, 0, 1377 }, { 7, 0, 1430 }, { 7, 0, 2017 }, - { 8, 0, 149 }, { 8, 0, 239 }, { 8, 0, 512 }, { 8, 0, 793 }, - { 8, 0, 818 }, { 9, 0, 474 }, { 9, 0, 595 }, { 10, 0, 122 }, - { 10, 0, 565 }, { 10, 0, 649 }, { 10, 0, 783 }, { 11, 0, 239 }, - { 11, 0, 295 }, { 11, 0, 447 }, { 11, 0, 528 }, { 11, 0, 639 }, - { 11, 0, 800 }, { 12, 0, 25 }, { 12, 0, 77 }, { 12, 0, 157 }, - { 12, 0, 256 }, { 12, 0, 316 }, { 12, 0, 390 }, { 12, 0, 391 }, - { 12, 0, 395 }, { 12, 0, 478 }, { 12, 0, 503 }, { 12, 0, 592 }, - { 12, 0, 680 }, { 13, 0, 50 }, { 13, 0, 53 }, { 13, 0, 132 }, - { 13, 0, 198 }, { 13, 0, 322 }, { 13, 0, 415 }, { 13, 0, 511 }, - { 14, 0, 71 }, { 14, 0, 395 }, { 15, 0, 71 }, { 15, 0, 136 }, - { 17, 0, 123 }, { 18, 0, 93 }, { 19, 0, 58 }, { 8, 0, 712 }, - { 6, 10, 1743 }, { 5, 10, 929 }, { 6, 10, 340 }, { 8, 10, 376 }, - { 8, 10, 807 }, { 6, 0, 1848 }, { 8, 0, 860 }, { 10, 0, 856 }, - { 10, 0, 859 }, { 10, 0, 925 }, { 10, 0, 941 }, { 12, 0, 762 }, - { 6, 0, 629 }, { 6, 0, 906 }, { 9, 0, 810 }, { 12, 0, 652 }, - { 5, 10, 218 }, { 7, 10, 1610 }, { 10, 10, 83 }, { 7, 10, 1512 }, - { 7, 10, 1794 }, { 4, 0, 377 }, { 24, 0, 13 }, { 4, 11, 155 }, - { 7, 11, 1689 }, { 11, 10, 0 }, { 16, 10, 78 }, { 4, 11, 164 }, - { 5, 11, 151 }, { 5, 11, 730 }, { 5, 11, 741 }, { 7, 11, 498 }, - { 7, 11, 870 }, { 7, 11, 1542 }, { 12, 11, 213 }, { 14, 11, 36 }, - { 14, 11, 391 }, { 17, 11, 111 }, { 18, 11, 6 }, { 18, 11, 46 }, - { 18, 11, 151 }, { 19, 11, 36 }, { 20, 11, 32 }, { 20, 11, 56 }, - { 20, 11, 69 }, { 20, 11, 102 }, { 21, 11, 4 }, { 22, 11, 8 }, - { 22, 11, 10 }, { 22, 11, 14 }, { 22, 11, 31 }, { 7, 0, 1842 }, - { 5, 10, 571 }, { 4, 10, 455 }, { 4, 11, 624 }, { 7, 11, 1752 }, - { 6, 0, 1501 }, { 4, 11, 492 }, { 5, 11, 451 }, { 6, 10, 161 }, - { 7, 10, 372 }, { 9, 10, 597 }, { 4, 10, 349 }, { 4, 0, 180 }, - { 7, 0, 1906 }, { 7, 11, 835 }, { 13, 11, 70 }, { 4, 0, 491 }, - { 9, 10, 751 }, { 6, 10, 432 }, { 11, 10, 322 }, { 4, 0, 171 }, - { 10, 0, 234 }, { 6, 11, 113 }, { 7, 11, 436 }, { 4, 0, 586 }, - { 7, 0, 1186 }, { 10, 0, 631 }, { 5, 10, 468 }, { 10, 10, 325 }, - { 11, 10, 856 }, { 12, 10, 345 }, { 15, 10, 104 }, { 5, 10, 223 }, - { 10, 11, 592 }, { 10, 11, 753 }, { 12, 11, 317 }, { 12, 11, 355 }, - { 12, 11, 465 }, { 12, 11, 469 }, { 12, 11, 560 }, { 12, 11, 578 }, - { 13, 11, 243 }, { 4, 10, 566 }, { 7, 11, 520 }, { 4, 10, 59 }, - { 7, 10, 1394 }, { 6, 10, 436 }, { 11, 10, 481 }, { 9, 0, 931 }, - { 10, 0, 334 }, { 20, 0, 71 }, { 4, 10, 48 }, { 5, 10, 271 }, - { 7, 10, 953 }, { 7, 11, 1878 }, { 11, 0, 170 }, { 5, 10, 610 }, - { 8, 10, 457 }, { 5, 10, 755 }, { 6, 0, 1587 }, { 7, 10, 1217 }, - { 4, 10, 197 }, { 21, 11, 26 }, { 5, 11, 585 }, { 9, 11, 521 }, - { 5, 0, 765 }, { 5, 10, 217 }, { 11, 11, 586 }, { 5, 0, 424 }, - { 9, 11, 752 }, { 12, 11, 610 }, { 13, 11, 431 }, { 16, 11, 59 }, - { 18, 11, 109 }, { 8, 0, 714 }, { 7, 0, 685 }, { 4, 11, 307 }, - { 9, 0, 420 }, { 10, 0, 269 }, { 10, 0, 285 }, { 10, 0, 576 }, - { 11, 0, 397 }, { 13, 0, 175 }, { 17, 0, 90 }, { 4, 0, 429 }, - { 5, 11, 964 }, { 9, 11, 463 }, { 10, 11, 595 }, { 7, 0, 18 }, - { 7, 0, 699 }, { 7, 0, 1966 }, { 8, 0, 752 }, { 9, 0, 273 }, - { 9, 0, 412 }, { 9, 0, 703 }, { 10, 0, 71 }, { 10, 0, 427 }, - { 10, 0, 508 }, { 4, 10, 165 }, { 7, 10, 1398 }, { 7, 10, 1829 }, - { 4, 0, 53 }, { 5, 0, 186 }, { 7, 0, 752 }, { 7, 0, 828 }, - { 14, 0, 116 }, { 8, 0, 575 }, { 10, 0, 289 }, { 11, 0, 319 }, - { 4, 0, 675 }, { 6, 0, 1424 }, { 4, 11, 75 }, { 5, 11, 180 }, - { 6, 11, 500 }, { 7, 11, 58 }, { 7, 11, 710 }, { 10, 11, 645 }, - { 5, 11, 649 }, { 6, 11, 276 }, { 7, 11, 282 }, { 7, 11, 879 }, - { 7, 11, 924 }, { 8, 11, 459 }, { 9, 11, 599 }, { 9, 11, 754 }, - { 11, 11, 574 }, { 12, 11, 128 }, { 12, 11, 494 }, { 13, 11, 52 }, - { 13, 11, 301 }, { 15, 11, 30 }, { 15, 11, 132 }, { 6, 0, 647 }, - { 6, 0, 1095 }, { 5, 10, 9 }, { 7, 10, 297 }, { 7, 10, 966 }, - { 12, 10, 306 }, { 4, 11, 200 }, { 6, 0, 1334 }, { 5, 10, 146 }, - { 6, 10, 411 }, { 10, 10, 721 }, { 6, 0, 209 }, { 6, 0, 1141 }, - { 6, 0, 1288 }, { 8, 0, 468 }, { 9, 0, 210 }, { 11, 0, 36 }, - { 12, 0, 28 }, { 12, 0, 630 }, { 13, 0, 21 }, { 13, 0, 349 }, - { 14, 0, 7 }, { 17, 0, 13 }, { 6, 10, 177 }, { 7, 10, 467 }, - { 4, 0, 342 }, { 7, 0, 1179 }, { 10, 11, 454 }, { 12, 11, 324 }, - { 4, 0, 928 }, { 5, 0, 910 }, { 7, 0, 1838 }, { 6, 11, 225 }, - { 9, 11, 211 }, { 16, 0, 101 }, { 20, 0, 115 }, { 20, 0, 118 }, - { 20, 0, 122 }, { 4, 0, 496 }, { 7, 0, 856 }, { 4, 0, 318 }, - { 11, 0, 654 }, { 7, 11, 718 }, { 11, 11, 102 }, { 8, 11, 58 }, - { 9, 11, 724 }, { 11, 11, 809 }, { 13, 11, 113 }, { 17, 11, 72 }, - { 5, 10, 200 }, { 6, 11, 345 }, { 7, 11, 1247 }, { 8, 11, 767 }, - { 8, 11, 803 }, { 9, 11, 301 }, { 9, 11, 903 }, { 7, 0, 915 }, - { 8, 0, 247 }, { 19, 0, 0 }, { 7, 11, 1949 }, { 8, 11, 674 }, - { 4, 0, 202 }, { 5, 0, 382 }, { 6, 0, 454 }, { 7, 0, 936 }, - { 7, 0, 1803 }, { 8, 0, 758 }, { 9, 0, 375 }, { 9, 0, 895 }, - { 10, 0, 743 }, { 10, 0, 792 }, { 11, 0, 978 }, { 11, 0, 1012 }, - { 14, 0, 109 }, { 7, 0, 1150 }, { 7, 0, 1425 }, { 7, 0, 1453 }, - { 12, 0, 513 }, { 6, 11, 259 }, { 10, 0, 791 }, { 11, 0, 821 }, - { 12, 0, 110 }, { 12, 0, 153 }, { 18, 0, 41 }, { 22, 0, 19 }, - { 6, 10, 481 }, { 4, 0, 796 }, { 6, 0, 445 }, { 9, 0, 909 }, - { 8, 11, 254 }, { 10, 0, 776 }, { 13, 0, 345 }, { 14, 0, 425 }, - { 4, 10, 84 }, { 7, 10, 1482 }, { 10, 10, 76 }, { 10, 10, 142 }, - { 7, 11, 742 }, { 6, 0, 578 }, { 5, 10, 1015 }, { 6, 0, 1387 }, - { 4, 10, 315 }, { 5, 10, 507 }, { 7, 10, 1370 }, { 4, 0, 438 }, - { 5, 0, 555 }, { 8, 0, 766 }, { 5, 11, 248 }, { 6, 10, 1722 }, - { 4, 11, 116 }, { 5, 11, 95 }, { 5, 11, 445 }, { 7, 11, 1688 }, - { 8, 11, 29 }, { 9, 11, 272 }, { 11, 11, 509 }, { 11, 11, 915 }, - { 7, 0, 541 }, { 5, 11, 543 }, { 8, 10, 222 }, { 8, 10, 476 }, - { 9, 10, 238 }, { 11, 10, 516 }, { 11, 10, 575 }, { 15, 10, 109 }, - { 18, 10, 100 }, { 6, 0, 880 }, { 6, 0, 1191 }, { 5, 11, 181 }, - { 8, 11, 41 }, { 6, 0, 1506 }, { 4, 11, 681 }, { 7, 11, 25 }, - { 8, 11, 202 }, { 10, 11, 536 }, { 11, 0, 983 }, { 9, 0, 768 }, - { 4, 0, 584 }, { 9, 11, 423 }, { 12, 11, 89 }, { 8, 11, 113 }, - { 9, 11, 877 }, { 10, 11, 554 }, { 11, 11, 83 }, { 12, 11, 136 }, - { 19, 11, 109 }, { 7, 10, 706 }, { 7, 10, 1058 }, { 10, 10, 538 }, - { 5, 11, 976 }, { 4, 11, 206 }, { 7, 11, 746 }, { 8, 11, 526 }, - { 12, 0, 737 }, { 11, 10, 92 }, { 11, 10, 196 }, { 11, 10, 409 }, - { 11, 10, 450 }, { 11, 10, 666 }, { 11, 10, 777 }, { 12, 10, 262 }, - { 13, 10, 385 }, { 13, 10, 393 }, { 15, 10, 115 }, { 16, 10, 45 }, - { 17, 10, 82 }, { 4, 0, 226 }, { 4, 0, 326 }, { 7, 0, 1770 }, - { 4, 11, 319 }, { 5, 11, 699 }, { 10, 11, 673 }, { 6, 10, 40 }, - { 7, 10, 1781 }, { 5, 0, 426 }, { 8, 0, 30 }, { 9, 0, 2 }, - { 11, 0, 549 }, { 19, 0, 122 }, { 6, 0, 1161 }, { 6, 0, 1329 }, - { 10, 10, 97 }, { 6, 10, 423 }, { 7, 10, 665 }, { 7, 10, 1210 }, - { 7, 11, 13 }, { 8, 11, 226 }, { 10, 11, 537 }, { 11, 11, 570 }, - { 11, 11, 605 }, { 11, 11, 799 }, { 11, 11, 804 }, { 12, 11, 85 }, - { 12, 11, 516 }, { 12, 11, 623 }, { 13, 11, 112 }, { 13, 11, 361 }, - { 14, 11, 77 }, { 14, 11, 78 }, { 17, 11, 28 }, { 19, 11, 110 }, - { 4, 11, 769 }, { 4, 11, 551 }, { 4, 11, 728 }, { 19, 0, 117 }, - { 9, 11, 57 }, { 9, 11, 459 }, { 10, 11, 425 }, { 11, 11, 119 }, - { 12, 11, 184 }, { 12, 11, 371 }, { 13, 11, 358 }, { 17, 11, 51 }, - { 5, 11, 188 }, { 5, 11, 814 }, { 8, 11, 10 }, { 9, 11, 421 }, - { 9, 11, 729 }, { 10, 11, 609 }, { 11, 11, 689 }, { 6, 11, 624 }, - { 7, 11, 298 }, { 7, 0, 462 }, { 4, 0, 345 }, { 11, 10, 624 }, - { 8, 10, 574 }, { 4, 0, 385 }, { 7, 0, 265 }, { 7, 0, 587 }, - { 6, 0, 808 }, { 4, 11, 528 }, { 5, 0, 398 }, { 4, 10, 354 }, - { 4, 0, 347 }, { 5, 0, 423 }, { 5, 0, 996 }, { 7, 0, 1329 }, - { 7, 10, 1558 }, { 7, 0, 1259 }, { 9, 0, 125 }, { 11, 0, 65 }, - { 5, 0, 136 }, { 6, 0, 136 }, { 8, 0, 644 }, { 5, 11, 104 }, - { 6, 11, 173 }, { 7, 11, 1631 }, { 7, 0, 469 }, { 5, 10, 830 }, - { 4, 0, 278 }, { 5, 0, 465 }, { 7, 0, 1367 }, { 7, 11, 810 }, - { 8, 11, 138 }, { 8, 11, 342 }, { 9, 11, 84 }, { 10, 11, 193 }, - { 11, 11, 883 }, { 12, 11, 359 }, { 5, 10, 496 }, { 7, 10, 203 }, - { 4, 0, 433 }, { 5, 0, 719 }, { 6, 11, 95 }, { 6, 10, 547 }, - { 5, 10, 88 }, { 9, 10, 239 }, { 6, 11, 406 }, { 10, 11, 409 }, - { 10, 11, 447 }, { 11, 11, 44 }, { 12, 11, 100 }, { 6, 0, 1423 }, - { 7, 10, 650 }, { 7, 10, 1310 }, { 6, 0, 749 }, { 7, 11, 1243 }, - { 7, 0, 1363 }, { 6, 0, 381 }, { 7, 0, 645 }, { 7, 0, 694 }, - { 8, 0, 546 }, { 7, 10, 1076 }, { 9, 10, 80 }, { 11, 10, 78 }, - { 11, 10, 421 }, { 11, 10, 534 }, { 12, 10, 545 }, { 6, 11, 1636 }, - { 7, 11, 1344 }, { 12, 0, 277 }, { 7, 10, 274 }, { 11, 10, 479 }, - { 11, 10, 507 }, { 6, 0, 705 }, { 6, 0, 783 }, { 6, 0, 1275 }, - { 6, 0, 1481 }, { 4, 11, 282 }, { 7, 11, 1034 }, { 11, 11, 398 }, - { 11, 11, 634 }, { 12, 11, 1 }, { 12, 11, 79 }, { 12, 11, 544 }, - { 14, 11, 237 }, { 17, 11, 10 }, { 18, 11, 20 }, { 6, 0, 453 }, - { 4, 0, 555 }, { 8, 0, 536 }, { 10, 0, 288 }, { 11, 0, 1005 }, - { 4, 10, 497 }, { 7, 10, 1584 }, { 5, 11, 118 }, { 5, 11, 499 }, - { 6, 11, 476 }, { 7, 11, 600 }, { 7, 11, 888 }, { 7, 11, 1096 }, - { 10, 0, 987 }, { 7, 0, 1107 }, { 7, 10, 261 }, { 7, 10, 1115 }, - { 7, 10, 1354 }, { 7, 10, 1588 }, { 7, 10, 1705 }, { 7, 10, 1902 }, - { 9, 10, 465 }, { 10, 10, 248 }, { 10, 10, 349 }, { 10, 10, 647 }, - { 11, 10, 527 }, { 11, 10, 660 }, { 11, 10, 669 }, { 12, 10, 529 }, - { 13, 10, 305 }, { 7, 11, 296 }, { 7, 11, 596 }, { 8, 11, 560 }, - { 8, 11, 586 }, { 9, 11, 612 }, { 11, 11, 100 }, { 11, 11, 304 }, - { 12, 11, 46 }, { 13, 11, 89 }, { 14, 11, 112 }, { 17, 11, 122 }, - { 9, 0, 370 }, { 10, 0, 90 }, { 8, 10, 13 }, { 4, 0, 860 }, - { 7, 10, 642 }, { 8, 10, 250 }, { 11, 10, 123 }, { 11, 10, 137 }, - { 13, 10, 48 }, { 14, 10, 95 }, { 7, 10, 1429 }, { 9, 11, 321 }, - { 4, 0, 257 }, { 7, 0, 2031 }, { 7, 0, 1768 }, { 7, 11, 1599 }, - { 7, 11, 1723 }, { 8, 11, 79 }, { 8, 11, 106 }, { 8, 11, 190 }, - { 8, 11, 302 }, { 8, 11, 383 }, { 9, 11, 119 }, { 9, 11, 233 }, - { 9, 11, 298 }, { 9, 11, 419 }, { 9, 11, 471 }, { 10, 11, 181 }, - { 10, 11, 406 }, { 11, 11, 57 }, { 11, 11, 85 }, { 11, 11, 120 }, - { 11, 11, 177 }, { 11, 11, 296 }, { 11, 11, 382 }, { 11, 11, 454 }, - { 11, 11, 758 }, { 11, 11, 999 }, { 12, 11, 27 }, { 12, 11, 98 }, - { 12, 11, 131 }, { 12, 11, 245 }, { 12, 11, 312 }, { 12, 11, 446 }, - { 12, 11, 454 }, { 13, 11, 25 }, { 13, 11, 98 }, { 13, 11, 426 }, - { 13, 11, 508 }, { 14, 11, 6 }, { 14, 11, 163 }, { 14, 11, 272 }, - { 14, 11, 277 }, { 14, 11, 370 }, { 15, 11, 95 }, { 15, 11, 138 }, - { 15, 11, 167 }, { 17, 11, 18 }, { 17, 11, 38 }, { 20, 11, 96 }, - { 21, 11, 32 }, { 5, 11, 722 }, { 6, 11, 1759 }, { 17, 11, 16 }, - { 6, 0, 1071 }, { 6, 0, 1561 }, { 10, 10, 545 }, { 12, 10, 301 }, - { 6, 0, 83 }, { 6, 0, 1733 }, { 7, 0, 1389 }, { 4, 0, 835 }, - { 7, 0, 1818 }, { 5, 11, 258 }, { 4, 10, 904 }, { 5, 10, 794 }, - { 6, 0, 2006 }, { 5, 11, 30 }, { 7, 11, 495 }, { 8, 11, 134 }, - { 9, 11, 788 }, { 12, 11, 438 }, { 7, 11, 2004 }, { 9, 0, 696 }, - { 5, 11, 50 }, { 6, 11, 439 }, { 7, 11, 780 }, { 7, 11, 1040 }, - { 7, 11, 772 }, { 7, 11, 1104 }, { 7, 11, 1647 }, { 11, 11, 269 }, - { 11, 11, 539 }, { 11, 11, 607 }, { 11, 11, 627 }, { 11, 11, 706 }, - { 11, 11, 975 }, { 12, 11, 248 }, { 12, 11, 311 }, { 12, 11, 434 }, - { 12, 11, 600 }, { 12, 11, 622 }, { 13, 11, 297 }, { 13, 11, 367 }, - { 13, 11, 485 }, { 14, 11, 69 }, { 14, 11, 409 }, { 15, 11, 108 }, - { 5, 11, 1 }, { 6, 11, 81 }, { 10, 11, 520 }, { 7, 0, 1718 }, - { 9, 0, 95 }, { 9, 0, 274 }, { 10, 0, 279 }, { 10, 0, 317 }, - { 10, 0, 420 }, { 11, 0, 303 }, { 11, 0, 808 }, { 12, 0, 134 }, - { 12, 0, 367 }, { 13, 0, 149 }, { 13, 0, 347 }, { 14, 0, 349 }, - { 14, 0, 406 }, { 18, 0, 22 }, { 18, 0, 89 }, { 18, 0, 122 }, - { 19, 0, 47 }, { 5, 11, 482 }, { 8, 11, 98 }, { 9, 11, 172 }, - { 10, 11, 222 }, { 10, 11, 700 }, { 10, 11, 822 }, { 11, 11, 302 }, - { 11, 11, 778 }, { 12, 11, 50 }, { 12, 11, 127 }, { 12, 11, 396 }, - { 13, 11, 62 }, { 13, 11, 328 }, { 14, 11, 122 }, { 19, 11, 72 }, - { 7, 10, 386 }, { 10, 10, 713 }, { 6, 10, 7 }, { 6, 10, 35 }, - { 7, 10, 147 }, { 7, 10, 1069 }, { 7, 10, 1568 }, { 7, 10, 1575 }, - { 7, 10, 1917 }, { 8, 10, 43 }, { 8, 10, 208 }, { 9, 10, 128 }, - { 9, 10, 866 }, { 10, 10, 20 }, { 11, 10, 981 }, { 19, 10, 33 }, - { 5, 0, 26 }, { 4, 0, 550 }, { 5, 11, 2 }, { 7, 11, 1494 }, - { 8, 11, 589 }, { 6, 11, 512 }, { 7, 11, 797 }, { 8, 11, 253 }, - { 9, 11, 77 }, { 10, 11, 1 }, { 10, 11, 129 }, { 10, 11, 225 }, - { 11, 11, 118 }, { 11, 11, 226 }, { 11, 11, 251 }, { 11, 11, 430 }, - { 11, 11, 701 }, { 11, 11, 974 }, { 11, 11, 982 }, { 12, 11, 64 }, - { 12, 11, 260 }, { 12, 11, 488 }, { 12, 11, 690 }, { 7, 10, 893 }, - { 13, 10, 424 }, { 6, 0, 901 }, { 8, 0, 822 }, { 4, 0, 902 }, - { 5, 0, 809 }, { 6, 0, 122 }, { 6, 0, 807 }, { 6, 0, 1366 }, - { 7, 0, 262 }, { 5, 11, 748 }, { 6, 11, 553 }, { 5, 0, 620 }, - { 4, 0, 34 }, { 5, 0, 574 }, { 7, 0, 279 }, { 7, 0, 1624 }, - { 8, 0, 601 }, { 9, 0, 170 }, { 6, 10, 322 }, { 9, 10, 552 }, - { 11, 10, 274 }, { 13, 10, 209 }, { 13, 10, 499 }, { 14, 10, 85 }, - { 15, 10, 126 }, { 17, 10, 70 }, { 4, 0, 537 }, { 4, 11, 12 }, - { 7, 11, 420 }, { 7, 11, 522 }, { 7, 11, 809 }, { 8, 11, 797 }, - { 13, 11, 88 }, { 5, 0, 332 }, { 8, 10, 83 }, { 8, 10, 742 }, - { 8, 10, 817 }, { 9, 10, 28 }, { 9, 10, 29 }, { 9, 10, 885 }, - { 10, 10, 387 }, { 11, 10, 633 }, { 11, 10, 740 }, { 13, 10, 235 }, - { 13, 10, 254 }, { 15, 10, 143 }, { 15, 10, 146 }, { 6, 0, 1909 }, - { 9, 0, 964 }, { 12, 0, 822 }, { 12, 0, 854 }, { 12, 0, 865 }, - { 12, 0, 910 }, { 12, 0, 938 }, { 15, 0, 169 }, { 15, 0, 208 }, - { 15, 0, 211 }, { 18, 0, 205 }, { 18, 0, 206 }, { 18, 0, 220 }, - { 18, 0, 223 }, { 24, 0, 24 }, { 12, 10, 49 }, { 5, 11, 528 }, - { 7, 11, 1580 }, { 6, 0, 261 }, { 8, 0, 182 }, { 11, 0, 943 }, - { 6, 0, 1721 }, { 4, 0, 933 }, { 5, 0, 880 }, { 8, 11, 321 }, - { 5, 11, 266 }, { 9, 11, 290 }, { 9, 11, 364 }, { 10, 11, 293 }, - { 11, 11, 606 }, { 14, 11, 45 }, { 6, 0, 1609 }, { 4, 11, 50 }, - { 6, 11, 510 }, { 6, 11, 594 }, { 9, 11, 121 }, { 10, 11, 49 }, - { 10, 11, 412 }, { 11, 11, 834 }, { 7, 0, 895 }, { 8, 11, 748 }, - { 4, 11, 466 }, { 4, 10, 110 }, { 10, 10, 415 }, { 10, 10, 597 }, - { 14, 10, 206 }, { 5, 0, 812 }, { 7, 11, 281 }, { 6, 0, 1890 }, - { 6, 0, 1902 }, { 6, 0, 1916 }, { 9, 0, 929 }, { 9, 0, 942 }, - { 9, 0, 975 }, { 9, 0, 984 }, { 9, 0, 986 }, { 9, 0, 1011 }, - { 9, 0, 1019 }, { 12, 0, 804 }, { 12, 0, 851 }, { 12, 0, 867 }, - { 12, 0, 916 }, { 12, 0, 923 }, { 15, 0, 194 }, { 15, 0, 204 }, - { 15, 0, 210 }, { 15, 0, 222 }, { 15, 0, 223 }, { 15, 0, 229 }, - { 15, 0, 250 }, { 18, 0, 179 }, { 18, 0, 186 }, { 18, 0, 192 }, - { 7, 10, 205 }, { 7, 10, 2000 }, { 4, 11, 667 }, { 7, 0, 778 }, - { 4, 0, 137 }, { 7, 0, 1178 }, { 7, 0, 1520 }, { 6, 0, 1314 }, - { 4, 11, 242 }, { 6, 11, 333 }, { 6, 0, 1661 }, { 7, 0, 1975 }, - { 7, 0, 2009 }, { 7, 0, 2011 }, { 6, 0, 1591 }, { 4, 10, 283 }, - { 7, 10, 1194 }, { 11, 0, 820 }, { 22, 0, 51 }, { 4, 11, 39 }, - { 5, 11, 36 }, { 7, 11, 1843 }, { 8, 11, 407 }, { 11, 11, 144 }, - { 12, 11, 523 }, { 6, 10, 1720 }, { 4, 11, 510 }, { 7, 11, 29 }, - { 7, 11, 66 }, { 7, 11, 1980 }, { 10, 11, 487 }, { 10, 11, 809 }, - { 18, 11, 9 }, { 5, 0, 89 }, { 7, 0, 1915 }, { 9, 0, 185 }, - { 9, 0, 235 }, { 10, 0, 64 }, { 10, 0, 270 }, { 10, 0, 403 }, - { 10, 0, 469 }, { 10, 0, 529 }, { 10, 0, 590 }, { 11, 0, 140 }, - { 11, 0, 860 }, { 13, 0, 1 }, { 13, 0, 422 }, { 14, 0, 341 }, - { 14, 0, 364 }, { 17, 0, 93 }, { 18, 0, 113 }, { 19, 0, 97 }, - { 19, 0, 113 }, { 5, 0, 695 }, { 6, 0, 987 }, { 6, 0, 1160 }, - { 5, 0, 6 }, { 6, 0, 183 }, { 7, 0, 680 }, { 7, 0, 978 }, - { 7, 0, 1013 }, { 7, 0, 1055 }, { 12, 0, 230 }, { 13, 0, 172 }, - { 18, 0, 29 }, { 6, 11, 570 }, { 4, 11, 787 }, { 6, 11, 518 }, - { 6, 0, 29 }, { 11, 0, 63 }, { 4, 11, 516 }, { 8, 11, 821 }, - { 4, 0, 311 }, { 6, 0, 1740 }, { 7, 0, 170 }, { 8, 0, 90 }, - { 8, 0, 177 }, { 8, 0, 415 }, { 11, 0, 714 }, { 14, 0, 281 }, - { 8, 10, 735 }, { 6, 0, 1961 }, { 7, 11, 1405 }, { 4, 11, 10 }, - { 7, 11, 917 }, { 11, 11, 786 }, { 5, 10, 132 }, { 9, 10, 486 }, - { 9, 10, 715 }, { 10, 10, 458 }, { 11, 10, 373 }, { 11, 10, 668 }, - { 11, 10, 795 }, { 11, 10, 897 }, { 12, 10, 272 }, { 12, 10, 424 }, - { 12, 10, 539 }, { 12, 10, 558 }, { 14, 10, 245 }, { 14, 10, 263 }, - { 14, 10, 264 }, { 14, 10, 393 }, { 14, 10, 403 }, { 11, 0, 91 }, - { 13, 0, 129 }, { 15, 0, 101 }, { 17, 0, 125 }, { 7, 0, 1132 }, - { 4, 0, 494 }, { 6, 0, 74 }, { 7, 0, 44 }, { 7, 0, 407 }, - { 12, 0, 17 }, { 15, 0, 5 }, { 20, 0, 11 }, { 5, 10, 379 }, - { 5, 0, 270 }, { 5, 11, 684 }, { 6, 10, 89 }, { 6, 10, 400 }, - { 7, 10, 1569 }, { 7, 10, 1623 }, { 7, 10, 1850 }, { 8, 10, 218 }, - { 8, 10, 422 }, { 9, 10, 570 }, { 10, 10, 626 }, { 4, 0, 276 }, - { 5, 0, 296 }, { 6, 0, 1523 }, { 6, 11, 27 }, { 6, 10, 387 }, - { 7, 10, 882 }, { 13, 10, 111 }, { 6, 10, 224 }, { 7, 10, 877 }, - { 9, 10, 647 }, { 7, 10, 790 }, { 4, 0, 7 }, { 5, 0, 90 }, - { 5, 0, 158 }, { 6, 0, 542 }, { 7, 0, 221 }, { 7, 0, 1574 }, - { 9, 0, 490 }, { 10, 0, 540 }, { 11, 0, 443 }, { 11, 0, 757 }, - { 7, 0, 588 }, { 9, 0, 175 }, { 10, 0, 530 }, { 7, 10, 394 }, - { 14, 11, 23 }, { 6, 0, 786 }, { 7, 0, 580 }, { 7, 0, 88 }, - { 8, 0, 627 }, { 5, 0, 872 }, { 6, 0, 57 }, { 7, 0, 471 }, - { 9, 0, 447 }, { 9, 0, 454 }, { 6, 11, 342 }, { 6, 11, 496 }, - { 8, 11, 275 }, { 9, 11, 206 }, { 4, 11, 909 }, { 5, 11, 940 }, - { 6, 0, 735 }, { 4, 11, 891 }, { 8, 0, 845 }, { 8, 0, 916 }, - { 7, 10, 1409 }, { 5, 0, 31 }, { 6, 0, 614 }, { 11, 0, 458 }, - { 12, 0, 15 }, { 12, 0, 432 }, { 8, 0, 330 }, { 12, 0, 477 }, - { 4, 0, 530 }, { 5, 0, 521 }, { 7, 0, 1200 }, { 10, 0, 460 }, - { 4, 11, 687 }, { 6, 0, 424 }, { 7, 0, 1866 }, { 9, 0, 569 }, - { 12, 0, 12 }, { 12, 0, 81 }, { 12, 0, 319 }, { 13, 0, 69 }, - { 14, 0, 259 }, { 16, 0, 87 }, { 17, 0, 1 }, { 17, 0, 21 }, - { 17, 0, 24 }, { 18, 0, 15 }, { 18, 0, 56 }, { 18, 0, 59 }, - { 18, 0, 127 }, { 18, 0, 154 }, { 19, 0, 19 }, { 20, 0, 31 }, - { 7, 0, 1302 }, { 8, 10, 38 }, { 6, 11, 253 }, { 5, 10, 261 }, - { 7, 10, 78 }, { 7, 10, 199 }, { 8, 10, 815 }, { 9, 10, 126 }, - { 10, 10, 342 }, { 5, 0, 595 }, { 7, 0, 1863 }, { 6, 11, 41 }, - { 13, 11, 160 }, { 5, 0, 13 }, { 6, 0, 142 }, { 6, 0, 97 }, - { 7, 0, 116 }, { 8, 0, 322 }, { 8, 0, 755 }, { 9, 0, 548 }, - { 10, 0, 714 }, { 11, 0, 884 }, { 13, 0, 324 }, { 7, 11, 1304 }, - { 10, 11, 477 }, { 4, 10, 628 }, { 6, 11, 1718 }, { 7, 10, 266 }, - { 8, 10, 804 }, { 7, 10, 208 }, { 7, 0, 1021 }, { 6, 10, 79 }, - { 7, 10, 1519 }, { 7, 0, 1472 }, { 7, 0, 1554 }, { 6, 11, 362 }, - { 18, 11, 51 }, { 7, 0, 1071 }, { 7, 0, 1541 }, { 7, 0, 1767 }, - { 7, 0, 1806 }, { 11, 0, 162 }, { 11, 0, 242 }, { 11, 0, 452 }, - { 12, 0, 605 }, { 15, 0, 26 }, { 16, 0, 44 }, { 8, 10, 741 }, - { 5, 11, 115 }, { 17, 0, 115 }, { 6, 10, 376 }, { 6, 0, 1406 }, - { 6, 0, 1543 }, { 5, 11, 193 }, { 12, 11, 178 }, { 13, 11, 130 }, - { 17, 11, 84 }, { 7, 0, 1111 }, { 8, 0, 1 }, { 9, 0, 650 }, - { 10, 0, 326 }, { 5, 11, 705 }, { 9, 11, 606 }, { 5, 0, 488 }, - { 6, 0, 527 }, { 7, 0, 489 }, { 7, 0, 1636 }, { 8, 0, 121 }, - { 8, 0, 144 }, { 8, 0, 359 }, { 9, 0, 193 }, { 9, 0, 241 }, - { 9, 0, 336 }, { 9, 0, 882 }, { 11, 0, 266 }, { 11, 0, 372 }, - { 11, 0, 944 }, { 12, 0, 401 }, { 12, 0, 641 }, { 7, 11, 174 }, - { 6, 0, 267 }, { 7, 10, 244 }, { 7, 10, 632 }, { 7, 10, 1609 }, - { 8, 10, 178 }, { 8, 10, 638 }, { 13, 10, 58 }, { 6, 0, 1983 }, - { 6, 0, 1155 }, { 6, 0, 1575 }, { 6, 0, 1438 }, { 9, 0, 31 }, - { 10, 0, 244 }, { 10, 0, 699 }, { 12, 0, 149 }, { 13, 0, 497 }, - { 5, 0, 377 }, { 4, 11, 122 }, { 5, 11, 796 }, { 5, 11, 952 }, - { 6, 11, 1660 }, { 6, 11, 1671 }, { 8, 11, 567 }, { 9, 11, 687 }, - { 9, 11, 742 }, { 10, 11, 686 }, { 11, 11, 356 }, { 11, 11, 682 }, - { 12, 11, 281 }, { 17, 0, 101 }, { 11, 11, 0 }, { 16, 11, 78 }, - { 5, 11, 179 }, { 5, 10, 791 }, { 7, 11, 1095 }, { 7, 11, 1213 }, - { 8, 11, 372 }, { 9, 11, 122 }, { 10, 11, 175 }, { 7, 10, 686 }, - { 8, 10, 33 }, { 8, 10, 238 }, { 10, 10, 616 }, { 11, 10, 467 }, - { 11, 10, 881 }, { 13, 10, 217 }, { 13, 10, 253 }, { 14, 10, 268 }, - { 9, 0, 476 }, { 4, 11, 66 }, { 7, 11, 722 }, { 7, 11, 904 }, - { 7, 11, 352 }, { 9, 11, 684 }, { 7, 0, 2023 }, { 7, 0, 1836 }, - { 4, 10, 447 }, { 5, 0, 843 }, { 16, 0, 35 }, { 9, 11, 779 }, - { 13, 11, 35 }, { 4, 10, 128 }, { 5, 10, 415 }, { 6, 10, 462 }, - { 7, 10, 294 }, { 7, 10, 578 }, { 10, 10, 710 }, { 11, 10, 86 }, - { 4, 0, 554 }, { 5, 0, 536 }, { 8, 10, 587 }, { 5, 0, 207 }, - { 9, 0, 79 }, { 11, 0, 625 }, { 17, 0, 7 }, { 7, 0, 1371 }, - { 6, 10, 427 }, { 10, 10, 692 }, { 4, 0, 424 }, { 4, 10, 195 }, - { 7, 10, 802 }, { 8, 0, 785 }, { 5, 11, 564 }, { 7, 0, 336 }, - { 4, 0, 896 }, { 6, 0, 1777 }, { 6, 11, 556 }, { 9, 11, 103 }, - { 6, 10, 1683 }, { 7, 11, 544 }, { 8, 11, 719 }, { 10, 11, 61 }, - { 10, 10, 472 }, { 4, 11, 5 }, { 5, 11, 498 }, { 8, 11, 637 }, - { 7, 0, 750 }, { 9, 0, 223 }, { 11, 0, 27 }, { 11, 0, 466 }, - { 12, 0, 624 }, { 14, 0, 265 }, { 18, 0, 61 }, { 12, 0, 238 }, - { 18, 0, 155 }, { 12, 11, 238 }, { 18, 11, 155 }, { 23, 10, 28 }, - { 5, 11, 927 }, { 12, 0, 383 }, { 5, 10, 3 }, { 8, 10, 578 }, - { 9, 10, 118 }, { 10, 10, 705 }, { 13, 10, 279 }, { 4, 11, 893 }, - { 5, 11, 780 }, { 5, 11, 893 }, { 4, 0, 603 }, { 5, 0, 661 }, - { 4, 0, 11 }, { 6, 0, 128 }, { 7, 0, 231 }, { 7, 0, 1533 }, - { 10, 0, 725 }, { 5, 10, 229 }, { 5, 11, 238 }, { 7, 11, 1350 }, - { 8, 10, 102 }, { 10, 10, 578 }, { 10, 10, 672 }, { 12, 10, 496 }, - { 13, 10, 408 }, { 14, 10, 121 }, { 17, 10, 106 }, { 4, 0, 476 }, - { 6, 0, 1552 }, { 6, 11, 1729 }, { 8, 10, 115 }, { 8, 10, 350 }, - { 9, 10, 489 }, { 10, 10, 128 }, { 11, 10, 306 }, { 12, 10, 373 }, - { 14, 10, 30 }, { 17, 10, 79 }, { 19, 10, 80 }, { 22, 10, 55 }, - { 7, 0, 1807 }, { 4, 0, 680 }, { 4, 11, 60 }, { 7, 11, 760 }, - { 7, 11, 1800 }, { 8, 11, 314 }, { 9, 11, 700 }, { 11, 11, 487 }, - { 4, 10, 230 }, { 5, 10, 702 }, { 20, 11, 94 }, { 4, 11, 228 }, - { 11, 0, 435 }, { 9, 0, 20 }, { 10, 0, 324 }, { 10, 0, 807 }, - { 11, 0, 488 }, { 6, 10, 1728 }, { 8, 11, 419 }, { 4, 10, 484 }, - { 18, 10, 26 }, { 19, 10, 42 }, { 20, 10, 43 }, { 21, 10, 0 }, - { 23, 10, 27 }, { 24, 10, 14 }, { 7, 0, 1431 }, { 5, 11, 828 }, - { 5, 0, 112 }, { 6, 0, 103 }, { 6, 0, 150 }, { 7, 0, 1303 }, - { 9, 0, 292 }, { 10, 0, 481 }, { 20, 0, 13 }, { 7, 11, 176 }, - { 7, 11, 178 }, { 7, 11, 1110 }, { 10, 11, 481 }, { 20, 11, 13 }, - { 10, 0, 356 }, { 4, 11, 51 }, { 5, 11, 39 }, { 6, 11, 4 }, - { 7, 11, 591 }, { 7, 11, 849 }, { 7, 11, 951 }, { 7, 11, 1129 }, - { 7, 11, 1613 }, { 7, 11, 1760 }, { 7, 11, 1988 }, { 9, 11, 434 }, - { 10, 11, 754 }, { 11, 11, 25 }, { 11, 11, 37 }, { 11, 11, 414 }, - { 6, 0, 1963 }, { 6, 0, 2000 }, { 4, 10, 633 }, { 6, 0, 1244 }, - { 5, 11, 902 }, { 7, 11, 928 }, { 12, 0, 18 }, { 10, 0, 204 }, - { 7, 11, 1173 }, { 6, 0, 867 }, { 4, 0, 708 }, { 8, 0, 15 }, - { 9, 0, 50 }, { 9, 0, 386 }, { 11, 0, 18 }, { 11, 0, 529 }, - { 12, 0, 228 }, { 6, 11, 270 }, { 4, 0, 563 }, { 7, 0, 109 }, - { 7, 0, 592 }, { 7, 0, 637 }, { 7, 0, 770 }, { 8, 0, 463 }, - { 9, 0, 60 }, { 9, 0, 335 }, { 9, 0, 904 }, { 10, 0, 73 }, - { 11, 0, 434 }, { 12, 0, 585 }, { 13, 0, 331 }, { 18, 0, 110 }, - { 20, 0, 60 }, { 4, 0, 502 }, { 14, 11, 359 }, { 19, 11, 52 }, - { 20, 11, 47 }, { 6, 11, 377 }, { 7, 11, 1025 }, { 9, 11, 613 }, - { 17, 11, 104 }, { 6, 0, 347 }, { 10, 0, 161 }, { 5, 10, 70 }, - { 5, 10, 622 }, { 6, 10, 334 }, { 7, 10, 1032 }, { 9, 10, 171 }, - { 11, 10, 26 }, { 11, 10, 213 }, { 11, 10, 637 }, { 11, 10, 707 }, - { 12, 10, 202 }, { 12, 10, 380 }, { 13, 10, 226 }, { 13, 10, 355 }, - { 14, 10, 222 }, { 17, 10, 42 }, { 4, 11, 416 }, { 4, 0, 33 }, - { 5, 0, 102 }, { 6, 0, 284 }, { 7, 0, 1079 }, { 7, 0, 1423 }, - { 7, 0, 1702 }, { 8, 0, 470 }, { 9, 0, 554 }, { 9, 0, 723 }, - { 11, 0, 333 }, { 14, 11, 372 }, { 5, 11, 152 }, { 5, 11, 197 }, - { 7, 11, 340 }, { 7, 11, 867 }, { 10, 11, 548 }, { 10, 11, 581 }, - { 11, 11, 6 }, { 12, 11, 3 }, { 12, 11, 19 }, { 14, 11, 110 }, - { 14, 11, 289 }, { 7, 0, 246 }, { 7, 0, 840 }, { 6, 0, 10 }, - { 8, 0, 571 }, { 9, 0, 739 }, { 15, 0, 91 }, { 6, 0, 465 }, - { 7, 0, 1465 }, { 4, 10, 23 }, { 4, 10, 141 }, { 5, 10, 313 }, - { 5, 10, 1014 }, { 6, 10, 50 }, { 7, 10, 142 }, { 7, 10, 559 }, - { 8, 10, 640 }, { 9, 10, 460 }, { 9, 10, 783 }, { 11, 10, 741 }, - { 12, 10, 183 }, { 13, 10, 488 }, { 5, 0, 626 }, { 8, 0, 614 }, - { 10, 0, 237 }, { 7, 11, 34 }, { 7, 11, 190 }, { 8, 11, 28 }, - { 8, 11, 141 }, { 8, 11, 444 }, { 8, 11, 811 }, { 9, 11, 468 }, - { 11, 11, 334 }, { 12, 11, 24 }, { 12, 11, 386 }, { 12, 11, 576 }, - { 5, 11, 757 }, { 5, 0, 18 }, { 6, 0, 526 }, { 13, 0, 24 }, - { 13, 0, 110 }, { 19, 0, 5 }, { 19, 0, 44 }, { 6, 0, 506 }, - { 6, 11, 506 }, { 7, 11, 1553 }, { 4, 0, 309 }, { 5, 0, 462 }, - { 7, 0, 970 }, { 7, 0, 1097 }, { 22, 0, 30 }, { 22, 0, 33 }, - { 7, 11, 1385 }, { 11, 11, 582 }, { 11, 11, 650 }, { 11, 11, 901 }, - { 11, 11, 949 }, { 12, 11, 232 }, { 12, 11, 236 }, { 13, 11, 413 }, - { 13, 11, 501 }, { 18, 11, 116 }, { 9, 0, 140 }, { 5, 10, 222 }, - { 10, 10, 534 }, { 6, 0, 1056 }, { 9, 10, 906 }, { 6, 0, 1704 }, - { 10, 10, 503 }, { 6, 0, 1036 }, { 5, 10, 154 }, { 7, 10, 1491 }, - { 10, 10, 379 }, { 10, 10, 485 }, { 4, 11, 383 }, { 5, 10, 716 }, - { 6, 0, 1315 }, { 5, 0, 86 }, { 7, 0, 743 }, { 9, 0, 85 }, - { 10, 0, 281 }, { 10, 0, 432 }, { 11, 0, 825 }, { 12, 0, 251 }, - { 13, 0, 118 }, { 14, 0, 378 }, { 8, 0, 264 }, { 4, 10, 91 }, - { 5, 10, 388 }, { 5, 10, 845 }, { 6, 10, 206 }, { 6, 10, 252 }, - { 6, 10, 365 }, { 7, 10, 136 }, { 7, 10, 531 }, { 8, 10, 621 }, - { 5, 0, 524 }, { 5, 0, 744 }, { 5, 11, 277 }, { 13, 11, 247 }, - { 4, 11, 435 }, { 10, 0, 107 }, { 12, 0, 436 }, { 4, 0, 927 }, - { 10, 0, 123 }, { 12, 0, 670 }, { 18, 0, 94 }, { 7, 0, 1149 }, - { 9, 0, 156 }, { 10, 0, 957 }, { 5, 11, 265 }, { 6, 11, 212 }, - { 7, 11, 28 }, { 5, 0, 778 }, { 5, 0, 502 }, { 8, 0, 196 }, - { 10, 0, 283 }, { 11, 0, 406 }, { 7, 10, 576 }, { 8, 11, 535 }, - { 6, 0, 1312 }, { 5, 10, 771 }, { 5, 10, 863 }, { 5, 10, 898 }, - { 6, 10, 1632 }, { 6, 10, 1644 }, { 6, 10, 1780 }, { 5, 0, 855 }, - { 5, 10, 331 }, { 7, 11, 1487 }, { 4, 11, 702 }, { 5, 11, 808 }, - { 7, 11, 2045 }, { 7, 0, 1400 }, { 9, 0, 446 }, { 10, 0, 45 }, - { 12, 10, 632 }, { 4, 0, 1003 }, { 5, 11, 166 }, { 8, 11, 739 }, - { 12, 11, 511 }, { 5, 10, 107 }, { 7, 10, 201 }, { 8, 10, 518 }, - { 6, 10, 446 }, { 7, 10, 1817 }, { 6, 0, 1532 }, { 6, 0, 1097 }, - { 4, 11, 119 }, { 5, 11, 170 }, { 5, 11, 447 }, { 7, 11, 1708 }, - { 7, 11, 1889 }, { 9, 11, 357 }, { 9, 11, 719 }, { 12, 11, 486 }, - { 12, 11, 596 }, { 9, 10, 851 }, { 13, 10, 510 }, { 7, 0, 612 }, - { 8, 0, 545 }, { 8, 0, 568 }, { 8, 0, 642 }, { 9, 0, 717 }, - { 10, 0, 541 }, { 10, 0, 763 }, { 11, 0, 449 }, { 12, 0, 489 }, - { 13, 0, 153 }, { 13, 0, 296 }, { 14, 0, 138 }, { 14, 0, 392 }, - { 15, 0, 50 }, { 16, 0, 6 }, { 16, 0, 12 }, { 20, 0, 9 }, - { 4, 10, 504 }, { 4, 11, 450 }, { 7, 11, 1158 }, { 11, 0, 54 }, - { 13, 0, 173 }, { 13, 0, 294 }, { 5, 10, 883 }, { 5, 10, 975 }, - { 8, 10, 392 }, { 20, 10, 7 }, { 13, 0, 455 }, { 15, 0, 99 }, - { 15, 0, 129 }, { 16, 0, 68 }, { 7, 0, 172 }, { 4, 11, 754 }, - { 5, 10, 922 }, { 6, 10, 1707 }, { 6, 0, 1029 }, { 17, 11, 39 }, - { 20, 11, 36 }, { 4, 0, 568 }, { 5, 10, 993 }, { 7, 10, 515 }, - { 9, 10, 91 }, { 4, 0, 732 }, { 10, 0, 617 }, { 10, 11, 617 }, - { 6, 0, 974 }, { 7, 0, 989 }, { 10, 0, 377 }, { 12, 0, 363 }, - { 13, 0, 68 }, { 13, 0, 94 }, { 14, 0, 108 }, { 14, 0, 306 }, - { 8, 0, 733 }, { 4, 0, 428 }, { 7, 0, 1789 }, { 7, 11, 1062 }, - { 7, 0, 2015 }, { 12, 0, 665 }, { 7, 10, 1433 }, { 5, 0, 287 }, - { 7, 10, 921 }, { 8, 10, 580 }, { 8, 10, 593 }, { 8, 10, 630 }, - { 10, 10, 28 }, { 10, 0, 806 }, { 4, 10, 911 }, { 5, 10, 867 }, - { 5, 10, 1013 }, { 7, 10, 2034 }, { 8, 10, 798 }, { 8, 10, 813 }, - { 6, 0, 1539 }, { 8, 11, 523 }, { 22, 11, 34 }, { 7, 11, 740 }, - { 7, 11, 238 }, { 7, 11, 2033 }, { 8, 11, 120 }, { 8, 11, 188 }, - { 8, 11, 659 }, { 9, 11, 598 }, { 10, 11, 466 }, { 12, 11, 342 }, - { 12, 11, 588 }, { 13, 11, 503 }, { 14, 11, 246 }, { 15, 11, 92 }, - { 7, 0, 1563 }, { 13, 0, 182 }, { 5, 10, 135 }, { 6, 10, 519 }, - { 7, 10, 1722 }, { 10, 10, 271 }, { 11, 10, 261 }, { 17, 10, 54 }, - { 14, 10, 338 }, { 20, 10, 81 }, { 7, 0, 484 }, { 4, 10, 300 }, - { 5, 10, 436 }, { 17, 11, 114 }, { 6, 0, 1623 }, { 6, 0, 1681 }, - { 5, 11, 640 }, { 4, 11, 201 }, { 7, 11, 1744 }, { 8, 11, 602 }, - { 11, 11, 247 }, { 11, 11, 826 }, { 17, 11, 65 }, { 8, 11, 164 }, - { 18, 11, 62 }, { 6, 0, 1833 }, { 6, 0, 1861 }, { 8, 0, 878 }, - { 6, 0, 1569 }, { 8, 10, 357 }, { 10, 10, 745 }, { 14, 10, 426 }, - { 17, 10, 94 }, { 19, 10, 57 }, { 12, 0, 93 }, { 12, 0, 501 }, - { 13, 0, 362 }, { 14, 0, 151 }, { 15, 0, 40 }, { 15, 0, 59 }, - { 16, 0, 46 }, { 17, 0, 25 }, { 18, 0, 14 }, { 18, 0, 134 }, - { 19, 0, 25 }, { 19, 0, 69 }, { 20, 0, 16 }, { 20, 0, 19 }, - { 20, 0, 66 }, { 21, 0, 23 }, { 21, 0, 25 }, { 22, 0, 42 }, - { 6, 0, 1748 }, { 8, 0, 715 }, { 9, 0, 802 }, { 10, 0, 46 }, - { 10, 0, 819 }, { 13, 0, 308 }, { 14, 0, 351 }, { 14, 0, 363 }, - { 18, 0, 67 }, { 4, 0, 994 }, { 4, 0, 63 }, { 5, 0, 347 }, - { 4, 0, 591 }, { 5, 0, 749 }, { 7, 11, 1577 }, { 10, 11, 304 }, - { 10, 11, 549 }, { 11, 11, 424 }, { 12, 11, 365 }, { 13, 11, 220 }, - { 13, 11, 240 }, { 14, 11, 33 }, { 5, 0, 366 }, { 7, 0, 557 }, - { 12, 0, 547 }, { 14, 0, 86 }, { 5, 10, 387 }, { 7, 0, 1747 }, - { 4, 11, 907 }, { 5, 11, 100 }, { 10, 11, 329 }, { 12, 11, 416 }, - { 21, 11, 29 }, { 4, 10, 6 }, { 5, 10, 708 }, { 8, 10, 75 }, - { 7, 10, 1351 }, { 9, 10, 581 }, { 10, 10, 639 }, { 11, 10, 453 }, - { 12, 10, 584 }, { 7, 0, 89 }, { 4, 10, 303 }, { 10, 10, 772 }, - { 4, 11, 176 }, { 5, 11, 636 }, { 5, 11, 998 }, { 8, 11, 26 }, - { 9, 11, 358 }, { 7, 11, 9 }, { 7, 11, 1508 }, { 9, 11, 317 }, - { 10, 11, 210 }, { 10, 11, 292 }, { 10, 11, 533 }, { 11, 11, 555 }, - { 12, 11, 526 }, { 12, 11, 607 }, { 13, 11, 263 }, { 13, 11, 459 }, - { 14, 11, 271 }, { 6, 0, 1463 }, { 6, 0, 772 }, { 6, 0, 1137 }, - { 11, 11, 595 }, { 7, 0, 977 }, { 11, 11, 66 }, { 10, 0, 893 }, - { 20, 0, 48 }, { 20, 11, 48 }, { 5, 0, 824 }, { 5, 0, 941 }, - { 6, 11, 295 }, { 7, 0, 1543 }, { 7, 0, 1785 }, { 10, 0, 690 }, - { 4, 10, 106 }, { 11, 10, 717 }, { 7, 0, 440 }, { 8, 0, 230 }, - { 11, 0, 106 }, { 5, 10, 890 }, { 5, 10, 988 }, { 6, 10, 626 }, - { 14, 10, 431 }, { 10, 11, 127 }, { 13, 11, 27 }, { 17, 0, 32 }, - { 10, 10, 706 }, { 22, 10, 44 }, { 4, 0, 216 }, { 9, 0, 332 }, - { 4, 10, 698 }, { 8, 11, 119 }, { 11, 11, 267 }, { 10, 10, 17 }, - { 11, 11, 526 }, { 11, 11, 939 }, { 13, 11, 290 }, { 7, 11, 1167 }, - { 11, 11, 934 }, { 13, 11, 391 }, { 17, 11, 76 }, { 11, 11, 39 }, - { 6, 10, 84 }, { 4, 0, 914 }, { 5, 0, 800 }, { 5, 0, 852 }, - { 10, 0, 416 }, { 13, 0, 115 }, { 7, 0, 564 }, { 14, 0, 168 }, - { 4, 0, 918 }, { 5, 0, 876 }, { 6, 0, 1764 }, { 24, 0, 3 }, - { 4, 0, 92 }, { 5, 0, 274 }, { 7, 11, 126 }, { 8, 11, 84 }, - { 12, 10, 498 }, { 8, 11, 790 }, { 8, 0, 501 }, { 5, 10, 986 }, - { 6, 10, 130 }, { 7, 10, 1582 }, { 8, 10, 458 }, { 10, 10, 101 }, - { 10, 10, 318 }, { 10, 10, 823 }, { 6, 11, 64 }, { 12, 11, 377 }, - { 13, 11, 309 }, { 5, 0, 743 }, { 10, 0, 851 }, { 4, 0, 49 }, - { 7, 0, 280 }, { 7, 0, 1633 }, { 6, 0, 879 }, { 8, 0, 47 }, - { 7, 10, 1644 }, { 9, 10, 129 }, { 4, 0, 865 }, { 6, 0, 1202 }, - { 9, 11, 34 }, { 11, 11, 484 }, { 7, 10, 997 }, { 5, 0, 272 }, - { 5, 0, 908 }, { 5, 0, 942 }, { 8, 0, 197 }, { 9, 0, 47 }, - { 11, 0, 538 }, { 11, 0, 742 }, { 6, 11, 1700 }, { 7, 11, 26 }, - { 7, 11, 293 }, { 7, 11, 382 }, { 7, 11, 1026 }, { 7, 11, 1087 }, - { 7, 11, 2027 }, { 8, 11, 24 }, { 8, 11, 114 }, { 8, 11, 252 }, - { 8, 11, 727 }, { 8, 11, 729 }, { 9, 11, 30 }, { 9, 11, 199 }, - { 9, 11, 231 }, { 9, 11, 251 }, { 9, 11, 334 }, { 9, 11, 361 }, - { 9, 11, 488 }, { 9, 11, 712 }, { 10, 11, 55 }, { 10, 11, 60 }, - { 10, 11, 232 }, { 10, 11, 332 }, { 10, 11, 384 }, { 10, 11, 396 }, - { 10, 11, 504 }, { 10, 11, 542 }, { 10, 11, 652 }, { 11, 11, 20 }, - { 11, 11, 48 }, { 11, 11, 207 }, { 11, 11, 291 }, { 11, 11, 298 }, - { 11, 11, 342 }, { 11, 11, 365 }, { 11, 11, 394 }, { 11, 11, 620 }, - { 11, 11, 705 }, { 11, 11, 1017 }, { 12, 11, 123 }, { 12, 11, 340 }, - { 12, 11, 406 }, { 12, 11, 643 }, { 13, 11, 61 }, { 13, 11, 269 }, - { 13, 11, 311 }, { 13, 11, 319 }, { 13, 11, 486 }, { 14, 11, 234 }, - { 15, 11, 62 }, { 15, 11, 85 }, { 16, 11, 71 }, { 18, 11, 119 }, - { 20, 11, 105 }, { 6, 0, 1455 }, { 22, 11, 37 }, { 7, 10, 1927 }, - { 7, 0, 1911 }, { 9, 0, 891 }, { 7, 10, 1756 }, { 9, 10, 98 }, - { 7, 10, 1046 }, { 11, 10, 160 }, { 4, 0, 761 }, { 6, 11, 379 }, - { 7, 11, 270 }, { 7, 11, 1116 }, { 8, 11, 176 }, { 8, 11, 183 }, - { 9, 11, 432 }, { 9, 11, 661 }, { 12, 11, 247 }, { 12, 11, 617 }, - { 18, 11, 125 }, { 6, 10, 45 }, { 7, 10, 433 }, { 8, 10, 129 }, - { 9, 10, 21 }, { 10, 10, 392 }, { 11, 10, 79 }, { 12, 10, 499 }, - { 13, 10, 199 }, { 13, 10, 451 }, { 4, 0, 407 }, { 5, 11, 792 }, - { 5, 11, 900 }, { 4, 0, 560 }, { 7, 0, 183 }, { 13, 0, 490 }, - { 7, 10, 558 }, { 8, 10, 353 }, { 4, 0, 475 }, { 6, 0, 731 }, - { 11, 0, 35 }, { 13, 0, 71 }, { 13, 0, 177 }, { 14, 0, 422 }, - { 5, 10, 785 }, { 8, 10, 81 }, { 9, 10, 189 }, { 9, 10, 201 }, - { 11, 10, 478 }, { 11, 10, 712 }, { 13, 10, 338 }, { 4, 0, 418 }, - { 4, 0, 819 }, { 5, 10, 353 }, { 23, 10, 26 }, { 4, 11, 901 }, - { 5, 11, 776 }, { 4, 0, 575 }, { 7, 0, 818 }, { 16, 0, 92 }, - { 17, 0, 14 }, { 17, 0, 45 }, { 18, 0, 75 }, { 20, 0, 18 }, - { 6, 0, 222 }, { 7, 0, 636 }, { 7, 0, 1620 }, { 8, 0, 409 }, - { 9, 0, 693 }, { 11, 0, 77 }, { 6, 10, 25 }, { 7, 10, 855 }, - { 7, 10, 1258 }, { 16, 10, 32 }, { 6, 0, 1880 }, { 6, 0, 1887 }, - { 6, 0, 1918 }, { 6, 0, 1924 }, { 9, 0, 967 }, { 9, 0, 995 }, - { 9, 0, 1015 }, { 12, 0, 826 }, { 12, 0, 849 }, { 12, 0, 857 }, - { 12, 0, 860 }, { 12, 0, 886 }, { 12, 0, 932 }, { 18, 0, 228 }, - { 18, 0, 231 }, { 18, 0, 240 }, { 6, 0, 633 }, { 6, 0, 1308 }, - { 4, 11, 37 }, { 5, 11, 334 }, { 7, 11, 1253 }, { 10, 0, 86 }, - { 4, 10, 4 }, { 7, 10, 1118 }, { 7, 10, 1320 }, { 7, 10, 1706 }, - { 8, 10, 277 }, { 9, 10, 622 }, { 11, 10, 724 }, { 12, 10, 350 }, - { 12, 10, 397 }, { 13, 10, 28 }, { 13, 10, 159 }, { 15, 10, 89 }, - { 18, 10, 5 }, { 19, 10, 9 }, { 20, 10, 34 }, { 22, 10, 47 }, - { 4, 11, 508 }, { 9, 11, 448 }, { 12, 11, 107 }, { 18, 11, 31 }, - { 4, 0, 817 }, { 6, 0, 663 }, { 5, 0, 882 }, { 6, 0, 914 }, - { 4, 11, 540 }, { 4, 11, 533 }, { 8, 11, 608 }, { 8, 0, 885 }, - { 10, 0, 865 }, { 4, 0, 426 }, { 6, 0, 58 }, { 7, 0, 745 }, - { 7, 0, 1969 }, { 8, 0, 399 }, { 8, 0, 675 }, { 9, 0, 479 }, - { 9, 0, 731 }, { 10, 0, 330 }, { 10, 0, 593 }, { 10, 0, 817 }, - { 11, 0, 32 }, { 11, 0, 133 }, { 11, 0, 221 }, { 17, 0, 68 }, - { 6, 10, 255 }, { 7, 0, 102 }, { 9, 0, 538 }, { 9, 10, 216 }, - { 7, 11, 253 }, { 8, 11, 549 }, { 7, 11, 912 }, { 9, 10, 183 }, - { 11, 10, 286 }, { 11, 10, 956 }, { 23, 10, 3 }, { 8, 11, 527 }, - { 18, 11, 60 }, { 19, 11, 24 }, { 4, 10, 536 }, { 7, 10, 1141 }, - { 10, 10, 723 }, { 11, 10, 371 }, { 5, 11, 920 }, { 7, 0, 876 }, - { 7, 10, 285 }, { 7, 10, 560 }, { 4, 10, 690 }, { 14, 11, 126 }, - { 11, 10, 33 }, { 12, 10, 571 }, { 21, 10, 1 }, { 5, 0, 566 }, - { 9, 0, 139 }, { 10, 0, 399 }, { 11, 0, 469 }, { 12, 0, 634 }, - { 13, 0, 223 }, { 4, 11, 483 }, { 6, 0, 48 }, { 7, 0, 63 }, - { 18, 0, 12 }, { 7, 10, 1862 }, { 12, 10, 491 }, { 12, 10, 520 }, - { 13, 10, 383 }, { 14, 10, 244 }, { 7, 11, 1665 }, { 4, 11, 448 }, - { 9, 11, 495 }, { 18, 11, 104 }, { 6, 0, 114 }, { 7, 0, 1224 }, - { 7, 0, 1556 }, { 8, 0, 3 }, { 4, 10, 190 }, { 5, 10, 554 }, - { 8, 0, 576 }, { 9, 0, 267 }, { 5, 10, 1001 }, { 5, 10, 446 }, - { 5, 0, 933 }, { 11, 11, 1009 }, { 8, 11, 653 }, { 13, 11, 93 }, - { 19, 11, 14 }, { 6, 0, 692 }, { 6, 0, 821 }, { 6, 0, 1077 }, - { 5, 11, 172 }, { 7, 11, 801 }, { 10, 0, 752 }, { 4, 0, 375 }, - { 6, 0, 638 }, { 6, 0, 1011 }, { 12, 11, 540 }, { 9, 0, 96 }, - { 5, 11, 260 }, { 11, 11, 587 }, { 7, 10, 1231 }, { 12, 0, 30 }, - { 13, 0, 148 }, { 14, 0, 87 }, { 14, 0, 182 }, { 16, 0, 42 }, - { 20, 0, 70 }, { 4, 10, 304 }, { 6, 0, 1398 }, { 7, 0, 56 }, - { 7, 0, 1989 }, { 8, 0, 337 }, { 8, 0, 738 }, { 9, 0, 600 }, - { 12, 0, 37 }, { 13, 0, 447 }, { 14, 0, 92 }, { 10, 0, 666 }, - { 5, 0, 394 }, { 7, 0, 487 }, { 8, 0, 246 }, { 9, 0, 437 }, - { 6, 10, 53 }, { 6, 10, 199 }, { 7, 10, 1408 }, { 8, 10, 32 }, - { 8, 10, 93 }, { 10, 10, 397 }, { 10, 10, 629 }, { 11, 10, 593 }, - { 11, 10, 763 }, { 13, 10, 326 }, { 17, 10, 35 }, { 6, 10, 105 }, - { 9, 0, 320 }, { 10, 0, 506 }, { 10, 10, 794 }, { 7, 11, 57 }, - { 8, 11, 167 }, { 8, 11, 375 }, { 9, 11, 82 }, { 9, 11, 561 }, - { 10, 11, 620 }, { 10, 11, 770 }, { 11, 10, 704 }, { 13, 10, 396 }, - { 6, 0, 1003 }, { 5, 10, 114 }, { 5, 10, 255 }, { 13, 10, 285 }, - { 7, 0, 866 }, { 7, 0, 1163 }, { 5, 11, 531 }, { 4, 0, 328 }, - { 7, 10, 2035 }, { 8, 10, 19 }, { 9, 10, 89 }, { 10, 10, 831 }, - { 8, 11, 194 }, { 8, 11, 756 }, { 8, 0, 1000 }, { 5, 11, 453 }, - { 6, 11, 441 }, { 4, 0, 101 }, { 5, 0, 833 }, { 7, 0, 1171 }, - { 8, 0, 744 }, { 5, 0, 726 }, { 8, 10, 746 }, { 10, 0, 176 }, - { 6, 0, 9 }, { 6, 0, 397 }, { 7, 0, 53 }, { 7, 0, 1742 }, - { 10, 0, 632 }, { 11, 0, 828 }, { 12, 0, 146 }, { 7, 11, 22 }, - { 17, 11, 64 }, { 4, 0, 839 }, { 11, 0, 417 }, { 12, 0, 223 }, - { 12, 0, 265 }, { 4, 11, 102 }, { 7, 11, 815 }, { 7, 11, 1699 }, - { 11, 11, 964 }, { 5, 10, 955 }, { 8, 10, 814 }, { 6, 0, 1931 }, - { 6, 0, 2007 }, { 18, 0, 246 }, { 18, 0, 247 }, { 8, 0, 198 }, - { 11, 0, 29 }, { 12, 0, 534 }, { 7, 0, 1771 }, { 6, 0, 846 }, - { 7, 11, 1010 }, { 11, 11, 733 }, { 11, 11, 759 }, { 12, 11, 563 }, - { 13, 11, 34 }, { 14, 11, 101 }, { 18, 11, 45 }, { 18, 11, 129 }, - { 4, 0, 186 }, { 5, 0, 157 }, { 8, 0, 168 }, { 10, 0, 6 }, - { 4, 11, 899 }, { 5, 10, 56 }, { 20, 10, 100 }, { 5, 0, 875 }, - { 5, 0, 773 }, { 5, 0, 991 }, { 6, 0, 1635 }, { 6, 0, 1788 }, - { 6, 0, 1274 }, { 9, 0, 477 }, { 13, 0, 78 }, { 4, 0, 639 }, - { 7, 0, 111 }, { 8, 0, 581 }, { 12, 0, 177 }, { 6, 11, 52 }, - { 9, 11, 104 }, { 9, 11, 559 }, { 10, 10, 4 }, { 10, 10, 13 }, - { 11, 10, 638 }, { 12, 11, 308 }, { 19, 11, 87 }, { 20, 10, 57 }, - { 4, 11, 604 }, { 4, 11, 301 }, { 5, 10, 738 }, { 5, 10, 758 }, - { 6, 0, 1747 }, { 7, 11, 1440 }, { 11, 11, 854 }, { 11, 11, 872 }, - { 11, 11, 921 }, { 12, 11, 551 }, { 13, 11, 472 }, { 14, 11, 367 }, - { 7, 0, 1364 }, { 7, 0, 1907 }, { 13, 0, 158 }, { 6, 0, 873 }, - { 4, 0, 404 }, { 4, 0, 659 }, { 7, 0, 552 }, { 7, 0, 675 }, - { 7, 10, 1112 }, { 11, 10, 328 }, { 7, 11, 508 }, { 9, 10, 133 }, - { 5, 0, 391 }, { 5, 10, 110 }, { 6, 10, 169 }, { 6, 10, 1702 }, - { 7, 10, 400 }, { 8, 10, 538 }, { 9, 10, 184 }, { 9, 10, 524 }, - { 12, 10, 218 }, { 6, 11, 310 }, { 7, 11, 1849 }, { 8, 11, 72 }, - { 8, 11, 272 }, { 8, 11, 431 }, { 9, 11, 12 }, { 9, 11, 351 }, - { 10, 11, 563 }, { 10, 11, 630 }, { 10, 11, 810 }, { 11, 11, 367 }, - { 11, 11, 599 }, { 11, 11, 686 }, { 12, 11, 672 }, { 5, 0, 540 }, - { 6, 0, 1697 }, { 8, 0, 668 }, { 4, 0, 883 }, { 6, 0, 78 }, - { 12, 0, 628 }, { 18, 0, 79 }, { 6, 10, 133 }, { 9, 10, 353 }, - { 11, 10, 993 }, { 6, 11, 181 }, { 7, 11, 537 }, { 8, 11, 64 }, - { 9, 11, 127 }, { 10, 11, 496 }, { 12, 11, 510 }, { 13, 11, 384 }, - { 6, 10, 93 }, { 7, 10, 1422 }, { 7, 10, 1851 }, { 8, 10, 673 }, - { 9, 10, 529 }, { 12, 10, 43 }, { 9, 10, 371 }, { 6, 0, 1460 }, - { 6, 0, 962 }, { 4, 11, 244 }, { 7, 11, 233 }, { 9, 10, 25 }, - { 10, 10, 467 }, { 10, 10, 559 }, { 4, 10, 335 }, { 7, 10, 942 }, - { 5, 0, 460 }, { 7, 11, 334 }, { 6, 11, 1650 }, { 4, 0, 199 }, - { 11, 0, 34 }, { 5, 10, 601 }, { 8, 10, 39 }, { 10, 10, 773 }, - { 11, 10, 84 }, { 12, 10, 205 }, { 14, 10, 1 }, { 5, 10, 870 }, - { 6, 0, 388 }, { 14, 0, 474 }, { 20, 0, 120 }, { 5, 11, 369 }, - { 11, 0, 271 }, { 4, 0, 511 }, { 9, 0, 333 }, { 9, 0, 379 }, - { 10, 0, 602 }, { 11, 0, 441 }, { 11, 0, 723 }, { 11, 0, 976 }, - { 12, 0, 357 }, { 4, 10, 181 }, { 6, 0, 608 }, { 6, 10, 1652 }, - { 22, 0, 49 }, { 9, 11, 338 }, { 12, 0, 988 }, { 6, 0, 617 }, - { 5, 0, 938 }, { 8, 0, 707 }, { 4, 10, 97 }, { 5, 10, 147 }, - { 6, 10, 286 }, { 7, 10, 1362 }, { 13, 10, 176 }, { 6, 0, 756 }, - { 6, 0, 1149 }, { 5, 11, 896 }, { 6, 10, 375 }, { 7, 10, 169 }, - { 7, 10, 254 }, { 8, 10, 780 }, { 6, 0, 1583 }, { 7, 10, 1447 }, - { 11, 0, 285 }, { 7, 11, 1117 }, { 8, 11, 393 }, { 8, 11, 539 }, - { 7, 0, 344 }, { 6, 0, 469 }, { 7, 0, 1709 }, { 10, 0, 515 }, - { 5, 10, 629 }, { 7, 10, 1549 }, { 5, 11, 4 }, { 5, 11, 810 }, - { 6, 11, 13 }, { 6, 11, 538 }, { 6, 11, 1690 }, { 6, 11, 1726 }, - { 7, 11, 499 }, { 7, 11, 1819 }, { 8, 11, 148 }, { 8, 11, 696 }, - { 8, 11, 791 }, { 12, 11, 125 }, { 13, 11, 54 }, { 15, 11, 9 }, - { 7, 11, 1268 }, { 9, 0, 404 }, { 4, 0, 500 }, { 5, 0, 68 }, - { 6, 0, 383 }, { 11, 0, 216 }, { 11, 0, 340 }, { 4, 11, 925 }, - { 5, 11, 803 }, { 8, 11, 698 }, { 10, 11, 828 }, { 4, 0, 337 }, - { 6, 0, 353 }, { 7, 0, 1934 }, { 8, 0, 488 }, { 9, 0, 429 }, - { 7, 0, 236 }, { 7, 0, 1795 }, { 8, 0, 259 }, { 9, 0, 135 }, - { 9, 0, 177 }, { 9, 0, 860 }, { 10, 0, 825 }, { 11, 0, 115 }, - { 11, 0, 370 }, { 11, 0, 405 }, { 11, 0, 604 }, { 12, 0, 10 }, - { 12, 0, 667 }, { 12, 0, 669 }, { 13, 0, 76 }, { 14, 0, 310 }, - { 15, 0, 76 }, { 15, 0, 147 }, { 20, 0, 23 }, { 4, 0, 15 }, - { 4, 0, 490 }, { 5, 0, 22 }, { 6, 0, 244 }, { 7, 0, 40 }, - { 7, 0, 200 }, { 7, 0, 906 }, { 7, 0, 1199 }, { 9, 0, 616 }, - { 10, 0, 716 }, { 11, 0, 635 }, { 11, 0, 801 }, { 12, 0, 458 }, - { 12, 0, 756 }, { 4, 10, 420 }, { 6, 0, 1504 }, { 6, 0, 757 }, - { 5, 11, 383 }, { 6, 0, 1266 }, { 7, 0, 1735 }, { 5, 0, 598 }, - { 7, 0, 791 }, { 8, 0, 108 }, { 9, 0, 123 }, { 7, 10, 1570 }, - { 12, 10, 542 }, { 14, 11, 410 }, { 9, 11, 660 }, { 10, 11, 347 }, -};
diff --git a/third_party/brotli/enc/streams.cc b/third_party/brotli/enc/streams.cc deleted file mode 100644 index 17eda2d..0000000 --- a/third_party/brotli/enc/streams.cc +++ /dev/null
@@ -1,114 +0,0 @@ -/* Copyright 2009 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Convience routines to make Brotli I/O classes from some memory containers and -// files. - -#include "./streams.h" - -#include <assert.h> -#include <stdlib.h> -#include <string.h> - -namespace brotli { - -BrotliMemOut::BrotliMemOut(void* buf, size_t len) - : buf_(buf), - len_(len), - pos_(0) {} - -void BrotliMemOut::Reset(void* buf, size_t len) { - buf_ = buf; - len_ = len; - pos_ = 0; -} - -// Brotli output routine: copy n bytes to the output buffer. -bool BrotliMemOut::Write(const void *buf, size_t n) { - if (n + pos_ > len_) - return false; - char* p = reinterpret_cast<char*>(buf_) + pos_; - memcpy(p, buf, n); - pos_ += n; - return true; -} - -BrotliStringOut::BrotliStringOut(std::string* buf, size_t max_size) - : buf_(buf), - max_size_(max_size) { - assert(buf->empty()); -} - -void BrotliStringOut::Reset(std::string* buf, size_t max_size) { - buf_ = buf; - max_size_ = max_size; -} - -// Brotli output routine: add n bytes to a string. -bool BrotliStringOut::Write(const void *buf, size_t n) { - if (buf_->size() + n > max_size_) - return false; - buf_->append(static_cast<const char*>(buf), n); - return true; -} - -BrotliMemIn::BrotliMemIn(const void* buf, size_t len) - : buf_(buf), - len_(len), - pos_(0) {} - -void BrotliMemIn::Reset(const void* buf, size_t len) { - buf_ = buf; - len_ = len; - pos_ = 0; -} - -// Brotli input routine: read the next chunk of memory. -const void* BrotliMemIn::Read(size_t n, size_t* output) { - if (pos_ == len_) { - return NULL; - } - if (n > len_ - pos_) - n = len_ - pos_; - const char* p = reinterpret_cast<const char*>(buf_) + pos_; - pos_ += n; - *output = n; - return p; -} - -BrotliFileIn::BrotliFileIn(FILE* f, size_t max_read_size) - : f_(f), - buf_(new char[max_read_size]), - buf_size_(max_read_size) { } - -BrotliFileIn::~BrotliFileIn(void) { - delete[] buf_; -} - -const void* BrotliFileIn::Read(size_t n, size_t* bytes_read) { - if (n > buf_size_) { - n = buf_size_; - } else if (n == 0) { - return feof(f_) ? NULL : buf_; - } - *bytes_read = fread(buf_, 1, n, f_); - if (*bytes_read == 0) { - return NULL; - } else { - return buf_; - } -} - -BrotliFileOut::BrotliFileOut(FILE* f) : f_(f) {} - -bool BrotliFileOut::Write(const void* buf, size_t n) { - if (fwrite(buf, n, 1, f_) != 1) { - return false; - } - return true; -} - -} // namespace brotli
diff --git a/third_party/brotli/enc/streams.h b/third_party/brotli/enc/streams.h deleted file mode 100644 index 7fb28092..0000000 --- a/third_party/brotli/enc/streams.h +++ /dev/null
@@ -1,121 +0,0 @@ -/* Copyright 2009 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Input and output classes for streaming brotli compression. - -#ifndef BROTLI_ENC_STREAMS_H_ -#define BROTLI_ENC_STREAMS_H_ - -#include <stdio.h> -#include <string> -#include "./port.h" -#include "./types.h" - -namespace brotli { - -// Input interface for the compression routines. -class BrotliIn { - public: - virtual ~BrotliIn(void) {} - - // Return a pointer to the next block of input of at most n bytes. - // Return the actual length in *nread. - // At end of data, return NULL. Don't return NULL if there is more data - // to read, even if called with n == 0. - // Read will only be called if some of its bytes are needed. - virtual const void* Read(size_t n, size_t* nread) = 0; -}; - -// Output interface for the compression routines. -class BrotliOut { - public: - virtual ~BrotliOut(void) {} - - // Write n bytes of data from buf. - // Return true if all written, false otherwise. - virtual bool Write(const void *buf, size_t n) = 0; -}; - -// Adapter class to make BrotliIn objects from raw memory. -class BrotliMemIn : public BrotliIn { - public: - BrotliMemIn(const void* buf, size_t len); - - void Reset(const void* buf, size_t len); - - // returns the amount of data consumed - size_t position(void) const { return pos_; } - - const void* Read(size_t n, size_t* OUTPUT); - - private: - const void* buf_; // start of input buffer - size_t len_; // length of input - size_t pos_; // current read position within input -}; - -// Adapter class to make BrotliOut objects from raw memory. -class BrotliMemOut : public BrotliOut { - public: - BrotliMemOut(void* buf, size_t len); - - void Reset(void* buf, size_t len); - - // returns the amount of data written - size_t position(void) const { return pos_; } - - bool Write(const void* buf, size_t n); - - private: - void* buf_; // start of output buffer - size_t len_; // length of output - size_t pos_; // current write position within output -}; - -// Adapter class to make BrotliOut objects from a string. -class BrotliStringOut : public BrotliOut { - public: - // Create a writer that appends its data to buf. - // buf->size() will grow to at most max_size - // buf is expected to be empty when constructing BrotliStringOut. - BrotliStringOut(std::string* buf, size_t max_size); - - void Reset(std::string* buf, size_t max_len); - - bool Write(const void* buf, size_t n); - - private: - std::string* buf_; // start of output buffer - size_t max_size_; // max length of output -}; - -// Adapter class to make BrotliIn object from a file. -class BrotliFileIn : public BrotliIn { - public: - BrotliFileIn(FILE* f, size_t max_read_size); - ~BrotliFileIn(void); - - const void* Read(size_t n, size_t* bytes_read); - - private: - FILE* f_; - char* buf_; - size_t buf_size_; -}; - -// Adapter class to make BrotliOut object from a file. -class BrotliFileOut : public BrotliOut { - public: - explicit BrotliFileOut(FILE* f); - - bool Write(const void* buf, size_t n); - private: - FILE* f_; -}; - -} // namespace brotli - -#endif // BROTLI_ENC_STREAMS_H_
diff --git a/third_party/brotli/enc/transform.h b/third_party/brotli/enc/transform.h deleted file mode 100644 index 1ec3849..0000000 --- a/third_party/brotli/enc/transform.h +++ /dev/null
@@ -1,248 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -// Transformations on dictionary words. - -#ifndef BROTLI_ENC_TRANSFORM_H_ -#define BROTLI_ENC_TRANSFORM_H_ - -#include <string> - -#include "./dictionary.h" - -namespace brotli { - -enum WordTransformType { - kIdentity = 0, - kOmitLast1 = 1, - kOmitLast2 = 2, - kOmitLast3 = 3, - kOmitLast4 = 4, - kOmitLast5 = 5, - kOmitLast6 = 6, - kOmitLast7 = 7, - kOmitLast8 = 8, - kOmitLast9 = 9, - kUppercaseFirst = 10, - kUppercaseAll = 11, - kOmitFirst1 = 12, - kOmitFirst2 = 13, - kOmitFirst3 = 14, - kOmitFirst4 = 15, - kOmitFirst5 = 16, - kOmitFirst6 = 17, - kOmitFirst7 = 18, - kOmitFirst8 = 19, - kOmitFirst9 = 20 -}; - -struct Transform { - const char* prefix; - WordTransformType word_transform; - const char* suffix; -}; - -static const Transform kTransforms[] = { - { "", kIdentity, "" }, - { "", kIdentity, " " }, - { " ", kIdentity, " " }, - { "", kOmitFirst1, "" }, - { "", kUppercaseFirst, " " }, - { "", kIdentity, " the " }, - { " ", kIdentity, "" }, - { "s ", kIdentity, " " }, - { "", kIdentity, " of " }, - { "", kUppercaseFirst, "" }, - { "", kIdentity, " and " }, - { "", kOmitFirst2, "" }, - { "", kOmitLast1, "" }, - { ", ", kIdentity, " " }, - { "", kIdentity, ", " }, - { " ", kUppercaseFirst, " " }, - { "", kIdentity, " in " }, - { "", kIdentity, " to " }, - { "e ", kIdentity, " " }, - { "", kIdentity, "\"" }, - { "", kIdentity, "." }, - { "", kIdentity, "\">" }, - { "", kIdentity, "\n" }, - { "", kOmitLast3, "" }, - { "", kIdentity, "]" }, - { "", kIdentity, " for " }, - { "", kOmitFirst3, "" }, - { "", kOmitLast2, "" }, - { "", kIdentity, " a " }, - { "", kIdentity, " that " }, - { " ", kUppercaseFirst, "" }, - { "", kIdentity, ". " }, - { ".", kIdentity, "" }, - { " ", kIdentity, ", " }, - { "", kOmitFirst4, "" }, - { "", kIdentity, " with " }, - { "", kIdentity, "'" }, - { "", kIdentity, " from " }, - { "", kIdentity, " by " }, - { "", kOmitFirst5, "" }, - { "", kOmitFirst6, "" }, - { " the ", kIdentity, "" }, - { "", kOmitLast4, "" }, - { "", kIdentity, ". The " }, - { "", kUppercaseAll, "" }, - { "", kIdentity, " on " }, - { "", kIdentity, " as " }, - { "", kIdentity, " is " }, - { "", kOmitLast7, "" }, - { "", kOmitLast1, "ing " }, - { "", kIdentity, "\n\t" }, - { "", kIdentity, ":" }, - { " ", kIdentity, ". " }, - { "", kIdentity, "ed " }, - { "", kOmitFirst9, "" }, - { "", kOmitFirst7, "" }, - { "", kOmitLast6, "" }, - { "", kIdentity, "(" }, - { "", kUppercaseFirst, ", " }, - { "", kOmitLast8, "" }, - { "", kIdentity, " at " }, - { "", kIdentity, "ly " }, - { " the ", kIdentity, " of " }, - { "", kOmitLast5, "" }, - { "", kOmitLast9, "" }, - { " ", kUppercaseFirst, ", " }, - { "", kUppercaseFirst, "\"" }, - { ".", kIdentity, "(" }, - { "", kUppercaseAll, " " }, - { "", kUppercaseFirst, "\">" }, - { "", kIdentity, "=\"" }, - { " ", kIdentity, "." }, - { ".com/", kIdentity, "" }, - { " the ", kIdentity, " of the " }, - { "", kUppercaseFirst, "'" }, - { "", kIdentity, ". This " }, - { "", kIdentity, "," }, - { ".", kIdentity, " " }, - { "", kUppercaseFirst, "(" }, - { "", kUppercaseFirst, "." }, - { "", kIdentity, " not " }, - { " ", kIdentity, "=\"" }, - { "", kIdentity, "er " }, - { " ", kUppercaseAll, " " }, - { "", kIdentity, "al " }, - { " ", kUppercaseAll, "" }, - { "", kIdentity, "='" }, - { "", kUppercaseAll, "\"" }, - { "", kUppercaseFirst, ". " }, - { " ", kIdentity, "(" }, - { "", kIdentity, "ful " }, - { " ", kUppercaseFirst, ". " }, - { "", kIdentity, "ive " }, - { "", kIdentity, "less " }, - { "", kUppercaseAll, "'" }, - { "", kIdentity, "est " }, - { " ", kUppercaseFirst, "." }, - { "", kUppercaseAll, "\">" }, - { " ", kIdentity, "='" }, - { "", kUppercaseFirst, "," }, - { "", kIdentity, "ize " }, - { "", kUppercaseAll, "." }, - { "\xc2\xa0", kIdentity, "" }, - { " ", kIdentity, "," }, - { "", kUppercaseFirst, "=\"" }, - { "", kUppercaseAll, "=\"" }, - { "", kIdentity, "ous " }, - { "", kUppercaseAll, ", " }, - { "", kUppercaseFirst, "='" }, - { " ", kUppercaseFirst, "," }, - { " ", kUppercaseAll, "=\"" }, - { " ", kUppercaseAll, ", " }, - { "", kUppercaseAll, "," }, - { "", kUppercaseAll, "(" }, - { "", kUppercaseAll, ". " }, - { " ", kUppercaseAll, "." }, - { "", kUppercaseAll, "='" }, - { " ", kUppercaseAll, ". " }, - { " ", kUppercaseFirst, "=\"" }, - { " ", kUppercaseAll, "='" }, - { " ", kUppercaseFirst, "='" }, -}; - -static const size_t kNumTransforms = - sizeof(kTransforms) / sizeof(kTransforms[0]); - -static const size_t kOmitLastNTransforms[10] = { - 0, 12, 27, 23, 42, 63, 56, 48, 59, 64, -}; - -static size_t ToUpperCase(uint8_t *p, size_t len) { - if (len == 1 || p[0] < 0xc0) { - if (p[0] >= 'a' && p[0] <= 'z') { - p[0] ^= 32; - } - return 1; - } - if (p[0] < 0xe0) { - p[1] ^= 32; - return 2; - } - if (len == 2) { - return 2; - } - p[2] ^= 5; - return 3; -} - -inline std::string TransformWord( - WordTransformType transform_type, const uint8_t* word, size_t len) { - if (transform_type <= kOmitLast9) { - if (len <= static_cast<size_t>(transform_type)) { - return std::string(); - } - return std::string(word, word + len - transform_type); - } - - if (transform_type >= kOmitFirst1) { - const size_t skip = transform_type - (kOmitFirst1 - 1); - if (len <= skip) { - return std::string(); - } - return std::string(word + skip, word + len); - } - - std::string ret = std::string(word, word + len); - uint8_t *uppercase = reinterpret_cast<uint8_t*>(&ret[0]); - if (transform_type == kUppercaseFirst) { - ToUpperCase(uppercase, len); - } else if (transform_type == kUppercaseAll) { - size_t position = 0; - while (position < len) { - size_t step = ToUpperCase(uppercase, len - position); - uppercase += step; - position += step; - } - } - return ret; -} - -inline std::string ApplyTransform( - const Transform& t, const uint8_t* word, size_t len) { - return std::string(t.prefix) + - TransformWord(t.word_transform, word, len) + std::string(t.suffix); -} - -inline std::string GetTransformedDictionaryWord(size_t len_code, - size_t word_id) { - size_t num_words = 1u << kBrotliDictionarySizeBitsByLength[len_code]; - size_t offset = kBrotliDictionaryOffsetsByLength[len_code]; - size_t t = word_id / num_words; - size_t word_idx = word_id % num_words; - offset += len_code * word_idx; - const uint8_t* word = &kBrotliDictionary[offset]; - return ApplyTransform(kTransforms[t], word, len_code); -} - -} // namespace brotli - -#endif // BROTLI_ENC_TRANSFORM_H_
diff --git a/third_party/brotli/enc/types.h b/third_party/brotli/enc/types.h deleted file mode 100644 index 266a9cd..0000000 --- a/third_party/brotli/enc/types.h +++ /dev/null
@@ -1,29 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* Common types */ - -#ifndef BROTLI_ENC_TYPES_H_ -#define BROTLI_ENC_TYPES_H_ - -#include <stddef.h> /* for size_t */ - -#if defined(_MSC_VER) && (_MSC_VER < 1600) -typedef __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -typedef __int64 int64_t; -#else -#include <stdint.h> -#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ - -#define MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low) - -#endif /* BROTLI_ENC_TYPES_H_ */
diff --git a/third_party/brotli/enc/utf8_util.cc b/third_party/brotli/enc/utf8_util.c similarity index 62% rename from third_party/brotli/enc/utf8_util.cc rename to third_party/brotli/enc/utf8_util.c index a2b5c3a6..a334927 100644 --- a/third_party/brotli/enc/utf8_util.cc +++ b/third_party/brotli/enc/utf8_util.c
@@ -4,25 +4,26 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Heuristics for deciding about the UTF8-ness of strings. +/* Heuristics for deciding about the UTF8-ness of strings. */ #include "./utf8_util.h" -#include "./types.h" +#include <brotli/types.h> -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -namespace { - -size_t ParseAsUTF8(int* symbol, const uint8_t* input, size_t size) { - // ASCII +static size_t BrotliParseAsUTF8( + int* symbol, const uint8_t* input, size_t size) { + /* ASCII */ if ((input[0] & 0x80) == 0) { *symbol = input[0]; if (*symbol > 0) { return 1; } } - // 2-byte UTF8 + /* 2-byte UTF8 */ if (size > 1u && (input[0] & 0xe0) == 0xc0 && (input[1] & 0xc0) == 0x80) { @@ -32,7 +33,7 @@ return 2; } } - // 3-byte UFT8 + /* 3-byte UFT8 */ if (size > 2u && (input[0] & 0xf0) == 0xe0 && (input[1] & 0xc0) == 0x80 && @@ -44,7 +45,7 @@ return 3; } } - // 4-byte UFT8 + /* 4-byte UFT8 */ if (size > 3u && (input[0] & 0xf8) == 0xf0 && (input[1] & 0xc0) == 0x80 && @@ -58,26 +59,27 @@ return 4; } } - // Not UTF8, emit a special symbol above the UTF8-code space + /* Not UTF8, emit a special symbol above the UTF8-code space */ *symbol = 0x110000 | input[0]; return 1; } -} // namespace - -// Returns true if at least min_fraction of the data is UTF8-encoded. -bool IsMostlyUTF8(const uint8_t* data, const size_t pos, const size_t mask, - const size_t length, const double min_fraction) { +/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/ +BROTLI_BOOL BrotliIsMostlyUTF8( + const uint8_t* data, const size_t pos, const size_t mask, + const size_t length, const double min_fraction) { size_t size_utf8 = 0; size_t i = 0; while (i < length) { int symbol; - size_t bytes_read = ParseAsUTF8( - &symbol, &data[(pos + i) & mask], length - i); + size_t bytes_read = + BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i); i += bytes_read; if (symbol < 0x110000) size_utf8 += bytes_read; } - return size_utf8 > min_fraction * static_cast<double>(length); + return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length); } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif
diff --git a/third_party/brotli/enc/utf8_util.h b/third_party/brotli/enc/utf8_util.h index 74f22b6a..2ede131e 100644 --- a/third_party/brotli/enc/utf8_util.h +++ b/third_party/brotli/enc/utf8_util.h
@@ -4,22 +4,29 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Heuristics for deciding about the UTF8-ness of strings. +/* Heuristics for deciding about the UTF8-ness of strings. */ #ifndef BROTLI_ENC_UTF8_UTIL_H_ #define BROTLI_ENC_UTF8_UTIL_H_ -#include "./types.h" +#include <brotli/types.h> +#include "./port.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif static const double kMinUTF8Ratio = 0.75; -// Returns true if at least min_fraction of the bytes between pos and -// pos + length in the (data, mask) ringbuffer is UTF8-encoded. -bool IsMostlyUTF8(const uint8_t* data, const size_t pos, const size_t mask, - const size_t length, const double min_fraction); +/* Returns 1 if at least min_fraction of the bytes between pos and + pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise + returns 0. */ +BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8( + const uint8_t* data, const size_t pos, const size_t mask, + const size_t length, const double min_fraction); -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_UTF8_UTIL_H_ +#endif /* BROTLI_ENC_UTF8_UTIL_H_ */
diff --git a/third_party/brotli/enc/write_bits.h b/third_party/brotli/enc/write_bits.h index b605203a..3999c917 100644 --- a/third_party/brotli/enc/write_bits.h +++ b/third_party/brotli/enc/write_bits.h
@@ -4,74 +4,78 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -// Write bits into a byte array. +/* Write bits into a byte array. */ #ifndef BROTLI_ENC_WRITE_BITS_H_ #define BROTLI_ENC_WRITE_BITS_H_ #include <assert.h> -#include <stdio.h> +#include <stdio.h> /* printf */ +#include <brotli/types.h> #include "./port.h" -#include "./types.h" -namespace brotli { +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif -//#define BIT_WRITER_DEBUG +/*#define BIT_WRITER_DEBUG */ -// This function writes bits into bytes in increasing addresses, and within -// a byte least-significant-bit first. -// -// The function can write up to 56 bits in one go with WriteBits -// Example: let's assume that 3 bits (Rs below) have been written already: -// -// BYTE-0 BYTE+1 BYTE+2 -// -// 0000 0RRR 0000 0000 0000 0000 -// -// Now, we could write 5 or less bits in MSB by just sifting by 3 -// and OR'ing to BYTE-0. -// -// For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, -// and locate the rest in BYTE+1, BYTE+2, etc. -inline void WriteBits(size_t n_bits, - uint64_t bits, - size_t * __restrict pos, - uint8_t * __restrict array) { +/* This function writes bits into bytes in increasing addresses, and within + a byte least-significant-bit first. + + The function can write up to 56 bits in one go with WriteBits + Example: let's assume that 3 bits (Rs below) have been written already: + + BYTE-0 BYTE+1 BYTE+2 + + 0000 0RRR 0000 0000 0000 0000 + + Now, we could write 5 or less bits in MSB by just sifting by 3 + and OR'ing to BYTE-0. + + For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, + and locate the rest in BYTE+1, BYTE+2, etc. */ +static BROTLI_INLINE void BrotliWriteBits(size_t n_bits, + uint64_t bits, + size_t * BROTLI_RESTRICT pos, + uint8_t * BROTLI_RESTRICT array) { +#ifdef IS_LITTLE_ENDIAN + /* This branch of the code can write up to 56 bits at a time, + 7 bits are lost by being perhaps already in *p and at least + 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 + bits are in *p and we write 57 bits, then the next write will + access a byte that was never initialized). */ + uint8_t *p = &array[*pos >> 3]; + uint64_t v = *p; #ifdef BIT_WRITER_DEBUG printf("WriteBits %2d 0x%016llx %10d\n", n_bits, bits, *pos); #endif assert((bits >> n_bits) == 0); assert(n_bits <= 56); -#ifdef IS_LITTLE_ENDIAN - // This branch of the code can write up to 56 bits at a time, - // 7 bits are lost by being perhaps already in *p and at least - // 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 - // bits are in *p and we write 57 bits, then the next write will - // access a byte that was never initialized). - uint8_t *p = &array[*pos >> 3]; - uint64_t v = *p; v |= bits << (*pos & 7); - BROTLI_UNALIGNED_STORE64(p, v); // Set some bits. + BROTLI_UNALIGNED_STORE64(p, v); /* Set some bits. */ *pos += n_bits; #else - // implicit & 0xff is assumed for uint8_t arithmetics + /* implicit & 0xff is assumed for uint8_t arithmetics */ uint8_t *array_pos = &array[*pos >> 3]; const size_t bits_reserved_in_first_byte = (*pos & 7); + size_t bits_left_to_write; bits <<= bits_reserved_in_first_byte; - *array_pos++ |= static_cast<uint8_t>(bits); - for (size_t bits_left_to_write = n_bits + bits_reserved_in_first_byte; + *array_pos++ |= (uint8_t)bits; + for (bits_left_to_write = n_bits + bits_reserved_in_first_byte; bits_left_to_write >= 9; bits_left_to_write -= 8) { bits >>= 8; - *array_pos++ = static_cast<uint8_t>(bits); + *array_pos++ = (uint8_t)bits; } *array_pos = 0; *pos += n_bits; #endif } -inline void WriteBitsPrepareStorage(size_t pos, uint8_t *array) { +static BROTLI_INLINE void BrotliWriteBitsPrepareStorage( + size_t pos, uint8_t *array) { #ifdef BIT_WRITER_DEBUG printf("WriteBitsPrepareStorage %10d\n", pos); #endif @@ -79,6 +83,8 @@ array[pos >> 3] = 0; } -} // namespace brotli +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif -#endif // BROTLI_ENC_WRITE_BITS_H_ +#endif /* BROTLI_ENC_WRITE_BITS_H_ */
diff --git a/third_party/brotli/include/brotli/decode.h b/third_party/brotli/include/brotli/decode.h new file mode 100644 index 0000000..1e6b587e --- /dev/null +++ b/third_party/brotli/include/brotli/decode.h
@@ -0,0 +1,334 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** + * @file + * API for Brotli decompression. + */ + +#ifndef BROTLI_DEC_DECODE_H_ +#define BROTLI_DEC_DECODE_H_ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/** + * Opaque structure that holds decoder state. + * + * Allocated and initialized with ::BrotliDecoderCreateInstance. + * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance. + */ +typedef struct BrotliDecoderStateStruct BrotliDecoderState; + +/** + * Result type for ::BrotliDecoderDecompress and + * ::BrotliDecoderDecompressStream functions. + */ +typedef enum { + /** Decoding error, e.g. corrupted input or memory allocation problem. */ + BROTLI_DECODER_RESULT_ERROR = 0, + /** Decoding successfully completed */ + BROTLI_DECODER_RESULT_SUCCESS = 1, + /** Partially done; should be called again with more input */ + BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2, + /** Partially done; should be called again with more output */ + BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3 +} BrotliDecoderResult; + +/** + * Template that evaluates items of ::BrotliDecoderErrorCode. + * + * Example: @code {.cpp} + * // Log Brotli error code. + * switch (brotliDecoderErrorCode) { + * #define CASE_(PREFIX, NAME, CODE) \ + * case BROTLI_DECODER ## PREFIX ## NAME: \ + * LOG(INFO) << "error code:" << #NAME; \ + * break; + * #define NEWLINE_ + * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_) + * #undef CASE_ + * #undef NEWLINE_ + * default: LOG(FATAL) << "unknown brotli error code"; + * } + * @endcode + */ +#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \ + BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \ + /* Same as BrotliDecoderResult values */ \ + BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \ + BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \ + BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \ + \ + /* Errors caused by invalid input */ \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \ + \ + /* -16..-19 codes are reserved */ \ + \ + BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \ + \ + /* Memory allocation problems */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \ + /* Literal, insert and distance trees together */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \ + /* -23..-24 codes are reserved for distinct tree groups */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \ + /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \ + BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \ + \ + /* "Impossible" states */ \ + BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31) + +/** + * Error code for detailed logging / production debugging. + * + * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE. + */ +typedef enum { +#define BROTLI_COMMA_ , +#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \ + BROTLI_DECODER ## PREFIX ## NAME = CODE + BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_) +} BrotliDecoderErrorCode; +#undef BROTLI_ERROR_CODE_ENUM_ITEM_ +#undef BROTLI_COMMA_ + +/** + * The value of the last error code, negative integer. + * + * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE + * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in + * ::BrotliDecoderErrorCode enumeration. + */ +#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE + +/** + * Creates an instance of ::BrotliDecoderState and initializes it. + * + * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the + * case they are both zero, default memory allocators are used. @p opaque is + * passed to @p alloc_func and @p free_func when they are called. + * + * @param alloc_func custom memory allocation function + * @param free_func custom memory fee function + * @param opaque custom memory manager handle + * @returns @c 0 if instance can not be allocated or initialized + * @returns pointer to initialized ::BrotliDecoderState otherwise + */ +BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance( + brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); + +/** + * Deinitializes and frees ::BrotliDecoderState instance. + * + * @param state decoder instance to be cleaned up and deallocated + */ +BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state); + +/** + * Performs one-shot memory-to-memory decompression. + * + * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets + * @p *decoded_size to the decompressed length. + * + * @param encoded_size size of @p encoded_buffer + * @param encoded_buffer compressed data buffer with at least @p encoded_size + * addressable bytes + * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n + * @b out: length of decompressed data written to + * @p decoded_buffer + * @param decoded_buffer decompressed data destination buffer + * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory + * allocation failed, or @p decoded_buffer is not large enough; + * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise + */ +BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress( + size_t encoded_size, + const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)], + size_t* decoded_size, + uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]); + +/** + * Decompresses the input stream to the output stream. + * + * The values @p *available_in and @p *available_out must specify the number of + * bytes addressable at @p *next_in and @p *next_out respectively. + * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. + * + * After each call, @p *available_in will be decremented by the amount of input + * bytes consumed, and the @p *next_in pointer will be incremented by that + * amount. Similarly, @p *available_out will be decremented by the amount of + * output bytes written, and the @p *next_out pointer will be incremented by + * that amount. + * + * @p total_out, if it is not a null-pointer, will be set to the number + * of bytes decompressed since the last @p state initialization. + * + * @note Input is never overconsumed, so @p next_in and @p available_in could be + * passed to the next consumer after decoding is complete. + * + * @param state decoder instance + * @param[in, out] available_in @b in: amount of available input; \n + * @b out: amount of unused input + * @param[in, out] next_in pointer to the next compressed byte + * @param[in, out] available_out @b in: length of output buffer; \n + * @b out: remaining size of output buffer + * @param[in, out] next_out output buffer cursor; + * can be @c NULL if @p available_out is @c 0 + * @param[out] total_out number of bytes decompressed so far; can be @c NULL + * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory + * allocation failed, arguments were invalid, etc.; + * use ::BrotliDecoderGetErrorCode to get detailed error code + * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until + * more output space is provided + * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until + * more input data is provided + * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more + * input might be consumed and no more output will be produced + */ +BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream( + BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in, + size_t* available_out, uint8_t** next_out, size_t* total_out); + +/** + * Prepends LZ77 dictionary. + * + * Fills the fresh ::BrotliDecoderState with additional data corpus for LZ77 + * backward references. + * + * @note Not to be confused with the static dictionary (see RFC7932 section 8). + * @warning The dictionary must exist in memory until decoding is done and + * is owned by the caller. + * + * Workflow: + * -# Allocate and initialize state with ::BrotliDecoderCreateInstance + * -# Invoke ::BrotliDecoderSetCustomDictionary + * -# Use ::BrotliDecoderDecompressStream + * -# Clean up and free state with ::BrotliDecoderDestroyInstance + * + * @param state decoder instance + * @param size length of @p dict; should be less or equal to 2^24 (16MiB), + * otherwise the dictionary will be ignored + * @param dict "dictionary"; @b MUST be the same as used during compression + */ +BROTLI_DEC_API void BrotliDecoderSetCustomDictionary( + BrotliDecoderState* state, size_t size, + const uint8_t dict[BROTLI_ARRAY_PARAM(size)]); + +/** + * Checks if decoder has more output. + * + * @param state decoder instance + * @returns ::BROTLI_TRUE, if decoder has some unconsumed output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput( + const BrotliDecoderState* state); + +/** + * Acquires pointer to internal output buffer. + * + * This method is used to make language bindings easier and more efficient: + * -# push data to ::BrotliDecoderDecompressStream, + * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported + * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific + * entity + * + * Also this could be useful if there is an output stream that is able to + * consume all the provided data (e.g. when data is saved to file system). + * + * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of + * output are considered consumed for all consecutive calls to the + * instance methods; returned pointer becomes invalidated as well. + * + * @note Decoder output is not guaranteed to be contiguous. This means that + * after the size-unrestricted call to ::BrotliDecoderTakeOutput, + * immediate next call to ::BrotliDecoderTakeOutput may return more data. + * + * @param state decoder instance + * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if + * any amount could be handled; \n + * @b out: amount of data pointed by returned pointer and + * considered consumed; \n + * out value is never greater than in value, unless it is @c 0 + * @returns pointer to output data + */ +BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput( + BrotliDecoderState* state, size_t* size); + +/** + * Checks if instance has already consumed input. + * + * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be + * reused. + * + * @param state decoder instance + * @returns ::BROTLI_TRUE if decoder has already used some input bytes + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state); + +/** + * Checks if decoder instance reached the final state. + * + * @param state decoder instance + * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of + * the input and produced all of the output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* state); + +/** + * Acquires a detailed error code. + * + * Should be used only after ::BrotliDecoderDecompressStream returns + * ::BROTLI_DECODER_RESULT_ERROR. + * + * See also ::BrotliDecoderErrorString + * + * @param state decoder instance + * @returns last saved error code + */ +BrotliDecoderErrorCode BrotliDecoderGetErrorCode( + const BrotliDecoderState* state); + +/** + * Converts error code to a c-string. + */ +BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c); + +/** + * Gets a decoder library version. + * + * Look at BROTLI_VERSION for more information. + */ +BROTLI_DEC_API uint32_t BrotliDecoderVersion(void); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/third_party/brotli/include/brotli/encode.h b/third_party/brotli/include/brotli/encode.h new file mode 100644 index 0000000..4856fda --- /dev/null +++ b/third_party/brotli/include/brotli/encode.h
@@ -0,0 +1,428 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** + * @file + * API for Brotli compression. + */ + +#ifndef BROTLI_ENC_ENCODE_H_ +#define BROTLI_ENC_ENCODE_H_ + +#include <brotli/port.h> +#include <brotli/types.h> + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */ +#define BROTLI_MIN_WINDOW_BITS 10 +/** + * Maximal value for ::BROTLI_PARAM_LGWIN parameter. + * + * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant. + */ +#define BROTLI_MAX_WINDOW_BITS 24 +/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */ +#define BROTLI_MIN_INPUT_BLOCK_BITS 16 +/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */ +#define BROTLI_MAX_INPUT_BLOCK_BITS 24 +/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */ +#define BROTLI_MIN_QUALITY 0 +/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */ +#define BROTLI_MAX_QUALITY 11 + +BROTLI_DEPRECATED static const int kBrotliMinWindowBits = + BROTLI_MIN_WINDOW_BITS; +BROTLI_DEPRECATED static const int kBrotliMaxWindowBits = + BROTLI_MAX_WINDOW_BITS; + +/** Options for ::BROTLI_PARAM_MODE parameter. */ +typedef enum BrotliEncoderMode { + /** + * Default compression mode. + * + * In this mode compressor does not know anything in advance about the + * properties of the input. + */ + BROTLI_MODE_GENERIC = 0, + /** Compression mode for UTF-8 formated text input. */ + BROTLI_MODE_TEXT = 1, + /** Compression mode used in WOFF 2.0. */ + BROTLI_MODE_FONT = 2 +} BrotliEncoderMode; + +/** Default value for ::BROTLI_PARAM_QUALITY parameter. */ +#define BROTLI_DEFAULT_QUALITY 11 +/** Default value for ::BROTLI_PARAM_LGWIN parameter. */ +#define BROTLI_DEFAULT_WINDOW 22 +/** Default value for ::BROTLI_PARAM_MODE parameter. */ +#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC + +/** Operations that can be performed by streaming encoder. */ +typedef enum BrotliEncoderOperation { + /** + * Process input. + * + * Encoder may postpone producing output, until it has processed enough input. + */ + BROTLI_OPERATION_PROCESS = 0, + /** + * Produce output for all processed input. + * + * Actual flush is performed when input stream is depleted and there is enough + * space in output stream. This means that client should repeat + * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and + * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. + * + * @warning Until flush is complete, client @b SHOULD @b NOT swap, + * reduce or extend input stream. + * + * When flush is complete, output data will be sufficient for decoder to + * reproduce all the given input. + */ + BROTLI_OPERATION_FLUSH = 1, + /** + * Finalize the stream. + * + * Actual finalization is performed when input stream is depleted and there is + * enough space in output stream. This means that client should repeat + * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and + * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. + * + * @warning Until finalization is complete, client @b SHOULD @b NOT swap, + * reduce or extend input stream. + * + * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and + * output fully dumped. + * + * Adding more input data to finalized stream is impossible. + */ + BROTLI_OPERATION_FINISH = 2, + /** + * Emit metadata block to stream. + * + * Metadata is opaque to Brotli: neither encoder, nor decoder processes this + * data or relies on it. It may be used to pass some extra information from + * encoder client to decoder client without interfering with main data stream. + * + * @note Encoder may emit empty metadata blocks internally, to pad encoded + * stream to byte boundary. + * + * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap, + * reduce or extend input stream. + * + * @warning The whole content of input buffer is considered to be the content + * of metadata block. Do @b NOT @e append metadata to input stream, + * before it is depleted with other operations. + * + * Stream is soft-flushed before metadata block is emitted. Metadata block + * @b MUST be no longer than than 16MiB. + */ + BROTLI_OPERATION_EMIT_METADATA = 3 +} BrotliEncoderOperation; + +/** Options to be used with ::BrotliEncoderSetParameter. */ +typedef enum BrotliEncoderParameter { + /** + * Tune encoder for specific input. + * + * ::BrotliEncoderMode enumerates all available values. + */ + BROTLI_PARAM_MODE = 0, + /** + * The main compression speed-density lever. + * + * The higher the quality, the slower the compression. Range is + * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY. + */ + BROTLI_PARAM_QUALITY = 1, + /** + * Recommended sliding LZ77 window size. + * + * Encoder may reduce this value, e.g. if input is much smaller than + * window size. + * + * Window size is `(1 << value) - 16`. + * + * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS. + */ + BROTLI_PARAM_LGWIN = 2, + /** + * Recommended input block size. + * + * Encoder may reduce this value, e.g. if input is much smaller than input + * block size. + * + * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to + * ::BROTLI_MAX_INPUT_BLOCK_BITS. + * + * @note Bigger input block size allows better compression, but consumes more + * memory. \n The rough formula of memory used for temporary input + * storage is `3 << lgBlock`. + */ + BROTLI_PARAM_LGBLOCK = 3 +} BrotliEncoderParameter; + +/** + * Opaque structure that holds encoder state. + * + * Allocated and initialized with ::BrotliEncoderCreateInstance. + * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance. + */ +typedef struct BrotliEncoderStateStruct BrotliEncoderState; + +/** + * Sets the specified parameter to the given encoder instance. + * + * @param state encoder instance + * @param param parameter to set + * @param value new parameter value + * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid + * @returns ::BROTLI_FALSE if value of parameter can not be changed at current + * encoder state (e.g. when encoding is started, window size might be + * already encoded and therefore it is impossible to change it) + * @returns ::BROTLI_TRUE if value is accepted + * @warning invalid values might be accepted in case they would not break + * encoding process. + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter( + BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value); + +/** + * Creates an instance of ::BrotliEncoderState and initializes it. + * + * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the + * case they are both zero, default memory allocators are used. @p opaque is + * passed to @p alloc_func and @p free_func when they are called. + * + * @param alloc_func custom memory allocation function + * @param free_func custom memory fee function + * @param opaque custom memory manager handle + * @returns @c 0 if instance can not be allocated or initialized + * @returns pointer to initialized ::BrotliEncoderState otherwise + */ +BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance( + brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); + +/** + * Deinitializes and frees ::BrotliEncoderState instance. + * + * @param state decoder instance to be cleaned up and deallocated + */ +BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state); + +/* Calculates maximum input size that can be processed at once. */ +BROTLI_DEPRECATED BROTLI_ENC_API size_t BrotliEncoderInputBlockSize( + BrotliEncoderState* state); + +/* Copies the given input data to the internal ring buffer. */ +BROTLI_DEPRECATED BROTLI_ENC_API void BrotliEncoderCopyInputToRingBuffer( + BrotliEncoderState* state, const size_t input_size, + const uint8_t* input_buffer); + +/* Processes the accumulated input. */ +BROTLI_DEPRECATED BROTLI_ENC_API BROTLI_BOOL BrotliEncoderWriteData( + BrotliEncoderState* state, const BROTLI_BOOL is_last, + const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output); + +/** + * Prepends imaginary LZ77 dictionary. + * + * Fills the fresh ::BrotliEncoderState with additional data corpus for LZ77 + * backward references. + * + * @note Not to be confused with the static dictionary (see RFC7932 section 8). + * + * Workflow: + * -# Allocate and initialize state with ::BrotliEncoderCreateInstance + * -# Set ::BROTLI_PARAM_LGWIN parameter + * -# Invoke ::BrotliEncoderSetCustomDictionary + * -# Use ::BrotliEncoderCompressStream + * -# Clean up and free state with ::BrotliEncoderDestroyInstance + * + * @param state encoder instance + * @param size length of @p dict; at most "window size" bytes are used + * @param dict "dictionary"; @b MUST use same dictionary during decompression + */ +BROTLI_ENC_API void BrotliEncoderSetCustomDictionary( + BrotliEncoderState* state, size_t size, + const uint8_t dict[BROTLI_ARRAY_PARAM(size)]); + +/** + * Calculates the output size bound for the given @p input_size. + * + * @warning Result is not applicable to ::BrotliEncoderCompressStream output, + * because every "flush" adds extra overhead bytes, and some encoder + * settings (e.g. quality @c 0 and @c 1) might imply a "soft flush" + * after every chunk of input. + * + * @param input_size size of projected input + * @returns @c 0 if result does not fit @c size_t + */ +BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size); + +/** + * Performs one-shot memory-to-memory compression. + * + * Compresses the data in @p input_buffer into @p encoded_buffer, and sets + * @p *encoded_size to the compressed length. + * + * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero + * value, then output is guaranteed to be no longer than that. + * + * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY + * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW + * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE + * @param input_size size of @p input_buffer + * @param input_buffer input data buffer with at least @p input_size + * addressable bytes + * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n + * @b out: length of compressed data written to + * @p encoded_buffer, or @c 0 if compression fails + * @param encoded_buffer compressed data destination buffer + * @returns ::BROTLI_FALSE in case of compression error + * @returns ::BROTLI_FALSE if output buffer is too small + * @returns ::BROTLI_TRUE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress( + int quality, int lgwin, BrotliEncoderMode mode, size_t input_size, + const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)], + size_t* encoded_size, + uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]); + +/** + * Compresses input stream to output stream. + * + * The values @p *available_in and @p *available_out must specify the number of + * bytes addressable at @p *next_in and @p *next_out respectively. + * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. + * + * After each call, @p *available_in will be decremented by the amount of input + * bytes consumed, and the @p *next_in pointer will be incremented by that + * amount. Similarly, @p *available_out will be decremented by the amount of + * output bytes written, and the @p *next_out pointer will be incremented by + * that amount. + * + * @p total_out, if it is not a null-pointer, will be set to the number + * of bytes decompressed since the last @p state initialization. + * + * + * + * Internally workflow consists of 3 tasks: + * -# (optionally) copy input data to internal buffer + * -# actually compress data and (optionally) store it to internal buffer + * -# (optionally) copy compressed bytes from internal buffer to output stream + * + * Whenever all 3 tasks can't move forward anymore, or error occurs, this + * method returns the control flow to caller. + * + * @p op is used to perform flush, finish the stream, or inject metadata block. + * See ::BrotliEncoderOperation for more information. + * + * Flushing the stream means forcing encoding of all input passed to encoder and + * completing the current output block, so it could be fully decoded by stream + * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH. + * Under some circumstances (e.g. lack of output stream capacity) this operation + * would require several calls to ::BrotliEncoderCompressStream. The method must + * be called again until both input stream is depleted and encoder has no more + * output (see ::BrotliEncoderHasMoreOutput) after the method is called. + * + * Finishing the stream means encoding of all input passed to encoder and + * adding specific "final" marks, so stream decoder could determine that stream + * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH. + * Under some circumstances (e.g. lack of output stream capacity) this operation + * would require several calls to ::BrotliEncoderCompressStream. The method must + * be called again until both input stream is depleted and encoder has no more + * output (see ::BrotliEncoderHasMoreOutput) after the method is called. + * + * @warning When flushing and finishing, @p op should not change until operation + * is complete; input stream should not be swapped, reduced or + * extended as well. + * + * @param state encoder instance + * @param op requested operation + * @param[in, out] available_in @b in: amount of available input; \n + * @b out: amount of unused input + * @param[in, out] next_in pointer to the next input byte + * @param[in, out] available_out @b in: length of output buffer; \n + * @b out: remaining size of output buffer + * @param[in, out] next_out compressed output buffer cursor; + * can be @c NULL if @p available_out is @c 0 + * @param[out] total_out number of bytes produced so far; can be @c NULL + * @returns ::BROTLI_FALSE if there was an error + * @returns ::BROTLI_TRUE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream( + BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in, + const uint8_t** next_in, size_t* available_out, uint8_t** next_out, + size_t* total_out); + +/** + * Checks if encoder instance reached the final state. + * + * @param state encoder instance + * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of + * the input and produced all of the output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state); + +/** + * Checks if encoder has more output. + * + * @param state encoder instance + * @returns ::BROTLI_TRUE, if encoder has some unconsumed output + * @returns ::BROTLI_FALSE otherwise + */ +BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput( + BrotliEncoderState* state); + +/** + * Acquires pointer to internal output buffer. + * + * This method is used to make language bindings easier and more efficient: + * -# push data to ::BrotliEncoderCompressStream, + * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE + * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific + * entity + * + * Also this could be useful if there is an output stream that is able to + * consume all the provided data (e.g. when data is saved to file system). + * + * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of + * output are considered consumed for all consecutive calls to the + * instance methods; returned pointer becomes invalidated as well. + * + * @note Encoder output is not guaranteed to be contiguous. This means that + * after the size-unrestricted call to ::BrotliEncoderTakeOutput, + * immediate next call to ::BrotliEncoderTakeOutput may return more data. + * + * @param state encoder instance + * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if + * any amount could be handled; \n + * @b out: amount of data pointed by returned pointer and + * considered consumed; \n + * out value is never greater than in value, unless it is @c 0 + * @returns pointer to output data + */ +BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput( + BrotliEncoderState* state, size_t* size); + + +/** + * Gets an encoder library version. + * + * Look at BROTLI_VERSION for more information. + */ +BROTLI_ENC_API uint32_t BrotliEncoderVersion(void); + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif + +#endif /* BROTLI_ENC_ENCODE_H_ */
diff --git a/third_party/brotli/include/brotli/port.h b/third_party/brotli/include/brotli/port.h new file mode 100644 index 0000000..da4461c --- /dev/null +++ b/third_party/brotli/include/brotli/port.h
@@ -0,0 +1,147 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Macros for compiler / platform specific features and build options. */ + +#ifndef BROTLI_COMMON_PORT_H_ +#define BROTLI_COMMON_PORT_H_ + +/* Compatibility with non-clang compilers. */ +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif + +#ifndef __has_attribute +#define __has_attribute(x) 0 +#endif + +#ifndef __has_feature +#define __has_feature(x) 0 +#endif + +#if defined(__GNUC__) && defined(__GNUC_MINOR__) +#define BROTLI_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#else +#define BROTLI_GCC_VERSION 0 +#endif + +#if defined(__ICC) +#define BROTLI_ICC_VERSION __ICC +#else +#define BROTLI_ICC_VERSION 0 +#endif + +#if defined(BROTLI_BUILD_MODERN_COMPILER) +#define BROTLI_MODERN_COMPILER 1 +#elif BROTLI_GCC_VERSION > 300 || BROTLI_ICC_VERSION >= 1600 +#define BROTLI_MODERN_COMPILER 1 +#else +#define BROTLI_MODERN_COMPILER 0 +#endif + +/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable + compilers. + +To apply compiler hint, enclose the branching condition into macros, like this: + + if (BROTLI_PREDICT_TRUE(zero == 0)) { + // main execution path + } else { + // compiler should place this code outside of main execution path + } + +OR: + + if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) { + // compiler should place this code outside of main execution path + } + +*/ +#if BROTLI_MODERN_COMPILER || __has_builtin(__builtin_expect) +#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) +#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0)) +#else +#define BROTLI_PREDICT_FALSE(x) (x) +#define BROTLI_PREDICT_TRUE(x) (x) +#endif + +#if BROTLI_MODERN_COMPILER || __has_attribute(always_inline) +#define BROTLI_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((always_inline)) +#else +#define BROTLI_ATTRIBUTE_ALWAYS_INLINE +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) +#define BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN +#elif BROTLI_MODERN_COMPILER || __has_attribute(visibility) +#define BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN \ + __attribute__ ((visibility ("hidden"))) +#else +#define BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN +#endif + +#ifndef BROTLI_INTERNAL +#define BROTLI_INTERNAL BROTLI_ATTRIBUTE_VISIBILITY_HIDDEN +#endif + +#if defined(BROTLI_SHARED_COMPILATION) && defined(_WIN32) +#if defined(BROTLICOMMON_SHARED_COMPILATION) +#define BROTLI_COMMON_API __declspec(dllexport) +#else +#define BROTLI_COMMON_API __declspec(dllimport) +#endif /* BROTLICOMMON_SHARED_COMPILATION */ +#if defined(BROTLIDEC_SHARED_COMPILATION) +#define BROTLI_DEC_API __declspec(dllexport) +#else +#define BROTLI_DEC_API __declspec(dllimport) +#endif /* BROTLIDEC_SHARED_COMPILATION */ +#if defined(BROTLIENC_SHARED_COMPILATION) +#define BROTLI_ENC_API __declspec(dllexport) +#else +#define BROTLI_ENC_API __declspec(dllimport) +#endif /* BROTLIENC_SHARED_COMPILATION */ +#else /* BROTLI_SHARED_COMPILATION && _WIN32 */ +#define BROTLI_COMMON_API +#define BROTLI_DEC_API +#define BROTLI_ENC_API +#endif + +#ifndef _MSC_VER +#if defined(__cplusplus) || !defined(__STRICT_ANSI__) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +#define BROTLI_INLINE inline BROTLI_ATTRIBUTE_ALWAYS_INLINE +#else +#define BROTLI_INLINE +#endif +#else /* _MSC_VER */ +#define BROTLI_INLINE __forceinline +#endif /* _MSC_VER */ + +#if !defined(__cplusplus) && !defined(c_plusplus) && \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) +#define BROTLI_RESTRICT restrict +#elif BROTLI_GCC_VERSION > 295 || defined(__llvm__) +#define BROTLI_RESTRICT __restrict +#else +#define BROTLI_RESTRICT +#endif + +#if BROTLI_MODERN_COMPILER || __has_attribute(noinline) +#define BROTLI_NOINLINE __attribute__((noinline)) +#else +#define BROTLI_NOINLINE +#endif + + +#if BROTLI_MODERN_COMPILER || __has_attribute(deprecated) +#define BROTLI_DEPRECATED __attribute__((deprecated)) +#else +#define BROTLI_DEPRECATED +#endif + +#define BROTLI_UNUSED(X) (void)(X) + +#endif /* BROTLI_COMMON_PORT_H_ */
diff --git a/third_party/brotli/include/brotli/types.h b/third_party/brotli/include/brotli/types.h new file mode 100644 index 0000000..f982c642 --- /dev/null +++ b/third_party/brotli/include/brotli/types.h
@@ -0,0 +1,90 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/** + * @file + * Common types used in decoder and encoder API. + */ + +#ifndef BROTLI_COMMON_TYPES_H_ +#define BROTLI_COMMON_TYPES_H_ + +#include <stddef.h> /* for size_t */ + +#if defined(_MSC_VER) && (_MSC_VER < 1600) +typedef __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +typedef __int64 int64_t; +#else +#include <stdint.h> +#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ + +/** + * A portable @c bool replacement. + * + * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it + * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE. + * + * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or + * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros. + * + * ::BROTLI_BOOL values returned by Brotli should not be tested for equality + * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be + * evaluated, for example: @code{.cpp} + * if (SomeBrotliFunction(encoder, BROTLI_TRUE) && + * !OtherBrotliFunction(decoder, BROTLI_FALSE)) { + * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4)); + * DoSomething(x); + * } + * @endcode + */ +#define BROTLI_BOOL int +/** Portable @c true replacement. */ +#define BROTLI_TRUE 1 +/** Portable @c false replacement. */ +#define BROTLI_FALSE 0 +/** @c bool to ::BROTLI_BOOL conversion macros. */ +#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE) + +#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low) + +#define BROTLI_UINT32_MAX (~((uint32_t)0)) +#define BROTLI_SIZE_MAX (~((size_t)0)) + +/** + * Allocating function pointer type. + * + * @param opaque custom memory manager handle provided by client + * @param size requested memory region size; can not be @c 0 + * @returns @c 0 in the case of failure + * @returns a valid pointer to a memory region of at least @p size bytes + * long otherwise + */ +typedef void* (*brotli_alloc_func)(void* opaque, size_t size); + +/** + * Deallocating function pointer type. + * + * This function @b SHOULD do nothing if @p address is @c 0. + * + * @param opaque custom memory manager handle provided by client + * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0 + */ +typedef void (*brotli_free_func)(void* opaque, void* address); + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__cplusplus) +#define BROTLI_ARRAY_PARAM(L) L +#else +#define BROTLI_ARRAY_PARAM(L) +#endif + +#endif /* BROTLI_COMMON_TYPES_H_ */
diff --git a/third_party/brotli/tools/bro.c b/third_party/brotli/tools/bro.c new file mode 100644 index 0000000..07cef95 --- /dev/null +++ b/third_party/brotli/tools/bro.c
@@ -0,0 +1,521 @@ +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Example main() function for Brotli library. */ + +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <time.h> + +#include <brotli/decode.h> +#include <brotli/encode.h> + +#if !defined(_WIN32) +#include <unistd.h> +#include <utime.h> +#else +#include <io.h> +#include <share.h> +#include <sys/utime.h> + +#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY), (FILENO)) + +#if !defined(__MINGW32__) +#define STDIN_FILENO MAKE_BINARY(_fileno(stdin)) +#define STDOUT_FILENO MAKE_BINARY(_fileno(stdout)) +#define S_IRUSR S_IREAD +#define S_IWUSR S_IWRITE +#endif + +#define fdopen _fdopen +#define unlink _unlink +#define utimbuf _utimbuf +#define utime _utime + +#define fopen ms_fopen +#define open ms_open + +#define chmod(F, P) (0) +#define chown(F, O, G) (0) + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +#define fseek _fseeki64 +#define ftell _ftelli64 +#endif + +static FILE* ms_fopen(const char *filename, const char *mode) { + FILE* result = 0; + fopen_s(&result, filename, mode); + return result; +} + +static int ms_open(const char *filename, int oflag, int pmode) { + int result = -1; + _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode); + return result; +} +#endif /* WIN32 */ + +static int ParseQuality(const char* s, int* quality) { + if (s[0] >= '0' && s[0] <= '9') { + *quality = s[0] - '0'; + if (s[1] >= '0' && s[1] <= '9') { + *quality = *quality * 10 + s[1] - '0'; + return (s[2] == 0) ? 1 : 0; + } + return (s[1] == 0) ? 1 : 0; + } + return 0; +} + +static void ParseArgv(int argc, char **argv, + char **input_path, + char **output_path, + char **dictionary_path, + int *force, + int *quality, + int *decompress, + int *repeat, + int *verbose, + int *lgwin, + int *copy_stat) { + int k; + *force = 0; + *input_path = 0; + *output_path = 0; + *repeat = 1; + *verbose = 0; + *lgwin = 22; + *copy_stat = 1; + { + size_t argv0_len = strlen(argv[0]); + *decompress = + argv0_len >= 5 && strcmp(&argv[0][argv0_len - 5], "unbro") == 0; + } + for (k = 1; k < argc; ++k) { + if (!strcmp("--force", argv[k]) || + !strcmp("-f", argv[k])) { + if (*force != 0) { + goto error; + } + *force = 1; + continue; + } else if (!strcmp("--decompress", argv[k]) || + !strcmp("--uncompress", argv[k]) || + !strcmp("-d", argv[k])) { + *decompress = 1; + continue; + } else if (!strcmp("--verbose", argv[k]) || + !strcmp("-v", argv[k])) { + if (*verbose != 0) { + goto error; + } + *verbose = 1; + continue; + } else if (!strcmp("--no-copy-stat", argv[k])) { + if (*copy_stat == 0) { + goto error; + } + *copy_stat = 0; + continue; + } + if (k < argc - 1) { + if (!strcmp("--input", argv[k]) || + !strcmp("--in", argv[k]) || + !strcmp("-i", argv[k])) { + if (*input_path != 0) { + goto error; + } + *input_path = argv[k + 1]; + ++k; + continue; + } else if (!strcmp("--output", argv[k]) || + !strcmp("--out", argv[k]) || + !strcmp("-o", argv[k])) { + if (*output_path != 0) { + goto error; + } + *output_path = argv[k + 1]; + ++k; + continue; + } else if (!strcmp("--custom-dictionary", argv[k])) { + if (*dictionary_path != 0) { + goto error; + } + *dictionary_path = argv[k + 1]; + ++k; + continue; + } else if (!strcmp("--quality", argv[k]) || + !strcmp("-q", argv[k])) { + if (!ParseQuality(argv[k + 1], quality)) { + goto error; + } + ++k; + continue; + } else if (!strcmp("--repeat", argv[k]) || + !strcmp("-r", argv[k])) { + if (!ParseQuality(argv[k + 1], repeat)) { + goto error; + } + ++k; + continue; + } else if (!strcmp("--window", argv[k]) || + !strcmp("-w", argv[k])) { + if (!ParseQuality(argv[k + 1], lgwin)) { + goto error; + } + if (*lgwin < 10 || *lgwin >= 25) { + goto error; + } + ++k; + continue; + } + } + goto error; + } + return; +error: + fprintf(stderr, + "Usage: %s [--force] [--quality n] [--decompress]" + " [--input filename] [--output filename] [--repeat iters]" + " [--verbose] [--window n] [--custom-dictionary filename]" + " [--no-copy-stat]\n", + argv[0]); + exit(1); +} + +static FILE* OpenInputFile(const char* input_path) { + FILE* f; + if (input_path == 0) { + return fdopen(STDIN_FILENO, "rb"); + } + f = fopen(input_path, "rb"); + if (f == 0) { + perror("fopen"); + exit(1); + } + return f; +} + +static FILE *OpenOutputFile(const char *output_path, const int force) { + int fd; + if (output_path == 0) { + return fdopen(STDOUT_FILENO, "wb"); + } + fd = open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC, + S_IRUSR | S_IWUSR); + if (fd < 0) { + if (!force) { + struct stat statbuf; + if (stat(output_path, &statbuf) == 0) { + fprintf(stderr, "output file exists\n"); + exit(1); + } + } + perror("open"); + exit(1); + } + return fdopen(fd, "wb"); +} + +static int64_t FileSize(const char *path) { + FILE *f = fopen(path, "rb"); + int64_t retval; + if (f == NULL) { + return -1; + } + if (fseek(f, 0L, SEEK_END) != 0) { + fclose(f); + return -1; + } + retval = ftell(f); + if (fclose(f) != 0) { + return -1; + } + return retval; +} + +/* Copy file times and permissions. + TODO: this is a "best effort" implementation; honest cross-platform + fully featured implementation is way too hacky; add more hacks by request. */ +static void CopyStat(const char* input_path, const char* output_path) { + struct stat statbuf; + struct utimbuf times; + int res; + if (input_path == 0 || output_path == 0) { + return; + } + if (stat(input_path, &statbuf) != 0) { + return; + } + times.actime = statbuf.st_atime; + times.modtime = statbuf.st_mtime; + utime(output_path, ×); + res = chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO)); + if (res != 0) + perror("chmod failed"); + res = chown(output_path, (uid_t)-1, statbuf.st_gid); + if (res != 0) + perror("chown failed"); + res = chown(output_path, statbuf.st_uid, (gid_t)-1); + if (res != 0) + perror("chown failed"); +} + +/* Result ownersip is passed to caller. + |*dictionary_size| is set to resulting buffer size. */ +static uint8_t* ReadDictionary(const char* path, size_t* dictionary_size) { + static const int kMaxDictionarySize = (1 << 24) - 16; + FILE *f = fopen(path, "rb"); + int64_t file_size_64; + uint8_t* buffer; + size_t bytes_read; + + if (f == NULL) { + perror("fopen"); + exit(1); + } + + file_size_64 = FileSize(path); + if (file_size_64 == -1) { + fprintf(stderr, "could not get size of dictionary file"); + exit(1); + } + + if (file_size_64 > kMaxDictionarySize) { + fprintf(stderr, "dictionary is larger than maximum allowed: %d\n", + kMaxDictionarySize); + exit(1); + } + *dictionary_size = (size_t)file_size_64; + + buffer = (uint8_t*)malloc(*dictionary_size); + if (!buffer) { + fprintf(stderr, "could not read dictionary: out of memory\n"); + exit(1); + } + bytes_read = fread(buffer, sizeof(uint8_t), *dictionary_size, f); + if (bytes_read != *dictionary_size) { + fprintf(stderr, "could not read dictionary\n"); + exit(1); + } + fclose(f); + return buffer; +} + +static const size_t kFileBufferSize = 65536; + +static int Decompress(FILE* fin, FILE* fout, const char* dictionary_path) { + /* Dictionary should be kept during first rounds of decompression. */ + uint8_t* dictionary = NULL; + uint8_t* input; + uint8_t* output; + size_t available_in; + const uint8_t* next_in; + size_t available_out = kFileBufferSize; + uint8_t* next_out; + BrotliDecoderResult result = BROTLI_DECODER_RESULT_ERROR; + BrotliDecoderState* s = BrotliDecoderCreateInstance(NULL, NULL, NULL); + if (!s) { + fprintf(stderr, "out of memory\n"); + return 0; + } + if (dictionary_path != NULL) { + size_t dictionary_size = 0; + dictionary = ReadDictionary(dictionary_path, &dictionary_size); + BrotliDecoderSetCustomDictionary(s, dictionary_size, dictionary); + } + input = (uint8_t*)malloc(kFileBufferSize); + output = (uint8_t*)malloc(kFileBufferSize); + if (!input || !output) { + fprintf(stderr, "out of memory\n"); + goto end; + } + next_out = output; + result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; + while (1) { + if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) { + if (feof(fin)) { + break; + } + available_in = fread(input, 1, kFileBufferSize, fin); + next_in = input; + if (ferror(fin)) { + break; + } + } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { + fwrite(output, 1, kFileBufferSize, fout); + if (ferror(fout)) { + break; + } + available_out = kFileBufferSize; + next_out = output; + } else { + break; /* Error or success. */ + } + result = BrotliDecoderDecompressStream( + s, &available_in, &next_in, &available_out, &next_out, 0); + } + if (next_out != output) { + fwrite(output, 1, (size_t)(next_out - output), fout); + } + + if ((result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) || ferror(fout)) { + fprintf(stderr, "failed to write output\n"); + } else if (result != BROTLI_DECODER_RESULT_SUCCESS) { + /* Error or needs more input. */ + fprintf(stderr, "corrupt input\n"); + } + +end: + free(dictionary); + free(input); + free(output); + BrotliDecoderDestroyInstance(s); + return (result == BROTLI_DECODER_RESULT_SUCCESS) ? 1 : 0; +} + +static int Compress(int quality, int lgwin, FILE* fin, FILE* fout, + const char *dictionary_path) { + BrotliEncoderState* s = BrotliEncoderCreateInstance(0, 0, 0); + uint8_t* buffer = (uint8_t*)malloc(kFileBufferSize << 1); + uint8_t* input = buffer; + uint8_t* output = buffer + kFileBufferSize; + size_t available_in = 0; + const uint8_t* next_in = NULL; + size_t available_out = kFileBufferSize; + uint8_t* next_out = output; + int is_eof = 0; + int is_ok = 1; + + if (!s || !buffer) { + is_ok = 0; + goto finish; + } + + BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality); + BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin); + if (dictionary_path != NULL) { + size_t dictionary_size = 0; + uint8_t* dictionary = ReadDictionary(dictionary_path, &dictionary_size); + BrotliEncoderSetCustomDictionary(s, dictionary_size, dictionary); + free(dictionary); + } + + while (1) { + if (available_in == 0 && !is_eof) { + available_in = fread(input, 1, kFileBufferSize, fin); + next_in = input; + if (ferror(fin)) break; + is_eof = feof(fin); + } + + if (!BrotliEncoderCompressStream(s, + is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS, + &available_in, &next_in, &available_out, &next_out, NULL)) { + is_ok = 0; + break; + } + + if (available_out != kFileBufferSize) { + size_t out_size = kFileBufferSize - available_out; + fwrite(output, 1, out_size, fout); + if (ferror(fout)) break; + available_out = kFileBufferSize; + next_out = output; + } + + if (BrotliEncoderIsFinished(s)) break; + } + +finish: + free(buffer); + BrotliEncoderDestroyInstance(s); + + if (!is_ok) { + /* Should detect OOM? */ + fprintf(stderr, "failed to compress data\n"); + return 0; + } else if (ferror(fout)) { + fprintf(stderr, "failed to write output\n"); + return 0; + } else if (ferror(fin)) { + fprintf(stderr, "failed to read input\n"); + return 0; + } + return 1; +} + +int main(int argc, char** argv) { + char *input_path = 0; + char *output_path = 0; + char *dictionary_path = 0; + int force = 0; + int quality = 11; + int decompress = 0; + int repeat = 1; + int verbose = 0; + int lgwin = 0; + int copy_stat = 1; + clock_t clock_start; + int i; + ParseArgv(argc, argv, &input_path, &output_path, &dictionary_path, &force, + &quality, &decompress, &repeat, &verbose, &lgwin, ©_stat); + clock_start = clock(); + for (i = 0; i < repeat; ++i) { + FILE* fin = OpenInputFile(input_path); + FILE* fout = OpenOutputFile(output_path, force || (repeat > 1)); + int is_ok = 0; + if (decompress) { + is_ok = Decompress(fin, fout, dictionary_path); + } else { + is_ok = Compress(quality, lgwin, fin, fout, dictionary_path); + } + if (!is_ok) { + unlink(output_path); + exit(1); + } + if (fclose(fout) != 0) { + perror("fclose"); + exit(1); + } + /* TOCTOU violation, but otherwise it is impossible to set file times. */ + if (copy_stat && (i + 1 == repeat)) { + CopyStat(input_path, output_path); + } + if (fclose(fin) != 0) { + perror("fclose"); + exit(1); + } + } + if (verbose) { + clock_t clock_end = clock(); + double duration = (double)(clock_end - clock_start) / CLOCKS_PER_SEC; + int64_t uncompressed_size; + double uncompressed_bytes_in_MB; + if (duration < 1e-9) { + duration = 1e-9; + } + uncompressed_size = FileSize(decompress ? output_path : input_path); + if (uncompressed_size == -1) { + fprintf(stderr, "failed to determine uncompressed file size\n"); + exit(1); + } + uncompressed_bytes_in_MB = + (double)(repeat * uncompressed_size) / (1024.0 * 1024.0); + if (decompress) { + printf("Brotli decompression speed: "); + } else { + printf("Brotli compression speed: "); + } + printf("%g MB/s\n", uncompressed_bytes_in_MB / duration); + } + return 0; +}
diff --git a/third_party/brotli/tools/bro.cc b/third_party/brotli/tools/bro.cc deleted file mode 100644 index 0c2ec76..0000000 --- a/third_party/brotli/tools/bro.cc +++ /dev/null
@@ -1,329 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT -*/ - -/* Example main() function for Brotli library. */ - -#include <fcntl.h> -#include <stdio.h> -#include <sys/stat.h> -#include <sys/types.h> - -#include <cstdlib> -#include <cstring> -#include <ctime> -#include <string> - -#include "../dec/decode.h" -#include "../enc/compressor.h" - -#if !defined(_WIN32) -#include <unistd.h> -#else -#include <io.h> - -#define STDIN_FILENO _fileno(stdin) -#define STDOUT_FILENO _fileno(stdout) -#define S_IRUSR S_IREAD -#define S_IWUSR S_IWRITE -#define fdopen _fdopen -#define unlink _unlink - -#define fopen ms_fopen -#define open ms_open - -#if defined(_MSC_VER) && (_MSC_VER >= 1400) -#define fseek _fseeki64 -#define ftell _ftelli64 -#endif - -static inline FILE* ms_fopen(const char *filename, const char *mode) { - FILE* result = 0; - fopen_s(&result, filename, mode); - return result; -} - -static inline int ms_open(const char *filename, int oflag, int pmode) { - int result = -1; - _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode); - return result; -} -#endif /* WIN32 */ - - -static bool ParseQuality(const char* s, int* quality) { - if (s[0] >= '0' && s[0] <= '9') { - *quality = s[0] - '0'; - if (s[1] >= '0' && s[1] <= '9') { - *quality = *quality * 10 + s[1] - '0'; - return s[2] == 0; - } - return s[1] == 0; - } - return false; -} - -static void ParseArgv(int argc, char **argv, - char **input_path, - char **output_path, - int *force, - int *quality, - int *decompress, - int *repeat, - int *verbose, - int *lgwin) { - *force = 0; - *input_path = 0; - *output_path = 0; - *repeat = 1; - *verbose = 0; - *lgwin = 22; - { - size_t argv0_len = strlen(argv[0]); - *decompress = - argv0_len >= 5 && strcmp(&argv[0][argv0_len - 5], "unbro") == 0; - } - for (int k = 1; k < argc; ++k) { - if (!strcmp("--force", argv[k]) || - !strcmp("-f", argv[k])) { - if (*force != 0) { - goto error; - } - *force = 1; - continue; - } else if (!strcmp("--decompress", argv[k]) || - !strcmp("--uncompress", argv[k]) || - !strcmp("-d", argv[k])) { - *decompress = 1; - continue; - } else if (!strcmp("--verbose", argv[k]) || - !strcmp("-v", argv[k])) { - if (*verbose != 0) { - goto error; - } - *verbose = 1; - continue; - } - if (k < argc - 1) { - if (!strcmp("--input", argv[k]) || - !strcmp("--in", argv[k]) || - !strcmp("-i", argv[k])) { - if (*input_path != 0) { - goto error; - } - *input_path = argv[k + 1]; - ++k; - continue; - } else if (!strcmp("--output", argv[k]) || - !strcmp("--out", argv[k]) || - !strcmp("-o", argv[k])) { - if (*output_path != 0) { - goto error; - } - *output_path = argv[k + 1]; - ++k; - continue; - } else if (!strcmp("--quality", argv[k]) || - !strcmp("-q", argv[k])) { - if (!ParseQuality(argv[k + 1], quality)) { - goto error; - } - ++k; - continue; - } else if (!strcmp("--repeat", argv[k]) || - !strcmp("-r", argv[k])) { - if (!ParseQuality(argv[k + 1], repeat)) { - goto error; - } - ++k; - continue; - } else if (!strcmp("--window", argv[k]) || - !strcmp("-w", argv[k])) { - if (!ParseQuality(argv[k + 1], lgwin)) { - goto error; - } - if (*lgwin < 10 || *lgwin >= 25) { - goto error; - } - ++k; - continue; - } - } - goto error; - } - return; -error: - fprintf(stderr, - "Usage: %s [--force] [--quality n] [--decompress]" - " [--input filename] [--output filename] [--repeat iters]" - " [--verbose] [--window n]\n", - argv[0]); - exit(1); -} - -static FILE* OpenInputFile(const char* input_path) { - if (input_path == 0) { - return fdopen(STDIN_FILENO, "rb"); - } - FILE* f = fopen(input_path, "rb"); - if (f == 0) { - perror("fopen"); - exit(1); - } - return f; -} - -static FILE *OpenOutputFile(const char *output_path, const int force) { - if (output_path == 0) { - return fdopen(STDOUT_FILENO, "wb"); - } - int excl = force ? 0 : O_EXCL; - int fd = open(output_path, O_CREAT | excl | O_WRONLY | O_TRUNC, - S_IRUSR | S_IWUSR); - if (fd < 0) { - if (!force) { - struct stat statbuf; - if (stat(output_path, &statbuf) == 0) { - fprintf(stderr, "output file exists\n"); - exit(1); - } - } - perror("open"); - exit(1); - } - return fdopen(fd, "wb"); -} - -static int64_t FileSize(char *path) { - FILE *f = fopen(path, "rb"); - if (f == NULL) { - return -1; - } - if (fseek(f, 0L, SEEK_END) != 0) { - fclose(f); - return -1; - } - int64_t retval = ftell(f); - if (fclose(f) != 0) { - return -1; - } - return retval; -} - -static const size_t kFileBufferSize = 65536; - -static void Decompresss(FILE* fin, FILE* fout) { - BrotliState* s = BrotliCreateState(NULL, NULL, NULL); - if (!s) { - fprintf(stderr, "out of memory\n"); - exit(1); - } - uint8_t* input = new uint8_t[kFileBufferSize]; - uint8_t* output = new uint8_t[kFileBufferSize]; - size_t total_out; - size_t available_in; - const uint8_t* next_in; - size_t available_out = kFileBufferSize; - uint8_t* next_out = output; - BrotliResult result = BROTLI_RESULT_NEEDS_MORE_INPUT; - while (1) { - if (result == BROTLI_RESULT_NEEDS_MORE_INPUT) { - if (feof(fin)) { - break; - } - available_in = fread(input, 1, kFileBufferSize, fin); - next_in = input; - if (ferror(fin)) { - break; - } - } else if (result == BROTLI_RESULT_NEEDS_MORE_OUTPUT) { - fwrite(output, 1, kFileBufferSize, fout); - if (ferror(fout)) { - break; - } - available_out = kFileBufferSize; - next_out = output; - } else { - break; /* Error or success. */ - } - result = BrotliDecompressStream(&available_in, &next_in, - &available_out, &next_out, &total_out, s); - } - if (next_out != output) { - fwrite(output, 1, static_cast<size_t>(next_out - output), fout); - } - delete[] input; - delete[] output; - BrotliDestroyState(s); - if ((result == BROTLI_RESULT_NEEDS_MORE_OUTPUT) || ferror(fout)) { - fprintf(stderr, "failed to write output\n"); - exit(1); - } else if (result != BROTLI_RESULT_SUCCESS) { /* Error or needs more input. */ - fprintf(stderr, "corrupt input\n"); - exit(1); - } -} - -int main(int argc, char** argv) { - char *input_path = 0; - char *output_path = 0; - int force = 0; - int quality = 11; - int decompress = 0; - int repeat = 1; - int verbose = 0; - int lgwin = 0; - ParseArgv(argc, argv, &input_path, &output_path, &force, - &quality, &decompress, &repeat, &verbose, &lgwin); - const clock_t clock_start = clock(); - for (int i = 0; i < repeat; ++i) { - FILE* fin = OpenInputFile(input_path); - FILE* fout = OpenOutputFile(output_path, force); - if (decompress) { - Decompresss(fin, fout); - } else { - brotli::BrotliParams params; - params.lgwin = lgwin; - params.quality = quality; - brotli::BrotliFileIn in(fin, 1 << 16); - brotli::BrotliFileOut out(fout); - if (!BrotliCompress(params, &in, &out)) { - fprintf(stderr, "compression failed\n"); - unlink(output_path); - exit(1); - } - } - if (fclose(fin) != 0) { - perror("fclose"); - exit(1); - } - if (fclose(fout) != 0) { - perror("fclose"); - exit(1); - } - } - if (verbose) { - const clock_t clock_end = clock(); - double duration = - static_cast<double>(clock_end - clock_start) / CLOCKS_PER_SEC; - if (duration < 1e-9) { - duration = 1e-9; - } - int64_t uncompressed_size = FileSize(decompress ? output_path : input_path); - if (uncompressed_size == -1) { - fprintf(stderr, "failed to determine uncompressed file size\n"); - exit(1); - } - double uncompressed_bytes_in_MB = - static_cast<double>(repeat * uncompressed_size) / (1024.0 * 1024.0); - if (decompress) { - printf("Brotli decompression speed: "); - } else { - printf("Brotli compression speed: "); - } - printf("%g MB/s\n", uncompressed_bytes_in_MB / duration); - } - return 0; -}
diff --git a/third_party/ots/BUILD.gn b/third_party/ots/BUILD.gn index 8d59774..caf83983 100644 --- a/third_party/ots/BUILD.gn +++ b/third_party/ots/BUILD.gn
@@ -77,7 +77,7 @@ public_configs = [ ":ots_config" ] deps = [ - "//third_party/brotli", + "//third_party/brotli:dec", "//third_party/woff2:woff2_dec", "//third_party/zlib", ]
diff --git a/third_party/woff2/BUILD.gn b/third_party/woff2/BUILD.gn index 7bba8e4..2e359ee7 100644 --- a/third_party/woff2/BUILD.gn +++ b/third_party/woff2/BUILD.gn
@@ -23,13 +23,10 @@ configs += [ "//build/config/compiler:no_chromium_code" ] deps = [ - "//third_party/brotli", + "//third_party/brotli:dec", ] - include_dirs = [ - "src", - "//third_party/brotli/dec", - ] + include_dirs = [ "src" ] # TODO(ksakamoto): http://crbug.com/167187 if (is_win) {
diff --git a/third_party/woff2/README.chromium b/third_party/woff2/README.chromium index 747480f2..3fc892d 100644 --- a/third_party/woff2/README.chromium +++ b/third_party/woff2/README.chromium
@@ -13,3 +13,4 @@ - BUILD.gn: Added. - woff2.gyp: Added. +- src/woff2_dec.cc modified to use new Brotli API at lines 739-741
diff --git a/third_party/woff2/src/woff2_dec.cc b/third_party/woff2/src/woff2_dec.cc index 7a00f8a..6f26a30 100644 --- a/third_party/woff2/src/woff2_dec.cc +++ b/third_party/woff2/src/woff2_dec.cc
@@ -18,6 +18,7 @@ #include <stdlib.h> #include <algorithm> +#include <brotli/decode.h> #include <complex> #include <cstring> #include <limits> @@ -27,7 +28,6 @@ #include <memory> #include <utility> -#include "./decode.h" #include "./buffer.h" #include "./port.h" #include "./round.h" @@ -736,9 +736,10 @@ bool Woff2Uncompress(uint8_t* dst_buf, size_t dst_size, const uint8_t* src_buf, size_t src_size) { size_t uncompressed_size = dst_size; - int ok = BrotliDecompressBuffer(src_size, src_buf, - &uncompressed_size, dst_buf); - if (PREDICT_FALSE(!ok || uncompressed_size != dst_size)) { + BrotliDecoderResult result = BrotliDecoderDecompress( + src_size, src_buf, &uncompressed_size, dst_buf); + if (PREDICT_FALSE(result != BROTLI_DECODER_RESULT_SUCCESS || + uncompressed_size != dst_size)) { return FONT_COMPRESSION_FAILURE(); } return true;
diff --git a/ui/display/manager/chromeos/display_change_observer.cc b/ui/display/manager/chromeos/display_change_observer.cc index 150db389..f9e058a 100644 --- a/ui/display/manager/chromeos/display_change_observer.cc +++ b/ui/display/manager/chromeos/display_change_observer.cc
@@ -288,7 +288,16 @@ } void DisplayChangeObserver::OnTouchscreenDeviceConfigurationChanged() { - OnDisplayModeChanged(display_configurator_->cached_displays()); + // If there are no cached display snapshots, either there are no attached + // displays or the cached snapshots have been invalidated. For the first case + // there aren't any touchscreens to associate. For the second case, the + // displays and touch input-devices will get associated when display + // configuration finishes. + const auto& cached_displays = display_configurator_->cached_displays(); + if (!cached_displays.empty()) + OnDisplayModeChanged(cached_displays); + else + VLOG(1) << "Not updating touchscreen associations"; } // static
diff --git a/ui/display/manager/chromeos/display_configurator.cc b/ui/display/manager/chromeos/display_configurator.cc index 8258d23..39a3f6ef 100644 --- a/ui/display/manager/chromeos/display_configurator.cc +++ b/ui/display/manager/chromeos/display_configurator.cc
@@ -524,10 +524,10 @@ // If the delegate is already initialized don't update it (For example, tests // set their own delegates). - if (!native_display_delegate_) { + if (!native_display_delegate_) native_display_delegate_ = std::move(display_delegate); - native_display_delegate_->AddObserver(this); - } + + native_display_delegate_->AddObserver(this); } void DisplayConfigurator::TakeControl(const DisplayControlCallback& callback) { @@ -947,6 +947,11 @@ this, &DisplayConfigurator::ConfigureDisplays); } +void DisplayConfigurator::OnDisplaySnapshotsInvalidated() { + VLOG(1) << "Display snapshots invalidated."; + cached_displays_.clear(); +} + void DisplayConfigurator::AddObserver(Observer* observer) { observers_.AddObserver(observer); }
diff --git a/ui/display/manager/chromeos/display_configurator.h b/ui/display/manager/chromeos/display_configurator.h index cce56b0..fb7db9a 100644 --- a/ui/display/manager/chromeos/display_configurator.h +++ b/ui/display/manager/chromeos/display_configurator.h
@@ -246,6 +246,7 @@ // NativeDisplayDelegate::Observer overrides: void OnConfigurationChanged() override; + void OnDisplaySnapshotsInvalidated() override; void AddObserver(Observer* observer); void RemoveObserver(Observer* observer);
diff --git a/ui/display/manager/chromeos/test/test_native_display_delegate.cc b/ui/display/manager/chromeos/test/test_native_display_delegate.cc index 060dec2..9cd1bda 100644 --- a/ui/display/manager/chromeos/test/test_native_display_delegate.cc +++ b/ui/display/manager/chromeos/test/test_native_display_delegate.cc
@@ -10,6 +10,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "ui/display/manager/chromeos/test/action_logger.h" #include "ui/display/types/display_mode.h" +#include "ui/display/types/native_display_observer.h" namespace ui { namespace test { @@ -62,6 +63,10 @@ void TestNativeDisplayDelegate::GetDisplays( const GetDisplaysCallback& callback) { + // This mimics the behavior of Ozone DRM when new display state arrives. + for (NativeDisplayObserver& observer : observers_) + observer.OnDisplaySnapshotsInvalidated(); + if (run_async_) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::Bind(callback, outputs_)); @@ -144,10 +149,14 @@ return true; } -void TestNativeDisplayDelegate::AddObserver(NativeDisplayObserver* observer) {} +void TestNativeDisplayDelegate::AddObserver(NativeDisplayObserver* observer) { + observers_.AddObserver(observer); +} void TestNativeDisplayDelegate::RemoveObserver( - NativeDisplayObserver* observer) {} + NativeDisplayObserver* observer) { + observers_.RemoveObserver(observer); +} display::FakeDisplayController* TestNativeDisplayDelegate::GetFakeDisplayController() {
diff --git a/ui/display/manager/chromeos/test/test_native_display_delegate.h b/ui/display/manager/chromeos/test/test_native_display_delegate.h index 1b875f6..c994d73 100644 --- a/ui/display/manager/chromeos/test/test_native_display_delegate.h +++ b/ui/display/manager/chromeos/test/test_native_display_delegate.h
@@ -10,6 +10,7 @@ #include <vector> #include "base/macros.h" +#include "base/observer_list.h" #include "ui/display/manager/chromeos/test/action_logger.h" #include "ui/display/manager/chromeos/test/action_logger_util.h" #include "ui/display/types/native_display_delegate.h" @@ -18,6 +19,7 @@ class ActionLogger; class DisplaySnapshot; +class NativeDisplayObserver; namespace test { @@ -111,6 +113,8 @@ ActionLogger* log_; // Not owned. + base::ObserverList<NativeDisplayObserver> observers_; + DISALLOW_COPY_AND_ASSIGN(TestNativeDisplayDelegate); };
diff --git a/ui/display/types/native_display_observer.h b/ui/display/types/native_display_observer.h index 6091036..ba983af4 100644 --- a/ui/display/types/native_display_observer.h +++ b/ui/display/types/native_display_observer.h
@@ -16,6 +16,10 @@ virtual ~NativeDisplayObserver() {} virtual void OnConfigurationChanged() = 0; + + // DisplaySnapshots owned by NativeDisplayDelegate are about to be + // invalidated and any stored pointers to them should be deleted. + virtual void OnDisplaySnapshotsInvalidated() = 0; }; } // namespace ui
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc index a4100162..0bc9e4691e 100644 --- a/ui/events/blink/input_handler_proxy.cc +++ b/ui/events/blink/input_handler_proxy.cc
@@ -140,6 +140,11 @@ scroll_state_data.position_x = event.x; scroll_state_data.position_y = event.y; scroll_state_data.is_beginning = true; + // On Mac, a GestureScrollBegin in the inertial phase indicates a fling + // start. + scroll_state_data.is_in_inertial_phase = + (event.data.scrollBegin.inertialPhase == + WebGestureEvent::MomentumPhase); break; case WebInputEvent::GestureFlingStart: scroll_state_data.velocity_x = event.data.flingStart.velocityX; @@ -788,6 +793,7 @@ if (ShouldAnimate(gesture_event.data.scrollUpdate.deltaUnits != blink::WebGestureEvent::ScrollUnits::Pixels)) { + DCHECK(!scroll_state.is_in_inertial_phase()); base::TimeTicks event_time = base::TimeTicks() + base::TimeDelta::FromSecondsD(gesture_event.timeStampSeconds);
diff --git a/ui/ozone/demo/ozone_demo.cc b/ui/ozone/demo/ozone_demo.cc index bbfeff4..309e36d0 100644 --- a/ui/ozone/demo/ozone_demo.cc +++ b/ui/ozone/demo/ozone_demo.cc
@@ -91,6 +91,7 @@ // ui::NativeDisplayDelegate: void OnConfigurationChanged() override; + void OnDisplaySnapshotsInvalidated() override; std::unique_ptr<ui::NativeDisplayDelegate> delegate_; base::Closure quit_closure_; @@ -282,6 +283,8 @@ base::Bind(&WindowManager::OnDisplaysAquired, base::Unretained(this))); } +void WindowManager::OnDisplaySnapshotsInvalidated() {} + void WindowManager::OnDisplaysAquired( const std::vector<ui::DisplaySnapshot*>& displays) { windows_.clear();
diff --git a/ui/ozone/platform/drm/host/drm_display_host_manager.cc b/ui/ozone/platform/drm/host/drm_display_host_manager.cc index ee34f67..edc62b6 100644 --- a/ui/ozone/platform/drm/host/drm_display_host_manager.cc +++ b/ui/ozone/platform/drm/host/drm_display_host_manager.cc
@@ -359,6 +359,8 @@ void DrmDisplayHostManager::GpuHasUpdatedNativeDisplays( const std::vector<DisplaySnapshot_Params>& params) { + if (delegate_) + delegate_->OnDisplaySnapshotsInvalidated(); std::vector<std::unique_ptr<DrmDisplayHost>> old_displays; displays_.swap(old_displays); for (size_t i = 0; i < params.size(); ++i) {
diff --git a/ui/ozone/platform/drm/host/drm_native_display_delegate.cc b/ui/ozone/platform/drm/host/drm_native_display_delegate.cc index 0a16a7e..2fb5777c 100644 --- a/ui/ozone/platform/drm/host/drm_native_display_delegate.cc +++ b/ui/ozone/platform/drm/host/drm_native_display_delegate.cc
@@ -25,6 +25,11 @@ observer.OnConfigurationChanged(); } +void DrmNativeDisplayDelegate::OnDisplaySnapshotsInvalidated() { + for (NativeDisplayObserver& observer : observers_) + observer.OnDisplaySnapshotsInvalidated(); +} + void DrmNativeDisplayDelegate::Initialize() { display_manager_->AddDelegate(this); }
diff --git a/ui/ozone/platform/drm/host/drm_native_display_delegate.h b/ui/ozone/platform/drm/host/drm_native_display_delegate.h index 50490c9..6c138b7a 100644 --- a/ui/ozone/platform/drm/host/drm_native_display_delegate.h +++ b/ui/ozone/platform/drm/host/drm_native_display_delegate.h
@@ -21,6 +21,7 @@ ~DrmNativeDisplayDelegate() override; void OnConfigurationChanged(); + void OnDisplaySnapshotsInvalidated(); // NativeDisplayDelegate overrides: void Initialize() override;