diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0920d76 --- /dev/null +++ b/.gitignore @@ -0,0 +1,353 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# ======================================== +# ignore vim swap files +*.swp diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..0e454ed --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,69 @@ +variables: + SampleName: FFX_CACAO_Sample + SolutionDirDX12: sample\build\DX12 + GIT_SUBMODULE_STRATEGY: normal + +before_script: + - 'for /f "usebackq delims=" %%i in (`vswhere.exe -products Microsoft.VisualStudio.Product.BuildTools -property installationPath`) do set MSBUILD_PATH=%%i' + - 'call "%MSBUILD_PATH%\VC\Auxiliary\Build\vcvars64.bat"' + - 'cd sample\build' + - 'call GenerateSolutions.bat -T v141' + - 'cd ..\..' + +stages: + - build + - deploy + +build d3d12 sample release: + tags: + - windows + - amd64 + stage: deploy + except: + - tags + script: + - echo Building "%SampleName%_DX12.sln" + - cd %SolutionDirDX12% + - 'msbuild.exe "%SampleName%_DX12.sln" /p:Configuration=Release /p:Platform=x64' + - cd ../../.. + - mkdir %SampleName% + - move sample/bin %SampleName% + - move sample/media %SampleName% + - move NOTICES.txt %SampleName% + - echo cd .\%SampleName%\bin\ > %SampleName%_DX12.bat + - echo start %SampleName%_DX12.exe >> %SampleName%_DX12.bat + artifacts: + name: "%SampleName%-%CI_COMMIT_REF_NAME%-%CI_COMMIT_SHORT_SHA%" + paths: + - "%SampleName%/bin/" + - "%SampleName%/media/" + - "%SampleName%/NOTICES.txt" + - "%SampleName%_DX12.bat" + - "readme.md" + +build d3d12 sample release tagged: + tags: + - windows + - amd64 + stage: deploy + only: + - tags + script: + - echo Building "%SampleName%_DX12.sln" + - cd %SolutionDirDX12% + - 'msbuild.exe "%SampleName%_DX12.sln" /p:Configuration=Release /p:Platform=x64' + - cd ../../.. + - mkdir %SampleName% + - move sample/bin %SampleName% + - move sample/media %SampleName% + - move NOTICES.txt %SampleName% + - echo cd .\%SampleName%\bin\ > %SampleName%_DX12.bat + - echo start %SampleName%_DX12.exe >> %SampleName%_DX12.bat + artifacts: + name: "%SampleName%-%CI_COMMIT_TAG%" + paths: + - "%SampleName%/bin/" + - "%SampleName%/media/" + - "%SampleName%/NOTICES.txt" + - "%SampleName%_DX12.bat" + - "readme.md" diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..798dd04 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libs/cauldron"] + path = sample/libs/cauldron + url = ../../GPUOpen-LibrariesAndSDKs/Cauldron.git diff --git a/NOTICES.txt b/NOTICES.txt new file mode 100644 index 0000000..3275ec9 --- /dev/null +++ b/NOTICES.txt @@ -0,0 +1,24 @@ +Notices and licenses file +_________________________ + + +AMD copyrighted code (MIT) +Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/docs/FFX-CACAO-API.pdf b/docs/FFX-CACAO-API.pdf new file mode 100644 index 0000000..9be982d Binary files /dev/null and b/docs/FFX-CACAO-API.pdf differ diff --git a/docs/FFX-CACAO-GUI.pdf b/docs/FFX-CACAO-GUI.pdf new file mode 100644 index 0000000..c9711ea Binary files /dev/null and b/docs/FFX-CACAO-GUI.pdf differ diff --git a/docs/FFX-CACAO-Technology.pdf b/docs/FFX-CACAO-Technology.pdf new file mode 100644 index 0000000..cdf5f41 Binary files /dev/null and b/docs/FFX-CACAO-Technology.pdf differ diff --git a/doxygen.conf b/doxygen.conf new file mode 100644 index 0000000..9fd44d3 --- /dev/null +++ b/doxygen.conf @@ -0,0 +1,5 @@ +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "FidelityFX CACAO" +OPTIMIZE_OUTPUT_FOR_C = YES +INPUT = ffx-cacao/inc/ffx_cacao.h +OUTPUT_DIRECTORY = docs diff --git a/ffx-cacao/inc/ffx_cacao.h b/ffx-cacao/inc/ffx_cacao.h new file mode 100644 index 0000000..af34dda --- /dev/null +++ b/ffx-cacao/inc/ffx_cacao.h @@ -0,0 +1,251 @@ +// Modifications Copyright © 2020. Advanced Micro Devices, Inc. All Rights Reserved. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// File changes (yyyy-mm-dd) +// 2016-09-07: filip.strugar@intel.com: first commit +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/*! \file */ + +#pragma once + +#ifndef FFX_CACAO_ENABLE_PROFILING +#define FFX_CACAO_ENABLE_PROFILING 1 +#endif + +#ifndef FFX_CACAO_ENABLE_D3D12 +#define FFX_CACAO_ENABLE_D3D12 1 +#endif + +#include +#if FFX_CACAO_ENABLE_D3D12 +#include +#endif + +typedef uint8_t FfxCacaoBool; +static const FfxCacaoBool FFX_CACAO_TRUE = 1; +static const FfxCacaoBool FFX_CACAO_FALSE = 0; + +/** + The return codes for the API functions. +*/ +typedef enum FfxCacaoStatus { + FFX_CACAO_STATUS_OK = 0, + FFX_CACAO_STATUS_INVALID_ARGUMENT = -1, + FFX_CACAO_STATUS_INVALID_POINTER = -2, + FFX_CACAO_STATUS_OUT_OF_MEMORY = -3, + FFX_CACAO_STATUS_FAILED = -4, +} FfxCacaoStatus; + +/** + The quality levels that FidelityFX CACAO can generate SSAO at. This affects the number of samples taken for generating SSAO. +*/ +typedef enum FfxCacaoQuality { + FFX_CACAO_QUALITY_LOWEST = 0, + FFX_CACAO_QUALITY_LOW = 1, + FFX_CACAO_QUALITY_MEDIUM = 2, + FFX_CACAO_QUALITY_HIGH = 3, + FFX_CACAO_QUALITY_HIGHEST = 4, +} FfxCacaoQuality; + +/** + A structure representing a 4x4 matrix of floats. The matrix is stored in row major order in memory. +*/ +typedef struct FfxCacaoMatrix4x4 { + float elements[4][4]; +} FfxCacaoMatrix4x4; + +/** + A structure for the settings used by FidelityFX CACAO. These settings may be updated with each draw call. +*/ +typedef struct FfxCacaoSettings { + float radius; ///< [0.0, ~ ] World (view) space size of the occlusion sphere. + float shadowMultiplier; ///< [0.0, 5.0] Effect strength linear multiplier + float shadowPower; ///< [0.5, 5.0] Effect strength pow modifier + float shadowClamp; ///< [0.0, 1.0] Effect max limit (applied after multiplier but before blur) + float horizonAngleThreshold; ///< [0.0, 0.2] Limits self-shadowing (makes the sampling area less of a hemisphere, more of a spherical cone, to avoid self-shadowing and various artifacts due to low tessellation and depth buffer imprecision, etc.) + float fadeOutFrom; ///< [0.0, ~ ] Distance to start start fading out the effect. + float fadeOutTo; ///< [0.0, ~ ] Distance at which the effect is faded out. + FfxCacaoQuality qualityLevel; ///< Effect quality, affects number of taps etc + float adaptiveQualityLimit; ///< [0.0, 1.0] (only for Quality Level 3) + uint32_t blurPassCount; ///< [ 0, 8] Number of edge-sensitive smart blur passes to apply + float sharpness; ///< [0.0, 1.0] (How much to bleed over edges; 1: not at all, 0.5: half-half; 0.0: completely ignore edges) + float temporalSupersamplingAngleOffset; ///< [0.0, PI] Used to rotate sampling kernel; If using temporal AA / supersampling, suggested to rotate by ( (frame%3)/3.0*PI ) or similar. Kernel is already symmetrical, which is why we use PI and not 2*PI. + float temporalSupersamplingRadiusOffset; ///< [0.0, 2.0] Used to scale sampling kernel; If using temporal AA / supersampling, suggested to scale by ( 1.0f + (((frame%3)-1.0)/3.0)*0.1 ) or similar. + float detailShadowStrength; ///< [0.0, 5.0] Used for high-res detail AO using neighboring depth pixels: adds a lot of detail but also reduces temporal stability (adds aliasing). + FfxCacaoBool generateNormals; ///< This option should be set to FFX_CACAO_TRUE if FidelityFX-CACAO should reconstruct a normal buffer from the depth buffer. It is required to be FFX_CACAO_TRUE if no normal buffer is provided. + float bilateralSigmaSquared; ///< [0.0, ~ ] Sigma squared value for use in bilateral upsampler giving Gaussian blur term. Should be greater than 0.0. + float bilateralSimilarityDistanceSigma; ///< [0.0, ~ ] Sigma squared value for use in bilateral upsampler giving similarity weighting for neighbouring pixels. Should be greater than 0.0. +} FfxCacaoSettings; + +static const FfxCacaoSettings FFX_CACAO_DEFAULT_SETTINGS = { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 50.0f, + /* fadeOutTo */ 300.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_HIGHEST, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 2, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 5.0f, + /* bilateralSimilarityDistanceSigma */ 0.01f, +}; + + +#if FFX_CACAO_ENABLE_D3D12 +/** + A struct containing all of the data used by FidelityFX-CACAO. + A context corresponds to an ID3D12Device. +*/ +typedef struct FfxCacaoD3D12Context FfxCacaoD3D12Context; + +/** + The parameters for creating a context. +*/ +typedef struct FfxCacaoD3D12ScreenSizeInfo { + uint32_t width; ///< width of the input/output buffers + uint32_t height; ///< height of the input/output buffers + ID3D12Resource *depthBufferResource; ///< pointer to depth buffer ID3D12Resource + D3D12_SHADER_RESOURCE_VIEW_DESC depthBufferSrvDesc; ///< depth buffer D3D12_SHADER_RESOURCE_VIEW_DESC + ID3D12Resource *normalBufferResource; ///< optional pointer to normal buffer ID3D12Resource (leave as NULL if none is provided) + D3D12_SHADER_RESOURCE_VIEW_DESC normalBufferSrvDesc; ///< normal buffer D3D12_SHADER_RESOURCE_VIEW_DESC + ID3D12Resource *outputResource; ///< pointer to output buffer ID3D12Resource + D3D12_UNORDERED_ACCESS_VIEW_DESC outputUavDesc; ///< output buffer D3D12_UNORDERED_ACCESS_VIEW_DESC +} FfxCacaoD3D12ScreenSizeInfo; +#endif + +#if FFX_CACAO_ENABLE_PROFILING +/** + A timestamp. The label gives the name of the stage of the effect, and the ticks is the number of GPU ticks spent on that stage. +*/ +typedef struct FfxCacaoTimestamp { + const char *label; ///< name of timestamp stage + uint64_t ticks; ///< number of GPU ticks taken for stage +} FfxCacaoTimestamp; + +/** + An array of timestamps for detailed profiling information. The array timestamps contains numTimestamps entries. + Entry 0 of the timestamps array is guaranteed to be the total time taken by the effect. +*/ +typedef struct FfxCacaoDetailedTiming { + uint32_t numTimestamps; ///< number of timetstamps in the array timestamps + FfxCacaoTimestamp timestamps[32]; ///< array of timestamps for each FFX CACAO stage +} FfxCacaoDetailedTiming; +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if FFX_CACAO_ENABLE_D3D12 + /** + Gets the size in bytes required by a context. This is to be used to allocate space for the context. + For example: + + \code{.cpp} + size_t ffxCacaoD3D12ContextSize = ffxCacaoD3D12GetContextSize(); + FfxCacaoD3D12Context *context = (FfxCacaoD3D12Context*)malloc(ffxCacaoD3D12GetContextSize); + + // ... + + ffxCacaoD3D12DestroyContext(context); + free(context); + \endcode + + \return The size in bytes of an FfxCacaoD3D12Context. + */ + size_t ffxCacaoD3D12GetContextSize(); + + /** + Initialises an FfxCacaoD3D12Context. + + \param context A pointer to the context to initialise. + \param device A pointer to the D3D12 device. + \return The corresponding error code. + */ + FfxCacaoStatus ffxCacaoD3D12InitContext(FfxCacaoD3D12Context* context, ID3D12Device* device); + + /** + Destroys an FfxCacaoD3D12Context. + + \param context A pointer to the context to be destroyed. + \return The corresponding error code. + + \note This function does not destroy screen size dependent resources, and must be called after ffxCacaoD3D12DestroyScreenSizeDependentResources. + */ + FfxCacaoStatus ffxCacaoD3D12DestroyContext(FfxCacaoD3D12Context* context); + + /** + Initialises screen size dependent resources for the FfxCacaoD3D12Context. + + \param context A pointer to the FfxCacaoD3D12Context. + \param info A pointer to an FfxCacaoD3D12ScreenSizeInfo struct containing screen size info. + \param useDownsampledSsao Whether or not the SSAO should be generated on a downsampled texture. This results in lower quality but significantly faster performance. This setting is recommended. + \return The corresponding error code. + */ + FfxCacaoStatus ffxCacaoD3D12InitScreenSizeDependentResources(FfxCacaoD3D12Context* context, const FfxCacaoD3D12ScreenSizeInfo* info, FfxCacaoBool useDownsampledSsao); + + /** + Destroys screen size dependent resources for the FfxCacaoD3D12Context. + + \param context A pointer to the FfxCacaoD3D12Context. + \return The corresponding error code. + */ + FfxCacaoStatus ffxCacaoD3D12DestroyScreenSizeDependentResources(FfxCacaoD3D12Context* context); + + /** + Update the settings of the FfxCacaoD3D12Context to those stored in the FfxCacaoSettings struct. + + \param context A pointer to the FfxCacaoD3D12Context to update. + \param settings A pointer to the FfxCacaoSettings struct containing the new settings. + \return The corresponding error code. + */ + FfxCacaoStatus ffxCacaoD3D12UpdateSettings(FfxCacaoD3D12Context* context, const FfxCacaoSettings* settings); + + /** + Append commands for drawing FFX CACAO to the provided ID3D12GraphicsCommandList. + + \param context A pointer to the FfxCacaoD3D12Context. + \param commandList A pointer to the ID3D12GraphicsCommandList to append commands to. + \param proj A pointer to the projection matrix. + \param normalsToView An optional pointer to a matrix for transforming normals to in the normal buffer to viewspace. + \return The corresponding error code. + */ + FfxCacaoStatus ffxCacaoD3D12Draw(FfxCacaoD3D12Context* context, ID3D12GraphicsCommandList* commandList, const FfxCacaoMatrix4x4* proj, const FfxCacaoMatrix4x4* normalsToView); + +#if FFX_CACAO_ENABLE_PROFILING + /** + Get detailed performance timings from the previous frame. + + \param context A pointer to the FfxCacaoD3D12Context. + \param timings A pointer to an FfxCacaoDetailedTiming struct to fill in with detailed timings. + \result The corresponding error code. + */ + FfxCacaoStatus ffxCacaoD3D12GetDetailedTimings(FfxCacaoD3D12Context* context, FfxCacaoDetailedTiming* timings); +#endif +#endif + +#ifdef __cplusplus +} +#endif diff --git a/ffx-cacao/readme.md b/ffx-cacao/readme.md new file mode 100644 index 0000000..fb09ba0 --- /dev/null +++ b/ffx-cacao/readme.md @@ -0,0 +1,95 @@ +# FidelityFX CACAO + +The **FidelityFX CACAO** library implements screen space ambient occlusion for use in real time applications. A full sample can be found on the [FidelityFX CACAO Github page](https://github.com/GPUOpen-Effects/FidelityFX-CACAO). + +# Context Initialisation and Shutdown (D3D12) + +First the FFX CACAO header must be included. This can be found at `ffx-cacao/inc/ffx_cacao.h`. This header contains the definitions for D3D12 and in future will contain the definitions for Vulkan. To restrict FFX CACAO to either API the macros `FFX_CACAO_ENABLE_D3D12` or `FFX_CACAO_ENABLE_VK` must be set to 1 or 0 to enable or disable the API. It is intended that these macros are either edited in the `ffx_cacao.h` header or passed as compile flags when integrating FFX CACAO into a project. + +Then a context must be created. This is usually done only once per device. To create a context you must first query for the size of a context, allocate space for a context, then inintialise the context. + +```C++ +// initialisation +size_t ffxCacaoContextSize = ffxCacaoD3D12GetContextSize(); +FfxCacaoD3D12Context *context = (FfxCacaoD3D12Context*)malloc(ffxCacaoContextSize); +FfxCacaoStatus status = ffxCacaoD3D12InitContext(context, d3d12Device); +assert(status == FFX_CACAO_STATUS_OK); +... +// finalisation +status = ffxCacaoD3D12DestroyContext(context); +assert(status == FFX_CACAO_STATUS_OK); +free(context); +``` + +Once the context is initialised, it will need to have screen size dependent resources initialised each time the screen size is changed. To do this, an `FfxCacaoD3D12ScreenSizeInfo` struct must be filled out. The FFX CACAO effect is computed using a depth buffer and optional normal buffer. FFX CACAO writes its output to a user provided output buffer. The depth buffer, normal buffer and output buffer provided to FFX CACAO must all be the same size. + +In addition, at this point it must be specified whether FFX CACAO should generate SSAO on a downsampled texture or a native resolution texture. + +```C++ +// initialisation +FfxCacaoD3D12ScreenSizeInfo screenSizeInfo = {}; +screenSizeInfo.width = /* width of the input/output buffers */; +screenSizeInfo.height = /* height of the input/output buffers */; +screenSizeInfo.depthBufferResource = /* ID3D12Resource* for the depth input buffer */; +screenSizeInfo.depthBufferSrvDesc = /* D3D12_SHADER_RESOURCE_VIEW_DESC for the depth input buffer */; +screenSizeInfo.normalBufferResource = /* ID3D12Resource* for the normal input buffer - or NULL if none shall be provided */; +screenSizeInfo.normalBufferSrvDesc = /* D3D12_SHADER_RESOURCE_VIEW_DESC for the normal input buffer */; +screenSizeInfo.outputResource = /* ID3D12Resource* for the output buffer */; +screenSizeInfo.depthBufferSrvDesc = /* D3D12_SHADER_RESOURCE_VIEW_DESC for the depth output */; + +FfxCacaoBool useDownsampledSsaoGeneration = /* whether or not SSAO should be generated on a downsampled texture */; + +status = ffxCacaoD3D12InitScreenSizeDependentResources(context, &screenSizeInfo, useDownsampledSsaoGeneration); +assert(status == FFX_CACAO_STATUS_OK); +... +// finalisation +status = ffxCacaoD3D12DestroyScreenSizeDependentResources(context); +assert(status == FFX_CACAO_STATUS_OK); +``` + +The settings for the FFX CACAO effect may be changed via the `FfxCacaoSettings` struct and the `ffxCacaoD3D12UpdateSettings` function as follows. + +```C++ +FfxCacaoSettings settings = {}; +settings.radius = /* world view radius of the occlusion sphere */; +settings.shadowMultiplier = /* effect strength linear multiplier */; +settings.shadowPower = /* effect strength power multiplier */; +settings.shadowClamp = /* effect max limit */; +settings.horizonAngleThreshold = /* minimum horizon angle for contributions to occlusion to limit self shadowing */ +settings.fadeOutFrom = /* effect fade out from world space distance */; +settings.fadeOutTo = /* effect fade out to world space distance */; +settings.qualityLevel = /* the quality of the effect, ranging from lowest to highest (adaptive). This affects the number of samples taken to generate SSAO. */; +settings.adaptiveQualityLimit = /* quality limit for adaptive quality */; +settings.blurPassCount = /* a number of edge sensitive blurs from 1 to 8 to perform after SSAO generation */; +settings.sharpness = /* how much to bleed over edges - 0 = ignore edges, 1 = don't bleed over edges */; +settings.temporalSupersamplingAngleOffset = /* sampling angle offset for temporal super sampling */; +settings.temporalSupersamplingRaidusOffset = /* sampling effect radius offset for temporal super sampling */; +settings.detailShadowStrength = /* used to generate details in high res AO */; +settings.generateNormals = /* should the effect generate normals from the depth buffer or use a provided normal buffer */; +settings.bilateralSigmaSquared = /* a parameter for use in bilateral upsampling. Higher values create more blur to help reduce noise */; +settings.bilateralSimilarityDistanceSigma = /* a parameter for use in bilateral upsampling. Lower values create reduce bluring across edge boundaries */; +``` + +These settings can be set to sensible defaults from the constant `FFX_CACAO_DEFAULT_SETTINGS` and updated using the function `ffxCacaoD3D12UpdateSettings` as follows. + +```C++ +FfxCacaoSettings settings = FFX_CACAO_DEFAULT_SETTINGS; +status = ffxCacaoD3D12UpdateSettings(context, &settings); +assert(status == FFX_CACAO_STATUS_OK); +``` + +Note that the `FFX_CACAO_DEFAULT_SETTINGS` provides a sensible quick start for high quality settings. The parameters `radius`, `fadeOutFrom` and `fadeOutTo` should +be changed to match the world space of the target scene, and the parameter `blurPassCount` is recommended to be increased for lower quality settings. A more complete +set of sensible defaults may be found in the FFX CACAO sample in the file `sample/src/DX12/FFX_CACAO_Sample.cpp`, where multiple parameters have been varied to move +from high to low quality presets. + +Finally, a FFX CACAO can be called to add commands to a `ID3D12GraphicsCommandList` using the `ffxCacaoD3D12Draw` function as follows. + +```C++ +FfxCacaoMatrix4x4 proj = /* row major projection matrix */; +FfxCacaoMatrix4x4 normalsToView = /* row major matrix to convert normals to viewspace */ +status = ffxCacaoD3D12Draw(context, commandList, &proj, &normalsToView); +assert(status == FFX_CACAO_STATUS_OKAY); +``` + +The matrix `proj` is the projection matrix used from viewspace to normalised device coordinates. The matrix `normalsToView` is a matrix to convert the normals provided in the normal buffer to viewspace. diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOApply.h b/ffx-cacao/src/PrecompiledShaders/CACAOApply.h new file mode 100644 index 0000000..0fc83db --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOApply.h @@ -0,0 +1,826 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_LinearClampSampler sampler NA NA s2 1 +// g_ApplyFinalSSAO texture float4 2darray t0 1 +// g_ApplyOutput UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s2, mode_default +dcl_resource_texture2darray (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 6 +dcl_thread_group 8, 8, 1 +ushr r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +mov r0.w, l(0) +bfi r1.x, l(1), l(1), vThreadID.y, l(0) +bfi r0.z, l(1), l(0), vThreadID.x, r1.x +ld_indexable(texture2darray)(float,float,float,float) r0.xy, r0.xyzw, t0.xyzw +mul r1.y, r0.y, l(255.500000) +ftou r1.y, r1.y +ubfe r2.xyz, l(2, 2, 2, 0), l(6, 4, 2, 0), r1.yyyy +and r1.y, r1.y, l(3) +utof r1.y, r1.y +mul r3.w, r1.y, l(0.333333) +utof r1.yzw, r2.xxyz +mul r3.xyz, r1.yzwy, l(0.333333, 0.333333, 0.333333, 0.000000) +add_sat r2.xyzw, r3.xyzw, cb0[6].xxxx +add r1.yz, -r2.xxzx, r2.yywy +add r2.xy, r2.ywyy, r2.xzxx +mul r2.yz, r2.xxyx, l(0.000000, 0.750000, 0.750000, 0.000000) +and r3.xy, vThreadID.yxyy, l(1, 1, 0, 0) +itof r3.xz, r3.xxyx +iadd r1.w, -r3.y, l(1) +add r1.yz, r1.yyzy, r3.zzxz +add r4.w, r1.z, l(-0.500000) +mov r5.zw, l(0,0,0.500000,-0.500000) +utof r5.xy, vThreadID.xyxx +add r4.x, r1.y, r5.x +add r4.yz, -r3.xxzx, r5.yyxy +add r3.xyzw, r4.zwxw, r5.zywy +add r1.yz, r4.xxyx, l(0.000000, -0.500000, 0.500000, 0.000000) +mul r1.yz, r1.yyzy, cb0[13].zzwz +mul r4.xy, r1.yzyy, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r3.xyzw, r3.xyzw, cb0[13].zwzw +mul r5.xy, r3.zwzz, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r3.xy, r3.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +iadd r1.y, -r1.x, l(2) +iadd r1.xz, r1.xxyx, r1.wwww +bfi r1.y, l(1), l(0), vThreadID.x, r1.y +itof r3.z, r1.y +sample_l_indexable(texture2darray)(float,float,float,float) r0.z, r3.xyzx, t0.yzxw, s2, l(0.000000) +itof r5.z, r1.z +sample_l_indexable(texture2darray)(float,float,float,float) r0.w, r5.xyzx, t0.yzwx, s2, l(0.000000) +itof r4.z, r1.x +sample_l_indexable(texture2darray)(float,float,float,float) r0.y, r4.xyzx, t0.yxzw, s2, l(0.000000) +add r1.x, r2.z, r2.y +mul r2.w, r1.x, l(0.500000) +mov r2.x, l(1.000000) +dp4 r0.x, r0.xyzw, r2.xyzw +dp4 r0.y, l(1.000000, 1.000000, 1.000000, 1.000000), r2.xyzw +div r0.x, r0.x, r0.y +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xxxx +ret +// Approximately 50 instruction slots used +#endif + +const BYTE CSApplyDXIL[] = +{ + 68, 88, 66, 67, 57, 154, + 170, 197, 36, 136, 10, 90, + 106, 191, 252, 76, 10, 21, + 221, 32, 1, 0, 0, 0, + 228, 15, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 72, 15, 0, 0, 82, 68, + 69, 70, 92, 8, 0, 0, + 1, 0, 0, 0, 4, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 52, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 209, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 226, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 240, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 76, 105, + 110, 101, 97, 114, 67, 108, + 97, 109, 112, 83, 97, 109, + 112, 108, 101, 114, 0, 103, + 95, 65, 112, 112, 108, 121, + 70, 105, 110, 97, 108, 83, + 83, 65, 79, 0, 103, 95, + 65, 112, 112, 108, 121, 79, + 117, 116, 112, 117, 116, 0, + 83, 83, 65, 79, 67, 111, + 110, 115, 116, 97, 110, 116, + 115, 66, 117, 102, 102, 101, + 114, 0, 240, 0, 0, 0, + 1, 0, 0, 0, 28, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 68, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 16, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 115, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 6, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 51, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 171, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 136, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 234, 5, 0, 0, + 97, 1, 0, 0, 124, 1, + 0, 0, 0, 0, 0, 0, + 160, 1, 0, 0, 124, 1, + 0, 0, 8, 0, 0, 0, + 177, 1, 0, 0, 124, 1, + 0, 0, 16, 0, 0, 0, + 190, 1, 0, 0, 124, 1, + 0, 0, 24, 0, 0, 0, + 203, 1, 0, 0, 124, 1, + 0, 0, 32, 0, 0, 0, + 226, 1, 0, 0, 124, 1, + 0, 0, 40, 0, 0, 0, + 249, 1, 0, 0, 12, 2, + 0, 0, 48, 0, 0, 0, + 48, 2, 0, 0, 12, 2, + 0, 0, 52, 0, 0, 0, + 69, 2, 0, 0, 12, 2, + 0, 0, 56, 0, 0, 0, + 85, 2, 0, 0, 12, 2, + 0, 0, 60, 0, 0, 0, + 103, 2, 0, 0, 12, 2, + 0, 0, 64, 0, 0, 0, + 120, 2, 0, 0, 12, 2, + 0, 0, 68, 0, 0, 0, + 137, 2, 0, 0, 12, 2, + 0, 0, 72, 0, 0, 0, + 165, 2, 0, 0, 12, 2, + 0, 0, 76, 0, 0, 0, + 198, 2, 0, 0, 12, 2, + 0, 0, 80, 0, 0, 0, + 222, 2, 0, 0, 12, 2, + 0, 0, 84, 0, 0, 0, + 241, 2, 0, 0, 12, 2, + 0, 0, 88, 0, 0, 0, + 3, 3, 0, 0, 12, 2, + 0, 0, 92, 0, 0, 0, + 28, 3, 0, 0, 12, 2, + 0, 0, 96, 0, 0, 0, + 41, 3, 0, 0, 56, 3, + 0, 0, 100, 0, 0, 0, + 92, 3, 0, 0, 12, 2, + 0, 0, 104, 0, 0, 0, + 114, 3, 0, 0, 12, 2, + 0, 0, 108, 0, 0, 0, + 147, 3, 0, 0, 180, 3, + 0, 0, 112, 0, 0, 0, + 216, 3, 0, 0, 12, 2, + 0, 0, 192, 0, 0, 0, + 233, 3, 0, 0, 12, 2, + 0, 0, 196, 0, 0, 0, + 250, 3, 0, 0, 12, 2, + 0, 0, 200, 0, 0, 0, + 11, 4, 0, 0, 12, 2, + 0, 0, 204, 0, 0, 0, + 18, 4, 0, 0, 124, 1, + 0, 0, 208, 0, 0, 0, + 39, 4, 0, 0, 124, 1, + 0, 0, 216, 0, 0, 0, + 67, 4, 0, 0, 124, 1, + 0, 0, 224, 0, 0, 0, + 89, 4, 0, 0, 124, 1, + 0, 0, 232, 0, 0, 0, + 118, 4, 0, 0, 144, 4, + 0, 0, 240, 0, 0, 0, + 180, 4, 0, 0, 124, 1, + 0, 0, 248, 0, 0, 0, + 203, 4, 0, 0, 124, 1, + 0, 0, 0, 1, 0, 0, + 226, 4, 0, 0, 124, 1, + 0, 0, 8, 1, 0, 0, + 0, 5, 0, 0, 124, 1, + 0, 0, 16, 1, 0, 0, + 24, 5, 0, 0, 124, 1, + 0, 0, 24, 1, 0, 0, + 55, 5, 0, 0, 124, 1, + 0, 0, 32, 1, 0, 0, + 90, 5, 0, 0, 124, 1, + 0, 0, 40, 1, 0, 0, + 132, 5, 0, 0, 124, 1, + 0, 0, 48, 1, 0, 0, + 163, 5, 0, 0, 124, 1, + 0, 0, 56, 1, 0, 0, + 204, 5, 0, 0, 244, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 24, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 136, 6, + 0, 0, 80, 0, 5, 0, + 162, 1, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 2, 0, 0, 0, + 88, 64, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 6, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 85, 0, + 0, 9, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 140, 0, 0, 10, 18, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 26, 0, + 2, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 140, 0, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 10, 0, 2, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 45, 0, 0, 137, + 2, 2, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 34, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 128, 127, 67, + 28, 0, 0, 5, 34, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 138, 0, 0, 15, + 114, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 4, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 86, 5, 16, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 5, 34, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 171, 170, 170, 62, + 86, 0, 0, 5, 226, 0, + 16, 0, 1, 0, 0, 0, + 6, 9, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 10, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 0, 0, 0, 0, + 0, 32, 0, 8, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 8, + 98, 0, 16, 0, 1, 0, + 0, 0, 6, 2, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 86, 7, 16, 0, + 2, 0, 0, 0, 0, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 214, 5, + 16, 0, 2, 0, 0, 0, + 134, 0, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 10, + 98, 0, 16, 0, 2, 0, + 0, 0, 6, 1, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 63, 0, 0, + 64, 63, 0, 0, 0, 0, + 1, 0, 0, 9, 50, 0, + 16, 0, 3, 0, 0, 0, + 22, 5, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 82, 0, + 16, 0, 3, 0, 0, 0, + 6, 1, 16, 0, 3, 0, + 0, 0, 30, 0, 0, 8, + 130, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 7, 98, 0, 16, 0, + 1, 0, 0, 0, 86, 6, + 16, 0, 1, 0, 0, 0, + 166, 8, 16, 0, 3, 0, + 0, 0, 0, 0, 0, 7, + 130, 0, 16, 0, 4, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 191, + 54, 0, 0, 8, 194, 0, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 191, 86, 0, 0, 4, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 0, 2, 0, + 0, 0, 0, 7, 18, 0, + 16, 0, 4, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 8, 98, 0, 16, 0, + 4, 0, 0, 0, 6, 2, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 86, 4, + 16, 0, 5, 0, 0, 0, + 0, 0, 0, 7, 242, 0, + 16, 0, 3, 0, 0, 0, + 230, 12, 16, 0, 4, 0, + 0, 0, 102, 7, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 10, 98, 0, 16, 0, + 1, 0, 0, 0, 6, 1, + 16, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 191, + 0, 0, 0, 63, 0, 0, + 0, 0, 56, 0, 0, 8, + 98, 0, 16, 0, 1, 0, + 0, 0, 86, 6, 16, 0, + 1, 0, 0, 0, 166, 139, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 56, 0, + 0, 10, 50, 0, 16, 0, + 4, 0, 0, 0, 150, 5, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 0, 3, 0, + 0, 0, 70, 14, 16, 0, + 3, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 56, 0, + 0, 10, 50, 0, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 10, + 50, 0, 16, 0, 3, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 8, 34, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 30, 0, 0, 7, + 82, 0, 16, 0, 1, 0, + 0, 0, 6, 1, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 140, 0, 0, 10, 34, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 10, 0, + 2, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 43, 0, + 0, 5, 66, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 2, 2, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 2, 2, + 0, 128, 67, 85, 21, 0, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 150, 115, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 66, 0, 16, 0, + 4, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 2, 2, + 0, 128, 67, 85, 21, 0, + 34, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 22, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 18, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 63, + 54, 0, 0, 5, 18, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 17, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 17, 0, 0, 10, 34, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 70, 14, 16, 0, + 2, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 6, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 2, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 50, 0, 0, 0, + 6, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 23, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 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, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 8, 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, 1, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur1.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur1.h new file mode 100644 index 0000000..168f816 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur1.h @@ -0,0 +1,2570 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 33 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyyy, l(62, 46, 46, 46), r0.xyyy +iadd r2.xyzw, r1.xwxw, l(-1, -1, 0, -1) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r4.zwzz, t0.zwxy, s1, l(0.000000) +iadd r4.xyzw, r1.xwxw, l(1, -1, 2, -1) +itof r6.xyzw, r4.xyzw +add r6.xyzw, r6.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r6.xyzw, r6.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.xy {min16f}, r6.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r6.xw {min16f}, r6.zwzz, t0.xzwy, s1, l(0.000000) +iadd r8.xyzw, r1.xwxw, l(-1, 0, 2, 0) +itof r9.xyzw, r8.xyzw +add r9.xyzw, r9.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r9.xyzw, r9.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.zw {min16f}, r9.xyxx, t0.zwxy, s1, l(0.000000) +itof r9.xy, r1.xwxx +add r9.xy, r9.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r9.xy, r9.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r10.xy {min16f}, r9.xyxx, t0.xyzw, s1, l(0.000000) +iadd r11.xyzw, r1.xwww, l(1, 0, 0, 0) +itof r9.xy, r11.xwxx +add r9.xy, r9.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r9.xy, r9.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r10.zw {min16f}, r9.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r9.xw {min16f}, r9.zwzz, t0.xzwy, s1, l(0.000000) +iadd r12.xyzw, r1.xwxw, l(-1, 1, 0, 1) +itof r13.xyzw, r12.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r13.zwzz, t0.zwxy, s1, l(0.000000) +iadd r13.xyzw, r1.xwxw, l(1, 1, 2, 1) +itof r15.xyzw, r13.xyzw +add r15.xyzw, r15.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r15.xyzw, r15.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r16.xy {min16f}, r15.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r15.xw {min16f}, r15.zwzz, t0.xzwy, s1, l(0.000000) +ishl r0.y, r0.w, l(2) +iadd r17.xyz, r0.yyyy, l(4, 8, 12, 0) +f32tof16 r17.w, r5.x {min16f} +f32tof16 r18.x, r5.z {min16f} +imad r17.w, r18.x, l(0x00010000), r17.w +store_structured g0.x, r3.x, r17.x, r17.w +f32tof16 r17.w, r7.x {min16f} +f32tof16 r18.x, r6.x {min16f} +imad r17.w, r18.x, l(0x00010000), r17.w +store_structured g0.x, r3.z, r17.x, r17.w +f32tof16 r17.w, r7.z {min16f} +f32tof16 r18.x, r10.x {min16f} +imad r17.w, r18.x, l(0x00010000), r17.w +store_structured g0.x, r3.x, r17.y, r17.w +f32tof16 r17.w, r10.z {min16f} +f32tof16 r18.x, r9.x {min16f} +imad r17.w, r18.x, l(0x00010000), r17.w +store_structured g0.x, r3.z, r17.y, r17.w +f32tof16 r17.w, r14.x {min16f} +f32tof16 r18.x, r14.z {min16f} +imad r17.w, r18.x, l(0x00010000), r17.w +store_structured g0.x, r3.x, r17.z, r17.w +f32tof16 r17.w, r16.x {min16f} +f32tof16 r18.x, r15.x {min16f} +imad r17.w, r18.x, l(0x00010000), r17.w +store_structured g0.x, r3.z, r17.z, r17.w +sync_g_t +ld_structured r18.xy, r3.x, r17.x, g0.xyxx +and r18.zw, r18.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r19.xy, r18.xyxx, l(16, 16, 0, 0) +f16tof32 r20.w, r18.z +f16tof32 r20.x, r19.x +ld_structured r21.xyzw, r3.z, r17.x, g0.xyzw +and r22.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r23.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r20.y, r22.x +f16tof32 r20.z, r23.x +ishl r3.y, r3.y, l(2) +iadd r3.y, r3.y, l(-4) +ld_structured r17.w, r3.x, r3.y, g0.xxxx +and r18.x, r17.w, l(0x0000ffff) +ushr r17.w, r17.w, l(16) +f16tof32 r24.x, r18.x +f16tof32 r24.y, r17.w +ld_structured r3.y, r3.z, r3.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.z, r17.w +f16tof32 r24.w, r3.y +f16tof32 r18.x, r18.w +f16tof32 r18.y, r19.y +f16tof32 r18.z, r22.y +f16tof32 r18.w, r23.y +ld_structured r19.xyz, r0.z, r17.x, g0.xyzx +ushr r25.xyz, r19.xyzx, l(16, 16, 16, 0) +f16tof32 r25.xyz, r25.zxyz +ld_structured r26.xyz, r3.w, r17.x, g0.xyzx +and r27.xyz, r26.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r27.xyw, r27.xyxz +mov r6.xy {min16f}, r5.ywyy {min16f} +mov r6.z {min16f}, r7.y {min16f} +mul r5.xyzw {min16f}, r6.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r6.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r6.xyzw {min16f}, r6.xyzw +mad_sat r6.xyzw, r6.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r29.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r29.xyzw {min16f}, r29.xyzw +mad_sat r29.xyzw, r29.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r30.x, r25.y +mov r30.yzw, r20.wwxy +mul r30.xyzw {min16f}, r6.xyzw {def32 as min16f}, r30.xyzw {def32 as min16f} +mad r30.xyzw {min16f}, r20.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r30.xyzw {min16f} +add r6.xyzw {min16f}, r6.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r20.w, r27.x +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r30.xyzw {min16f} +add r6.xyzw {min16f}, r28.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r20.xyzw {min16f}, r24.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r6.xyzw {min16f}, r29.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r18.xyzw {min16f}, r18.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r6.xyzw {min16f} +div r5.xyzw {min16f}, r18.xyzw {min16f}, r5.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g1.x, r3.x, r17.x, r3.y +store_structured g1.x, r3.z, r17.x, r3.w +imad r5.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r24.xyz, r5.x, r17.y, g0.xyzx +and r31.xyz, r24.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r32.xyz, r24.xyzx, l(16, 16, 16, 0) +f16tof32 r6.w, r31.x +f16tof32 r6.x, r32.x +ld_structured r3.yw, r3.z, r17.y, g0.xxxy +and r19.xw, r3.yyyw, l(0x0000ffff, 0, 0, 0x0000ffff) +ushr r21.xy, r3.ywyy, l(16, 16, 0, 0) +f16tof32 r6.y, r19.x +f16tof32 r6.z, r21.x +ishl r22.xy, r5.ywyy, l(2, 2, 0, 0) +iadd r22.xy, r22.xyxx, l(-4, -4, 0, 0) +ld_structured r3.y, r5.x, r22.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r18.x, r17.w +f16tof32 r18.y, r3.y +ld_structured r3.y, r3.z, r22.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r18.z, r17.w +f16tof32 r18.w, r3.y +f16tof32 r20.x, r31.y +f16tof32 r20.y, r32.y +f16tof32 r20.z, r19.w +f16tof32 r20.w, r21.y +mov r9.x {min16f}, r7.w {min16f} +mov r9.yz {min16f}, r10.yywy {min16f} +mul r7.xyzw {min16f}, r9.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r7.xyzw, r7.xyzw {min16f} +ubfe r9.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r7.xyzw +utof r9.xyzw {min16f}, r9.xyzw +mad_sat r9.xyzw, r9.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r10.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r7.xyzw +utof r10.xyzw {min16f}, r10.xyzw +mad_sat r10.xyzw, r10.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r7.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r7.xyzw, r7.xyzw, l(3, 3, 3, 3) +utof r7.xyzw {min16f}, r7.xyzw +mad_sat r7.xyzw, r7.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r29.x, r25.z +mov r29.yzw, r6.wwxy +mul r29.xyzw {min16f}, r9.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f} +mad r29.xyzw {min16f}, r6.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r29.xyzw {min16f} +add r9.xyzw {min16f}, r9.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r6.w, r27.y +mad r6.xyzw {min16f}, r6.xyzw {def32 as min16f}, r10.xyzw {def32 as min16f}, r29.xyzw {min16f} +add r9.xyzw {min16f}, r10.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r6.xyzw {min16f}, r18.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r6.xyzw {min16f} +add r9.xyzw {min16f}, r28.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r6.xyzw {min16f}, r20.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r6.xyzw {min16f} +add r7.xyzw {min16f}, r7.xyzw {def32 as min16f}, r9.xyzw {min16f} +div r6.xyzw {min16f}, r6.xyzw {min16f}, r7.xyzw {min16f} +f32tof16 r6.xyzw, r6.xyzw {min16f} +imad r3.yw, r6.yyyw, l(0, 0x00010000, 0, 0x00010000), r6.xxxz +store_structured g1.x, r5.x, r17.y, r3.y +store_structured g1.x, r3.z, r17.y, r3.w +ld_structured r3.y, r5.z, r17.z, g0.xxxx +and r3.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r6.xy, r3.wyww +f16tof32 r6.z, r22.z +f16tof32 r6.w, r23.z +ld_structured r3.y, r5.z, r22.y, g0.xxxx +and r3.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r7.xy, r3.wyww +ld_structured r3.y, r3.z, r22.y, g0.xxxx +and r3.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r7.zw, r3.wwwy +f16tof32 r9.x, r31.z +f16tof32 r9.y, r32.z +f16tof32 r9.z, r22.w +f16tof32 r9.w, r23.w +mov r15.xy {min16f}, r14.ywyy {min16f} +mov r15.z {min16f}, r16.y {min16f} +mul r10.xyzw {min16f}, r15.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r10.xyzw, r10.xyzw {min16f} +ubfe r14.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r10.xyzw +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r15.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r10.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r16.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r10.xyzw +utof r16.xyzw {min16f}, r16.xyzw +mad_sat r16.xyzw, r16.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r10.xyzw, r10.xyzw, l(3, 3, 3, 3) +utof r10.xyzw {min16f}, r10.xyzw +mad_sat r10.xyzw, r10.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r25.yzw, r6.xxyz +mul r18.xyzw {min16f}, r14.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r18.xyzw {min16f}, r6.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r18.xyzw {min16f} +add r14.xyzw {min16f}, r14.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r27.xyz, r6.yzwy +mad r6.xyzw {min16f}, r27.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r18.xyzw {min16f} +add r14.xyzw {min16f}, r15.xyzw {def32 as min16f}, r14.xyzw {min16f} +mad r6.xyzw {min16f}, r7.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r6.xyzw {min16f} +add r7.xyzw {min16f}, r16.xyzw {def32 as min16f}, r14.xyzw {min16f} +mad r6.xyzw {min16f}, r9.xyzw {def32 as min16f}, r10.xyzw {def32 as min16f}, r6.xyzw {min16f} +add r7.xyzw {min16f}, r10.xyzw {def32 as min16f}, r7.xyzw {min16f} +div r6.xyzw {min16f}, r6.xyzw {min16f}, r7.xyzw {min16f} +f32tof16 r6.xyzw, r6.xyzw {min16f} +imad r3.yw, r6.yyyw, l(0, 0x00010000, 0, 0x00010000), r6.xxxz +store_structured g1.x, r5.z, r17.z, r3.y +store_structured g1.x, r3.z, r17.z, r3.w +sync_g_t +uge r0.xy, r0.wxww, l(1, 1, 0, 0) +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.z, r3.x, r17.x, g1.xxxx + ushr r0.w, r0.z, l(16) + f16tof32 r0.w, r0.w + ld_structured r3.y, r3.z, r17.x, g1.xxxx + and r3.w, r3.y, l(0x0000ffff) + f16tof32 r3.w, r3.w + uge r0.x, r0.x, l(1) + if_nz r0.x + and r0.x, r0.z, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r2.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + store_uav_typed u0.xyzw, r2.zwww, r0.wwww + iadd r0.x, r0.x, l(1) + store_uav_typed u0.xyzw, r4.xyyy, r3.wwww + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(63) + if_nz r0.x + ushr r0.x, r3.y, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.zwww, r0.xxxx + endif +endif +ld_structured r0.x, r3.x, r17.y, g1.xxxx +ushr r0.z, r0.x, l(16) +f16tof32 r0.z, r0.z +ld_structured r0.w, r3.z, r17.y, g1.xxxx +and r2.x, r0.w, l(0x0000ffff) +f16tof32 r2.x, r2.x +if_nz r0.y + and r0.x, r0.x, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r8.xyyy, r0.xxxx +endif +imad r0.x, l(4), vThreadIDInGroup.x, l(1) +store_uav_typed u0.xyzw, r1.xyzw, r0.zzzz +iadd r0.x, r0.x, l(1) +store_uav_typed u0.xyzw, r11.xyzw, r2.xxxx +or r0.x, r0.x, l(3) +ult r0.x, r0.x, l(63) +if_nz r0.x + ushr r0.x, r0.w, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r8.zwww, r0.xxxx +endif +imad r0.x, l(3), vThreadIDInGroup.y, l(2) +ult r0.x, r0.x, l(47) +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r17.z, g1.xxxx + ushr r0.z, r0.y, l(16) + f16tof32 r0.z, r0.z + ld_structured r0.w, r3.z, r17.z, g1.xxxx + and r1.y, r0.w, l(0x0000ffff) + f16tof32 r1.y, r1.y + uge r0.x, r0.x, l(1) + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r12.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + store_uav_typed u0.xyzw, r12.zwww, r0.zzzz + iadd r0.x, r0.x, l(1) + store_uav_typed u0.xyzw, r13.xyyy, r1.yyyy + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(63) + if_nz r0.x + ushr r0.x, r0.w, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r13.zwww, r0.xxxx + endif +endif +ret +// Approximately 323 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur1DXIL[] = +{ + 68, 88, 66, 67, 172, 63, + 124, 218, 24, 81, 121, 170, + 95, 206, 136, 137, 131, 187, + 198, 110, 1, 0, 0, 0, + 52, 50, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 136, 49, 0, 0, 152, 49, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 200, 40, + 0, 0, 80, 0, 5, 0, + 50, 10, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 33, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 21, 2, 0, + 2, 64, 0, 0, 62, 0, + 0, 0, 46, 0, 0, 0, + 46, 0, 0, 0, 46, 0, + 0, 0, 70, 5, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 4, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 255, 255, 255, 255, + 2, 0, 0, 0, 255, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 0, + 16, 0, 6, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 6, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 8, 0, + 0, 0, 198, 12, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 9, 0, 0, 0, 198, 0, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 9, 0, 0, 0, + 70, 0, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 9, 0, 0, 0, 70, 0, + 16, 0, 9, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 0, 16, 0, 9, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 11, 0, + 0, 0, 198, 15, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 9, 0, 0, 0, + 198, 0, 16, 0, 11, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 9, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 9, 0, 0, 0, + 70, 0, 16, 0, 9, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 12, 0, 0, 0, + 198, 12, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 255, 255, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 13, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 230, 10, 16, 0, + 13, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 13, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 0, 0, 43, 0, 0, 5, + 242, 0, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 16, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 230, 10, 16, 0, 15, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 41, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 30, 0, 0, 10, 114, 0, + 16, 0, 17, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 4, 0, 0, 0, 8, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 130, 0, + 0, 6, 18, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 130, 0, + 0, 6, 18, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 130, 0, + 0, 6, 18, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 130, 0, + 0, 6, 18, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 130, 0, + 0, 6, 18, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 16, 0, 0, 0, 130, 0, + 0, 6, 18, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 190, 24, + 0, 1, 167, 0, 0, 9, + 50, 0, 16, 0, 18, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 194, 0, 16, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 19, 0, 0, 0, + 70, 0, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 20, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 167, 0, 0, 9, + 242, 0, 16, 0, 21, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 254, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 22, 0, + 0, 0, 70, 14, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 41, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 30, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 252, 255, 255, 255, 167, 0, + 0, 9, 130, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 18, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 24, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 24, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 24, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 24, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 18, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 19, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 25, 0, 0, 0, + 70, 2, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 114, 0, 16, 0, + 25, 0, 0, 0, 38, 9, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 26, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 27, 0, 0, 0, + 70, 2, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 178, 0, 16, 0, + 27, 0, 0, 0, 70, 8, + 16, 0, 27, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 28, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 29, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 30, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 30, 0, 0, 0, 246, 4, + 16, 0, 20, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 30, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 54, 9, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 27, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 18, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 3, 0, 0, 0, + 86, 13, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 24, 0, + 0, 0, 10, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 31, 0, + 0, 0, 70, 2, 16, 0, + 24, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 32, 0, 0, 0, + 70, 2, 16, 0, 24, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 6, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 6, 0, 0, 0, + 10, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 162, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 244, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 146, 0, 16, 0, 19, 0, + 0, 0, 86, 13, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 21, 0, 0, 0, + 214, 5, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 6, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 6, 0, 0, 0, + 10, 0, 16, 0, 21, 0, + 0, 0, 41, 0, 0, 10, + 50, 0, 16, 0, 22, 0, + 0, 0, 214, 5, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 22, 0, 0, 0, + 70, 0, 16, 0, 22, 0, + 0, 0, 2, 64, 0, 0, + 252, 255, 255, 255, 252, 255, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 22, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 18, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 22, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 18, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 20, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 20, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 19, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 20, 0, 0, 0, 26, 0, + 16, 0, 21, 0, 0, 0, + 54, 0, 0, 7, 18, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 58, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 54, 0, + 0, 7, 98, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 86, 7, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 10, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 28, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 28, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 28, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 29, 0, + 0, 0, 42, 0, 16, 0, + 25, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 29, 0, 0, 0, 246, 4, + 16, 0, 6, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 54, 9, 16, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 27, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 3, 0, 0, 0, + 86, 13, 16, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 6, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 5, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 50, 0, 16, 0, 6, 0, + 0, 0, 118, 15, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 6, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 6, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 50, 0, 16, 0, + 7, 0, 0, 0, 118, 15, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 194, 0, 16, 0, 7, 0, + 0, 0, 246, 7, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 9, 0, 0, 0, 42, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 42, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 23, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 15, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 16, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 16, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 16, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 25, 0, + 0, 0, 6, 9, 16, 0, + 6, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 114, 0, 16, 0, + 27, 0, 0, 0, 150, 7, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 35, 0, + 0, 12, 162, 0, 16, 0, + 3, 0, 0, 0, 86, 13, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 6, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 5, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 190, 24, + 0, 1, 80, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 54, 15, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 167, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 80, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 2, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 2, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 3, 0, + 0, 0, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 63, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 4, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 167, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 85, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 8, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 6, 0, 16, 0, 2, 0, + 0, 0, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 63, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 8, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 26, 32, 2, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 47, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 85, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 12, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 12, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 13, 0, 0, 0, + 86, 5, 16, 0, 1, 0, + 0, 0, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 63, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 13, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 62, 0, + 0, 1, 83, 70, 73, 48, + 8, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 83, 84, 65, 84, 148, 0, + 0, 0, 67, 1, 0, 0, + 33, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 59, 0, 0, 0, 34, 0, + 0, 0, 49, 0, 0, 0, + 1, 0, 0, 0, 8, 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, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 0, 0, + 0, 0, 22, 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, + 2, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur2.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur2.h new file mode 100644 index 0000000..51f942b --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur2.h @@ -0,0 +1,3364 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 42 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyyy, l(60, 44, 44, 44), r0.xyyy +iadd r2.xyzw, r1.xwxw, l(-2, -2, 0, -2) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +iadd r6.xyzw, r2.xyyy, l(1, 0, 0, 0) +itof r4.xy, r6.xwxx +add r4.xy, r4.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r4.xy, r4.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r4.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r7.xy {min16f}, r4.zwzz, t0.xyzw, s1, l(0.000000) +iadd r4.xyzw, r1.xwxw, l(1, -2, -2, -1) +itof r8.xyzw, r4.xyzw +add r8.xyzw, r8.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r8.xyzw, r8.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r9.xw {min16f}, r8.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r7.zw {min16f}, r8.zwzz, t0.zwxy, s1, l(0.000000) +iadd r8.xyzw, r1.xwxw, l(-1, -1, 0, -1) +itof r10.xyzw, r8.xyzw +add r10.xyzw, r10.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r10.xyzw, r10.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r11.xy {min16f}, r10.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.zw {min16f}, r10.zwzz, t0.zwxy, s1, l(0.000000) +iadd r10.xyzw, r1.xwxw, l(1, -1, -2, 0) +itof r12.xyzw, r10.xyzw +add r12.xyzw, r12.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r12.xyzw, r12.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r12.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r12.zwzz, t0.xyzw, s1, l(0.000000) +iadd r12.xyzw, r1.xwww, l(-1, 0, 0, 0) +itof r15.xy, r12.xwxx +add r15.xy, r15.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r15.xy, r15.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r15.xyxx, t0.zwxy, s1, l(0.000000) +itof r15.xy, r1.xwxx +add r15.xy, r15.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r15.xy, r15.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r16.xy {min16f}, r15.xyxx, t0.xyzw, s1, l(0.000000) +iadd r15.xyzw, r1.xwww, l(1, 0, 0, 0) +itof r17.xy, r15.xwxx +add r17.xy, r17.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r17.xy, r17.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r17.xw {min16f}, r17.xyxx, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r18.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.w, r5.x {min16f} +f32tof16 r18.w, r5.z {min16f} +imad r0.w, r18.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r18.x, r0.w +f32tof16 r0.w, r7.x {min16f} +f32tof16 r18.w, r9.x {min16f} +imad r0.w, r18.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r18.x, r0.w +f32tof16 r0.w, r7.z {min16f} +f32tof16 r18.w, r11.x {min16f} +imad r0.w, r18.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r18.y, r0.w +f32tof16 r0.w, r11.z {min16f} +f32tof16 r18.w, r13.x {min16f} +imad r0.w, r18.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r18.y, r0.w +f32tof16 r0.w, r14.x {min16f} +f32tof16 r18.w, r14.z {min16f} +imad r0.w, r18.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r18.z, r0.w +f32tof16 r0.w, r16.x {min16f} +f32tof16 r18.w, r17.x {min16f} +imad r0.w, r18.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r18.z, r0.w +sync_g_t +ld_structured r19.xy, r3.x, r18.x, g0.xyxx +and r19.zw, r19.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r20.xy, r19.xyxx, l(16, 16, 0, 0) +f16tof32 r21.w, r19.z +f16tof32 r21.x, r20.x +ld_structured r22.xyzw, r3.z, r18.x, g0.xyzw +and r23.xyzw, r22.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r22.xyzw, l(16, 16, 16, 16) +f16tof32 r21.y, r23.x +f16tof32 r21.z, r24.x +ishl r0.w, r3.y, l(2) +iadd r0.w, r0.w, l(-4) +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r25.x, r18.w +f16tof32 r25.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r25.z, r18.w +f16tof32 r25.w, r3.y +f16tof32 r19.x, r19.w +f16tof32 r19.y, r20.y +f16tof32 r19.z, r23.y +f16tof32 r19.w, r24.y +ld_structured r20.xyz, r0.z, r18.x, g0.xyzx +ushr r26.xyz, r20.xyzx, l(16, 16, 16, 0) +f16tof32 r26.xyz, r26.zxyz +ld_structured r27.xyz, r3.w, r18.x, g0.xyzx +and r28.xyz, r27.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r28.xyw, r28.xyxz +mov r9.xy {min16f}, r5.ywyy {min16f} +mov r9.z {min16f}, r7.y {min16f} +mul r5.xyzw {min16f}, r9.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r9.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r9.xyzw {min16f}, r9.xyzw +mad_sat r9.xyzw, r9.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r29.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r29.xyzw {min16f}, r29.xyzw +mad_sat r29.xyzw, r29.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r30.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r30.xyzw {min16f}, r30.xyzw +mad_sat r30.xyzw, r30.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r31.x, r26.y +mov r31.yzw, r21.wwxy +mul r31.xyzw {min16f}, r9.xyzw {def32 as min16f}, r31.xyzw {def32 as min16f} +mad r31.xyzw {min16f}, r21.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r31.xyzw {min16f} +add r32.xyzw {min16f}, r9.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r21.w, r28.x +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r31.xyzw {min16f} +add r31.xyzw {min16f}, r29.xyzw {def32 as min16f}, r32.xyzw {min16f} +mad r21.xyzw {min16f}, r25.xyzw {def32 as min16f}, r30.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r25.xyzw {min16f}, r30.xyzw {def32 as min16f}, r31.xyzw {min16f} +mad r19.xyzw {min16f}, r19.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r21.xyzw {min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r19.xyzw {min16f}, r19.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r19.xyzw, r19.xyzw {min16f} +imad r20.xw, r19.yyyw, l(0x00010000, 0, 0, 0x00010000), r19.xxxz +store_structured g1.x, r3.x, r18.x, r20.x +store_structured g1.x, r3.z, r18.x, r20.w +imad r19.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r33.xyz, r19.x, r18.y, g0.xyzx +and r34.xyz, r33.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r35.xyz, r33.xyzx, l(16, 16, 16, 0) +f16tof32 r25.w, r34.x +f16tof32 r25.x, r35.x +ld_structured r20.xw, r3.z, r18.y, g0.xxxy +and r22.xy, r20.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r23.xy, r20.xwxx, l(16, 16, 0, 0) +f16tof32 r25.y, r22.x +f16tof32 r25.z, r23.x +ishl r24.xy, r19.ywyy, l(2, 2, 0, 0) +iadd r24.xy, r24.xyxx, l(-4, -4, 0, 0) +ld_structured r3.y, r19.x, r24.x, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r31.x, r18.w +f16tof32 r31.y, r3.y +ld_structured r3.y, r3.z, r24.x, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r31.z, r18.w +f16tof32 r31.w, r3.y +f16tof32 r32.x, r34.y +f16tof32 r32.y, r35.y +f16tof32 r32.z, r22.y +f16tof32 r32.w, r23.y +mov r13.x {min16f}, r7.w {min16f} +mov r13.yz {min16f}, r11.yywy {min16f} +mul r7.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r7.xyzw, r7.xyzw {min16f} +ubfe r11.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r7.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r13.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r7.xyzw +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r36.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r7.xyzw +utof r36.xyzw {min16f}, r36.xyzw +mad_sat r36.xyzw, r36.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r7.xyzw, r7.xyzw, l(3, 3, 3, 3) +utof r7.xyzw {min16f}, r7.xyzw +mad_sat r7.xyzw, r7.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r37.x, r26.z +mov r37.yzw, r25.wwxy +mul r37.xyzw {min16f}, r11.xyzw {def32 as min16f}, r37.xyzw {def32 as min16f} +mad r37.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r37.xyzw {min16f} +add r38.xyzw {min16f}, r11.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r25.w, r28.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r37.xyzw {min16f} +add r37.xyzw {min16f}, r13.xyzw {def32 as min16f}, r38.xyzw {min16f} +mad r25.xyzw {min16f}, r31.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f}, r25.xyzw {min16f} +add r31.xyzw {min16f}, r36.xyzw {def32 as min16f}, r37.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +add r31.xyzw {min16f}, r7.xyzw {def32 as min16f}, r31.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r20.xy, r25.ywyy, l(0x00010000, 0x00010000, 0, 0), r25.xzxx +store_structured g1.x, r19.x, r18.y, r20.x +store_structured g1.x, r3.z, r18.y, r20.y +ld_structured r3.y, r19.z, r18.z, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r25.x, r18.w +f16tof32 r25.y, r3.y +f16tof32 r25.z, r23.z +f16tof32 r25.w, r24.z +ld_structured r3.y, r19.z, r24.y, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r32.x, r18.w +f16tof32 r32.y, r3.y +ld_structured r3.y, r3.z, r24.y, g0.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r32.z, r18.w +f16tof32 r32.w, r3.y +f16tof32 r33.x, r34.z +f16tof32 r33.y, r35.z +f16tof32 r33.z, r23.w +f16tof32 r33.w, r24.w +mov r17.xy {min16f}, r14.ywyy {min16f} +mov r17.z {min16f}, r16.y {min16f} +mul r14.xyzw {min16f}, r17.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r14.xyzw, r14.xyzw {min16f} +ubfe r16.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r14.xyzw +utof r16.xyzw {min16f}, r16.xyzw +mad_sat r16.xyzw, r16.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r17.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r14.xyzw +utof r17.xyzw {min16f}, r17.xyzw +mad_sat r17.xyzw, r17.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r20.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r14.xyzw +utof r20.xyzw {min16f}, r20.xyzw +mad_sat r20.xyzw, r20.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r14.xyzw, r14.xyzw, l(3, 3, 3, 3) +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r26.yzw, r25.xxyz +mul r22.xyzw {min16f}, r16.xyzw {def32 as min16f}, r26.xyzw {def32 as min16f} +mad r22.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r22.xyzw {min16f} +add r23.xyzw {min16f}, r16.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r28.xyz, r25.yzwy +mad r22.xyzw {min16f}, r28.xyzw {def32 as min16f}, r17.xyzw {def32 as min16f}, r22.xyzw {min16f} +add r23.xyzw {min16f}, r17.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r22.xyzw {min16f}, r32.xyzw {def32 as min16f}, r20.xyzw {def32 as min16f}, r22.xyzw {min16f} +add r23.xyzw {min16f}, r20.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r22.xyzw {min16f}, r33.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r22.xyzw {min16f} +add r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r22.xyzw {min16f}, r22.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r22.xyzw, r22.xyzw {min16f} +imad r24.zw, r22.yyyw, l(0, 0, 0x00010000, 0x00010000), r22.xxxz +store_structured g1.x, r19.z, r18.z, r24.z +store_structured g1.x, r3.z, r18.z, r24.w +sync_g_t +ld_structured r22.xyzw, r3.x, r18.x, g1.xyzw +and r25.xyzw, r22.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r26.xyzw, r22.xyzw, l(16, 16, 16, 16) +f16tof32 r27.w, r25.x +f16tof32 r27.x, r26.x +ld_structured r28.xyzw, r3.z, r18.x, g1.xyzw +and r32.xyzw, r28.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r33.xyzw, r28.xyzw, l(16, 16, 16, 16) +f16tof32 r27.y, r32.x +f16tof32 r27.z, r33.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r18.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r18.w +f16tof32 r34.y, r3.y +ld_structured r0.w, r3.z, r0.w, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.z, r3.y +f16tof32 r34.w, r0.w +f16tof32 r35.x, r25.y +f16tof32 r35.y, r26.y +f16tof32 r35.z, r32.y +f16tof32 r35.w, r33.y +ld_structured r39.xyz, r0.z, r18.x, g1.xyzx +ushr r40.xyz, r39.xyzx, l(16, 16, 16, 0) +f16tof32 r37.xyz, r40.zxyz +ld_structured r40.xyz, r3.w, r18.x, g1.xyzx +and r41.xyz, r40.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r38.xyw, r41.xyxz +mov r41.x, r37.y +mov r41.yzw, r27.wwxy +mul r9.xyzw {min16f}, r9.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r9.xyzw {min16f}, r27.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r9.xyzw {min16f} +mov r27.w, r38.x +mad r9.xyzw {min16f}, r27.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r9.xyzw {min16f}, r34.xyzw {def32 as min16f}, r30.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r5.xyzw {min16f}, r35.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r9.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r3.x, r18.x, r3.y +store_structured g0.x, r3.z, r18.x, r3.w +ld_structured r3.yw, r19.x, r18.y, g1.xxxy +and r24.zw, r3.yyyw, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r26.xy, r3.ywyy, l(16, 16, 0, 0) +f16tof32 r5.w, r24.z +f16tof32 r5.x, r26.x +ld_structured r27.xy, r3.z, r18.y, g1.xyxx +and r27.zw, r27.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r28.xy, r27.xyxx, l(16, 16, 0, 0) +f16tof32 r5.y, r27.z +f16tof32 r5.z, r28.x +ld_structured r0.w, r19.x, r24.x, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r9.x, r3.y +f16tof32 r9.y, r0.w +ld_structured r0.w, r3.z, r24.x, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r9.z, r3.y +f16tof32 r9.w, r0.w +f16tof32 r21.x, r25.z +f16tof32 r21.y, r26.z +f16tof32 r21.z, r32.z +f16tof32 r21.w, r33.z +mov r29.x, r37.z +mov r29.yzw, r5.wwxy +mul r11.xyzw {min16f}, r11.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r5.w, r38.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r21.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r24.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g0.x, r19.x, r18.y, r24.x +store_structured g0.x, r3.z, r18.y, r24.z +f16tof32 r5.x, r24.w +f16tof32 r5.y, r26.y +f16tof32 r5.z, r27.w +f16tof32 r5.w, r28.y +ld_structured r0.w, r19.z, r24.y, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r7.x, r3.y +f16tof32 r7.y, r0.w +ld_structured r0.w, r3.z, r24.y, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r7.z, r3.y +f16tof32 r7.w, r0.w +f16tof32 r9.x, r25.w +f16tof32 r9.y, r26.w +f16tof32 r9.z, r32.w +f16tof32 r9.w, r33.w +mov r37.yzw, r5.xxyz +mul r11.xyzw {min16f}, r16.xyzw {def32 as min16f}, r37.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r38.xyz, r5.yzwy +mad r5.xyzw {min16f}, r38.xyzw {def32 as min16f}, r17.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r7.xyzw {def32 as min16f}, r20.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r19.z, r18.z, r3.y +store_structured g0.x, r3.z, r18.z, r3.w +sync_g_t +uge r0.x, r0.y, l(2) +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r18.x, g0.xxxx + ld_structured r0.z, r3.z, r18.x, g0.xxxx + uge r0.x, r0.x, l(2) + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r2.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(2) + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r6.xyzw, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + ult r0.y, r0.x, l(62) + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r2.zwww, r0.yyyy + endif + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(62) + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.xyyy, r0.xxxx + endif +endif +imad r0.xy, l(3, 3, 0, 0), vThreadIDInGroup.yyyy, l(1, 2, 0, 0) +uge r0.z, r0.x, l(2) +ult r0.xy, r0.xyxx, l(46, 46, 0, 0) +and r0.x, r0.x, r0.z +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.z, r3.x, r18.y, g0.xxxx + ld_structured r0.w, r3.z, r18.y, g0.xxxx + uge r0.x, r0.x, l(2) + if_nz r0.x + and r0.x, r0.z, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.zwww, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r2.x, r0.x, l(2) + if_nz r2.x + ushr r0.z, r0.z, l(16) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r8.xyyy, r0.zzzz + endif + iadd r0.x, r0.x, l(1) + ult r0.z, r0.x, l(62) + if_nz r0.z + and r0.z, r0.w, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r8.zwww, r0.zzzz + endif + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(62) + if_nz r0.x + ushr r0.x, r0.w, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r10.xyyy, r0.xxxx + endif +endif +if_nz r0.y + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r18.z, g0.xxxx + ld_structured r0.z, r3.z, r18.z, g0.xxxx + uge r0.x, r0.x, l(2) + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r10.zwww, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(2) + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r12.xyzw, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + ult r0.y, r0.x, l(62) + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r1.xyzw, r0.yyyy + endif + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(62) + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r15.xyzw, r0.xxxx + endif +endif +ret +// Approximately 465 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur2DXIL[] = +{ + 68, 88, 66, 67, 252, 57, + 60, 211, 4, 166, 238, 115, + 72, 120, 133, 213, 224, 149, + 51, 206, 1, 0, 0, 0, + 120, 65, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 204, 64, 0, 0, 220, 64, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 12, 56, + 0, 0, 80, 0, 5, 0, + 3, 14, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 42, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 21, 2, 0, + 2, 64, 0, 0, 60, 0, + 0, 0, 44, 0, 0, 0, + 44, 0, 0, 0, 44, 0, + 0, 0, 70, 5, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 254, 255, + 255, 255, 254, 255, 255, 255, + 0, 0, 0, 0, 254, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 4, 0, 0, 0, + 198, 0, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 4, 0, + 0, 0, 70, 0, 16, 0, + 4, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 4, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 4, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 198, 12, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 254, 255, + 255, 255, 254, 255, 255, 255, + 255, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 0, 16, 0, 8, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 230, 10, 16, 0, + 8, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 8, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 0, + 16, 0, 10, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 230, 10, 16, 0, 10, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 10, 0, + 0, 0, 198, 12, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 255, 255, 255, 255, 254, 255, + 255, 255, 0, 0, 0, 0, + 43, 0, 0, 5, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 12, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 12, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 0, 16, 0, + 12, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 230, 10, + 16, 0, 12, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 12, 0, 0, 0, + 198, 15, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 15, 0, 0, 0, 198, 0, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 15, 0, 0, 0, + 70, 0, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 15, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 43, 0, 0, 5, + 50, 0, 16, 0, 15, 0, + 0, 0, 198, 0, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 10, 50, 0, 16, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 15, 0, + 0, 0, 70, 0, 16, 0, + 15, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 16, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 15, 0, 0, 0, + 198, 15, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 17, 0, 0, 0, 198, 0, + 16, 0, 15, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 17, 0, 0, 0, + 70, 0, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 17, 0, 0, 0, 70, 0, + 16, 0, 17, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 17, 0, 0, 0, + 70, 0, 16, 0, 17, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 41, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 30, 0, 0, 10, 114, 0, + 16, 0, 18, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 4, 0, 0, 0, 8, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 16, 0, 0, 0, 130, 0, + 0, 6, 130, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 35, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 190, 24, + 0, 1, 167, 0, 0, 9, + 50, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 70, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 194, 0, 16, 0, 19, 0, + 0, 0, 6, 4, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 20, 0, 0, 0, + 70, 0, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 21, 0, 0, 0, 42, 0, + 16, 0, 19, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 20, 0, + 0, 0, 167, 0, 0, 9, + 242, 0, 16, 0, 22, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 70, 254, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 22, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 21, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 41, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 30, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 252, 255, 255, 255, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 58, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 25, 0, 0, 0, + 58, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 19, 0, 0, 0, 58, 0, + 16, 0, 19, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 20, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 19, 0, 0, 0, 26, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 20, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 26, 0, 0, 0, + 70, 2, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 114, 0, 16, 0, + 26, 0, 0, 0, 38, 9, + 16, 0, 26, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 27, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 28, 0, 0, 0, + 70, 2, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 178, 0, 16, 0, + 28, 0, 0, 0, 70, 8, + 16, 0, 28, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 29, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 30, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 31, 0, 0, 0, 246, 4, + 16, 0, 21, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 31, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 54, 9, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 28, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 31, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 32, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 35, 0, 0, 12, 146, 0, + 16, 0, 20, 0, 0, 0, + 86, 13, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 19, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 20, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 58, 0, + 16, 0, 20, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 33, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 34, 0, + 0, 0, 70, 2, 16, 0, + 33, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 35, 0, 0, 0, + 70, 2, 16, 0, 33, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 35, 0, + 0, 0, 167, 0, 0, 9, + 146, 0, 16, 0, 20, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 6, 244, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 50, 0, 16, 0, 22, 0, + 0, 0, 198, 0, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 23, 0, 0, 0, + 198, 0, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 41, 0, 0, 10, + 50, 0, 16, 0, 24, 0, + 0, 0, 214, 5, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 24, 0, 0, 0, + 70, 0, 16, 0, 24, 0, + 0, 0, 2, 64, 0, 0, + 252, 255, 255, 255, 252, 255, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 31, 0, 0, 0, + 58, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 31, 0, 0, 0, + 58, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 32, 0, 0, 0, 26, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 32, 0, 0, 0, + 26, 0, 16, 0, 35, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 54, 0, 0, 7, 18, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 58, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 54, 0, + 0, 7, 98, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 86, 7, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 36, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 36, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 26, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 37, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 37, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 37, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 38, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 28, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 37, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 37, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 38, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 31, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 50, 0, + 16, 0, 20, 0, 0, 0, + 214, 5, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 20, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 20, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 58, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 25, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 25, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 32, 0, 0, 0, + 58, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 32, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 32, 0, 0, 0, + 58, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 32, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 42, 0, 16, 0, 35, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 24, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 17, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 16, 0, 0, 0, + 70, 14, 16, 0, 16, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 16, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 17, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 17, 0, + 0, 0, 70, 14, 16, 0, + 17, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 20, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 26, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 114, 0, 16, 0, + 28, 0, 0, 0, 150, 7, + 16, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 0, 17, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 17, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 20, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 20, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 22, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 24, 0, 0, 0, 86, 13, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 190, 24, + 0, 1, 167, 0, 0, 9, + 242, 0, 16, 0, 22, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 70, 254, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 22, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 27, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 27, 0, 0, 0, + 10, 0, 16, 0, 26, 0, + 0, 0, 167, 0, 0, 9, + 242, 0, 16, 0, 28, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 70, 254, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 27, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 27, 0, 0, 0, + 10, 0, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 35, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 35, 0, 0, 0, 26, 0, + 16, 0, 26, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 35, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 35, 0, + 0, 0, 26, 0, 16, 0, + 33, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 70, 242, 17, 0, + 1, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 40, 0, 0, 0, 70, 2, + 16, 0, 39, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 38, 9, 16, 0, + 40, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 40, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 70, 242, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 41, 0, 0, 0, 70, 2, + 16, 0, 40, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 38, 0, + 0, 0, 70, 8, 16, 0, + 41, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 26, 0, + 16, 0, 37, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 27, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 54, 9, 16, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 27, 0, 0, 0, + 10, 0, 16, 0, 38, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 3, 0, 0, 0, + 86, 13, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 162, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 18, 0, 0, 0, 6, 244, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 24, 0, 0, 0, + 86, 13, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 26, 0, 0, 0, 214, 5, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 5, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 5, 0, 0, 0, 10, 0, + 16, 0, 26, 0, 0, 0, + 167, 0, 0, 9, 50, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 18, 0, 0, 0, 70, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 27, 0, 0, 0, + 6, 4, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 28, 0, 0, 0, 70, 0, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 5, 0, + 0, 0, 42, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 10, 0, + 16, 0, 28, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 9, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 9, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 42, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 42, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 42, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 42, 0, 16, 0, 33, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 29, 0, + 0, 0, 42, 0, 16, 0, + 37, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 29, 0, 0, 0, 246, 4, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 54, 9, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 38, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 12, 82, 0, 16, 0, + 24, 0, 0, 0, 86, 7, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 6, 2, 16, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 18, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 5, 0, 0, 0, 58, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 26, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 5, 0, + 0, 0, 58, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 28, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 7, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 7, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 33, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 37, 0, + 0, 0, 6, 9, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 38, 0, + 0, 0, 150, 7, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 38, 0, 0, 0, 70, 14, + 16, 0, 17, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 162, 0, 16, 0, 3, 0, + 0, 0, 86, 13, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 190, 24, 0, 1, + 80, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 79, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 62, 0, + 0, 0, 31, 0, 4, 3, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 2, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 60, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 62, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 35, 0, 0, 14, 50, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 86, 37, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 79, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 46, 0, 0, 0, 46, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 41, 0, 0, 6, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 80, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 2, 0, + 0, 0, 85, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 8, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 79, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 62, 0, 0, 0, + 31, 0, 4, 3, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 8, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 62, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 10, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 10, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 12, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 79, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 62, 0, + 0, 0, 31, 0, 4, 3, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 60, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 62, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 62, 0, 0, 1, 83, 70, + 73, 48, 8, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 83, 84, 65, 84, + 148, 0, 0, 0, 209, 1, + 0, 0, 42, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 79, 0, 0, 0, + 39, 0, 0, 0, 80, 0, + 0, 0, 1, 0, 0, 0, + 15, 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, 12, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 0, 0, 0, + 0, 0, 0, 0, 23, 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, 3, 0, 0, 0, + 0, 0, 0, 0, 12, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur3.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur3.h new file mode 100644 index 0000000..79ada14 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur3.h @@ -0,0 +1,4038 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 42 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyxy, l(58, 42, 58, 42), r0.xyxy +iadd r2.xyzw, r1.zwzw, l(-3, -3, -2, -3) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r4.zwzz, t0.zwxy, s1, l(0.000000) +iadd r4.xyzw, r1.zwzw, l(-1, -3, 0, -3) +itof r6.xyzw, r4.xyzw +add r6.xyzw, r6.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r6.xyzw, r6.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.xy {min16f}, r6.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r6.xw {min16f}, r6.zwzz, t0.xzwy, s1, l(0.000000) +iadd r8.xyzw, r1.zwzw, l(-3, -2, -2, -2) +itof r9.xyzw, r8.xyzw +add r9.xyzw, r9.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r9.xyzw, r9.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.zw {min16f}, r9.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r10.xy {min16f}, r9.zwzz, t0.xyzw, s1, l(0.000000) +iadd r9.xyzw, r1.zwzw, l(-1, -2, 0, -2) +itof r11.xyzw, r9.xyzw +add r11.xyzw, r11.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r11.xyzw, r11.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r10.zw {min16f}, r11.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.xw {min16f}, r11.zwzz, t0.xzwy, s1, l(0.000000) +iadd r12.xyzw, r1.zwzw, l(-3, -1, -2, -1) +itof r13.xyzw, r12.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r13.zwzz, t0.zwxy, s1, l(0.000000) +iadd r1.xyzw, r1.xyzw, l(-1, -1, 0, -1) +itof r13.xyzw, r1.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r15.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r13.zwzz, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r16.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.yw, r5.xxxz {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.x, r0.y +f32tof16 r0.y, r7.x {min16f} +f32tof16 r0.w, r6.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.x, r0.y +f32tof16 r0.y, r7.z {min16f} +f32tof16 r0.w, r10.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.y, r0.y +f32tof16 r0.y, r10.z {min16f} +f32tof16 r0.w, r11.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.y, r0.y +f32tof16 r0.yw, r14.xxxz {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.z, r0.y +f32tof16 r0.y, r15.x {min16f} +f32tof16 r0.w, r13.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.z, r0.y +sync_g_t +ld_structured r0.yw, r3.x, r16.x, g0.xxxy +and r17.xy, r0.ywyy, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r17.zw, r0.yyyw, l(0, 0, 16, 16) +f16tof32 r18.xw, r17.zzzx +ld_structured r19.xyzw, r3.z, r16.x, g0.xyzw +and r20.xyzw, r19.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r21.xyzw, r19.xyzw, l(16, 16, 16, 16) +f16tof32 r18.y, r20.x +f16tof32 r18.z, r21.x +ishl r0.y, r3.y, l(2) +iadd r0.y, r0.y, l(-4) +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r17.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r22.x, r17.x +f16tof32 r22.y, r16.w +ld_structured r16.w, r3.z, r0.y, g0.xxxx +and r17.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r22.z, r17.x +f16tof32 r22.w, r16.w +f16tof32 r23.xy, r17.ywyy +f16tof32 r23.z, r20.y +f16tof32 r23.w, r21.y +ld_structured r17.xyz, r0.z, r16.x, g0.xyzx +ushr r24.xyz, r17.xyzx, l(16, 16, 16, 0) +f16tof32 r24.xyz, r24.zxyz +ld_structured r25.xyz, r3.w, r16.x, g0.xyzx +and r26.xyz, r25.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r26.xyw, r26.xyxz +mov r6.xy {min16f}, r5.ywyy {min16f} +mov r6.z {min16f}, r7.y {min16f} +mul r5.xyzw {min16f}, r6.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r6.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r6.xyzw {min16f}, r6.xyzw +mad_sat r6.xyzw, r6.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r27.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r27.xyzw {min16f}, r27.xyzw +mad_sat r27.xyzw, r27.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r29.x, r24.y +mov r29.yzw, r18.wwxy +mul r29.xyzw {min16f}, r6.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f} +mad r29.xyzw {min16f}, r18.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r29.xyzw {min16f} +add r30.xyzw {min16f}, r6.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r18.w, r26.x +mad r18.xyzw {min16f}, r18.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r29.xyzw {min16f} +add r29.xyzw {min16f}, r27.xyzw {def32 as min16f}, r30.xyzw {min16f} +mad r18.xyzw {min16f}, r22.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r18.xyzw {min16f} +add r22.xyzw {min16f}, r28.xyzw {def32 as min16f}, r29.xyzw {min16f} +mad r18.xyzw {min16f}, r23.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r18.xyzw {min16f} +add r22.xyzw {min16f}, r5.xyzw {def32 as min16f}, r22.xyzw {min16f} +div r18.xyzw {min16f}, r18.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r18.xyzw, r18.xyzw {min16f} +imad r17.xw, r18.yyyw, l(0x00010000, 0, 0, 0x00010000), r18.xxxz +store_structured g1.x, r3.x, r16.x, r17.x +store_structured g1.x, r3.z, r16.x, r17.w +imad r18.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r23.xyz, r18.x, r16.y, g0.xyzx +and r31.xyz, r23.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r32.xyz, r23.xyzx, l(16, 16, 16, 0) +f16tof32 r29.w, r31.x +f16tof32 r29.x, r32.x +ld_structured r17.xw, r3.z, r16.y, g0.xxxy +and r19.xy, r17.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r20.xy, r17.xwxx, l(16, 16, 0, 0) +f16tof32 r29.y, r19.x +f16tof32 r29.z, r20.x +ishl r21.xy, r18.ywyy, l(2, 2, 0, 0) +iadd r21.xy, r21.xyxx, l(-4, -4, 0, 0) +ld_structured r0.w, r18.x, r21.x, g0.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r30.x, r16.w +f16tof32 r30.y, r0.w +ld_structured r0.w, r3.z, r21.x, g0.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r30.z, r16.w +f16tof32 r30.w, r0.w +f16tof32 r33.x, r31.y +f16tof32 r33.y, r32.y +f16tof32 r33.z, r19.y +f16tof32 r33.w, r20.y +mov r11.x {min16f}, r7.w {min16f} +mov r11.yz {min16f}, r10.yywy {min16f} +mul r7.xyzw {min16f}, r11.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r7.xyzw, r7.xyzw {min16f} +ubfe r10.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r7.xyzw +utof r10.xyzw {min16f}, r10.xyzw +mad_sat r10.xyzw, r10.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r11.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r7.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r34.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r7.xyzw +utof r34.xyzw {min16f}, r34.xyzw +mad_sat r34.xyzw, r34.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r7.xyzw, r7.xyzw, l(3, 3, 3, 3) +utof r7.xyzw {min16f}, r7.xyzw +mad_sat r7.xyzw, r7.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r35.x, r24.z +mov r35.yzw, r29.wwxy +mul r35.xyzw {min16f}, r10.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r35.xyzw {min16f}, r29.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r35.xyzw {min16f} +add r36.xyzw {min16f}, r10.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r29.w, r26.y +mad r29.xyzw {min16f}, r29.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r35.xyzw {min16f} +add r35.xyzw {min16f}, r11.xyzw {def32 as min16f}, r36.xyzw {min16f} +mad r29.xyzw {min16f}, r30.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r29.xyzw {min16f} +add r30.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {min16f} +mad r29.xyzw {min16f}, r33.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r29.xyzw {min16f} +add r30.xyzw {min16f}, r7.xyzw {def32 as min16f}, r30.xyzw {min16f} +div r29.xyzw {min16f}, r29.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r29.xyzw, r29.xyzw {min16f} +imad r17.xy, r29.ywyy, l(0x00010000, 0x00010000, 0, 0), r29.xzxx +store_structured g1.x, r18.x, r16.y, r17.x +store_structured g1.x, r3.z, r16.y, r17.y +ld_structured r0.w, r18.z, r16.z, g0.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r29.x, r16.w +f16tof32 r29.y, r0.w +f16tof32 r29.z, r20.z +f16tof32 r29.w, r21.z +ld_structured r0.w, r18.z, r21.y, g0.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r16.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r21.y, g0.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r16.w +f16tof32 r33.w, r0.w +f16tof32 r23.x, r31.z +f16tof32 r23.y, r32.z +f16tof32 r23.z, r20.w +f16tof32 r23.w, r21.w +mov r13.xy {min16f}, r14.ywyy {min16f} +mov r13.z {min16f}, r15.y {min16f} +mul r13.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r13.xyzw, r13.xyzw {min16f} +ubfe r14.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r13.xyzw +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r15.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r13.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r17.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r13.xyzw +utof r17.xyzw {min16f}, r17.xyzw +mad_sat r17.xyzw, r17.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r13.xyzw, r13.xyzw, l(3, 3, 3, 3) +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r24.yzw, r29.xxyz +mul r19.xyzw {min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {def32 as min16f} +mad r19.xyzw {min16f}, r29.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r19.xyzw {min16f} +add r20.xyzw {min16f}, r14.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r26.xyz, r29.yzwy +mad r19.xyzw {min16f}, r26.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r20.xyzw {min16f}, r15.xyzw {def32 as min16f}, r20.xyzw {min16f} +mad r19.xyzw {min16f}, r33.xyzw {def32 as min16f}, r17.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r20.xyzw {min16f}, r17.xyzw {def32 as min16f}, r20.xyzw {min16f} +mad r19.xyzw {min16f}, r23.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r20.xyzw {min16f}, r13.xyzw {def32 as min16f}, r20.xyzw {min16f} +div r19.xyzw {min16f}, r19.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r19.xyzw, r19.xyzw {min16f} +imad r21.zw, r19.yyyw, l(0, 0, 0x00010000, 0x00010000), r19.xxxz +store_structured g1.x, r18.z, r16.z, r21.z +store_structured g1.x, r3.z, r16.z, r21.w +sync_g_t +ld_structured r19.xyzw, r3.x, r16.x, g1.xyzw +and r23.xyzw, r19.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r19.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g1.xyzw +and r29.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r29.x +f16tof32 r25.z, r31.x +ld_structured r0.w, r3.x, r0.y, g1.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r32.x, r16.w +f16tof32 r32.y, r0.w +ld_structured r0.w, r3.z, r0.y, g1.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r32.z, r16.w +f16tof32 r32.w, r0.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r29.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g1.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g1.xyzx +and r39.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r39.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r21.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g0.x, r3.x, r16.x, r21.z +store_structured g0.x, r3.z, r16.x, r21.w +ld_structured r21.zw, r18.x, r16.y, g1.xxxy +and r23.xy, r21.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r24.xy, r21.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xy, r3.z, r16.y, g1.xyxx +and r31.xy, r26.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.xy, r26.xyxx, l(16, 16, 0, 0) +f16tof32 r25.y, r31.x +f16tof32 r25.z, r32.x +ld_structured r0.w, r18.x, r21.x, g1.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r16.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r21.x, g1.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r16.w +f16tof32 r33.w, r0.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r29.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r23.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g0.x, r18.x, r16.y, r23.x +store_structured g0.x, r3.z, r16.y, r23.z +f16tof32 r25.x, r23.y +f16tof32 r25.y, r24.y +f16tof32 r25.z, r31.y +f16tof32 r25.w, r32.y +ld_structured r0.w, r18.z, r21.y, g1.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r32.x, r16.w +f16tof32 r32.y, r0.w +ld_structured r0.w, r3.z, r21.y, g1.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r32.z, r16.w +f16tof32 r32.w, r0.w +f16tof32 r19.x, r23.w +f16tof32 r19.y, r24.w +f16tof32 r19.z, r29.w +f16tof32 r19.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r17.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r19.xyzw {min16f}, r19.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r19.xyzw {min16f}, r19.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r19.xyzw, r19.xyzw {min16f} +imad r21.zw, r19.yyyw, l(0, 0, 0x00010000, 0x00010000), r19.xxxz +store_structured g0.x, r18.z, r16.z, r21.z +store_structured g0.x, r3.z, r16.z, r21.w +sync_g_t +ld_structured r19.xyzw, r3.x, r16.x, g0.xyzw +and r23.xyzw, r19.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r19.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g0.xyzw +and r29.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r29.x +f16tof32 r25.z, r31.x +ld_structured r0.w, r3.x, r0.y, g0.xxxx +and r16.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r32.x, r16.w +f16tof32 r32.y, r0.w +ld_structured r0.y, r3.z, r0.y, g0.xxxx +and r0.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r32.zw, r0.wwwy +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r29.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g0.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g0.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r6.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r6.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r6.xyzw {min16f} +mov r25.w, r36.x +mad r6.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r6.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r5.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r6.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r0.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g1.x, r3.x, r16.x, r0.y +store_structured g1.x, r3.z, r16.x, r0.w +ld_structured r0.yw, r18.x, r16.y, g0.xxxy +and r21.zw, r0.yyyw, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r24.xy, r0.ywyy, l(16, 16, 0, 0) +f16tof32 r5.w, r21.z +f16tof32 r5.x, r24.x +ld_structured r26.xy, r3.z, r16.y, g0.xyxx +and r31.xy, r26.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.xy, r26.xyxx, l(16, 16, 0, 0) +f16tof32 r5.y, r31.x +f16tof32 r5.z, r32.x +ld_structured r0.y, r18.x, r21.x, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.x, r3.w +f16tof32 r6.y, r0.y +ld_structured r0.y, r3.z, r21.x, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.z, r3.w +f16tof32 r6.w, r0.y +f16tof32 r22.x, r23.z +f16tof32 r22.y, r24.z +f16tof32 r22.z, r29.z +f16tof32 r22.w, r31.z +mov r25.x, r35.z +mov r25.yzw, r5.wwxy +mul r10.xyzw {min16f}, r10.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r10.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r10.xyzw {min16f} +mov r5.w, r36.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r10.xyzw {min16f} +mad r5.xyzw {min16f}, r6.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r22.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r21.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g1.x, r18.x, r16.y, r21.x +store_structured g1.x, r3.z, r16.y, r21.z +f16tof32 r5.x, r21.w +f16tof32 r5.y, r24.y +f16tof32 r5.z, r31.y +f16tof32 r5.w, r32.y +ld_structured r0.y, r18.z, r21.y, g0.xxxx +and r0.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.xy, r0.wyww +ld_structured r0.y, r3.z, r21.y, g0.xxxx +and r0.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.zw, r0.wwwy +f16tof32 r7.x, r23.w +f16tof32 r7.y, r24.w +f16tof32 r7.z, r29.w +f16tof32 r7.w, r31.w +mov r35.yzw, r5.xxyz +mul r10.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r10.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r10.xyzw {min16f} +mov r36.xyz, r5.yzwy +mad r5.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r10.xyzw {min16f} +mad r5.xyzw {min16f}, r6.xyzw {def32 as min16f}, r17.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r7.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r0.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g1.x, r18.z, r16.z, r0.y +store_structured g1.x, r3.z, r16.z, r0.w +sync_g_t +uge r0.x, vThreadIDInGroup.y, l(1) +ult r0.y, vThreadIDInGroup.y, l(15) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.x, g1.xxxx + ld_structured r0.z, r3.z, r16.x, g1.xxxx + uge r0.x, r0.x, l(3) + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r2.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(3) + ult r2.x, r0.x, l(61) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r2.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(3) + ult r0.w, r0.x, l(61) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r4.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(61) + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.zwww, r0.xxxx + endif +endif +uge r0.x, r3.y, l(3) +ult r0.y, r3.y, l(45) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.y, g1.xxxx + ld_structured r0.z, r3.z, r16.y, g1.xxxx + uge r0.x, r0.x, l(3) + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r8.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(3) + ult r2.x, r0.x, l(61) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r8.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(3) + ult r0.w, r0.x, l(61) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r9.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(61) + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r9.zwww, r0.xxxx + endif +endif +imad r0.x, l(3), vThreadIDInGroup.y, l(2) +uge r0.y, r0.x, l(3) +ult r0.x, r0.x, l(45) +and r0.x, r0.x, r0.y +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.z, g1.xxxx + ld_structured r0.z, r3.z, r16.z, g1.xxxx + uge r0.x, r0.x, l(3) + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r12.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(3) + ult r2.x, r0.x, l(61) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r12.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(3) + ult r0.w, r0.x, l(61) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r1.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + ult r0.x, r0.x, l(61) + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r1.zwww, r0.xxxx + endif +endif +ret +// Approximately 579 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur3DXIL[] = +{ + 68, 88, 66, 67, 13, 22, + 42, 21, 189, 125, 50, 72, + 49, 195, 160, 184, 94, 213, + 110, 118, 1, 0, 0, 0, + 156, 78, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 240, 77, 0, 0, 0, 78, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 48, 69, + 0, 0, 80, 0, 5, 0, + 76, 17, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 42, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 20, 2, 0, + 2, 64, 0, 0, 58, 0, + 0, 0, 42, 0, 0, 0, + 58, 0, 0, 0, 42, 0, + 0, 0, 70, 4, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 253, 255, + 255, 255, 253, 255, 255, 255, + 254, 255, 255, 255, 253, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 4, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 255, 255, 253, 255, 255, 255, + 0, 0, 0, 0, 253, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 0, + 16, 0, 6, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 6, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 8, 0, + 0, 0, 230, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 253, 255, 255, 255, + 254, 255, 255, 255, 254, 255, + 255, 255, 254, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 9, 0, 0, 0, + 230, 14, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 255, 255, 254, 255, + 255, 255, 0, 0, 0, 0, + 254, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 0, 16, 0, 11, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 230, 10, 16, 0, + 11, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 12, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 253, 255, + 255, 255, 255, 255, 255, 255, + 254, 255, 255, 255, 255, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 0, + 16, 0, 13, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 230, 10, 16, 0, 13, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 70, 0, 16, 0, + 13, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 230, 10, + 16, 0, 13, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 16, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 162, 0, 16, 0, 0, 0, + 0, 0, 6, 8, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 162, 0, 16, 0, 0, 0, + 0, 0, 6, 8, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 162, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 6, 244, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 17, 0, 0, 0, + 214, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 194, 0, 16, 0, + 17, 0, 0, 0, 86, 13, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 146, 0, 16, 0, 18, 0, + 0, 0, 166, 2, 16, 0, + 17, 0, 0, 0, 167, 0, + 0, 9, 242, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 254, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 242, 0, 16, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 10, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 20, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 18, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 41, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 30, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 252, 255, 255, 255, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 22, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 22, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 22, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 22, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 50, 0, + 16, 0, 23, 0, 0, 0, + 214, 5, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 23, 0, + 0, 0, 26, 0, 16, 0, + 20, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 23, 0, 0, 0, 26, 0, + 16, 0, 21, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 24, 0, 0, 0, + 70, 2, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 114, 0, 16, 0, + 24, 0, 0, 0, 38, 9, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 25, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 26, 0, 0, 0, + 70, 2, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 178, 0, 16, 0, + 26, 0, 0, 0, 70, 8, + 16, 0, 26, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 27, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 27, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 28, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 28, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 28, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 29, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 29, 0, 0, 0, 246, 4, + 16, 0, 18, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 54, 9, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 26, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 18, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 35, 0, 0, 12, 146, 0, + 16, 0, 17, 0, 0, 0, + 86, 13, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 18, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 31, 0, + 0, 0, 70, 2, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 32, 0, 0, 0, + 70, 2, 16, 0, 23, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 29, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 29, 0, 0, 0, + 10, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 146, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 6, 244, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 50, 0, 16, 0, 19, 0, + 0, 0, 198, 0, 16, 0, + 17, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 20, 0, 0, 0, + 198, 0, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 29, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 29, 0, 0, 0, + 10, 0, 16, 0, 20, 0, + 0, 0, 41, 0, 0, 10, + 50, 0, 16, 0, 21, 0, + 0, 0, 214, 5, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 21, 0, 0, 0, + 70, 0, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 252, 255, 255, 255, 252, 255, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 21, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 30, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 30, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 21, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 30, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 30, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 19, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 20, 0, 0, 0, + 54, 0, 0, 7, 18, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 58, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 54, 0, + 0, 7, 98, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 86, 7, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 10, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 34, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 34, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 35, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 35, 0, 0, 0, 246, 4, + 16, 0, 29, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 35, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 35, 0, 0, 0, + 54, 9, 16, 0, 29, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 29, 0, 0, 0, + 26, 0, 16, 0, 26, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 35, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 35, 0, 0, 12, 50, 0, + 16, 0, 17, 0, 0, 0, + 214, 5, 16, 0, 29, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 0, + 16, 0, 29, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 16, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 29, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 29, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 29, 0, 0, 0, + 42, 0, 16, 0, 20, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 29, 0, + 0, 0, 42, 0, 16, 0, + 21, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 21, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 21, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 23, 0, 0, 0, 42, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 23, 0, 0, 0, + 42, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 23, 0, + 0, 0, 58, 0, 16, 0, + 20, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 23, 0, 0, 0, 58, 0, + 16, 0, 21, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 15, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 70, 14, + 16, 0, 17, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 17, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 24, 0, + 0, 0, 6, 9, 16, 0, + 29, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 24, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 114, 0, 16, 0, + 26, 0, 0, 0, 150, 7, + 16, 0, 29, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 19, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 21, 0, 0, 0, 86, 13, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 19, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 21, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 21, 0, 0, 0, 190, 24, + 0, 1, 167, 0, 0, 9, + 242, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 254, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 167, 0, 0, 9, + 242, 0, 16, 0, 26, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 254, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 29, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 32, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 32, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 29, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 31, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 37, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 242, 17, 0, + 1, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 38, 0, 0, 0, 70, 2, + 16, 0, 37, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 35, 0, + 0, 0, 38, 9, 16, 0, + 38, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 38, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 242, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 39, 0, 0, 0, 70, 2, + 16, 0, 38, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 36, 0, + 0, 0, 70, 8, 16, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 39, 0, 0, 0, 26, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 39, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 39, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 194, 0, + 16, 0, 21, 0, 0, 0, + 86, 13, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 21, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 21, 0, 0, 0, + 167, 0, 0, 9, 194, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 6, 244, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 23, 0, 0, 0, + 230, 10, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 50, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 70, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 31, 0, 0, 0, + 70, 0, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 29, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 26, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 82, 0, 16, 0, + 23, 0, 0, 0, 86, 7, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 6, 2, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 26, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 21, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 21, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 19, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 19, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 19, 0, 0, 0, 58, 0, + 16, 0, 29, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 19, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 17, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 21, 0, + 0, 0, 86, 13, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 19, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 21, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 19, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 29, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 194, 0, 16, 0, 32, 0, + 0, 0, 246, 7, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 29, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 37, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 38, 0, 0, 0, + 70, 2, 16, 0, 37, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 114, 0, 16, 0, + 35, 0, 0, 0, 38, 9, + 16, 0, 38, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 38, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 41, 0, 0, 0, + 70, 2, 16, 0, 38, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 178, 0, 16, 0, + 36, 0, 0, 0, 70, 8, + 16, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 39, 0, 0, 0, + 26, 0, 16, 0, 35, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 39, 0, + 0, 0, 246, 4, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 54, 9, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 36, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 162, 0, 16, 0, 0, 0, + 0, 0, 86, 13, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 162, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 6, 244, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 194, 0, 16, 0, 21, 0, + 0, 0, 86, 13, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 24, 0, 0, 0, + 214, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 5, 0, 0, 0, 42, 0, + 16, 0, 21, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 167, 0, 0, 9, + 50, 0, 16, 0, 26, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 70, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 50, 0, 16, 0, 31, 0, + 0, 0, 70, 0, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 32, 0, 0, 0, + 70, 0, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 5, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 21, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 21, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 22, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 22, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 22, 0, 0, 0, + 42, 0, 16, 0, 29, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 22, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 25, 0, 0, 0, + 246, 4, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 54, 9, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 21, 0, 0, 0, + 86, 7, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 21, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 21, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 21, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 50, 0, 16, 0, + 6, 0, 0, 0, 118, 15, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 21, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 194, 0, 16, 0, 6, 0, + 0, 0, 246, 7, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 23, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 7, 0, + 0, 0, 58, 0, 16, 0, + 29, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 35, 0, 0, 0, + 6, 9, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 54, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 150, 7, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 36, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 17, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 0, 0, 0, 0, + 86, 13, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 16, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 190, 24, 0, 1, 80, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 79, 0, + 0, 6, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 15, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 41, 0, 0, 6, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 2, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 61, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 2, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 61, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 4, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 61, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 4, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 21, 0, + 0, 1, 80, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 79, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 45, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 41, 0, 0, 6, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 8, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 61, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 8, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 61, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 9, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 61, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 9, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 45, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 12, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 61, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 12, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 79, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 61, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 1, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 61, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 62, 0, + 0, 1, 83, 70, 73, 48, + 8, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 83, 84, 65, 84, 148, 0, + 0, 0, 67, 2, 0, 0, + 42, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 93, 0, 0, 0, 41, 0, + 0, 0, 119, 0, 0, 0, + 1, 0, 0, 0, 15, 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, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0, 0, + 0, 0, 21, 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, + 4, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur4.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur4.h new file mode 100644 index 0000000..b2d491f --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur4.h @@ -0,0 +1,4782 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 43 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyyy, l(56, 40, 40, 40), r0.xyyy +iadd r2.xyzw, r1.xwxw, l(-4, -4, -4, -3) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +iadd r6.xyzw, r2.xyxy, l(1, 0, 2, 0) +itof r7.xyzw, r6.xyzw +add r7.xyzw, r7.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r7.xyzw, r7.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r7.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r8.xy {min16f}, r7.zwzz, t0.xyzw, s1, l(0.000000) +iadd r7.xyzw, r2.xyyy, l(3, 0, 0, 0) +itof r4.xy, r7.xwxx +add r4.xy, r4.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r4.xy, r4.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r9.xw {min16f}, r4.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r8.zw {min16f}, r4.zwzz, t0.zwxy, s1, l(0.000000) +iadd r4.xyzw, r1.xwxw, l(-3, -3, -2, -3) +itof r10.xyzw, r4.xyzw +add r10.xyzw, r10.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r10.xyzw, r10.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r11.xy {min16f}, r10.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.zw {min16f}, r10.zwzz, t0.zwxy, s1, l(0.000000) +iadd r10.xyzw, r1.xwxw, l(-1, -3, -4, -2) +itof r12.xyzw, r10.xyzw +add r12.xyzw, r12.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r12.xyzw, r12.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r12.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r12.zwzz, t0.xyzw, s1, l(0.000000) +iadd r12.xyzw, r1.xwxw, l(-3, -2, -2, -2) +itof r15.xyzw, r12.xyzw +add r15.xyzw, r15.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r15.xyzw, r15.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r15.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r16.xy {min16f}, r15.zwzz, t0.xyzw, s1, l(0.000000) +iadd r1.xyzw, r1.xyzw, l(-1, -2, -2, -2) +itof r15.xy, r1.xwxx +add r15.xy, r15.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r15.xy, r15.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r15.xw {min16f}, r15.xyxx, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r17.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.w, r5.x {min16f} +f32tof16 r17.w, r5.z {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r17.x, r0.w +f32tof16 r0.w, r8.x {min16f} +f32tof16 r17.w, r9.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r17.x, r0.w +f32tof16 r0.w, r8.z {min16f} +f32tof16 r17.w, r11.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r17.y, r0.w +f32tof16 r0.w, r11.z {min16f} +f32tof16 r17.w, r13.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r17.y, r0.w +f32tof16 r0.w, r14.x {min16f} +f32tof16 r17.w, r14.z {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r17.z, r0.w +f32tof16 r0.w, r16.x {min16f} +f32tof16 r17.w, r15.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r17.z, r0.w +sync_g_t +ld_structured r18.xy, r3.x, r17.x, g0.xyxx +and r18.zw, r18.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r19.xy, r18.xyxx, l(16, 16, 0, 0) +f16tof32 r20.w, r18.z +f16tof32 r20.x, r19.x +ld_structured r21.xyzw, r3.z, r17.x, g0.xyzw +and r22.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r23.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r20.y, r22.x +f16tof32 r20.z, r23.x +ishl r0.w, r3.y, l(2) +iadd r0.w, r0.w, l(-4) +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.x, r17.w +f16tof32 r24.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.z, r17.w +f16tof32 r24.w, r3.y +f16tof32 r18.x, r18.w +f16tof32 r18.y, r19.y +f16tof32 r18.z, r22.y +f16tof32 r18.w, r23.y +ld_structured r19.xyz, r0.z, r17.x, g0.xyzx +ushr r25.xyz, r19.xyzx, l(16, 16, 16, 0) +f16tof32 r25.xyz, r25.zxyz +ld_structured r26.xyz, r3.w, r17.x, g0.xyzx +and r27.xyz, r26.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r27.xyw, r27.xyxz +mov r9.xy {min16f}, r5.ywyy {min16f} +mov r9.z {min16f}, r8.y {min16f} +mul r5.xyzw {min16f}, r9.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r9.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r9.xyzw {min16f}, r9.xyzw +mad_sat r9.xyzw, r9.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r29.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r29.xyzw {min16f}, r29.xyzw +mad_sat r29.xyzw, r29.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r30.x, r25.y +mov r30.yzw, r20.wwxy +mul r30.xyzw {min16f}, r9.xyzw {def32 as min16f}, r30.xyzw {def32 as min16f} +mad r30.xyzw {min16f}, r20.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r30.xyzw {min16f} +add r31.xyzw {min16f}, r9.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r20.w, r27.x +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r30.xyzw {min16f} +add r30.xyzw {min16f}, r28.xyzw {def32 as min16f}, r31.xyzw {min16f} +mad r20.xyzw {min16f}, r24.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r24.xyzw {min16f}, r29.xyzw {def32 as min16f}, r30.xyzw {min16f} +mad r18.xyzw {min16f}, r18.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r20.xyzw {min16f}, r5.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r18.xyzw {min16f}, r18.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r18.xyzw, r18.xyzw {min16f} +imad r19.xw, r18.yyyw, l(0x00010000, 0, 0, 0x00010000), r18.xxxz +store_structured g1.x, r3.x, r17.x, r19.x +store_structured g1.x, r3.z, r17.x, r19.w +imad r18.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r32.xyz, r18.x, r17.y, g0.xyzx +and r33.xyz, r32.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r34.xyz, r32.xyzx, l(16, 16, 16, 0) +f16tof32 r24.w, r33.x +f16tof32 r24.x, r34.x +ld_structured r19.xw, r3.z, r17.y, g0.xxxy +and r21.xy, r19.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r22.xy, r19.xwxx, l(16, 16, 0, 0) +f16tof32 r24.y, r21.x +f16tof32 r24.z, r22.x +ishl r23.xy, r18.ywyy, l(2, 2, 0, 0) +iadd r23.xy, r23.xyxx, l(-4, -4, 0, 0) +ld_structured r3.y, r18.x, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r30.x, r17.w +f16tof32 r30.y, r3.y +ld_structured r3.y, r3.z, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r30.z, r17.w +f16tof32 r30.w, r3.y +f16tof32 r31.x, r33.y +f16tof32 r31.y, r34.y +f16tof32 r31.z, r21.y +f16tof32 r31.w, r22.y +mov r13.x {min16f}, r8.w {min16f} +mov r13.yz {min16f}, r11.yywy {min16f} +mul r8.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r8.xyzw, r8.xyzw {min16f} +ubfe r11.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r8.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r13.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r8.xyzw +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r35.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r8.xyzw +utof r35.xyzw {min16f}, r35.xyzw +mad_sat r35.xyzw, r35.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r8.xyzw, r8.xyzw, l(3, 3, 3, 3) +utof r8.xyzw {min16f}, r8.xyzw +mad_sat r8.xyzw, r8.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r36.x, r25.z +mov r36.yzw, r24.wwxy +mul r36.xyzw {min16f}, r11.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r36.xyzw {min16f}, r24.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r36.xyzw {min16f} +add r37.xyzw {min16f}, r11.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r24.w, r27.y +mad r24.xyzw {min16f}, r24.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r36.xyzw {min16f} +add r36.xyzw {min16f}, r13.xyzw {def32 as min16f}, r37.xyzw {min16f} +mad r24.xyzw {min16f}, r30.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r24.xyzw {min16f} +add r30.xyzw {min16f}, r35.xyzw {def32 as min16f}, r36.xyzw {min16f} +mad r24.xyzw {min16f}, r31.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r24.xyzw {min16f} +add r30.xyzw {min16f}, r8.xyzw {def32 as min16f}, r30.xyzw {min16f} +div r24.xyzw {min16f}, r24.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r24.xyzw, r24.xyzw {min16f} +imad r19.xy, r24.ywyy, l(0x00010000, 0x00010000, 0, 0), r24.xzxx +store_structured g1.x, r18.x, r17.y, r19.x +store_structured g1.x, r3.z, r17.y, r19.y +ld_structured r3.y, r18.z, r17.z, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.x, r17.w +f16tof32 r24.y, r3.y +f16tof32 r24.z, r22.z +f16tof32 r24.w, r23.z +ld_structured r3.y, r18.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r31.x, r17.w +f16tof32 r31.y, r3.y +ld_structured r3.y, r3.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r31.z, r17.w +f16tof32 r31.w, r3.y +f16tof32 r32.x, r33.z +f16tof32 r32.y, r34.z +f16tof32 r32.z, r22.w +f16tof32 r32.w, r23.w +mov r15.xy {min16f}, r14.ywyy {min16f} +mov r15.z {min16f}, r16.y {min16f} +mul r14.xyzw {min16f}, r15.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r14.xyzw, r14.xyzw {min16f} +ubfe r15.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r14.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r16.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r14.xyzw +utof r16.xyzw {min16f}, r16.xyzw +mad_sat r16.xyzw, r16.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r19.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r14.xyzw +utof r19.xyzw {min16f}, r19.xyzw +mad_sat r19.xyzw, r19.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r14.xyzw, r14.xyzw, l(3, 3, 3, 3) +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r25.yzw, r24.xxyz +mul r21.xyzw {min16f}, r15.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r21.xyzw {min16f}, r24.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r15.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r27.xyz, r24.yzwy +mad r21.xyzw {min16f}, r27.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r16.xyzw {def32 as min16f}, r22.xyzw {min16f} +mad r21.xyzw {min16f}, r31.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r19.xyzw {def32 as min16f}, r22.xyzw {min16f} +mad r21.xyzw {min16f}, r32.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r14.xyzw {def32 as min16f}, r22.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g1.x, r18.z, r17.z, r23.z +store_structured g1.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r40.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r40.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g0.x, r3.x, r17.x, r23.z +store_structured g0.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g1.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g1.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g0.x, r18.x, r17.y, r25.x +store_structured g0.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g0.x, r18.z, r17.z, r23.z +store_structured g0.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g0.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g0.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g0.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g0.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g1.x, r3.x, r17.x, r23.z +store_structured g1.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g0.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g0.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g1.x, r18.x, r17.y, r25.x +store_structured g1.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g1.x, r18.z, r17.z, r23.z +store_structured g1.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r0.w, r3.z, r0.w, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r3.y +f16tof32 r33.w, r0.w +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r9.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r9.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r9.xyzw {min16f} +mov r26.w, r37.x +mad r9.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r9.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r5.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r9.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r3.x, r17.x, r3.y +store_structured g0.x, r3.z, r17.x, r3.w +ld_structured r3.yw, r18.x, r17.y, g1.xxxy +and r23.zw, r3.yyyw, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r25.xy, r3.ywyy, l(16, 16, 0, 0) +f16tof32 r5.w, r23.z +f16tof32 r5.x, r25.x +ld_structured r27.xy, r3.z, r17.y, g1.xyxx +and r32.xy, r27.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.xy, r27.xyxx, l(16, 16, 0, 0) +f16tof32 r5.y, r32.x +f16tof32 r5.z, r33.x +ld_structured r0.w, r18.x, r23.x, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r9.x, r3.y +f16tof32 r9.y, r0.w +ld_structured r0.w, r3.z, r23.x, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r9.z, r3.y +f16tof32 r9.w, r0.w +f16tof32 r20.x, r24.z +f16tof32 r20.y, r25.z +f16tof32 r20.z, r31.z +f16tof32 r20.w, r32.z +mov r26.x, r36.z +mov r26.yzw, r5.wwxy +mul r11.xyzw {min16f}, r11.xyzw {def32 as min16f}, r26.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r5.w, r37.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r20.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r23.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g0.x, r18.x, r17.y, r23.x +store_structured g0.x, r3.z, r17.y, r23.z +f16tof32 r5.x, r23.w +f16tof32 r5.y, r25.y +f16tof32 r5.z, r32.y +f16tof32 r5.w, r33.y +ld_structured r0.w, r18.z, r23.y, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r8.x, r3.y +f16tof32 r8.y, r0.w +ld_structured r0.w, r3.z, r23.y, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r8.z, r3.y +f16tof32 r8.w, r0.w +f16tof32 r9.x, r24.w +f16tof32 r9.y, r25.w +f16tof32 r9.z, r31.w +f16tof32 r9.w, r32.w +mov r36.yzw, r5.xxyz +mul r11.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r37.xyz, r5.yzwy +mad r5.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r8.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r18.z, r17.z, r3.y +store_structured g0.x, r3.z, r17.z, r3.w +sync_g_t +uge r0.x, r0.y, l(4) +ult r0.y, r0.y, l(44) +and r0.x, r0.y, r0.x +if_nz r0.x + ld_structured r0.x, r3.x, r17.x, g0.xxxx + ld_structured r0.y, r3.z, r17.x, g0.xxxx + uge r0.z, vThreadIDInGroup.x, l(1) + ult r0.w, vThreadIDInGroup.x, l(15) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.x, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r2.xyyy, r0.zzzz + endif + imad r0.z, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.z, l(4) + ult r2.x, r0.z, l(60) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.x, r0.x, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r6.xyyy, r0.xxxx + endif + iadd r0.x, r0.z, l(1) + uge r0.z, r0.x, l(4) + ult r0.w, r0.x, l(60) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.y, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r6.zwww, r0.zzzz + endif + or r0.x, r0.x, l(3) + uge r0.z, r0.x, l(4) + ult r0.x, r0.x, l(60) + and r0.x, r0.x, r0.z + if_nz r0.x + ushr r0.x, r0.y, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r7.xyzw, r0.xxxx + endif +endif +imad r0.xy, l(3, 3, 0, 0), vThreadIDInGroup.yyyy, l(1, 2, 0, 0) +uge r0.zw, r0.xxxy, l(0, 0, 4, 4) +ult r0.xy, r0.xyxx, l(44, 44, 0, 0) +and r0.xy, r0.xyxx, r0.zwzz +if_nz r0.x + ld_structured r0.x, r3.x, r17.y, g0.xxxx + ld_structured r0.z, r3.z, r17.y, g0.xxxx + uge r0.w, vThreadIDInGroup.x, l(1) + ult r2.x, vThreadIDInGroup.x, l(15) + and r0.w, r0.w, r2.x + if_nz r0.w + and r0.w, r0.x, l(0x0000ffff) + f16tof32 r0.w, r0.w + store_uav_typed u0.xyzw, r2.zwww, r0.wwww + endif + imad r0.w, vThreadIDInGroup.x, l(4), l(1) + uge r2.x, r0.w, l(4) + ult r2.y, r0.w, l(60) + and r2.x, r2.y, r2.x + if_nz r2.x + ushr r0.x, r0.x, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.xyyy, r0.xxxx + endif + iadd r0.x, r0.w, l(1) + uge r0.w, r0.x, l(4) + ult r2.x, r0.x, l(60) + and r0.w, r0.w, r2.x + if_nz r0.w + and r0.w, r0.z, l(0x0000ffff) + f16tof32 r0.w, r0.w + store_uav_typed u0.xyzw, r4.zwww, r0.wwww + endif + or r0.x, r0.x, l(3) + uge r0.w, r0.x, l(4) + ult r0.x, r0.x, l(60) + and r0.x, r0.x, r0.w + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r10.xyyy, r0.xxxx + endif +endif +if_nz r0.y + ld_structured r0.x, r3.x, r17.z, g0.xxxx + ld_structured r0.y, r3.z, r17.z, g0.xxxx + uge r0.z, vThreadIDInGroup.x, l(1) + ult r0.w, vThreadIDInGroup.x, l(15) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.x, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r10.zwww, r0.zzzz + endif + imad r0.z, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.z, l(4) + ult r2.x, r0.z, l(60) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.x, r0.x, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r12.xyyy, r0.xxxx + endif + iadd r0.x, r0.z, l(1) + uge r0.z, r0.x, l(4) + ult r0.w, r0.x, l(60) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.y, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r12.zwww, r0.zzzz + endif + or r0.x, r0.x, l(3) + uge r0.z, r0.x, l(4) + ult r0.x, r0.x, l(60) + and r0.x, r0.x, r0.z + if_nz r0.x + ushr r0.x, r0.y, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx + endif +endif +ret +// Approximately 703 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur4DXIL[] = +{ + 68, 88, 66, 67, 99, 106, + 131, 0, 177, 210, 20, 210, + 212, 3, 22, 10, 120, 63, + 155, 231, 1, 0, 0, 0, + 32, 93, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 116, 92, 0, 0, 132, 92, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 180, 83, + 0, 0, 80, 0, 5, 0, + 237, 20, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 43, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 21, 2, 0, + 2, 64, 0, 0, 56, 0, + 0, 0, 40, 0, 0, 0, + 40, 0, 0, 0, 40, 0, + 0, 0, 70, 5, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 252, 255, + 255, 255, 252, 255, 255, 255, + 252, 255, 255, 255, 253, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 4, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 7, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 230, 10, + 16, 0, 7, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 5, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 4, 0, 0, 0, 198, 0, + 16, 0, 7, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 4, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 0, 4, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 230, 10, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 4, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 253, 255, + 255, 255, 253, 255, 255, 255, + 254, 255, 255, 255, 253, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 0, + 16, 0, 10, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 230, 10, 16, 0, 10, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 10, 0, + 0, 0, 198, 12, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 255, 255, + 253, 255, 255, 255, 252, 255, + 255, 255, 254, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 12, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 12, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 0, 16, 0, + 12, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 230, 10, + 16, 0, 12, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 12, 0, 0, 0, + 198, 12, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 253, 255, 255, 255, 254, 255, + 255, 255, 254, 255, 255, 255, + 254, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 15, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 230, 10, 16, 0, + 15, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 255, 255, 254, 255, 255, 255, + 254, 255, 255, 255, 254, 255, + 255, 255, 43, 0, 0, 5, + 50, 0, 16, 0, 15, 0, + 0, 0, 198, 0, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 10, 50, 0, 16, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 15, 0, + 0, 0, 70, 0, 16, 0, + 15, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 17, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 50, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 19, 0, 0, 0, 70, 0, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 20, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 10, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 41, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 252, 255, + 255, 255, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 24, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 24, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 24, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 24, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 19, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 22, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 25, 0, 0, 0, 70, 2, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 25, 0, + 0, 0, 38, 9, 16, 0, + 25, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 26, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 27, 0, 0, 0, 70, 2, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 27, 0, + 0, 0, 70, 8, 16, 0, + 27, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 28, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 28, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 28, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 29, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 30, 0, + 0, 0, 246, 4, 16, 0, + 20, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 54, 9, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 27, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 31, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 35, 0, + 0, 12, 146, 0, 16, 0, + 19, 0, 0, 0, 86, 13, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 18, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 19, 0, 0, 0, 35, 0, + 0, 14, 242, 0, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 70, 36, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 32, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 33, 0, 0, 0, + 70, 2, 16, 0, 32, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 34, 0, 0, 0, 70, 2, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 24, 0, + 0, 0, 10, 0, 16, 0, + 33, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 24, 0, 0, 0, 10, 0, + 16, 0, 34, 0, 0, 0, + 167, 0, 0, 9, 146, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 6, 244, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 21, 0, 0, 0, + 198, 0, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 22, 0, 0, 0, 198, 0, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 24, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 24, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 41, 0, 0, 10, 50, 0, + 16, 0, 23, 0, 0, 0, + 214, 5, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 50, 0, 16, 0, + 23, 0, 0, 0, 70, 0, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 252, 255, + 255, 255, 252, 255, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 30, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 30, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 33, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 31, 0, 0, 0, 26, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 31, 0, 0, 0, + 26, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 54, 0, + 0, 7, 18, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 58, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 54, 0, 0, 7, + 98, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 86, 7, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 11, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 35, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 36, 0, 0, 0, + 42, 0, 16, 0, 25, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 246, 4, 16, 0, + 24, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 54, 9, + 16, 0, 24, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 37, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 24, 0, 0, 0, 26, 0, + 16, 0, 27, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 35, 0, + 0, 12, 50, 0, 16, 0, + 19, 0, 0, 0, 214, 5, + 16, 0, 24, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 16, 0, + 24, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 19, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 24, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 24, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 24, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 24, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 31, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 31, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 31, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 31, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 33, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 32, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 16, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 16, 0, 0, 0, + 70, 14, 16, 0, 16, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 16, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 19, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 19, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 25, 0, 0, 0, + 6, 9, 16, 0, 24, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 24, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 0, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 54, 0, 0, 5, + 114, 0, 16, 0, 27, 0, + 0, 0, 150, 7, 16, 0, + 24, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 40, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 40, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 12, 162, 0, 16, 0, + 3, 0, 0, 0, 86, 13, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 162, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 25, 0, + 0, 0, 214, 5, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 25, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 27, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 33, 0, + 0, 0, 70, 0, 16, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 33, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 20, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 20, 0, 0, 0, + 42, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 20, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 20, 0, 0, 0, 42, 0, + 16, 0, 32, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 36, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 26, 0, + 0, 0, 246, 4, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 54, 9, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 37, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 35, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 82, 0, 16, 0, 23, 0, + 0, 0, 86, 7, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 6, 2, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 5, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 33, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 8, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 8, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 8, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 8, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 32, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 36, 0, 0, 0, + 6, 9, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 54, 0, 0, 5, 114, 0, + 16, 0, 37, 0, 0, 0, + 150, 7, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 37, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 3, 0, 0, 0, + 86, 13, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 190, 24, 0, 1, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 79, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 44, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 80, 0, + 0, 6, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 79, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 15, 0, 0, 0, 1, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 60, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 6, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 79, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 60, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 6, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 60, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 35, 0, 0, 14, 50, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 86, 37, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 6, 4, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 79, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 44, 0, 0, 0, 44, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 80, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 79, 0, 0, 6, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 15, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 2, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 79, 0, 0, 7, + 34, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 60, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 2, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 4, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 60, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 60, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 10, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 80, 0, + 0, 6, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 79, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 15, 0, 0, 0, 1, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 10, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 60, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 12, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 79, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 60, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 12, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 60, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 62, 0, 0, 1, 83, 70, + 73, 48, 8, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 83, 84, 65, 84, + 148, 0, 0, 0, 191, 2, + 0, 0, 43, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 113, 0, 0, 0, + 42, 0, 0, 0, 150, 0, + 0, 0, 1, 0, 0, 0, + 15, 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, 12, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 38, 0, 0, 0, + 0, 0, 0, 0, 22, 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, 5, 0, 0, 0, + 0, 0, 0, 0, 12, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur5.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur5.h new file mode 100644 index 0000000..1d0a667 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur5.h @@ -0,0 +1,5428 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 42 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyxy, l(54, 38, 54, 38), r0.xyxy +iadd r2.xyzw, r1.zwzw, l(-5, -5, -4, -5) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r4.zwzz, t0.zwxy, s1, l(0.000000) +iadd r4.xyzw, r1.zwzw, l(-3, -5, -2, -5) +itof r6.xyzw, r4.xyzw +add r6.xyzw, r6.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r6.xyzw, r6.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.xy {min16f}, r6.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r6.xw {min16f}, r6.zwzz, t0.xzwy, s1, l(0.000000) +iadd r8.xyzw, r1.zwzw, l(-5, -4, -4, -4) +itof r9.xyzw, r8.xyzw +add r9.xyzw, r9.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r9.xyzw, r9.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.zw {min16f}, r9.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r10.xy {min16f}, r9.zwzz, t0.xyzw, s1, l(0.000000) +iadd r9.xyzw, r1.zwzw, l(-3, -4, -2, -4) +itof r11.xyzw, r9.xyzw +add r11.xyzw, r11.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r11.xyzw, r11.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r10.zw {min16f}, r11.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.xw {min16f}, r11.zwzz, t0.xzwy, s1, l(0.000000) +iadd r12.xyzw, r1.zwzw, l(-5, -3, -4, -3) +itof r13.xyzw, r12.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r13.zwzz, t0.zwxy, s1, l(0.000000) +iadd r1.xyzw, r1.xyzw, l(-3, -3, -2, -3) +itof r13.xyzw, r1.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r15.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r13.zwzz, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r16.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.y, r5.x {min16f} +f32tof16 r16.w, r5.z {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.x, r0.y +f32tof16 r0.y, r7.x {min16f} +f32tof16 r16.w, r6.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.x, r0.y +f32tof16 r0.y, r7.z {min16f} +f32tof16 r16.w, r10.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.y, r0.y +f32tof16 r0.y, r10.z {min16f} +f32tof16 r16.w, r11.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.y, r0.y +f32tof16 r0.y, r14.x {min16f} +f32tof16 r16.w, r14.z {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.z, r0.y +f32tof16 r0.y, r15.x {min16f} +f32tof16 r16.w, r13.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.z, r0.y +sync_g_t +ld_structured r17.xy, r3.x, r16.x, g0.xyxx +and r17.zw, r17.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r18.xy, r17.xyxx, l(16, 16, 0, 0) +f16tof32 r19.w, r17.z +f16tof32 r19.x, r18.x +ld_structured r20.xyzw, r3.z, r16.x, g0.xyzw +and r21.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r22.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r19.y, r21.x +f16tof32 r19.z, r22.x +ishl r0.y, r3.y, l(2) +iadd r0.y, r0.y, l(-4) +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r17.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r23.x, r17.x +f16tof32 r23.y, r16.w +ld_structured r16.w, r3.z, r0.y, g0.xxxx +and r17.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r23.z, r17.x +f16tof32 r23.w, r16.w +f16tof32 r17.x, r17.w +f16tof32 r17.y, r18.y +f16tof32 r17.z, r21.y +f16tof32 r17.w, r22.y +ld_structured r18.xyz, r0.z, r16.x, g0.xyzx +ushr r24.xyz, r18.xyzx, l(16, 16, 16, 0) +f16tof32 r24.xyz, r24.zxyz +ld_structured r25.xyz, r3.w, r16.x, g0.xyzx +and r26.xyz, r25.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r26.xyw, r26.xyxz +mov r6.xy {min16f}, r5.ywyy {min16f} +mov r6.z {min16f}, r7.y {min16f} +mul r5.xyzw {min16f}, r6.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r6.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r6.xyzw {min16f}, r6.xyzw +mad_sat r6.xyzw, r6.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r27.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r27.xyzw {min16f}, r27.xyzw +mad_sat r27.xyzw, r27.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r29.x, r24.y +mov r29.yzw, r19.wwxy +mul r29.xyzw {min16f}, r6.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f} +mad r29.xyzw {min16f}, r19.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r29.xyzw {min16f} +add r30.xyzw {min16f}, r6.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r19.w, r26.x +mad r19.xyzw {min16f}, r19.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r29.xyzw {min16f} +add r29.xyzw {min16f}, r27.xyzw {def32 as min16f}, r30.xyzw {min16f} +mad r19.xyzw {min16f}, r23.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r23.xyzw {min16f}, r28.xyzw {def32 as min16f}, r29.xyzw {min16f} +mad r17.xyzw {min16f}, r17.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r19.xyzw {min16f}, r5.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r17.xyzw {min16f}, r17.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r17.xyzw, r17.xyzw {min16f} +imad r18.xw, r17.yyyw, l(0x00010000, 0, 0, 0x00010000), r17.xxxz +store_structured g1.x, r3.x, r16.x, r18.x +store_structured g1.x, r3.z, r16.x, r18.w +imad r17.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r31.xyz, r17.x, r16.y, g0.xyzx +and r32.xyz, r31.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r33.xyz, r31.xyzx, l(16, 16, 16, 0) +f16tof32 r23.w, r32.x +f16tof32 r23.x, r33.x +ld_structured r18.xw, r3.z, r16.y, g0.xxxy +and r20.xy, r18.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r21.xy, r18.xwxx, l(16, 16, 0, 0) +f16tof32 r23.y, r20.x +f16tof32 r23.z, r21.x +ishl r22.xy, r17.ywyy, l(2, 2, 0, 0) +iadd r22.xy, r22.xyxx, l(-4, -4, 0, 0) +ld_structured r16.w, r17.x, r22.x, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r29.x, r18.x +f16tof32 r29.y, r16.w +ld_structured r16.w, r3.z, r22.x, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r29.z, r18.x +f16tof32 r29.w, r16.w +f16tof32 r30.x, r32.y +f16tof32 r30.y, r33.y +f16tof32 r30.z, r20.y +f16tof32 r30.w, r21.y +mov r11.x {min16f}, r7.w {min16f} +mov r11.yz {min16f}, r10.yywy {min16f} +mul r7.xyzw {min16f}, r11.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r7.xyzw, r7.xyzw {min16f} +ubfe r10.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r7.xyzw +utof r10.xyzw {min16f}, r10.xyzw +mad_sat r10.xyzw, r10.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r11.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r7.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r34.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r7.xyzw +utof r34.xyzw {min16f}, r34.xyzw +mad_sat r34.xyzw, r34.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r7.xyzw, r7.xyzw, l(3, 3, 3, 3) +utof r7.xyzw {min16f}, r7.xyzw +mad_sat r7.xyzw, r7.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r35.x, r24.z +mov r35.yzw, r23.wwxy +mul r35.xyzw {min16f}, r10.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r35.xyzw {min16f}, r23.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r35.xyzw {min16f} +add r36.xyzw {min16f}, r10.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r23.w, r26.y +mad r23.xyzw {min16f}, r23.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r35.xyzw {min16f} +add r35.xyzw {min16f}, r11.xyzw {def32 as min16f}, r36.xyzw {min16f} +mad r23.xyzw {min16f}, r29.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r23.xyzw {min16f} +add r29.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {min16f} +mad r23.xyzw {min16f}, r30.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r23.xyzw {min16f} +add r29.xyzw {min16f}, r7.xyzw {def32 as min16f}, r29.xyzw {min16f} +div r23.xyzw {min16f}, r23.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r23.xyzw, r23.xyzw {min16f} +imad r18.xy, r23.ywyy, l(0x00010000, 0x00010000, 0, 0), r23.xzxx +store_structured g1.x, r17.x, r16.y, r18.x +store_structured g1.x, r3.z, r16.y, r18.y +ld_structured r16.w, r17.z, r16.z, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r23.x, r18.x +f16tof32 r23.y, r16.w +f16tof32 r23.z, r21.z +f16tof32 r23.w, r22.z +ld_structured r16.w, r17.z, r22.y, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r30.x, r18.x +f16tof32 r30.y, r16.w +ld_structured r16.w, r3.z, r22.y, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r30.z, r18.x +f16tof32 r30.w, r16.w +f16tof32 r31.x, r32.z +f16tof32 r31.y, r33.z +f16tof32 r31.z, r21.w +f16tof32 r31.w, r22.w +mov r13.xy {min16f}, r14.ywyy {min16f} +mov r13.z {min16f}, r15.y {min16f} +mul r13.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r13.xyzw, r13.xyzw {min16f} +ubfe r14.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r13.xyzw +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r15.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r13.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r18.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r13.xyzw +utof r18.xyzw {min16f}, r18.xyzw +mad_sat r18.xyzw, r18.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r13.xyzw, r13.xyzw, l(3, 3, 3, 3) +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r24.yzw, r23.xxyz +mul r20.xyzw {min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {def32 as min16f} +mad r20.xyzw {min16f}, r23.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r14.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r26.xyz, r23.yzwy +mad r20.xyzw {min16f}, r26.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r15.xyzw {def32 as min16f}, r21.xyzw {min16f} +mad r20.xyzw {min16f}, r30.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r18.xyzw {def32 as min16f}, r21.xyzw {min16f} +mad r20.xyzw {min16f}, r31.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r13.xyzw {def32 as min16f}, r21.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r17.z, r16.z, r22.z +store_structured g1.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g1.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g1.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g1.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g1.xyzx +and r39.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r39.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g0.x, r3.x, r16.x, r22.z +store_structured g0.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g1.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g1.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g0.x, r17.x, r16.y, r24.x +store_structured g0.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r17.z, r16.z, r22.z +store_structured g0.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g0.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g0.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g0.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g0.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g1.x, r3.x, r16.x, r22.z +store_structured g1.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g0.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g0.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g1.x, r17.x, r16.y, r24.x +store_structured g1.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r17.z, r16.z, r22.z +store_structured g1.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g1.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g1.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g1.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g1.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g0.x, r3.x, r16.x, r22.z +store_structured g0.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g1.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g1.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g0.x, r17.x, r16.y, r24.x +store_structured g0.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r17.z, r16.z, r22.z +store_structured g0.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g0.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g0.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r0.y, r3.z, r0.y, g0.xxxx +and r16.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r32.z, r16.w +f16tof32 r32.w, r0.y +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g0.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g0.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r6.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r6.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r6.xyzw {min16f} +mov r25.w, r36.x +mad r6.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r6.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r5.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r6.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.zw, r5.yyyw, l(0, 0, 0x00010000, 0x00010000), r5.xxxz +store_structured g1.x, r3.x, r16.x, r22.z +store_structured g1.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g0.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r5.w, r24.x +f16tof32 r5.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g0.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r5.yz, r32.xxzx +ld_structured r0.y, r17.x, r22.x, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.x, r3.w +f16tof32 r6.y, r0.y +ld_structured r0.y, r3.z, r22.x, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.z, r3.w +f16tof32 r6.w, r0.y +f16tof32 r19.x, r23.z +f16tof32 r19.y, r24.z +f16tof32 r19.z, r30.z +f16tof32 r19.w, r31.z +mov r25.x, r35.z +mov r25.yzw, r5.wwxy +mul r10.xyzw {min16f}, r10.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r10.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r10.xyzw {min16f} +mov r5.w, r36.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r10.xyzw {min16f} +mad r5.xyzw {min16f}, r6.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r19.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g1.x, r17.x, r16.y, r22.x +store_structured g1.x, r3.z, r16.y, r22.z +f16tof32 r5.x, r24.y +f16tof32 r5.y, r26.y +f16tof32 r5.zw, r32.yyyw +ld_structured r0.y, r17.z, r22.y, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.x, r3.w +f16tof32 r6.y, r0.y +ld_structured r0.y, r3.z, r22.y, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.z, r3.w +f16tof32 r6.w, r0.y +f16tof32 r7.x, r23.w +f16tof32 r7.y, r24.w +f16tof32 r7.z, r30.w +f16tof32 r7.w, r31.w +mov r35.yzw, r5.xxyz +mul r10.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r10.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r10.xyzw {min16f} +mov r36.xyz, r5.yzwy +mad r5.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r10.xyzw {min16f} +mad r5.xyzw {min16f}, r6.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r7.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.xy, r5.ywyy, l(0x00010000, 0x00010000, 0, 0), r5.xzxx +store_structured g1.x, r17.z, r16.z, r22.x +store_structured g1.x, r3.z, r16.z, r22.y +sync_g_t +uge r0.x, r0.w, l(5) +ult r0.y, r0.w, l(43) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.x, g1.xxxx + ld_structured r0.z, r3.z, r16.x, g1.xxxx + uge r0.w, r0.x, l(5) + ult r0.x, r0.x, l(59) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r2.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(5) + ult r2.x, r0.x, l(59) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r2.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(5) + ult r0.w, r0.x, l(59) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r4.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(5) + ult r0.x, r0.x, l(59) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.zwww, r0.xxxx + endif +endif +uge r0.x, r3.y, l(5) +ult r0.y, r3.y, l(43) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.y, g1.xxxx + ld_structured r0.z, r3.z, r16.y, g1.xxxx + uge r0.w, r0.x, l(5) + ult r0.x, r0.x, l(59) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r8.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(5) + ult r2.x, r0.x, l(59) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r8.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(5) + ult r0.w, r0.x, l(59) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r9.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(5) + ult r0.x, r0.x, l(59) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r9.zwww, r0.xxxx + endif +endif +imad r0.x, l(3), vThreadIDInGroup.y, l(2) +uge r0.y, r0.x, l(5) +ult r0.x, r0.x, l(43) +and r0.x, r0.x, r0.y +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.z, g1.xxxx + ld_structured r0.z, r3.z, r16.z, g1.xxxx + uge r0.w, r0.x, l(5) + ult r0.x, r0.x, l(59) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r12.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(5) + ult r2.x, r0.x, l(59) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r12.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(5) + ult r0.w, r0.x, l(59) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r1.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(5) + ult r0.x, r0.x, l(59) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r1.zwww, r0.xxxx + endif +endif +ret +// Approximately 812 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur5DXIL[] = +{ + 68, 88, 66, 67, 106, 129, + 242, 225, 33, 71, 40, 124, + 154, 175, 33, 67, 186, 245, + 229, 240, 1, 0, 0, 0, + 184, 105, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 12, 105, 0, 0, 28, 105, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 76, 96, + 0, 0, 80, 0, 5, 0, + 19, 24, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 42, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 20, 2, 0, + 2, 64, 0, 0, 54, 0, + 0, 0, 38, 0, 0, 0, + 54, 0, 0, 0, 38, 0, + 0, 0, 70, 4, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 251, 255, + 255, 255, 251, 255, 255, 255, + 252, 255, 255, 255, 251, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 4, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 253, 255, + 255, 255, 251, 255, 255, 255, + 254, 255, 255, 255, 251, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 0, + 16, 0, 6, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 6, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 8, 0, + 0, 0, 230, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 251, 255, 255, 255, + 252, 255, 255, 255, 252, 255, + 255, 255, 252, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 9, 0, 0, 0, + 230, 14, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 253, 255, 255, 255, 252, 255, + 255, 255, 254, 255, 255, 255, + 252, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 0, 16, 0, 11, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 230, 10, 16, 0, + 11, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 12, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 251, 255, + 255, 255, 253, 255, 255, 255, + 252, 255, 255, 255, 253, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 0, + 16, 0, 13, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 230, 10, 16, 0, 13, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 253, 255, 255, 255, + 253, 255, 255, 255, 254, 255, + 255, 255, 253, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 70, 0, 16, 0, + 13, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 230, 10, + 16, 0, 13, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 16, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 50, 0, + 16, 0, 17, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 17, 0, 0, 0, + 6, 4, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 41, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 252, 255, + 255, 255, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 23, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 23, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 24, 0, 0, 0, 70, 2, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 24, 0, + 0, 0, 38, 9, 16, 0, + 24, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 25, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 26, 0, 0, 0, 70, 2, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 26, 0, + 0, 0, 70, 8, 16, 0, + 26, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 27, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 28, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 29, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 29, 0, + 0, 0, 246, 4, 16, 0, + 19, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 54, 9, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 17, 0, + 0, 0, 70, 14, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 35, 0, + 0, 12, 146, 0, 16, 0, + 18, 0, 0, 0, 86, 13, + 16, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 18, 0, 0, 0, 35, 0, + 0, 14, 242, 0, 16, 0, + 17, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 70, 36, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 31, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 32, 0, 0, 0, + 70, 2, 16, 0, 31, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 33, 0, 0, 0, 70, 2, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 146, 0, + 16, 0, 18, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 6, 244, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 20, 0, 0, 0, + 198, 0, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 21, 0, 0, 0, 198, 0, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 20, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 21, 0, 0, 0, + 41, 0, 0, 10, 50, 0, + 16, 0, 22, 0, 0, 0, + 214, 5, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 50, 0, 16, 0, + 22, 0, 0, 0, 70, 0, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 252, 255, + 255, 255, 252, 255, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 29, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 29, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 29, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 29, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 30, 0, + 0, 0, 26, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 30, 0, 0, 0, 26, 0, + 16, 0, 33, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 20, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 30, 0, + 0, 0, 26, 0, 16, 0, + 21, 0, 0, 0, 54, 0, + 0, 7, 18, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 58, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 54, 0, 0, 7, + 98, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 86, 7, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 34, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 34, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 34, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 7, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 35, 0, 0, 0, + 42, 0, 16, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 246, 4, 16, 0, + 23, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 54, 9, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 23, 0, 0, 0, 26, 0, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 35, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 23, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 35, 0, + 0, 12, 50, 0, 16, 0, + 18, 0, 0, 0, 214, 5, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 26, 0, 16, 0, + 18, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 18, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 23, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 23, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 23, 0, 0, 0, 42, 0, + 16, 0, 21, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 23, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 30, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 30, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 30, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 30, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 31, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 33, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 31, 0, 0, 0, + 58, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 31, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 24, 0, 0, 0, + 6, 9, 16, 0, 23, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 24, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 54, 0, 0, 5, + 114, 0, 16, 0, 26, 0, + 0, 0, 150, 7, 16, 0, + 23, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 31, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 39, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 5, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 25, 0, 0, 0, + 246, 4, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 54, 9, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 22, 0, 0, 0, + 86, 7, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 5, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 6, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 6, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 6, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 6, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 7, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 50, 0, 16, 0, 22, 0, + 0, 0, 214, 5, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 134, 0, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 80, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 5, 0, 0, 0, 79, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 43, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 167, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 5, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 59, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 2, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 59, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 2, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 59, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 4, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 59, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 4, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 43, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 59, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 8, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 59, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 58, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 8, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 79, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 59, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 9, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 60, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 59, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 9, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 43, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 59, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 12, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 59, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 58, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 12, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 79, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 59, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 60, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 59, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 1, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 21, 0, + 0, 1, 62, 0, 0, 1, + 83, 70, 73, 48, 8, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 83, 84, + 65, 84, 148, 0, 0, 0, + 44, 3, 0, 0, 42, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 129, 0, + 0, 0, 47, 0, 0, 0, + 175, 0, 0, 0, 1, 0, + 0, 0, 15, 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, + 12, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 0, + 0, 0, 0, 0, 0, 0, + 21, 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, 6, 0, + 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur6.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur6.h new file mode 100644 index 0000000..acbb7a9 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur6.h @@ -0,0 +1,6091 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 43 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyyy, l(52, 36, 36, 36), r0.xyyy +iadd r2.xyzw, r1.xwxw, l(-6, -6, -4, -6) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +iadd r6.xyzw, r2.xyyy, l(1, 0, 0, 0) +itof r0.xy, r6.xwxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r0.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r7.xy {min16f}, r4.zwzz, t0.xyzw, s1, l(0.000000) +iadd r4.xyzw, r1.xwxw, l(-3, -6, -6, -5) +itof r8.xyzw, r4.xyzw +add r8.xyzw, r8.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r8.xyzw, r8.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r9.xw {min16f}, r8.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r7.zw {min16f}, r8.zwzz, t0.zwxy, s1, l(0.000000) +iadd r8.xyzw, r1.xwxw, l(-5, -5, -4, -5) +itof r10.xyzw, r8.xyzw +add r10.xyzw, r10.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r10.xyzw, r10.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r11.xy {min16f}, r10.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.zw {min16f}, r10.zwzz, t0.zwxy, s1, l(0.000000) +iadd r10.xyzw, r1.xwxw, l(-3, -5, -6, -4) +itof r12.xyzw, r10.xyzw +add r12.xyzw, r12.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r12.xyzw, r12.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r12.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r12.zwzz, t0.xyzw, s1, l(0.000000) +iadd r12.xyzw, r1.xwxw, l(-5, -4, -4, -4) +itof r15.xyzw, r12.xyzw +add r15.xyzw, r15.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r15.xyzw, r15.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r15.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r16.xy {min16f}, r15.zwzz, t0.xyzw, s1, l(0.000000) +iadd r1.xyzw, r1.xyzw, l(-3, -4, -4, -4) +itof r0.xy, r1.xwxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r15.xw {min16f}, r0.xyxx, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r17.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.yw, r5.xxxz {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r17.x, r0.y +f32tof16 r0.y, r7.x {min16f} +f32tof16 r0.w, r9.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r17.x, r0.y +f32tof16 r0.y, r7.z {min16f} +f32tof16 r0.w, r11.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r17.y, r0.y +f32tof16 r0.y, r11.z {min16f} +f32tof16 r0.w, r13.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r17.y, r0.y +f32tof16 r0.yw, r14.xxxz {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r17.z, r0.y +f32tof16 r0.y, r16.x {min16f} +f32tof16 r0.w, r15.x {min16f} +imad r0.y, r0.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r17.z, r0.y +sync_g_t +ld_structured r0.yw, r3.x, r17.x, g0.xxxy +and r18.xy, r0.ywyy, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r18.zw, r0.yyyw, l(0, 0, 16, 16) +f16tof32 r19.xw, r18.zzzx +ld_structured r20.xyzw, r3.z, r17.x, g0.xyzw +and r21.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r22.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r19.y, r21.x +f16tof32 r19.z, r22.x +ishl r0.y, r3.y, l(2) +iadd r0.y, r0.y, l(-4) +ld_structured r17.w, r3.x, r0.y, g0.xxxx +and r18.x, r17.w, l(0x0000ffff) +ushr r17.w, r17.w, l(16) +f16tof32 r23.x, r18.x +f16tof32 r23.y, r17.w +ld_structured r17.w, r3.z, r0.y, g0.xxxx +and r18.x, r17.w, l(0x0000ffff) +ushr r17.w, r17.w, l(16) +f16tof32 r23.z, r18.x +f16tof32 r23.w, r17.w +f16tof32 r24.xy, r18.ywyy +f16tof32 r24.z, r21.y +f16tof32 r24.w, r22.y +ld_structured r18.xyz, r0.z, r17.x, g0.xyzx +ushr r25.xyz, r18.xyzx, l(16, 16, 16, 0) +f16tof32 r25.xyz, r25.zxyz +ld_structured r26.xyz, r3.w, r17.x, g0.xyzx +and r27.xyz, r26.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r27.xyw, r27.xyxz +mov r9.xy {min16f}, r5.ywyy {min16f} +mov r9.z {min16f}, r7.y {min16f} +mul r5.xyzw {min16f}, r9.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r9.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r9.xyzw {min16f}, r9.xyzw +mad_sat r9.xyzw, r9.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r29.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r29.xyzw {min16f}, r29.xyzw +mad_sat r29.xyzw, r29.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r30.x, r25.y +mov r30.yzw, r19.wwxy +mul r30.xyzw {min16f}, r9.xyzw {def32 as min16f}, r30.xyzw {def32 as min16f} +mad r30.xyzw {min16f}, r19.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r30.xyzw {min16f} +add r31.xyzw {min16f}, r9.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r19.w, r27.x +mad r19.xyzw {min16f}, r19.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r30.xyzw {min16f} +add r30.xyzw {min16f}, r28.xyzw {def32 as min16f}, r31.xyzw {min16f} +mad r19.xyzw {min16f}, r23.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r23.xyzw {min16f}, r29.xyzw {def32 as min16f}, r30.xyzw {min16f} +mad r19.xyzw {min16f}, r24.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r23.xyzw {min16f}, r5.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r19.xyzw {min16f}, r19.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r19.xyzw, r19.xyzw {min16f} +imad r18.xw, r19.yyyw, l(0x00010000, 0, 0, 0x00010000), r19.xxxz +store_structured g1.x, r3.x, r17.x, r18.x +store_structured g1.x, r3.z, r17.x, r18.w +imad r19.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r24.xyz, r19.x, r17.y, g0.xyzx +and r32.xyz, r24.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r33.xyz, r24.xyzx, l(16, 16, 16, 0) +f16tof32 r30.w, r32.x +f16tof32 r30.x, r33.x +ld_structured r18.xw, r3.z, r17.y, g0.xxxy +and r20.xy, r18.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r21.xy, r18.xwxx, l(16, 16, 0, 0) +f16tof32 r30.y, r20.x +f16tof32 r30.z, r21.x +ishl r22.xy, r19.ywyy, l(2, 2, 0, 0) +iadd r22.xy, r22.xyxx, l(-4, -4, 0, 0) +ld_structured r0.w, r19.x, r22.x, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r31.x, r17.w +f16tof32 r31.y, r0.w +ld_structured r0.w, r3.z, r22.x, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r31.z, r17.w +f16tof32 r31.w, r0.w +f16tof32 r34.x, r32.y +f16tof32 r34.y, r33.y +f16tof32 r34.z, r20.y +f16tof32 r34.w, r21.y +mov r13.x {min16f}, r7.w {min16f} +mov r13.yz {min16f}, r11.yywy {min16f} +mul r7.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r7.xyzw, r7.xyzw {min16f} +ubfe r11.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r7.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r13.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r7.xyzw +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r35.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r7.xyzw +utof r35.xyzw {min16f}, r35.xyzw +mad_sat r35.xyzw, r35.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r7.xyzw, r7.xyzw, l(3, 3, 3, 3) +utof r7.xyzw {min16f}, r7.xyzw +mad_sat r7.xyzw, r7.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r36.x, r25.z +mov r36.yzw, r30.wwxy +mul r36.xyzw {min16f}, r11.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r36.xyzw {min16f}, r30.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r36.xyzw {min16f} +add r37.xyzw {min16f}, r11.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r30.w, r27.y +mad r30.xyzw {min16f}, r30.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r36.xyzw {min16f} +add r36.xyzw {min16f}, r13.xyzw {def32 as min16f}, r37.xyzw {min16f} +mad r30.xyzw {min16f}, r31.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r30.xyzw {min16f} +add r31.xyzw {min16f}, r35.xyzw {def32 as min16f}, r36.xyzw {min16f} +mad r30.xyzw {min16f}, r34.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r30.xyzw {min16f} +add r31.xyzw {min16f}, r7.xyzw {def32 as min16f}, r31.xyzw {min16f} +div r30.xyzw {min16f}, r30.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r30.xyzw, r30.xyzw {min16f} +imad r18.xy, r30.ywyy, l(0x00010000, 0x00010000, 0, 0), r30.xzxx +store_structured g1.x, r19.x, r17.y, r18.x +store_structured g1.x, r3.z, r17.y, r18.y +ld_structured r0.w, r19.z, r17.z, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r30.x, r17.w +f16tof32 r30.y, r0.w +f16tof32 r30.z, r21.z +f16tof32 r30.w, r22.z +ld_structured r0.w, r19.z, r22.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r0.w +ld_structured r0.w, r3.z, r22.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r0.w +f16tof32 r24.x, r32.z +f16tof32 r24.y, r33.z +f16tof32 r24.z, r21.w +f16tof32 r24.w, r22.w +mov r15.xy {min16f}, r14.ywyy {min16f} +mov r15.z {min16f}, r16.y {min16f} +mul r14.xyzw {min16f}, r15.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r14.xyzw, r14.xyzw {min16f} +ubfe r15.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r14.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r16.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r14.xyzw +utof r16.xyzw {min16f}, r16.xyzw +mad_sat r16.xyzw, r16.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r18.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r14.xyzw +utof r18.xyzw {min16f}, r18.xyzw +mad_sat r18.xyzw, r18.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r14.xyzw, r14.xyzw, l(3, 3, 3, 3) +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r25.yzw, r30.xxyz +mul r20.xyzw {min16f}, r15.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r20.xyzw {min16f}, r30.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r15.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r27.xyz, r30.yzwy +mad r20.xyzw {min16f}, r27.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r16.xyzw {def32 as min16f}, r21.xyzw {min16f} +mad r20.xyzw {min16f}, r34.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r18.xyzw {def32 as min16f}, r21.xyzw {min16f} +mad r20.xyzw {min16f}, r24.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r14.xyzw {def32 as min16f}, r21.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r19.z, r17.z, r22.z +store_structured g1.x, r3.z, r17.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r30.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r30.x +f16tof32 r26.z, r32.x +ld_structured r0.w, r3.x, r0.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r0.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r30.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r40.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r40.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r22.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g0.x, r3.x, r17.x, r22.z +store_structured g0.x, r3.z, r17.x, r22.w +ld_structured r22.zw, r19.x, r17.y, g1.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r25.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xy, r3.z, r17.y, g1.xyxx +and r32.xy, r27.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.xy, r27.xyxx, l(16, 16, 0, 0) +f16tof32 r26.y, r32.x +f16tof32 r26.z, r33.x +ld_structured r0.w, r19.x, r22.x, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r0.w +ld_structured r0.w, r3.z, r22.x, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r0.w +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r30.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r24.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g0.x, r19.x, r17.y, r24.x +store_structured g0.x, r3.z, r17.y, r24.z +f16tof32 r26.x, r24.y +f16tof32 r26.y, r25.y +f16tof32 r26.z, r32.y +f16tof32 r26.w, r33.y +ld_structured r0.w, r19.z, r22.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r22.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r20.x, r24.w +f16tof32 r20.y, r25.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r19.z, r17.z, r22.z +store_structured g0.x, r3.z, r17.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r17.x, g0.xyzw +and r24.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g0.xyzw +and r30.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r30.x +f16tof32 r26.z, r32.x +ld_structured r0.w, r3.x, r0.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r0.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r30.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g0.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g0.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r22.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g1.x, r3.x, r17.x, r22.z +store_structured g1.x, r3.z, r17.x, r22.w +ld_structured r22.zw, r19.x, r17.y, g0.xxxy +and r25.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g0.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r0.w, r19.x, r22.x, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r0.w +ld_structured r0.w, r3.z, r22.x, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r0.w +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r30.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g1.x, r19.x, r17.y, r25.x +store_structured g1.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r0.w, r19.z, r22.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r22.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r20.x, r24.w +f16tof32 r20.y, r25.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r19.z, r17.z, r22.z +store_structured g1.x, r3.z, r17.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r30.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r30.x +f16tof32 r26.z, r32.x +ld_structured r0.w, r3.x, r0.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r0.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r30.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r22.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g0.x, r3.x, r17.x, r22.z +store_structured g0.x, r3.z, r17.x, r22.w +ld_structured r22.zw, r19.x, r17.y, g1.xxxy +and r25.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g1.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r0.w, r19.x, r22.x, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r0.w +ld_structured r0.w, r3.z, r22.x, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r0.w +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r30.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g0.x, r19.x, r17.y, r25.x +store_structured g0.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r0.w, r19.z, r22.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r22.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r20.x, r24.w +f16tof32 r20.y, r25.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r19.z, r17.z, r22.z +store_structured g0.x, r3.z, r17.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r17.x, g0.xyzw +and r24.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g0.xyzw +and r30.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r30.x +f16tof32 r26.z, r32.x +ld_structured r0.w, r3.x, r0.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r0.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r30.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g0.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g0.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r22.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g1.x, r3.x, r17.x, r22.z +store_structured g1.x, r3.z, r17.x, r22.w +ld_structured r22.zw, r19.x, r17.y, g0.xxxy +and r25.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g0.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r0.w, r19.x, r22.x, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r0.w +ld_structured r0.w, r3.z, r22.x, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r0.w +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r30.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g1.x, r19.x, r17.y, r25.x +store_structured g1.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r0.w, r19.z, r22.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.w, r3.z, r22.y, g0.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r0.w +f16tof32 r20.x, r24.w +f16tof32 r20.y, r25.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r19.z, r17.z, r22.z +store_structured g1.x, r3.z, r17.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r30.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r30.x +f16tof32 r26.z, r32.x +ld_structured r0.w, r3.x, r0.y, g1.xxxx +and r17.w, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r0.w +ld_structured r0.y, r3.z, r0.y, g1.xxxx +and r0.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r33.zw, r0.wwwy +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r30.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r9.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r9.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r9.xyzw {min16f} +mov r26.w, r37.x +mad r9.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r9.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r5.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r9.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r23.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r0.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r3.x, r17.x, r0.y +store_structured g0.x, r3.z, r17.x, r0.w +ld_structured r0.yw, r19.x, r17.y, g1.xxxy +and r22.zw, r0.yyyw, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r25.xy, r0.ywyy, l(16, 16, 0, 0) +f16tof32 r5.w, r22.z +f16tof32 r5.x, r25.x +ld_structured r27.xy, r3.z, r17.y, g1.xyxx +and r32.xy, r27.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.xy, r27.xyxx, l(16, 16, 0, 0) +f16tof32 r5.y, r32.x +f16tof32 r5.z, r33.x +ld_structured r0.y, r19.x, r22.x, g1.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r9.x, r3.w +f16tof32 r9.y, r0.y +ld_structured r0.y, r3.z, r22.x, g1.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r9.z, r3.w +f16tof32 r9.w, r0.y +f16tof32 r23.x, r24.z +f16tof32 r23.y, r25.z +f16tof32 r23.z, r30.z +f16tof32 r23.w, r32.z +mov r26.x, r36.z +mov r26.yzw, r5.wwxy +mul r11.xyzw {min16f}, r11.xyzw {def32 as min16f}, r26.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r5.w, r37.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r23.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r31.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g0.x, r19.x, r17.y, r22.x +store_structured g0.x, r3.z, r17.y, r22.z +f16tof32 r5.x, r22.w +f16tof32 r5.y, r25.y +f16tof32 r5.z, r32.y +f16tof32 r5.w, r33.y +ld_structured r0.y, r19.z, r22.y, g1.xxxx +and r0.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r7.xy, r0.wyww +ld_structured r0.y, r3.z, r22.y, g1.xxxx +and r0.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r7.zw, r0.wwwy +f16tof32 r9.x, r24.w +f16tof32 r9.y, r25.w +f16tof32 r9.z, r30.w +f16tof32 r9.w, r32.w +mov r36.yzw, r5.xxyz +mul r11.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r37.xyz, r5.yzwy +mad r5.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r7.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r0.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r19.z, r17.z, r0.y +store_structured g0.x, r3.z, r17.z, r0.w +sync_g_t +uge r0.x, vThreadIDInGroup.y, l(2) +ult r0.y, vThreadIDInGroup.y, l(14) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r17.x, g0.xxxx + ld_structured r0.z, r3.z, r17.x, g0.xxxx + uge r0.w, r0.x, l(6) + ult r0.x, r0.x, l(58) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r2.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(6) + ult r2.x, r0.x, l(58) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r6.xyzw, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(6) + ult r0.w, r0.x, l(58) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r2.zwww, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(6) + ult r0.x, r0.x, l(58) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.xyyy, r0.xxxx + endif +endif +uge r0.x, r3.y, l(6) +ult r0.y, r3.y, l(42) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r17.y, g0.xxxx + ld_structured r0.z, r3.z, r17.y, g0.xxxx + uge r0.w, r0.x, l(6) + ult r0.x, r0.x, l(58) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.zwww, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(6) + ult r2.x, r0.x, l(58) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r8.xyyy, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(6) + ult r0.w, r0.x, l(58) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r8.zwww, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(6) + ult r0.x, r0.x, l(58) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r10.xyyy, r0.xxxx + endif +endif +imad r0.x, l(3), vThreadIDInGroup.y, l(2) +uge r0.y, r0.x, l(6) +ult r0.x, r0.x, l(42) +and r0.x, r0.x, r0.y +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r17.z, g0.xxxx + ld_structured r0.z, r3.z, r17.z, g0.xxxx + uge r0.w, r0.x, l(6) + ult r0.x, r0.x, l(58) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r10.zwww, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(6) + ult r2.x, r0.x, l(58) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r12.xyyy, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(6) + ult r0.w, r0.x, l(58) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r12.zwww, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(6) + ult r0.x, r0.x, l(58) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx + endif +endif +ret +// Approximately 922 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur6DXIL[] = +{ + 68, 88, 66, 67, 93, 189, + 44, 20, 207, 154, 41, 17, + 255, 39, 11, 199, 55, 231, + 60, 63, 1, 0, 0, 0, + 176, 118, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 4, 118, 0, 0, 20, 118, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 68, 109, + 0, 0, 80, 0, 5, 0, + 81, 27, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 43, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 21, 2, 0, + 2, 64, 0, 0, 52, 0, + 0, 0, 36, 0, 0, 0, + 36, 0, 0, 0, 36, 0, + 0, 0, 70, 5, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 250, 255, + 255, 255, 250, 255, 255, 255, + 252, 255, 255, 255, 250, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 0, 0, 0, 0, + 198, 0, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 4, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 198, 12, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 253, 255, 255, 255, 250, 255, + 255, 255, 250, 255, 255, 255, + 251, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 0, 16, 0, 8, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 230, 10, 16, 0, + 8, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 8, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 251, 255, + 255, 255, 251, 255, 255, 255, + 252, 255, 255, 255, 251, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 0, + 16, 0, 10, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 230, 10, 16, 0, 10, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 10, 0, + 0, 0, 198, 12, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 253, 255, 255, 255, + 251, 255, 255, 255, 250, 255, + 255, 255, 252, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 12, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 12, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 0, 16, 0, + 12, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 230, 10, + 16, 0, 12, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 12, 0, 0, 0, + 198, 12, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 251, 255, 255, 255, 252, 255, + 255, 255, 252, 255, 255, 255, + 252, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 15, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 230, 10, 16, 0, + 15, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 253, 255, + 255, 255, 252, 255, 255, 255, + 252, 255, 255, 255, 252, 255, + 255, 255, 43, 0, 0, 5, + 50, 0, 16, 0, 0, 0, + 0, 0, 198, 0, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 10, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 17, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 162, 0, 16, 0, 0, 0, + 0, 0, 6, 8, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 162, 0, 16, 0, 0, 0, + 0, 0, 6, 8, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 162, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 6, 244, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 18, 0, 0, 0, + 214, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 194, 0, 16, 0, + 18, 0, 0, 0, 86, 13, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 146, 0, 16, 0, 19, 0, + 0, 0, 166, 2, 16, 0, + 18, 0, 0, 0, 167, 0, + 0, 9, 242, 0, 16, 0, + 20, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 254, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 242, 0, 16, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 10, + 242, 0, 16, 0, 22, 0, + 0, 0, 70, 14, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 19, 0, 0, 0, + 10, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 22, 0, 0, 0, 41, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 30, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 252, 255, 255, 255, + 167, 0, 0, 9, 130, 0, + 16, 0, 17, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 18, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 23, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 18, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 23, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 50, 0, + 16, 0, 24, 0, 0, 0, + 214, 5, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 24, 0, + 0, 0, 26, 0, 16, 0, + 21, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 24, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 18, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 25, 0, 0, 0, + 70, 2, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 114, 0, 16, 0, + 25, 0, 0, 0, 38, 9, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 26, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 27, 0, 0, 0, + 70, 2, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 178, 0, 16, 0, + 27, 0, 0, 0, 70, 8, + 16, 0, 27, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 28, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 29, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 30, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 30, 0, 0, 0, 246, 4, + 16, 0, 19, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 30, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 54, 9, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 31, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 19, 0, 0, 0, + 10, 0, 16, 0, 27, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 35, 0, 0, 12, 146, 0, + 16, 0, 18, 0, 0, 0, + 86, 13, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 19, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 18, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 24, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 32, 0, + 0, 0, 70, 2, 16, 0, + 24, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 33, 0, 0, 0, + 70, 2, 16, 0, 24, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 30, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 30, 0, 0, 0, + 10, 0, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 146, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 244, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 50, 0, 16, 0, 20, 0, + 0, 0, 198, 0, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 21, 0, 0, 0, + 198, 0, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 30, 0, 0, 0, 10, 0, + 16, 0, 20, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 30, 0, 0, 0, + 10, 0, 16, 0, 21, 0, + 0, 0, 41, 0, 0, 10, + 50, 0, 16, 0, 22, 0, + 0, 0, 214, 5, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 22, 0, 0, 0, + 70, 0, 16, 0, 22, 0, + 0, 0, 2, 64, 0, 0, + 252, 255, 255, 255, 252, 255, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 10, 0, 16, 0, 22, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 31, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 31, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 22, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 31, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 31, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 33, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 20, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 21, 0, 0, 0, + 54, 0, 0, 7, 18, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 58, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 54, 0, + 0, 7, 98, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 86, 7, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 35, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 35, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 36, 0, + 0, 0, 42, 0, 16, 0, + 25, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 36, 0, 0, 0, 246, 4, + 16, 0, 30, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 54, 9, 16, 0, 30, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 0, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 37, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 27, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 37, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 31, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 35, 0, 0, 12, 50, 0, + 16, 0, 18, 0, 0, 0, + 214, 5, 16, 0, 30, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 0, + 16, 0, 30, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 30, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 30, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 30, 0, 0, 0, + 42, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 30, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 22, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 22, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 34, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 24, 0, 0, 0, 42, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 24, 0, 0, 0, + 42, 0, 16, 0, 33, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 24, 0, + 0, 0, 58, 0, 16, 0, + 21, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 24, 0, 0, 0, 58, 0, + 16, 0, 22, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 214, 5, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 54, 0, + 0, 7, 66, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 56, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 128, + 127, 67, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 28, 0, 0, 6, + 242, 0, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 16, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 16, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 18, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 18, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 2, 64, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 25, 0, + 0, 0, 6, 9, 16, 0, + 30, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 114, 0, 16, 0, + 27, 0, 0, 0, 150, 7, + 16, 0, 30, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 70, 14, 16, 0, 16, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 16, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 34, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 20, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 20, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 190, 24, + 0, 1, 167, 0, 0, 9, + 242, 0, 16, 0, 20, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 254, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 167, 0, 0, 9, + 242, 0, 16, 0, 27, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 254, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 242, 0, 16, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 242, 0, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 32, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 38, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 242, 17, 0, + 1, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 39, 0, 0, 0, 70, 2, + 16, 0, 38, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 38, 9, 16, 0, + 39, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 39, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 242, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 40, 0, 0, 0, 70, 2, + 16, 0, 39, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 37, 0, + 0, 0, 70, 8, 16, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 26, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 194, 0, + 16, 0, 22, 0, 0, 0, + 86, 13, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 22, 0, 0, 0, + 167, 0, 0, 9, 194, 0, + 16, 0, 22, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 6, 244, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 24, 0, 0, 0, + 230, 10, 16, 0, 22, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 50, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 70, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 32, 0, 0, 0, + 70, 0, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 34, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 34, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 41, 0, + 0, 0, 42, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 41, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 41, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 26, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 34, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 31, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 82, 0, 16, 0, + 24, 0, 0, 0, 86, 7, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 6, 2, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 26, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 26, 0, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 194, 0, 16, 0, 33, 0, + 0, 0, 246, 7, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 38, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 1, 0, 0, 0, + 85, 0, 0, 10, 114, 0, + 16, 0, 39, 0, 0, 0, + 70, 2, 16, 0, 38, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 114, 0, 16, 0, + 36, 0, 0, 0, 38, 9, + 16, 0, 39, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 39, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 42, 0, 0, 0, + 70, 2, 16, 0, 39, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 178, 0, 16, 0, + 37, 0, 0, 0, 70, 8, + 16, 0, 42, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 40, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 40, 0, + 0, 0, 246, 4, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 54, 9, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 37, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 28, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 34, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 162, 0, 16, 0, 0, 0, + 0, 0, 86, 13, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 162, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 244, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 25, 0, 0, 0, + 214, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 5, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 167, 0, 0, 9, + 50, 0, 16, 0, 27, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 70, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 50, 0, 16, 0, 32, 0, + 0, 0, 70, 0, 16, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 33, 0, 0, 0, + 70, 0, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 5, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 23, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 23, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 23, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 23, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 26, 0, 0, 0, + 246, 4, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 54, 9, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 22, 0, 0, 0, + 86, 7, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 19, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 32, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 19, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 50, 0, 16, 0, + 7, 0, 0, 0, 118, 15, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 194, 0, 16, 0, 7, 0, + 0, 0, 246, 7, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 32, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 36, 0, 0, 0, + 6, 9, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 54, 0, 0, 5, 114, 0, + 16, 0, 37, 0, 0, 0, + 150, 7, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 37, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 18, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 0, 0, 0, 0, + 86, 13, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 190, 24, 0, 1, 80, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 79, 0, + 0, 6, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 14, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 41, 0, 0, 6, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 80, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 6, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 58, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 58, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 58, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 2, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 80, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 58, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 80, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 42, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 58, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 6, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 58, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 8, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 6, 0, + 0, 0, 79, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 58, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 8, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 6, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 58, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 10, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 35, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 26, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 80, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 42, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 6, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 58, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 10, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 6, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 58, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 12, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 6, 0, + 0, 0, 79, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 58, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 12, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 6, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 58, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 62, 0, + 0, 1, 83, 70, 73, 48, + 8, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 83, 84, 65, 84, 148, 0, + 0, 0, 154, 3, 0, 0, + 43, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 149, 0, 0, 0, 51, 0, + 0, 0, 197, 0, 0, 0, + 1, 0, 0, 0, 15, 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, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 0, + 0, 0, 22, 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, + 7, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur7.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur7.h new file mode 100644 index 0000000..165c897 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur7.h @@ -0,0 +1,6734 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 42 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyxy, l(50, 34, 50, 34), r0.xyxy +iadd r2.xyzw, r1.zwzw, l(-7, -7, -6, -7) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r4.zwzz, t0.zwxy, s1, l(0.000000) +iadd r4.xyzw, r1.zwzw, l(-5, -7, -4, -7) +itof r6.xyzw, r4.xyzw +add r6.xyzw, r6.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r6.xyzw, r6.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.xy {min16f}, r6.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r6.xw {min16f}, r6.zwzz, t0.xzwy, s1, l(0.000000) +iadd r8.xyzw, r1.zwzw, l(-7, -6, -6, -6) +itof r9.xyzw, r8.xyzw +add r9.xyzw, r9.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r9.xyzw, r9.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r7.zw {min16f}, r9.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r10.xy {min16f}, r9.zwzz, t0.xyzw, s1, l(0.000000) +iadd r9.xyzw, r1.zwzw, l(-5, -6, -4, -6) +itof r11.xyzw, r9.xyzw +add r11.xyzw, r11.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r11.xyzw, r11.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r10.zw {min16f}, r11.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.xw {min16f}, r11.zwzz, t0.xzwy, s1, l(0.000000) +iadd r12.xyzw, r1.zwzw, l(-7, -5, -6, -5) +itof r13.xyzw, r12.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r13.zwzz, t0.zwxy, s1, l(0.000000) +iadd r1.xyzw, r1.xyzw, l(-5, -5, -4, -5) +itof r13.xyzw, r1.xyzw +add r13.xyzw, r13.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r13.xyzw, r13.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r15.xy {min16f}, r13.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r13.zwzz, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r16.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.y, r5.x {min16f} +f32tof16 r16.w, r5.z {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.x, r0.y +f32tof16 r0.y, r7.x {min16f} +f32tof16 r16.w, r6.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.x, r0.y +f32tof16 r0.y, r7.z {min16f} +f32tof16 r16.w, r10.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.y, r0.y +f32tof16 r0.y, r10.z {min16f} +f32tof16 r16.w, r11.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.y, r0.y +f32tof16 r0.y, r14.x {min16f} +f32tof16 r16.w, r14.z {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.x, r16.z, r0.y +f32tof16 r0.y, r15.x {min16f} +f32tof16 r16.w, r13.x {min16f} +imad r0.y, r16.w, l(0x00010000), r0.y +store_structured g0.x, r3.z, r16.z, r0.y +sync_g_t +ld_structured r17.xy, r3.x, r16.x, g0.xyxx +and r17.zw, r17.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r18.xy, r17.xyxx, l(16, 16, 0, 0) +f16tof32 r19.w, r17.z +f16tof32 r19.x, r18.x +ld_structured r20.xyzw, r3.z, r16.x, g0.xyzw +and r21.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r22.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r19.y, r21.x +f16tof32 r19.z, r22.x +ishl r0.y, r3.y, l(2) +iadd r0.y, r0.y, l(-4) +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r17.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r23.x, r17.x +f16tof32 r23.y, r16.w +ld_structured r16.w, r3.z, r0.y, g0.xxxx +and r17.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r23.z, r17.x +f16tof32 r23.w, r16.w +f16tof32 r17.x, r17.w +f16tof32 r17.y, r18.y +f16tof32 r17.z, r21.y +f16tof32 r17.w, r22.y +ld_structured r18.xyz, r0.z, r16.x, g0.xyzx +ushr r24.xyz, r18.xyzx, l(16, 16, 16, 0) +f16tof32 r24.xyz, r24.zxyz +ld_structured r25.xyz, r3.w, r16.x, g0.xyzx +and r26.xyz, r25.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r26.xyw, r26.xyxz +mov r6.xy {min16f}, r5.ywyy {min16f} +mov r6.z {min16f}, r7.y {min16f} +mul r5.xyzw {min16f}, r6.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r6.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r6.xyzw {min16f}, r6.xyzw +mad_sat r6.xyzw, r6.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r27.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r27.xyzw {min16f}, r27.xyzw +mad_sat r27.xyzw, r27.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r29.x, r24.y +mov r29.yzw, r19.wwxy +mul r29.xyzw {min16f}, r6.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f} +mad r29.xyzw {min16f}, r19.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r29.xyzw {min16f} +add r30.xyzw {min16f}, r6.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r19.w, r26.x +mad r19.xyzw {min16f}, r19.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r29.xyzw {min16f} +add r29.xyzw {min16f}, r27.xyzw {def32 as min16f}, r30.xyzw {min16f} +mad r19.xyzw {min16f}, r23.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r23.xyzw {min16f}, r28.xyzw {def32 as min16f}, r29.xyzw {min16f} +mad r17.xyzw {min16f}, r17.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r19.xyzw {min16f} +add r19.xyzw {min16f}, r5.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r17.xyzw {min16f}, r17.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r17.xyzw, r17.xyzw {min16f} +imad r18.xw, r17.yyyw, l(0x00010000, 0, 0, 0x00010000), r17.xxxz +store_structured g1.x, r3.x, r16.x, r18.x +store_structured g1.x, r3.z, r16.x, r18.w +imad r17.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r31.xyz, r17.x, r16.y, g0.xyzx +and r32.xyz, r31.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r33.xyz, r31.xyzx, l(16, 16, 16, 0) +f16tof32 r23.w, r32.x +f16tof32 r23.x, r33.x +ld_structured r18.xw, r3.z, r16.y, g0.xxxy +and r20.xy, r18.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r21.xy, r18.xwxx, l(16, 16, 0, 0) +f16tof32 r23.y, r20.x +f16tof32 r23.z, r21.x +ishl r22.xy, r17.ywyy, l(2, 2, 0, 0) +iadd r22.xy, r22.xyxx, l(-4, -4, 0, 0) +ld_structured r16.w, r17.x, r22.x, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r29.x, r18.x +f16tof32 r29.y, r16.w +ld_structured r16.w, r3.z, r22.x, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r29.z, r18.x +f16tof32 r29.w, r16.w +f16tof32 r30.x, r32.y +f16tof32 r30.y, r33.y +f16tof32 r30.z, r20.y +f16tof32 r30.w, r21.y +mov r11.x {min16f}, r7.w {min16f} +mov r11.yz {min16f}, r10.yywy {min16f} +mul r7.xyzw {min16f}, r11.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r7.xyzw, r7.xyzw {min16f} +ubfe r10.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r7.xyzw +utof r10.xyzw {min16f}, r10.xyzw +mad_sat r10.xyzw, r10.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r11.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r7.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r34.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r7.xyzw +utof r34.xyzw {min16f}, r34.xyzw +mad_sat r34.xyzw, r34.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r7.xyzw, r7.xyzw, l(3, 3, 3, 3) +utof r7.xyzw {min16f}, r7.xyzw +mad_sat r7.xyzw, r7.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r35.x, r24.z +mov r35.yzw, r23.wwxy +mul r35.xyzw {min16f}, r10.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r35.xyzw {min16f}, r23.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r35.xyzw {min16f} +add r36.xyzw {min16f}, r10.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r23.w, r26.y +mad r23.xyzw {min16f}, r23.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r35.xyzw {min16f} +add r35.xyzw {min16f}, r11.xyzw {def32 as min16f}, r36.xyzw {min16f} +mad r23.xyzw {min16f}, r29.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r23.xyzw {min16f} +add r29.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {min16f} +mad r23.xyzw {min16f}, r30.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r23.xyzw {min16f} +add r29.xyzw {min16f}, r7.xyzw {def32 as min16f}, r29.xyzw {min16f} +div r23.xyzw {min16f}, r23.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r23.xyzw, r23.xyzw {min16f} +imad r18.xy, r23.ywyy, l(0x00010000, 0x00010000, 0, 0), r23.xzxx +store_structured g1.x, r17.x, r16.y, r18.x +store_structured g1.x, r3.z, r16.y, r18.y +ld_structured r16.w, r17.z, r16.z, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r23.x, r18.x +f16tof32 r23.y, r16.w +f16tof32 r23.z, r21.z +f16tof32 r23.w, r22.z +ld_structured r16.w, r17.z, r22.y, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r30.x, r18.x +f16tof32 r30.y, r16.w +ld_structured r16.w, r3.z, r22.y, g0.xxxx +and r18.x, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r30.z, r18.x +f16tof32 r30.w, r16.w +f16tof32 r31.x, r32.z +f16tof32 r31.y, r33.z +f16tof32 r31.z, r21.w +f16tof32 r31.w, r22.w +mov r13.xy {min16f}, r14.ywyy {min16f} +mov r13.z {min16f}, r15.y {min16f} +mul r13.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r13.xyzw, r13.xyzw {min16f} +ubfe r14.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r13.xyzw +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r15.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r13.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r18.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r13.xyzw +utof r18.xyzw {min16f}, r18.xyzw +mad_sat r18.xyzw, r18.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r13.xyzw, r13.xyzw, l(3, 3, 3, 3) +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r24.yzw, r23.xxyz +mul r20.xyzw {min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {def32 as min16f} +mad r20.xyzw {min16f}, r23.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r14.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r26.xyz, r23.yzwy +mad r20.xyzw {min16f}, r26.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r15.xyzw {def32 as min16f}, r21.xyzw {min16f} +mad r20.xyzw {min16f}, r30.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r18.xyzw {def32 as min16f}, r21.xyzw {min16f} +mad r20.xyzw {min16f}, r31.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r21.xyzw {min16f}, r13.xyzw {def32 as min16f}, r21.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r17.z, r16.z, r22.z +store_structured g1.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g1.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g1.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g1.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g1.xyzx +and r39.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r39.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g0.x, r3.x, r16.x, r22.z +store_structured g0.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g1.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g1.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g0.x, r17.x, r16.y, r24.x +store_structured g0.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r17.z, r16.z, r22.z +store_structured g0.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g0.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g0.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g0.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g0.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g1.x, r3.x, r16.x, r22.z +store_structured g1.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g0.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g0.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g1.x, r17.x, r16.y, r24.x +store_structured g1.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r17.z, r16.z, r22.z +store_structured g1.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g1.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g1.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g1.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g1.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g0.x, r3.x, r16.x, r22.z +store_structured g0.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g1.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g1.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g0.x, r17.x, r16.y, r24.x +store_structured g0.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r17.z, r16.z, r22.z +store_structured g0.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g0.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g0.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g0.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g0.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g1.x, r3.x, r16.x, r22.z +store_structured g1.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g0.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g0.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g1.x, r17.x, r16.y, r24.x +store_structured g1.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g1.x, r17.z, r16.z, r22.z +store_structured g1.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g1.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g1.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r0.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g1.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g1.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r39.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r39.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r39.xyzw {min16f} +mov r25.w, r36.x +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r39.xyzw {min16f} +mad r25.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r22.zw, r25.yyyw, l(0, 0, 0x00010000, 0x00010000), r25.xxxz +store_structured g0.x, r3.x, r16.x, r22.z +store_structured g0.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g1.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r25.w, r24.x +f16tof32 r25.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g1.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r25.yz, r32.xxzx +ld_structured r16.w, r17.x, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.x, r22.z +f16tof32 r33.y, r16.w +ld_structured r16.w, r3.z, r22.x, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r33.z, r22.z +f16tof32 r33.w, r16.w +f16tof32 r39.x, r23.z +f16tof32 r39.y, r24.z +f16tof32 r39.z, r30.z +f16tof32 r39.w, r31.z +mov r40.x, r35.z +mov r40.yzw, r25.wwxy +mul r40.xyzw {min16f}, r10.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r25.w, r36.y +mad r25.xyzw {min16f}, r25.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r25.xyzw {min16f}, r33.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r25.xyzw {min16f} +mad r25.xyzw {min16f}, r39.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r25.xyzw {min16f} +div r25.xyzw {min16f}, r25.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r25.xyzw, r25.xyzw {min16f} +imad r24.xz, r25.yywy, l(0x00010000, 0, 0x00010000, 0), r25.xxzx +store_structured g0.x, r17.x, r16.y, r24.x +store_structured g0.x, r3.z, r16.y, r24.z +f16tof32 r25.x, r24.y +f16tof32 r25.y, r26.y +f16tof32 r25.zw, r32.yyyw +ld_structured r16.w, r17.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r16.w, r3.z, r22.y, g1.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.z, r22.z +f16tof32 r32.w, r16.w +f16tof32 r20.x, r23.w +f16tof32 r20.y, r24.w +f16tof32 r20.z, r30.w +f16tof32 r20.w, r31.w +mov r35.yzw, r25.xxyz +mul r23.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r23.xyzw {min16f}, r25.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r23.xyzw {min16f} +mov r36.xyz, r25.yzwy +mad r23.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r23.xyzw {min16f}, r32.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r23.xyzw {min16f} +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r23.xyzw {min16f} +div r20.xyzw {min16f}, r20.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r20.xyzw, r20.xyzw {min16f} +imad r22.zw, r20.yyyw, l(0, 0, 0x00010000, 0x00010000), r20.xxxz +store_structured g0.x, r17.z, r16.z, r22.z +store_structured g0.x, r3.z, r16.z, r22.w +sync_g_t +ld_structured r20.xyzw, r3.x, r16.x, g0.xyzw +and r23.xyzw, r20.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r24.xyzw, r20.xyzw, l(16, 16, 16, 16) +f16tof32 r25.w, r23.x +f16tof32 r25.x, r24.x +ld_structured r26.xyzw, r3.z, r16.x, g0.xyzw +and r30.xyzw, r26.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r31.xyzw, r26.xyzw, l(16, 16, 16, 16) +f16tof32 r25.y, r30.x +f16tof32 r25.z, r31.x +ld_structured r16.w, r3.x, r0.y, g0.xxxx +and r22.z, r16.w, l(0x0000ffff) +ushr r16.w, r16.w, l(16) +f16tof32 r32.x, r22.z +f16tof32 r32.y, r16.w +ld_structured r0.y, r3.z, r0.y, g0.xxxx +and r16.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r32.z, r16.w +f16tof32 r32.w, r0.y +f16tof32 r33.x, r23.y +f16tof32 r33.y, r24.y +f16tof32 r33.z, r30.y +f16tof32 r33.w, r31.y +ld_structured r37.xyz, r0.z, r16.x, g0.xyzx +ushr r38.xyz, r37.xyzx, l(16, 16, 16, 0) +f16tof32 r35.xyz, r38.zxyz +ld_structured r38.xyz, r3.w, r16.x, g0.xyzx +and r41.xyz, r38.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r36.xyw, r41.xyxz +mov r39.x, r35.y +mov r39.yzw, r25.wwxy +mul r6.xyzw {min16f}, r6.xyzw {def32 as min16f}, r39.xyzw {def32 as min16f} +mad r6.xyzw {min16f}, r25.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r6.xyzw {min16f} +mov r25.w, r36.x +mad r6.xyzw {min16f}, r25.xyzw {def32 as min16f}, r27.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r6.xyzw {min16f}, r32.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r6.xyzw {min16f} +mad r5.xyzw {min16f}, r33.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r6.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r19.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.zw, r5.yyyw, l(0, 0, 0x00010000, 0x00010000), r5.xxxz +store_structured g1.x, r3.x, r16.x, r22.z +store_structured g1.x, r3.z, r16.x, r22.w +ld_structured r22.zw, r17.x, r16.y, g0.xxxy +and r24.xy, r22.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r26.xy, r22.zwzz, l(16, 16, 0, 0) +f16tof32 r5.w, r24.x +f16tof32 r5.x, r26.x +ld_structured r31.xy, r3.z, r16.y, g0.xyxx +and r32.xy, r31.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r32.zw, r31.xxxy, l(0, 0, 16, 16) +f16tof32 r5.yz, r32.xxzx +ld_structured r0.y, r17.x, r22.x, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.x, r3.w +f16tof32 r6.y, r0.y +ld_structured r0.y, r3.z, r22.x, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.z, r3.w +f16tof32 r6.w, r0.y +f16tof32 r19.x, r23.z +f16tof32 r19.y, r24.z +f16tof32 r19.z, r30.z +f16tof32 r19.w, r31.z +mov r25.x, r35.z +mov r25.yzw, r5.wwxy +mul r10.xyzw {min16f}, r10.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r10.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r10.xyzw {min16f} +mov r5.w, r36.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r11.xyzw {def32 as min16f}, r10.xyzw {min16f} +mad r5.xyzw {min16f}, r6.xyzw {def32 as min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r19.xyzw {def32 as min16f}, r7.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r29.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g1.x, r17.x, r16.y, r22.x +store_structured g1.x, r3.z, r16.y, r22.z +f16tof32 r5.x, r24.y +f16tof32 r5.y, r26.y +f16tof32 r5.zw, r32.yyyw +ld_structured r0.y, r17.z, r22.y, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.x, r3.w +f16tof32 r6.y, r0.y +ld_structured r0.y, r3.z, r22.y, g0.xxxx +and r3.w, r0.y, l(0x0000ffff) +ushr r0.y, r0.y, l(16) +f16tof32 r6.z, r3.w +f16tof32 r6.w, r0.y +f16tof32 r7.x, r23.w +f16tof32 r7.y, r24.w +f16tof32 r7.z, r30.w +f16tof32 r7.w, r31.w +mov r35.yzw, r5.xxyz +mul r10.xyzw {min16f}, r14.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f} +mad r10.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r10.xyzw {min16f} +mov r36.xyz, r5.yzwy +mad r5.xyzw {min16f}, r36.xyzw {def32 as min16f}, r15.xyzw {def32 as min16f}, r10.xyzw {min16f} +mad r5.xyzw {min16f}, r6.xyzw {def32 as min16f}, r18.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r7.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r21.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r22.xy, r5.ywyy, l(0x00010000, 0x00010000, 0, 0), r5.xzxx +store_structured g1.x, r17.z, r16.z, r22.x +store_structured g1.x, r3.z, r16.z, r22.y +sync_g_t +uge r0.x, r0.w, l(7) +ult r0.y, r0.w, l(41) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.x, g1.xxxx + ld_structured r0.z, r3.z, r16.x, g1.xxxx + uge r0.w, r0.x, l(7) + ult r0.x, r0.x, l(57) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r2.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(7) + ult r2.x, r0.x, l(57) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r2.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(7) + ult r0.w, r0.x, l(57) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r4.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(7) + ult r0.x, r0.x, l(57) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.zwww, r0.xxxx + endif +endif +uge r0.x, r3.y, l(7) +ult r0.y, r3.y, l(41) +and r0.x, r0.y, r0.x +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.y, g1.xxxx + ld_structured r0.z, r3.z, r16.y, g1.xxxx + uge r0.w, r0.x, l(7) + ult r0.x, r0.x, l(57) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r8.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(7) + ult r2.x, r0.x, l(57) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r8.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(7) + ult r0.w, r0.x, l(57) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r9.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(7) + ult r0.x, r0.x, l(57) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r9.zwww, r0.xxxx + endif +endif +imad r0.x, l(3), vThreadIDInGroup.y, l(2) +uge r0.y, r0.x, l(7) +ult r0.x, r0.x, l(41) +and r0.x, r0.x, r0.y +if_nz r0.x + ishl r0.x, vThreadIDInGroup.x, l(2) + ld_structured r0.y, r3.x, r16.z, g1.xxxx + ld_structured r0.z, r3.z, r16.z, g1.xxxx + uge r0.w, r0.x, l(7) + ult r0.x, r0.x, l(57) + and r0.x, r0.x, r0.w + if_nz r0.x + and r0.x, r0.y, l(0x0000ffff) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r12.xyyy, r0.xxxx + endif + imad r0.x, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.x, l(7) + ult r2.x, r0.x, l(57) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.y, r0.y, l(16) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r12.zwww, r0.yyyy + endif + iadd r0.x, r0.x, l(1) + uge r0.y, r0.x, l(7) + ult r0.w, r0.x, l(57) + and r0.y, r0.w, r0.y + if_nz r0.y + and r0.y, r0.z, l(0x0000ffff) + f16tof32 r0.y, r0.y + store_uav_typed u0.xyzw, r1.xyyy, r0.yyyy + endif + or r0.x, r0.x, l(3) + uge r0.y, r0.x, l(7) + ult r0.x, r0.x, l(57) + and r0.x, r0.x, r0.y + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r1.zwww, r0.xxxx + endif +endif +ret +// Approximately 1030 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur7DXIL[] = +{ + 68, 88, 66, 67, 43, 56, + 78, 5, 3, 143, 86, 230, + 162, 200, 160, 103, 118, 144, + 190, 252, 1, 0, 0, 0, + 56, 131, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 140, 130, 0, 0, 156, 130, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 204, 121, + 0, 0, 80, 0, 5, 0, + 115, 30, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 42, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 20, 2, 0, + 2, 64, 0, 0, 50, 0, + 0, 0, 34, 0, 0, 0, + 50, 0, 0, 0, 34, 0, + 0, 0, 70, 4, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 249, 255, + 255, 255, 249, 255, 255, 255, + 250, 255, 255, 255, 249, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 4, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 251, 255, + 255, 255, 249, 255, 255, 255, + 252, 255, 255, 255, 249, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 0, + 16, 0, 6, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 6, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 8, 0, + 0, 0, 230, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 249, 255, 255, 255, + 250, 255, 255, 255, 250, 255, + 255, 255, 250, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 9, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 9, 0, 0, 0, + 230, 14, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 251, 255, 255, 255, 250, 255, + 255, 255, 252, 255, 255, 255, + 250, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 0, 16, 0, 11, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 230, 10, 16, 0, + 11, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 12, 0, 0, 0, 230, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 249, 255, + 255, 255, 251, 255, 255, 255, + 250, 255, 255, 255, 251, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 0, + 16, 0, 13, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 230, 10, 16, 0, 13, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 251, 255, 255, 255, + 251, 255, 255, 255, 252, 255, + 255, 255, 251, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 70, 0, 16, 0, + 13, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 230, 10, + 16, 0, 13, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 16, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 35, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 50, 0, + 16, 0, 17, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 17, 0, 0, 0, + 6, 4, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 19, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 41, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 252, 255, + 255, 255, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 23, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 23, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 24, 0, 0, 0, 70, 2, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 24, 0, + 0, 0, 38, 9, 16, 0, + 24, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 25, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 26, 0, 0, 0, 70, 2, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 26, 0, + 0, 0, 70, 8, 16, 0, + 26, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 27, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 28, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 28, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 29, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 29, 0, + 0, 0, 246, 4, 16, 0, + 19, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 29, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 54, 9, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 19, 0, 0, 0, 10, 0, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 17, 0, + 0, 0, 70, 14, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 19, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 17, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 17, 0, 0, 0, 35, 0, + 0, 12, 146, 0, 16, 0, + 18, 0, 0, 0, 86, 13, + 16, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 17, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 18, 0, 0, 0, 35, 0, + 0, 14, 242, 0, 16, 0, + 17, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 70, 36, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 31, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 32, 0, 0, 0, + 70, 2, 16, 0, 31, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 33, 0, 0, 0, 70, 2, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 146, 0, + 16, 0, 18, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 6, 244, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 20, 0, 0, 0, + 198, 0, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 21, 0, 0, 0, 198, 0, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 23, 0, + 0, 0, 10, 0, 16, 0, + 20, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 21, 0, 0, 0, + 41, 0, 0, 10, 50, 0, + 16, 0, 22, 0, 0, 0, + 214, 5, 16, 0, 17, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 50, 0, 16, 0, + 22, 0, 0, 0, 70, 0, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 252, 255, + 255, 255, 252, 255, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 29, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 29, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 29, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 29, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 30, 0, + 0, 0, 26, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 30, 0, 0, 0, 26, 0, + 16, 0, 33, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 20, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 30, 0, + 0, 0, 26, 0, 16, 0, + 21, 0, 0, 0, 54, 0, + 0, 7, 18, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 58, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 54, 0, 0, 7, + 98, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 86, 7, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 34, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 34, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 34, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 7, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 35, 0, 0, 0, + 42, 0, 16, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 246, 4, 16, 0, + 23, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 54, 9, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 23, 0, 0, 0, 26, 0, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 35, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 70, 14, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 23, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 35, 0, + 0, 12, 50, 0, 16, 0, + 18, 0, 0, 0, 214, 5, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 26, 0, 16, 0, + 18, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 18, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 23, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 23, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 23, 0, 0, 0, 42, 0, + 16, 0, 21, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 23, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 30, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 30, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 30, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 30, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 31, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 33, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 31, 0, 0, 0, + 58, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 31, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 24, 0, 0, 0, + 6, 9, 16, 0, 23, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 24, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 54, 0, 0, 5, + 114, 0, 16, 0, 26, 0, + 0, 0, 150, 7, 16, 0, + 23, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 31, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 39, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 39, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 39, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 39, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 25, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 25, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 22, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 39, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 39, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 39, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 40, 0, 0, 0, + 246, 4, 16, 0, 25, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 40, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 54, 9, 16, 0, + 25, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 39, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 25, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 25, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 24, 0, 0, 0, + 86, 7, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 25, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 25, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 20, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 25, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 23, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 32, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 23, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 23, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 20, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 22, 0, + 0, 0, 86, 13, 16, 0, + 20, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 20, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 42, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 20, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 23, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 24, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 25, 0, + 0, 0, 10, 0, 16, 0, + 30, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 31, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 22, 0, 0, 0, + 58, 0, 16, 0, 16, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 16, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 58, 0, + 16, 0, 16, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 32, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 33, 0, 0, 0, + 26, 0, 16, 0, 31, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 37, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 38, 0, + 0, 0, 70, 2, 16, 0, + 37, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 35, 0, 0, 0, + 38, 9, 16, 0, 38, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 16, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 41, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 36, 0, 0, 0, + 70, 8, 16, 0, 41, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 39, 0, + 0, 0, 26, 0, 16, 0, + 35, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 39, 0, 0, 0, 246, 4, + 16, 0, 25, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 39, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 54, 9, 16, 0, 25, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 25, 0, 0, 0, 10, 0, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 25, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 6, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 28, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 33, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 22, 0, 0, 0, 86, 13, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 42, 0, 16, 0, + 22, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 16, 0, + 0, 0, 58, 0, 16, 0, + 22, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 22, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 24, 0, 0, 0, 230, 10, + 16, 0, 22, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 26, 0, + 0, 0, 230, 10, 16, 0, + 22, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 26, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 31, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 31, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 32, 0, + 0, 0, 6, 4, 16, 0, + 31, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 5, 0, 0, 0, + 6, 2, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 6, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 30, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 19, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 25, 0, 0, 0, 42, 0, + 16, 0, 35, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 25, 0, 0, 0, + 246, 4, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 54, 9, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 36, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 34, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 29, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 22, 0, 0, 0, + 86, 7, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 16, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 26, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 5, 0, 0, 0, 86, 13, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 6, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 6, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 6, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 6, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 7, 0, + 0, 0, 58, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 30, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 31, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 35, 0, + 0, 0, 6, 9, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 36, 0, + 0, 0, 150, 7, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 18, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 50, 0, 16, 0, 22, 0, + 0, 0, 214, 5, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 134, 0, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 10, 0, 16, 0, 22, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 16, 0, 0, 0, + 26, 0, 16, 0, 22, 0, + 0, 0, 190, 24, 0, 1, + 80, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 7, 0, 0, 0, 79, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 41, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 167, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 16, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 7, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 57, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 2, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 57, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 2, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 57, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 4, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 57, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 4, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 41, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 57, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 8, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 7, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 57, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 58, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 8, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 7, 0, 0, 0, + 79, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 57, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 9, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 60, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 7, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 57, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 9, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 21, 0, + 0, 1, 35, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 80, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 41, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 41, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 16, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 7, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 57, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 12, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 35, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 7, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 57, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 31, 0, 4, 3, + 58, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 12, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 7, 0, 0, 0, + 79, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 57, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 60, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 80, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 7, 0, 0, 0, + 79, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 57, 0, 0, 0, 1, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 1, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 21, 0, + 0, 1, 62, 0, 0, 1, + 83, 70, 73, 48, 8, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 83, 84, + 65, 84, 148, 0, 0, 0, + 6, 4, 0, 0, 42, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 165, 0, + 0, 0, 53, 0, 0, 0, + 219, 0, 0, 0, 1, 0, + 0, 0, 15, 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, + 12, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62, 0, + 0, 0, 0, 0, 0, 0, + 21, 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, 8, 0, + 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur8.h b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur8.h new file mode 100644 index 0000000..17fcd94 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOEdgeSensitiveBlur8.h @@ -0,0 +1,7394 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_BlurInput texture float2 2d t0 1 +// g_BlurOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s1, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_temps 43 +dcl_tgsm_structured g0, 200, 34 +dcl_tgsm_structured g1, 200, 34 +dcl_thread_group 16, 16, 1 +imul null, r0.xyzw, vThreadIDInGroup.xyxy, l(4, 3, 2, 3) +imad r1.xyzw, vThreadGroupID.xyyy, l(48, 32, 32, 32), r0.xyyy +iadd r2.xyzw, r1.xwxw, l(-8, -8, -8, -7) +imad r3.xyzw, l(2, 3, 2, 2), vThreadIDInGroup.xyxx, l(1, 1, 2, 3) +itof r4.xyzw, r2.xyzw +add r4.xyzw, r4.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r4.xyzw, r4.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.xy {min16f}, r4.xyxx, t0.xyzw, s1, l(0.000000) +iadd r6.xyzw, r2.xyxy, l(1, 0, 2, 0) +itof r7.xyzw, r6.xyzw +add r7.xyzw, r7.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r7.xyzw, r7.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r5.zw {min16f}, r7.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r8.xy {min16f}, r7.zwzz, t0.xyzw, s1, l(0.000000) +iadd r7.xyzw, r2.xyyy, l(3, 0, 0, 0) +itof r4.xy, r7.xwxx +add r4.xy, r4.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r4.xy, r4.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r9.xw {min16f}, r4.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r8.zw {min16f}, r4.zwzz, t0.zwxy, s1, l(0.000000) +iadd r4.xyzw, r1.xwxw, l(-7, -7, -6, -7) +itof r10.xyzw, r4.xyzw +add r10.xyzw, r10.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r10.xyzw, r10.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r11.xy {min16f}, r10.xyxx, t0.xyzw, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r11.zw {min16f}, r10.zwzz, t0.zwxy, s1, l(0.000000) +iadd r10.xyzw, r1.xwxw, l(-5, -7, -8, -6) +itof r12.xyzw, r10.xyzw +add r12.xyzw, r12.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r12.xyzw, r12.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r13.xw {min16f}, r12.xyxx, t0.xzwy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r14.xy {min16f}, r12.zwzz, t0.xyzw, s1, l(0.000000) +iadd r12.xyzw, r1.xwxw, l(-7, -6, -6, -6) +itof r15.xyzw, r12.xyzw +add r15.xyzw, r15.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r15.xyzw, r15.xyzw, cb0[13].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r14.zw {min16f}, r15.xyxx, t0.zwxy, s1, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r16.xy {min16f}, r15.zwzz, t0.xyzw, s1, l(0.000000) +iadd r1.xyzw, r1.xyzw, l(-5, -6, -6, -6) +itof r15.xy, r1.xwxx +add r15.xy, r15.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r15.xy, r15.xyxx, cb0[13].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r15.xw {min16f}, r15.xyxx, t0.xzwy, s1, l(0.000000) +ishl r0.x, r0.w, l(2) +iadd r17.xyz, r0.xxxx, l(4, 8, 12, 0) +f32tof16 r0.w, r5.x {min16f} +f32tof16 r17.w, r5.z {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r17.x, r0.w +f32tof16 r0.w, r8.x {min16f} +f32tof16 r17.w, r9.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r17.x, r0.w +f32tof16 r0.w, r8.z {min16f} +f32tof16 r17.w, r11.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r17.y, r0.w +f32tof16 r0.w, r11.z {min16f} +f32tof16 r17.w, r13.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r17.y, r0.w +f32tof16 r0.w, r14.x {min16f} +f32tof16 r17.w, r14.z {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.x, r17.z, r0.w +f32tof16 r0.w, r16.x {min16f} +f32tof16 r17.w, r15.x {min16f} +imad r0.w, r17.w, l(0x00010000), r0.w +store_structured g0.x, r3.z, r17.z, r0.w +sync_g_t +ld_structured r18.xy, r3.x, r17.x, g0.xyxx +and r18.zw, r18.xxxy, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r19.xy, r18.xyxx, l(16, 16, 0, 0) +f16tof32 r20.w, r18.z +f16tof32 r20.x, r19.x +ld_structured r21.xyzw, r3.z, r17.x, g0.xyzw +and r22.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r23.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r20.y, r22.x +f16tof32 r20.z, r23.x +ishl r0.w, r3.y, l(2) +iadd r0.w, r0.w, l(-4) +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.x, r17.w +f16tof32 r24.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.z, r17.w +f16tof32 r24.w, r3.y +f16tof32 r18.x, r18.w +f16tof32 r18.y, r19.y +f16tof32 r18.z, r22.y +f16tof32 r18.w, r23.y +ld_structured r19.xyz, r0.z, r17.x, g0.xyzx +ushr r25.xyz, r19.xyzx, l(16, 16, 16, 0) +f16tof32 r25.xyz, r25.zxyz +ld_structured r26.xyz, r3.w, r17.x, g0.xyzx +and r27.xyz, r26.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r27.xyw, r27.xyxz +mov r9.xy {min16f}, r5.ywyy {min16f} +mov r9.z {min16f}, r8.y {min16f} +mul r5.xyzw {min16f}, r9.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r5.xyzw, r5.xyzw {min16f} +ubfe r9.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r5.xyzw +utof r9.xyzw {min16f}, r9.xyzw +mad_sat r9.xyzw, r9.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r28.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r5.xyzw +utof r28.xyzw {min16f}, r28.xyzw +mad_sat r28.xyzw, r28.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r29.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r5.xyzw +utof r29.xyzw {min16f}, r29.xyzw +mad_sat r29.xyzw, r29.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r5.xyzw, r5.xyzw, l(3, 3, 3, 3) +utof r5.xyzw {min16f}, r5.xyzw +mad_sat r5.xyzw, r5.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r30.x, r25.y +mov r30.yzw, r20.wwxy +mul r30.xyzw {min16f}, r9.xyzw {def32 as min16f}, r30.xyzw {def32 as min16f} +mad r30.xyzw {min16f}, r20.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r30.xyzw {min16f} +add r31.xyzw {min16f}, r9.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r20.w, r27.x +mad r20.xyzw {min16f}, r20.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r30.xyzw {min16f} +add r30.xyzw {min16f}, r28.xyzw {def32 as min16f}, r31.xyzw {min16f} +mad r20.xyzw {min16f}, r24.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r24.xyzw {min16f}, r29.xyzw {def32 as min16f}, r30.xyzw {min16f} +mad r18.xyzw {min16f}, r18.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r20.xyzw {min16f} +add r20.xyzw {min16f}, r5.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r18.xyzw {min16f}, r18.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r18.xyzw, r18.xyzw {min16f} +imad r19.xw, r18.yyyw, l(0x00010000, 0, 0, 0x00010000), r18.xxxz +store_structured g1.x, r3.x, r17.x, r19.x +store_structured g1.x, r3.z, r17.x, r19.w +imad r18.xyzw, l(2, 3, 2, 3), vThreadIDInGroup.xyxy, l(1, 2, 1, 3) +ld_structured r32.xyz, r18.x, r17.y, g0.xyzx +and r33.xyz, r32.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +ushr r34.xyz, r32.xyzx, l(16, 16, 16, 0) +f16tof32 r24.w, r33.x +f16tof32 r24.x, r34.x +ld_structured r19.xw, r3.z, r17.y, g0.xxxy +and r21.xy, r19.xwxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r22.xy, r19.xwxx, l(16, 16, 0, 0) +f16tof32 r24.y, r21.x +f16tof32 r24.z, r22.x +ishl r23.xy, r18.ywyy, l(2, 2, 0, 0) +iadd r23.xy, r23.xyxx, l(-4, -4, 0, 0) +ld_structured r3.y, r18.x, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r30.x, r17.w +f16tof32 r30.y, r3.y +ld_structured r3.y, r3.z, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r30.z, r17.w +f16tof32 r30.w, r3.y +f16tof32 r31.x, r33.y +f16tof32 r31.y, r34.y +f16tof32 r31.z, r21.y +f16tof32 r31.w, r22.y +mov r13.x {min16f}, r8.w {min16f} +mov r13.yz {min16f}, r11.yywy {min16f} +mul r8.xyzw {min16f}, r13.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r8.xyzw, r8.xyzw {min16f} +ubfe r11.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r8.xyzw +utof r11.xyzw {min16f}, r11.xyzw +mad_sat r11.xyzw, r11.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r13.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r8.xyzw +utof r13.xyzw {min16f}, r13.xyzw +mad_sat r13.xyzw, r13.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r35.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r8.xyzw +utof r35.xyzw {min16f}, r35.xyzw +mad_sat r35.xyzw, r35.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r8.xyzw, r8.xyzw, l(3, 3, 3, 3) +utof r8.xyzw {min16f}, r8.xyzw +mad_sat r8.xyzw, r8.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r36.x, r25.z +mov r36.yzw, r24.wwxy +mul r36.xyzw {min16f}, r11.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r36.xyzw {min16f}, r24.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r36.xyzw {min16f} +add r37.xyzw {min16f}, r11.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r24.w, r27.y +mad r24.xyzw {min16f}, r24.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r36.xyzw {min16f} +add r36.xyzw {min16f}, r13.xyzw {def32 as min16f}, r37.xyzw {min16f} +mad r24.xyzw {min16f}, r30.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r24.xyzw {min16f} +add r30.xyzw {min16f}, r35.xyzw {def32 as min16f}, r36.xyzw {min16f} +mad r24.xyzw {min16f}, r31.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r24.xyzw {min16f} +add r30.xyzw {min16f}, r8.xyzw {def32 as min16f}, r30.xyzw {min16f} +div r24.xyzw {min16f}, r24.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r24.xyzw, r24.xyzw {min16f} +imad r19.xy, r24.ywyy, l(0x00010000, 0x00010000, 0, 0), r24.xzxx +store_structured g1.x, r18.x, r17.y, r19.x +store_structured g1.x, r3.z, r17.y, r19.y +ld_structured r3.y, r18.z, r17.z, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r24.x, r17.w +f16tof32 r24.y, r3.y +f16tof32 r24.z, r22.z +f16tof32 r24.w, r23.z +ld_structured r3.y, r18.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r31.x, r17.w +f16tof32 r31.y, r3.y +ld_structured r3.y, r3.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r31.z, r17.w +f16tof32 r31.w, r3.y +f16tof32 r32.x, r33.z +f16tof32 r32.y, r34.z +f16tof32 r32.z, r22.w +f16tof32 r32.w, r23.w +mov r15.xy {min16f}, r14.ywyy {min16f} +mov r15.z {min16f}, r16.y {min16f} +mul r14.xyzw {min16f}, r15.xyzw {min16f}, l(255.500000, 255.500000, 255.500000, 255.500000) {def32 as min16f} +ftou r14.xyzw, r14.xyzw {min16f} +ubfe r15.xyzw, l(2, 2, 2, 2), l(6, 6, 6, 6), r14.xyzw +utof r15.xyzw {min16f}, r15.xyzw +mad_sat r15.xyzw, r15.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r16.xyzw, l(2, 2, 2, 2), l(4, 4, 4, 4), r14.xyzw +utof r16.xyzw {min16f}, r16.xyzw +mad_sat r16.xyzw, r16.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +ubfe r19.xyzw, l(2, 2, 2, 2), l(2, 2, 2, 2), r14.xyzw +utof r19.xyzw {min16f}, r19.xyzw +mad_sat r19.xyzw, r19.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +and r14.xyzw, r14.xyzw, l(3, 3, 3, 3) +utof r14.xyzw {min16f}, r14.xyzw +mad_sat r14.xyzw, r14.xyzw {min16f as def32}, l(0.333333, 0.333333, 0.333333, 0.333333), cb0[6].xxxx +mov r25.yzw, r24.xxyz +mul r21.xyzw {min16f}, r15.xyzw {def32 as min16f}, r25.xyzw {def32 as min16f} +mad r21.xyzw {min16f}, r24.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r15.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f} +mov r27.xyz, r24.yzwy +mad r21.xyzw {min16f}, r27.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r16.xyzw {def32 as min16f}, r22.xyzw {min16f} +mad r21.xyzw {min16f}, r31.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r19.xyzw {def32 as min16f}, r22.xyzw {min16f} +mad r21.xyzw {min16f}, r32.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r21.xyzw {min16f} +add r22.xyzw {min16f}, r14.xyzw {def32 as min16f}, r22.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g1.x, r18.z, r17.z, r23.z +store_structured g1.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r40.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r40.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g0.x, r3.x, r17.x, r23.z +store_structured g0.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g1.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g1.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g0.x, r18.x, r17.y, r25.x +store_structured g0.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g0.x, r18.z, r17.z, r23.z +store_structured g0.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g0.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g0.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g0.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g0.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g1.x, r3.x, r17.x, r23.z +store_structured g1.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g0.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g0.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g1.x, r18.x, r17.y, r25.x +store_structured g1.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g1.x, r18.z, r17.z, r23.z +store_structured g1.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g0.x, r3.x, r17.x, r23.z +store_structured g0.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g1.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g1.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g0.x, r18.x, r17.y, r25.x +store_structured g0.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g0.x, r18.z, r17.z, r23.z +store_structured g0.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g0.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g0.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g0.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g0.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g1.x, r3.x, r17.x, r23.z +store_structured g1.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g0.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g0.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g1.x, r18.x, r17.y, r25.x +store_structured g1.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g1.x, r18.z, r17.z, r23.z +store_structured g1.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g0.x, r3.x, r17.x, r23.z +store_structured g0.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g1.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g1.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g0.x, r18.x, r17.y, r25.x +store_structured g0.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g0.x, r18.z, r17.z, r23.z +store_structured g0.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g0.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g0.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r0.w, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g0.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g0.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r40.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r40.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r40.xyzw {min16f} +mov r26.w, r37.x +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r40.xyzw {min16f} +mad r26.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r23.zw, r26.yyyw, l(0, 0, 0x00010000, 0x00010000), r26.xxxz +store_structured g1.x, r3.x, r17.x, r23.z +store_structured g1.x, r3.z, r17.x, r23.w +ld_structured r23.zw, r18.x, r17.y, g0.xxxy +and r25.xy, r23.zwzz, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r27.xy, r23.zwzz, l(16, 16, 0, 0) +f16tof32 r26.w, r25.x +f16tof32 r26.x, r27.x +ld_structured r32.xy, r3.z, r17.y, g0.xyxx +and r33.xy, r32.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.zw, r32.xxxy, l(0, 0, 16, 16) +f16tof32 r26.yz, r33.xxzx +ld_structured r3.y, r18.x, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.x, r17.w +f16tof32 r34.y, r3.y +ld_structured r3.y, r3.z, r23.x, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r34.z, r17.w +f16tof32 r34.w, r3.y +f16tof32 r40.x, r24.z +f16tof32 r40.y, r25.z +f16tof32 r40.z, r31.z +f16tof32 r40.w, r32.z +mov r41.x, r36.z +mov r41.yzw, r26.wwxy +mul r41.xyzw {min16f}, r11.xyzw {def32 as min16f}, r41.xyzw {def32 as min16f} +mad r41.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r41.xyzw {min16f} +mov r26.w, r37.y +mad r26.xyzw {min16f}, r26.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r41.xyzw {min16f} +mad r26.xyzw {min16f}, r34.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r26.xyzw {min16f} +mad r26.xyzw {min16f}, r40.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r26.xyzw {min16f} +div r26.xyzw {min16f}, r26.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r26.xyzw, r26.xyzw {min16f} +imad r25.xz, r26.yywy, l(0x00010000, 0, 0x00010000, 0), r26.xxzx +store_structured g1.x, r18.x, r17.y, r25.x +store_structured g1.x, r3.z, r17.y, r25.z +f16tof32 r26.x, r25.y +f16tof32 r26.y, r27.y +f16tof32 r26.zw, r33.yyyw +ld_structured r3.y, r18.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r3.y, r3.z, r23.y, g0.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.z, r17.w +f16tof32 r33.w, r3.y +f16tof32 r21.x, r24.w +f16tof32 r21.y, r25.w +f16tof32 r21.z, r31.w +f16tof32 r21.w, r32.w +mov r36.yzw, r26.xxyz +mul r24.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r24.xyzw {min16f}, r26.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r24.xyzw {min16f} +mov r37.xyz, r26.yzwy +mad r24.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r24.xyzw {min16f}, r33.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r24.xyzw {min16f} +mad r21.xyzw {min16f}, r21.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r24.xyzw {min16f} +div r21.xyzw {min16f}, r21.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r21.xyzw, r21.xyzw {min16f} +imad r23.zw, r21.yyyw, l(0, 0, 0x00010000, 0x00010000), r21.xxxz +store_structured g1.x, r18.z, r17.z, r23.z +store_structured g1.x, r3.z, r17.z, r23.w +sync_g_t +ld_structured r21.xyzw, r3.x, r17.x, g1.xyzw +and r24.xyzw, r21.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r25.xyzw, r21.xyzw, l(16, 16, 16, 16) +f16tof32 r26.w, r24.x +f16tof32 r26.x, r25.x +ld_structured r27.xyzw, r3.z, r17.x, g1.xyzw +and r31.xyzw, r27.xyzw, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff) +ushr r32.xyzw, r27.xyzw, l(16, 16, 16, 16) +f16tof32 r26.y, r31.x +f16tof32 r26.z, r32.x +ld_structured r3.y, r3.x, r0.w, g1.xxxx +and r17.w, r3.y, l(0x0000ffff) +ushr r3.y, r3.y, l(16) +f16tof32 r33.x, r17.w +f16tof32 r33.y, r3.y +ld_structured r0.w, r3.z, r0.w, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r33.z, r3.y +f16tof32 r33.w, r0.w +f16tof32 r34.x, r24.y +f16tof32 r34.y, r25.y +f16tof32 r34.z, r31.y +f16tof32 r34.w, r32.y +ld_structured r38.xyz, r0.z, r17.x, g1.xyzx +ushr r39.xyz, r38.xyzx, l(16, 16, 16, 0) +f16tof32 r36.xyz, r39.zxyz +ld_structured r39.xyz, r3.w, r17.x, g1.xyzx +and r42.xyz, r39.xyzx, l(0x0000ffff, 0x0000ffff, 0x0000ffff, 0) +f16tof32 r37.xyw, r42.xyxz +mov r40.x, r36.y +mov r40.yzw, r26.wwxy +mul r9.xyzw {min16f}, r9.xyzw {def32 as min16f}, r40.xyzw {def32 as min16f} +mad r9.xyzw {min16f}, r26.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r9.xyzw {min16f} +mov r26.w, r37.x +mad r9.xyzw {min16f}, r26.xyzw {def32 as min16f}, r28.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r9.xyzw {min16f}, r33.xyzw {def32 as min16f}, r29.xyzw {def32 as min16f}, r9.xyzw {min16f} +mad r5.xyzw {min16f}, r34.xyzw {def32 as min16f}, r5.xyzw {def32 as min16f}, r9.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r20.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r3.x, r17.x, r3.y +store_structured g0.x, r3.z, r17.x, r3.w +ld_structured r3.yw, r18.x, r17.y, g1.xxxy +and r23.zw, r3.yyyw, l(0, 0, 0x0000ffff, 0x0000ffff) +ushr r25.xy, r3.ywyy, l(16, 16, 0, 0) +f16tof32 r5.w, r23.z +f16tof32 r5.x, r25.x +ld_structured r27.xy, r3.z, r17.y, g1.xyxx +and r32.xy, r27.xyxx, l(0x0000ffff, 0x0000ffff, 0, 0) +ushr r33.xy, r27.xyxx, l(16, 16, 0, 0) +f16tof32 r5.y, r32.x +f16tof32 r5.z, r33.x +ld_structured r0.w, r18.x, r23.x, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r9.x, r3.y +f16tof32 r9.y, r0.w +ld_structured r0.w, r3.z, r23.x, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r9.z, r3.y +f16tof32 r9.w, r0.w +f16tof32 r20.x, r24.z +f16tof32 r20.y, r25.z +f16tof32 r20.z, r31.z +f16tof32 r20.w, r32.z +mov r26.x, r36.z +mov r26.yzw, r5.wwxy +mul r11.xyzw {min16f}, r11.xyzw {def32 as min16f}, r26.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.wxyz {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r5.w, r37.y +mad r5.xyzw {min16f}, r5.xyzw {def32 as min16f}, r13.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r35.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r20.xyzw {def32 as min16f}, r8.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r30.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r23.xz, r5.yywy, l(0x00010000, 0, 0x00010000, 0), r5.xxzx +store_structured g0.x, r18.x, r17.y, r23.x +store_structured g0.x, r3.z, r17.y, r23.z +f16tof32 r5.x, r23.w +f16tof32 r5.y, r25.y +f16tof32 r5.z, r32.y +f16tof32 r5.w, r33.y +ld_structured r0.w, r18.z, r23.y, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r8.x, r3.y +f16tof32 r8.y, r0.w +ld_structured r0.w, r3.z, r23.y, g1.xxxx +and r3.y, r0.w, l(0x0000ffff) +ushr r0.w, r0.w, l(16) +f16tof32 r8.z, r3.y +f16tof32 r8.w, r0.w +f16tof32 r9.x, r24.w +f16tof32 r9.y, r25.w +f16tof32 r9.z, r31.w +f16tof32 r9.w, r32.w +mov r36.yzw, r5.xxyz +mul r11.xyzw {min16f}, r15.xyzw {def32 as min16f}, r36.xyzw {def32 as min16f} +mad r11.xyzw {min16f}, r5.xyzw {def32 as min16f}, l(0.500000, 0.500000, 0.500000, 0.500000) {def32 as min16f}, r11.xyzw {min16f} +mov r37.xyz, r5.yzwy +mad r5.xyzw {min16f}, r37.xyzw {def32 as min16f}, r16.xyzw {def32 as min16f}, r11.xyzw {min16f} +mad r5.xyzw {min16f}, r8.xyzw {def32 as min16f}, r19.xyzw {def32 as min16f}, r5.xyzw {min16f} +mad r5.xyzw {min16f}, r9.xyzw {def32 as min16f}, r14.xyzw {def32 as min16f}, r5.xyzw {min16f} +div r5.xyzw {min16f}, r5.xyzw {min16f}, r22.xyzw {min16f} +f32tof16 r5.xyzw, r5.xyzw {min16f} +imad r3.yw, r5.yyyw, l(0, 0x00010000, 0, 0x00010000), r5.xxxz +store_structured g0.x, r18.z, r17.z, r3.y +store_structured g0.x, r3.z, r17.z, r3.w +sync_g_t +uge r0.x, r0.y, l(8) +ult r0.y, r0.y, l(40) +and r0.x, r0.y, r0.x +if_nz r0.x + ld_structured r0.x, r3.x, r17.x, g0.xxxx + ld_structured r0.y, r3.z, r17.x, g0.xxxx + uge r0.z, vThreadIDInGroup.x, l(2) + ult r0.w, vThreadIDInGroup.x, l(14) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.x, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r2.xyyy, r0.zzzz + endif + imad r0.z, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.z, l(8) + ult r2.x, r0.z, l(56) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.x, r0.x, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r6.xyyy, r0.xxxx + endif + iadd r0.x, r0.z, l(1) + uge r0.z, r0.x, l(8) + ult r0.w, r0.x, l(56) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.y, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r6.zwww, r0.zzzz + endif + or r0.x, r0.x, l(3) + uge r0.z, r0.x, l(8) + ult r0.x, r0.x, l(56) + and r0.x, r0.x, r0.z + if_nz r0.x + ushr r0.x, r0.y, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r7.xyzw, r0.xxxx + endif +endif +imad r0.xy, l(3, 3, 0, 0), vThreadIDInGroup.yyyy, l(1, 2, 0, 0) +uge r0.zw, r0.xxxy, l(0, 0, 8, 8) +ult r0.xy, r0.xyxx, l(40, 40, 0, 0) +and r0.xy, r0.xyxx, r0.zwzz +if_nz r0.x + ld_structured r0.x, r3.x, r17.y, g0.xxxx + ld_structured r0.z, r3.z, r17.y, g0.xxxx + uge r0.w, vThreadIDInGroup.x, l(2) + ult r2.x, vThreadIDInGroup.x, l(14) + and r0.w, r0.w, r2.x + if_nz r0.w + and r0.w, r0.x, l(0x0000ffff) + f16tof32 r0.w, r0.w + store_uav_typed u0.xyzw, r2.zwww, r0.wwww + endif + imad r0.w, vThreadIDInGroup.x, l(4), l(1) + uge r2.x, r0.w, l(8) + ult r2.y, r0.w, l(56) + and r2.x, r2.y, r2.x + if_nz r2.x + ushr r0.x, r0.x, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r4.xyyy, r0.xxxx + endif + iadd r0.x, r0.w, l(1) + uge r0.w, r0.x, l(8) + ult r2.x, r0.x, l(56) + and r0.w, r0.w, r2.x + if_nz r0.w + and r0.w, r0.z, l(0x0000ffff) + f16tof32 r0.w, r0.w + store_uav_typed u0.xyzw, r4.zwww, r0.wwww + endif + or r0.x, r0.x, l(3) + uge r0.w, r0.x, l(8) + ult r0.x, r0.x, l(56) + and r0.x, r0.x, r0.w + if_nz r0.x + ushr r0.x, r0.z, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r10.xyyy, r0.xxxx + endif +endif +if_nz r0.y + ld_structured r0.x, r3.x, r17.z, g0.xxxx + ld_structured r0.y, r3.z, r17.z, g0.xxxx + uge r0.z, vThreadIDInGroup.x, l(2) + ult r0.w, vThreadIDInGroup.x, l(14) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.x, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r10.zwww, r0.zzzz + endif + imad r0.z, vThreadIDInGroup.x, l(4), l(1) + uge r0.w, r0.z, l(8) + ult r2.x, r0.z, l(56) + and r0.w, r0.w, r2.x + if_nz r0.w + ushr r0.x, r0.x, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r12.xyyy, r0.xxxx + endif + iadd r0.x, r0.z, l(1) + uge r0.z, r0.x, l(8) + ult r0.w, r0.x, l(56) + and r0.z, r0.w, r0.z + if_nz r0.z + and r0.z, r0.y, l(0x0000ffff) + f16tof32 r0.z, r0.z + store_uav_typed u0.xyzw, r12.zwww, r0.zzzz + endif + or r0.x, r0.x, l(3) + uge r0.z, r0.x, l(8) + ult r0.x, r0.x, l(56) + and r0.x, r0.x, r0.z + if_nz r0.x + ushr r0.x, r0.y, l(16) + f16tof32 r0.x, r0.x + store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx + endif +endif +ret +// Approximately 1139 instruction slots used +#endif + +const BYTE CSEdgeSensitiveBlur8DXIL[] = +{ + 68, 88, 66, 67, 46, 176, + 62, 63, 9, 83, 192, 226, + 41, 110, 30, 72, 187, 140, + 172, 2, 1, 0, 0, 0, + 32, 144, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 116, 143, 0, 0, 132, 143, + 0, 0, 82, 68, 69, 70, + 88, 8, 0, 0, 1, 0, + 0, 0, 0, 1, 0, 0, + 4, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 48, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 188, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 209, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 221, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 234, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 66, + 108, 117, 114, 73, 110, 112, + 117, 116, 0, 103, 95, 66, + 108, 117, 114, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 234, 0, 0, 0, + 1, 0, 0, 0, 24, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 12, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 111, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 2, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 47, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 132, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 230, 5, 0, 0, + 93, 1, 0, 0, 120, 1, + 0, 0, 0, 0, 0, 0, + 156, 1, 0, 0, 120, 1, + 0, 0, 8, 0, 0, 0, + 173, 1, 0, 0, 120, 1, + 0, 0, 16, 0, 0, 0, + 186, 1, 0, 0, 120, 1, + 0, 0, 24, 0, 0, 0, + 199, 1, 0, 0, 120, 1, + 0, 0, 32, 0, 0, 0, + 222, 1, 0, 0, 120, 1, + 0, 0, 40, 0, 0, 0, + 245, 1, 0, 0, 8, 2, + 0, 0, 48, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 52, 0, 0, 0, + 65, 2, 0, 0, 8, 2, + 0, 0, 56, 0, 0, 0, + 81, 2, 0, 0, 8, 2, + 0, 0, 60, 0, 0, 0, + 99, 2, 0, 0, 8, 2, + 0, 0, 64, 0, 0, 0, + 116, 2, 0, 0, 8, 2, + 0, 0, 68, 0, 0, 0, + 133, 2, 0, 0, 8, 2, + 0, 0, 72, 0, 0, 0, + 161, 2, 0, 0, 8, 2, + 0, 0, 76, 0, 0, 0, + 194, 2, 0, 0, 8, 2, + 0, 0, 80, 0, 0, 0, + 218, 2, 0, 0, 8, 2, + 0, 0, 84, 0, 0, 0, + 237, 2, 0, 0, 8, 2, + 0, 0, 88, 0, 0, 0, + 255, 2, 0, 0, 8, 2, + 0, 0, 92, 0, 0, 0, + 24, 3, 0, 0, 8, 2, + 0, 0, 96, 0, 0, 0, + 37, 3, 0, 0, 52, 3, + 0, 0, 100, 0, 0, 0, + 88, 3, 0, 0, 8, 2, + 0, 0, 104, 0, 0, 0, + 110, 3, 0, 0, 8, 2, + 0, 0, 108, 0, 0, 0, + 143, 3, 0, 0, 176, 3, + 0, 0, 112, 0, 0, 0, + 212, 3, 0, 0, 8, 2, + 0, 0, 192, 0, 0, 0, + 229, 3, 0, 0, 8, 2, + 0, 0, 196, 0, 0, 0, + 246, 3, 0, 0, 8, 2, + 0, 0, 200, 0, 0, 0, + 7, 4, 0, 0, 8, 2, + 0, 0, 204, 0, 0, 0, + 14, 4, 0, 0, 120, 1, + 0, 0, 208, 0, 0, 0, + 35, 4, 0, 0, 120, 1, + 0, 0, 216, 0, 0, 0, + 63, 4, 0, 0, 120, 1, + 0, 0, 224, 0, 0, 0, + 85, 4, 0, 0, 120, 1, + 0, 0, 232, 0, 0, 0, + 114, 4, 0, 0, 140, 4, + 0, 0, 240, 0, 0, 0, + 176, 4, 0, 0, 120, 1, + 0, 0, 248, 0, 0, 0, + 199, 4, 0, 0, 120, 1, + 0, 0, 0, 1, 0, 0, + 222, 4, 0, 0, 120, 1, + 0, 0, 8, 1, 0, 0, + 252, 4, 0, 0, 120, 1, + 0, 0, 16, 1, 0, 0, + 20, 5, 0, 0, 120, 1, + 0, 0, 24, 1, 0, 0, + 51, 5, 0, 0, 120, 1, + 0, 0, 32, 1, 0, 0, + 86, 5, 0, 0, 120, 1, + 0, 0, 40, 1, 0, 0, + 128, 5, 0, 0, 120, 1, + 0, 0, 48, 1, 0, 0, + 159, 5, 0, 0, 120, 1, + 0, 0, 56, 1, 0, 0, + 200, 5, 0, 0, 240, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 20, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 78, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 180, 134, + 0, 0, 80, 0, 5, 0, + 173, 33, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 14, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 16, 2, 0, 95, 0, + 0, 2, 50, 32, 2, 0, + 104, 0, 0, 2, 43, 0, + 0, 0, 160, 0, 0, 5, + 0, 240, 17, 0, 0, 0, + 0, 0, 200, 0, 0, 0, + 34, 0, 0, 0, 160, 0, + 0, 5, 0, 240, 17, 0, + 1, 0, 0, 0, 200, 0, + 0, 0, 34, 0, 0, 0, + 155, 0, 0, 4, 16, 0, + 0, 0, 16, 0, 0, 0, + 1, 0, 0, 0, 38, 0, + 0, 10, 0, 208, 0, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 36, 2, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 35, 0, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 21, 2, 0, + 2, 64, 0, 0, 48, 0, + 0, 0, 32, 0, 0, 0, + 32, 0, 0, 0, 32, 0, + 0, 0, 70, 5, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 2, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 248, 255, + 255, 255, 248, 255, 255, 255, + 248, 255, 255, 255, 249, 255, + 255, 255, 35, 0, 0, 14, + 242, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 3, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 70, 32, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 6, 0, + 0, 0, 70, 4, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 7, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 230, 10, + 16, 0, 7, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 5, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 4, 0, 0, 0, 198, 0, + 16, 0, 7, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 4, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 0, 4, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 146, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 134, 119, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 194, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 230, 10, 16, 0, + 4, 0, 0, 0, 230, 116, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 4, 0, 0, 0, 198, 12, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 249, 255, + 255, 255, 249, 255, 255, 255, + 250, 255, 255, 255, 249, 255, + 255, 255, 43, 0, 0, 5, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 0, + 16, 0, 10, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 230, 10, 16, 0, 10, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 10, 0, + 0, 0, 198, 12, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 251, 255, 255, 255, + 249, 255, 255, 255, 248, 255, + 255, 255, 250, 255, 255, 255, + 43, 0, 0, 5, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 12, 0, + 0, 0, 70, 14, 16, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 14, 16, 0, 12, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 146, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 0, 16, 0, + 12, 0, 0, 0, 134, 119, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 50, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 230, 10, + 16, 0, 12, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 242, 0, + 16, 0, 12, 0, 0, 0, + 198, 12, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 249, 255, 255, 255, 250, 255, + 255, 255, 250, 255, 255, 255, + 250, 255, 255, 255, 43, 0, + 0, 5, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 72, 0, 0, 142, 194, 0, + 0, 128, 67, 85, 21, 0, + 194, 0, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 15, 0, + 0, 0, 230, 116, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 194, 0, 0, 128, 67, 85, + 21, 0, 50, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 230, 10, 16, 0, + 15, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 251, 255, + 255, 255, 250, 255, 255, 255, + 250, 255, 255, 255, 250, 255, + 255, 255, 43, 0, 0, 5, + 50, 0, 16, 0, 15, 0, + 0, 0, 198, 0, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 10, 50, 0, 16, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 15, 0, + 0, 0, 70, 0, 16, 0, + 15, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 142, 194, 0, 0, 128, + 67, 85, 21, 0, 146, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 70, 0, + 16, 0, 15, 0, 0, 0, + 134, 119, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 17, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 4, 0, + 0, 0, 8, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 130, 0, 0, 6, + 130, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 35, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 50, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 19, 0, 0, 0, 70, 0, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 20, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 19, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 23, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 20, 0, + 0, 0, 10, 0, 16, 0, + 22, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 41, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 30, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 252, 255, + 255, 255, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 24, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 24, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 24, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 24, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 18, 0, + 0, 0, 58, 0, 16, 0, + 18, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 19, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 22, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 19, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 25, 0, 0, 0, 70, 2, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 114, 0, 16, 0, 25, 0, + 0, 0, 38, 9, 16, 0, + 25, 0, 0, 0, 167, 0, + 0, 9, 114, 0, 16, 0, + 26, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 70, 242, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 114, 0, 16, 0, + 27, 0, 0, 0, 70, 2, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 178, 0, 16, 0, 27, 0, + 0, 0, 70, 8, 16, 0, + 27, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 28, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 28, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 28, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 29, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 29, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 29, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 30, 0, + 0, 0, 246, 4, 16, 0, + 20, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 30, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 54, 9, + 16, 0, 20, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 20, 0, 0, 0, 10, 0, + 16, 0, 27, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 31, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 70, 14, 16, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 18, 0, + 0, 0, 70, 14, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 18, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 18, 0, 0, 0, 35, 0, + 0, 12, 146, 0, 16, 0, + 19, 0, 0, 0, 86, 13, + 16, 0, 18, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 18, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 19, 0, 0, 0, 35, 0, + 0, 14, 242, 0, 16, 0, + 18, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 3, 0, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 70, 36, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 114, 0, + 16, 0, 32, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 70, 242, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 114, 0, + 16, 0, 33, 0, 0, 0, + 70, 2, 16, 0, 32, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 114, 0, 16, 0, + 34, 0, 0, 0, 70, 2, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 24, 0, + 0, 0, 10, 0, 16, 0, + 33, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 24, 0, 0, 0, 10, 0, + 16, 0, 34, 0, 0, 0, + 167, 0, 0, 9, 146, 0, + 16, 0, 19, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 6, 244, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 50, 0, + 16, 0, 21, 0, 0, 0, + 198, 0, 16, 0, 19, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85, 0, + 0, 10, 50, 0, 16, 0, + 22, 0, 0, 0, 198, 0, + 16, 0, 19, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 24, 0, + 0, 0, 10, 0, 16, 0, + 21, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 24, 0, 0, 0, 10, 0, + 16, 0, 22, 0, 0, 0, + 41, 0, 0, 10, 50, 0, + 16, 0, 23, 0, 0, 0, + 214, 5, 16, 0, 18, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 50, 0, 16, 0, + 23, 0, 0, 0, 70, 0, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 252, 255, + 255, 255, 252, 255, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 30, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 30, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 30, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 33, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 31, 0, 0, 0, 26, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 31, 0, 0, 0, + 26, 0, 16, 0, 21, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 31, 0, + 0, 0, 26, 0, 16, 0, + 22, 0, 0, 0, 54, 0, + 0, 7, 18, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 58, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 54, 0, 0, 7, + 98, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 86, 7, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 13, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 11, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 11, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 11, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 35, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 35, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 35, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 36, 0, 0, 0, + 42, 0, 16, 0, 25, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 246, 4, 16, 0, + 24, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 54, 9, + 16, 0, 24, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 37, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 54, 0, + 0, 5, 130, 0, 16, 0, + 24, 0, 0, 0, 26, 0, + 16, 0, 27, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 36, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 36, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 70, 14, 16, 0, + 35, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 36, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 31, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 70, 14, + 16, 0, 8, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 30, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 24, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 35, 0, + 0, 12, 50, 0, 16, 0, + 19, 0, 0, 0, 214, 5, + 16, 0, 24, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 16, 0, + 24, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 0, + 19, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 19, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 24, 0, 0, 0, + 58, 0, 16, 0, 17, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 24, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 24, 0, 0, 0, 42, 0, + 16, 0, 22, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 24, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 31, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 31, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 31, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 31, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 32, 0, + 0, 0, 42, 0, 16, 0, + 33, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 34, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 32, 0, 0, 0, + 58, 0, 16, 0, 22, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 32, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 15, 0, + 0, 0, 214, 5, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 54, 0, 0, 7, + 66, 0, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 16, 0, 0, 0, + 56, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 2, 64, + 0, 0, 0, 128, 127, 67, + 0, 128, 127, 67, 0, 128, + 127, 67, 0, 128, 127, 67, + 28, 0, 0, 6, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 14, 0, 0, 0, + 138, 0, 0, 15, 242, 0, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 6, 0, 0, 0, 6, 0, + 0, 0, 6, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 86, 0, 0, 6, 242, 0, + 16, 128, 1, 64, 0, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 50, 32, 0, 14, 242, 0, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 6, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 138, 0, 0, 15, + 242, 0, 16, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 86, 0, 0, 6, + 242, 0, 16, 128, 1, 64, + 0, 0, 16, 0, 0, 0, + 70, 14, 16, 0, 16, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 16, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 171, 170, 170, 62, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 138, 0, + 0, 15, 242, 0, 16, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 19, 0, + 0, 0, 70, 14, 16, 0, + 19, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 19, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 19, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 14, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 2, 64, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 86, 0, + 0, 6, 242, 0, 16, 128, + 1, 64, 0, 0, 14, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 14, 0, 0, 0, 2, 64, + 0, 0, 171, 170, 170, 62, + 171, 170, 170, 62, 171, 170, + 170, 62, 171, 170, 170, 62, + 6, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 25, 0, 0, 0, + 6, 9, 16, 0, 24, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 25, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 24, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 0, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 54, 0, 0, 5, + 114, 0, 16, 0, 27, 0, + 0, 0, 150, 7, 16, 0, + 24, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 27, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 70, 14, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 32, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 21, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 22, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 40, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 40, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 40, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 40, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 40, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 26, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 35, 0, + 0, 12, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 26, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 42, 0, 16, 0, + 23, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 23, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 25, 0, 0, 0, 230, 10, + 16, 0, 23, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 27, 0, + 0, 0, 230, 10, 16, 0, + 23, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 10, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 27, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 32, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 0, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 33, 0, 0, 0, 70, 0, + 16, 0, 32, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 194, 0, 16, 0, 33, 0, + 0, 0, 6, 4, 16, 0, + 32, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 98, 0, + 16, 0, 26, 0, 0, 0, + 6, 2, 16, 0, 33, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 23, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 58, 0, + 16, 0, 17, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 40, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 40, 0, 0, 0, + 42, 0, 16, 0, 31, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 40, 0, + 0, 0, 42, 0, 16, 0, + 32, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 41, 0, 0, 0, 42, 0, + 16, 0, 36, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 41, 0, 0, 0, + 246, 4, 16, 0, 26, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 70, 14, 16, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 41, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 41, 0, + 0, 0, 54, 9, 16, 0, + 26, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 41, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 37, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 41, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 35, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 26, 0, 0, 0, 70, 14, + 16, 0, 40, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 26, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 30, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 26, 0, 0, 0, + 35, 0, 0, 12, 82, 0, + 16, 0, 25, 0, 0, 0, + 86, 7, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 6, 2, + 16, 0, 26, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 17, 0, 0, 0, 42, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 26, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 26, 0, 16, 0, + 27, 0, 0, 0, 131, 0, + 0, 5, 194, 0, 16, 0, + 26, 0, 0, 0, 86, 13, + 16, 0, 33, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 23, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 21, 0, + 0, 0, 58, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 21, 0, 0, 0, 58, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 21, 0, 0, 0, + 58, 0, 16, 0, 32, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 36, 0, + 0, 0, 6, 9, 16, 0, + 26, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 36, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 54, 0, 0, 5, + 114, 0, 16, 0, 37, 0, + 0, 0, 150, 7, 16, 0, + 26, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 70, 14, 16, 0, + 37, 0, 0, 0, 70, 14, + 16, 0, 16, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 24, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 70, 14, + 16, 0, 33, 0, 0, 0, + 70, 14, 16, 0, 19, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 24, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 21, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 0, + 14, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 24, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 22, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 21, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 21, 0, + 0, 0, 35, 0, 0, 12, + 194, 0, 16, 0, 23, 0, + 0, 0, 86, 13, 16, 0, + 21, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 6, 8, 16, 0, 21, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 18, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 17, 0, 0, 0, + 58, 0, 16, 0, 23, 0, + 0, 0, 190, 24, 0, 1, + 167, 0, 0, 9, 242, 0, + 16, 0, 21, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 24, 0, 0, 0, + 70, 14, 16, 0, 21, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 25, 0, 0, 0, 70, 14, + 16, 0, 21, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 24, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 25, 0, 0, 0, + 167, 0, 0, 9, 242, 0, + 16, 0, 27, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 17, 0, 0, 0, 70, 254, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 10, 242, 0, + 16, 0, 31, 0, 0, 0, + 70, 14, 16, 0, 27, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 242, 0, 16, 0, + 32, 0, 0, 0, 70, 14, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 26, 0, + 0, 0, 10, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 32, 0, 0, 0, + 167, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 17, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 33, 0, + 0, 0, 58, 0, 16, 0, + 17, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 33, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 1, 0, 0, 0, + 1, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 33, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 33, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 24, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 34, 0, + 0, 0, 26, 0, 16, 0, + 25, 0, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 34, 0, 0, 0, 26, 0, + 16, 0, 31, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 34, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 38, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 85, 0, 0, 10, + 114, 0, 16, 0, 39, 0, + 0, 0, 70, 2, 16, 0, + 38, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 114, 0, + 16, 0, 36, 0, 0, 0, + 38, 9, 16, 0, 39, 0, + 0, 0, 167, 0, 0, 9, + 114, 0, 16, 0, 39, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 17, 0, 0, 0, + 70, 242, 17, 0, 1, 0, + 0, 0, 1, 0, 0, 10, + 114, 0, 16, 0, 42, 0, + 0, 0, 70, 2, 16, 0, + 39, 0, 0, 0, 2, 64, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 178, 0, + 16, 0, 37, 0, 0, 0, + 70, 8, 16, 0, 42, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 40, 0, + 0, 0, 26, 0, 16, 0, + 36, 0, 0, 0, 54, 0, + 0, 5, 226, 0, 16, 0, + 40, 0, 0, 0, 246, 4, + 16, 0, 26, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 40, 0, + 0, 0, 50, 0, 0, 14, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 54, 9, 16, 0, 26, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 26, 0, 0, 0, 10, 0, + 16, 0, 37, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 70, 14, 16, 0, 28, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 33, 0, + 0, 0, 70, 14, 16, 0, + 29, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 34, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 20, 0, 0, 0, 130, 0, + 0, 6, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 35, 0, + 0, 12, 162, 0, 16, 0, + 3, 0, 0, 0, 86, 13, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 6, 8, 16, 0, + 5, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 162, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 6, 244, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 194, 0, 16, 0, + 23, 0, 0, 0, 86, 13, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 255, 255, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 25, 0, + 0, 0, 214, 5, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 25, 0, 0, 0, 167, 0, + 0, 9, 50, 0, 16, 0, + 27, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 17, 0, + 0, 0, 70, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 10, 50, 0, 16, 0, + 32, 0, 0, 0, 70, 0, + 16, 0, 27, 0, 0, 0, + 2, 64, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 33, 0, + 0, 0, 70, 0, 16, 0, + 27, 0, 0, 0, 2, 64, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 33, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 18, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 20, 0, 0, 0, 42, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 20, 0, 0, 0, + 42, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 20, 0, + 0, 0, 42, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 20, 0, 0, 0, 42, 0, + 16, 0, 32, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 26, 0, 0, 0, + 42, 0, 16, 0, 36, 0, + 0, 0, 54, 0, 0, 5, + 226, 0, 16, 0, 26, 0, + 0, 0, 246, 4, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 8, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 26, 0, 0, 0, + 50, 0, 0, 14, 242, 0, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 54, 9, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 70, 14, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 37, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 35, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 20, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 30, 0, + 0, 0, 130, 0, 0, 6, + 242, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 35, 0, 0, 12, + 82, 0, 16, 0, 23, 0, + 0, 0, 86, 7, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 6, 2, 16, 0, 5, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 18, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 10, 0, 16, 0, 23, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 42, 0, 16, 0, 23, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 5, 0, + 0, 0, 58, 0, 16, 0, + 23, 0, 0, 0, 131, 0, + 0, 5, 34, 0, 16, 0, + 5, 0, 0, 0, 26, 0, + 16, 0, 25, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 5, 0, 0, 0, + 26, 0, 16, 0, 32, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 33, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 18, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 18, 0, + 16, 0, 8, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 34, 0, 16, 0, 8, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 23, 0, + 0, 0, 6, 240, 17, 0, + 1, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 85, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 16, 0, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 8, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 8, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 24, 0, 0, 0, + 131, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 25, 0, + 0, 0, 131, 0, 0, 5, + 66, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 31, 0, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 32, 0, 0, 0, + 54, 0, 0, 5, 226, 0, + 16, 0, 36, 0, 0, 0, + 6, 9, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 0, + 36, 0, 0, 0, 50, 0, + 0, 14, 242, 0, 16, 128, + 1, 64, 0, 0, 11, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 70, 14, 16, 128, 1, 64, + 0, 0, 11, 0, 0, 0, + 54, 0, 0, 5, 114, 0, + 16, 0, 37, 0, 0, 0, + 150, 7, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 37, 0, + 0, 0, 70, 14, 16, 0, + 16, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 11, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 19, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 14, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 14, 0, 0, 10, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 22, 0, 0, 0, + 130, 0, 0, 6, 242, 0, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 35, 0, 0, 12, 162, 0, + 16, 0, 3, 0, 0, 0, + 86, 13, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 18, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 17, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 190, 24, 0, 1, 80, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 8, 0, + 0, 0, 79, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 40, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 80, 0, + 0, 6, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 79, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 14, 0, 0, 0, 1, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 8, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 56, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 6, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 8, 0, 0, 0, 79, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 56, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 6, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 8, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 56, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 35, 0, 0, 14, 50, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 86, 37, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 6, 4, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 8, 0, 0, 0, + 79, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 40, 0, 0, 0, 40, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 17, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 80, 0, 0, 6, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 2, 0, + 0, 0, 79, 0, 0, 6, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 14, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 2, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 35, 0, 0, 8, + 130, 0, 16, 0, 0, 0, + 0, 0, 10, 32, 2, 0, + 1, 64, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 8, 0, + 0, 0, 79, 0, 0, 7, + 34, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 56, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 2, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 4, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 30, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 8, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 56, 0, 0, 0, + 1, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 31, 0, + 4, 3, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 0, 0, 131, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 60, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 80, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 8, 0, + 0, 0, 79, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 56, 0, 0, 0, + 1, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 31, 0, + 4, 3, 10, 0, 16, 0, + 0, 0, 0, 0, 85, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 16, 0, 10, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 21, 0, 0, 1, 31, 0, + 4, 3, 26, 0, 16, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 17, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 80, 0, + 0, 6, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 79, 0, + 0, 6, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 14, 0, 0, 0, 1, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 255, 255, 0, 0, + 131, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 10, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 35, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 32, + 2, 0, 1, 64, 0, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 8, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 56, 0, + 0, 0, 1, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 31, 0, 4, 3, 58, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 12, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 8, 0, 0, 0, 79, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 56, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 255, 255, 0, 0, 131, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 230, 15, 16, 0, 12, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 60, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 80, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 8, 0, 0, 0, 79, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 56, 0, + 0, 0, 1, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 4, 3, 10, 0, + 16, 0, 0, 0, 0, 0, + 85, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 21, 0, 0, 1, + 62, 0, 0, 1, 83, 70, + 73, 48, 8, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 83, 84, 65, 84, + 148, 0, 0, 0, 115, 4, + 0, 0, 43, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 185, 0, 0, 0, + 54, 0, 0, 0, 238, 0, + 0, 0, 1, 0, 0, 0, + 15, 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, 12, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 70, 0, 0, 0, + 0, 0, 0, 0, 22, 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, 9, 0, 0, 0, + 0, 0, 0, 0, 12, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOGenerateImportanceMap.h b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateImportanceMap.h new file mode 100644 index 0000000..1ffd716 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateImportanceMap.h @@ -0,0 +1,852 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_ImportanceFinalSSAO texture float2 2darray t0 1 +// g_ImportanceOut UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[14], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2darray (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 4 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +utof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[13].zwzz +mov r0.zw, l(0,0,0,1.000000) +gather4_indexable(texture2darray)(float,float,float,float) r1.xyzw, r0.xyzx, t0.xyzw, s0.x +gather4_indexable(texture2darray)(float,float,float,float) r2.xyzw, r0.xywx, t0.xyzw, s0.x +mad_sat r2.xyzw, -cb0[3].yyyy, r2.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000) +log r2.xyzw, r2.xyzw +mul r2.xyzw, r2.xyzw, cb0[3].zzzz +exp r2.xyzw, r2.xyzw +mad_sat r1.xyzw, -cb0[3].yyyy, r1.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000) +log r1.xyzw, r1.xyzw +mul r1.xyzw, r1.xyzw, cb0[3].zzzz +exp r1.xyzw, r1.xyzw +min r3.xy, r1.ywyy, r1.xzxx +max r1.xy, r1.ywyy, r1.xzxx +max r1.x, r1.y, r1.x +min r1.y, r3.y, r3.x +min r1.y, r1.y, l(1.000000) +min r1.zw, r2.yyyw, r2.xxxz +max r2.xy, r2.ywyy, r2.xzxx +max r2.x, r2.y, r2.x +max r1.x, r1.x, r2.x +min r1.z, r1.w, r1.z +min r1.y, r1.z, r1.y +mov r0.zw, l(0,0,2.000000,3.000000) +gather4_indexable(texture2darray)(float,float,float,float) r2.xyzw, r0.xyzx, t0.xyzw, s0.x +gather4_indexable(texture2darray)(float,float,float,float) r0.xyzw, r0.xywx, t0.xyzw, s0.x +mad_sat r0.xyzw, -cb0[3].yyyy, r0.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000) +log r0.xyzw, r0.xyzw +mul r0.xyzw, r0.xyzw, cb0[3].zzzz +exp r0.xyzw, r0.xyzw +mad_sat r2.xyzw, -cb0[3].yyyy, r2.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000) +log r2.xyzw, r2.xyzw +mul r2.xyzw, r2.xyzw, cb0[3].zzzz +exp r2.xyzw, r2.xyzw +min r1.zw, r2.yyyw, r2.xxxz +max r2.xy, r2.ywyy, r2.xzxx +max r2.x, r2.y, r2.x +max r1.x, r1.x, r2.x +min r1.z, r1.w, r1.z +min r1.y, r1.z, r1.y +min r1.zw, r0.yyyw, r0.xxxz +max r0.xy, r0.ywyy, r0.xzxx +max r0.x, r0.y, r0.x +max r0.x, r0.x, r1.x +min r0.y, r1.w, r1.z +min r0.y, r0.y, r1.y +add r0.x, -r0.y, r0.x +add_sat r0.x, r0.x, r0.x +log r0.x, r0.x +mul r0.x, r0.x, l(0.800000) +exp r0.x, r0.x +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xxxx +ret +// Approximately 56 instruction slots used +#endif + +const BYTE CSGenerateImportanceMapDXIL[] = +{ + 68, 88, 66, 67, 36, 88, + 65, 163, 153, 2, 4, 215, + 220, 152, 24, 195, 74, 65, + 248, 209, 1, 0, 0, 0, + 92, 16, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 160, 8, 0, 0, 176, 8, + 0, 0, 192, 8, 0, 0, + 192, 15, 0, 0, 82, 68, + 69, 70, 100, 8, 0, 0, + 1, 0, 0, 0, 12, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 60, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 208, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 230, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 246, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 67, 108, 97, + 109, 112, 83, 97, 109, 112, + 108, 101, 114, 0, 103, 95, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 70, 105, + 110, 97, 108, 83, 83, 65, + 79, 0, 103, 95, 73, 109, + 112, 111, 114, 116, 97, 110, + 99, 101, 79, 117, 116, 0, + 83, 83, 65, 79, 67, 111, + 110, 115, 116, 97, 110, 116, + 115, 66, 117, 102, 102, 101, + 114, 0, 171, 171, 246, 0, + 0, 0, 1, 0, 0, 0, + 36, 1, 0, 0, 128, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 76, 1, + 0, 0, 0, 0, 0, 0, + 128, 1, 0, 0, 2, 0, + 0, 0, 24, 8, 0, 0, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 103, 95, 67, 65, + 67, 65, 79, 67, 111, 110, + 115, 116, 115, 0, 67, 65, + 67, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 0, 68, 101, 112, 116, 104, + 85, 110, 112, 97, 99, 107, + 67, 111, 110, 115, 116, 115, + 0, 102, 108, 111, 97, 116, + 50, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 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, + 123, 1, 0, 0, 67, 97, + 109, 101, 114, 97, 84, 97, + 110, 72, 97, 108, 102, 70, + 79, 86, 0, 78, 68, 67, + 84, 111, 86, 105, 101, 119, + 77, 117, 108, 0, 78, 68, + 67, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 85, 86, + 84, 111, 86, 105, 101, 119, + 77, 117, 108, 0, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 85, 86, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 69, 102, 102, + 101, 99, 116, 82, 97, 100, + 105, 117, 115, 0, 102, 108, + 111, 97, 116, 0, 0, 0, + 3, 0, 1, 0, 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, + 14, 2, 0, 0, 69, 102, + 102, 101, 99, 116, 83, 104, + 97, 100, 111, 119, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 80, 111, 119, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 67, + 108, 97, 109, 112, 0, 69, + 102, 102, 101, 99, 116, 70, + 97, 100, 101, 79, 117, 116, + 77, 117, 108, 0, 69, 102, + 102, 101, 99, 116, 70, 97, + 100, 101, 79, 117, 116, 65, + 100, 100, 0, 69, 102, 102, + 101, 99, 116, 72, 111, 114, + 105, 122, 111, 110, 65, 110, + 103, 108, 101, 84, 104, 114, + 101, 115, 104, 111, 108, 100, + 0, 69, 102, 102, 101, 99, + 116, 83, 97, 109, 112, 108, + 105, 110, 103, 82, 97, 100, + 105, 117, 115, 78, 101, 97, + 114, 76, 105, 109, 105, 116, + 82, 101, 99, 0, 68, 101, + 112, 116, 104, 80, 114, 101, + 99, 105, 115, 105, 111, 110, + 79, 102, 102, 115, 101, 116, + 77, 111, 100, 0, 78, 101, + 103, 82, 101, 99, 69, 102, + 102, 101, 99, 116, 82, 97, + 100, 105, 117, 115, 0, 76, + 111, 97, 100, 67, 111, 117, + 110, 116, 101, 114, 65, 118, + 103, 68, 105, 118, 0, 65, + 100, 97, 112, 116, 105, 118, + 101, 83, 97, 109, 112, 108, + 101, 67, 111, 117, 110, 116, + 76, 105, 109, 105, 116, 0, + 73, 110, 118, 83, 104, 97, + 114, 112, 110, 101, 115, 115, + 0, 80, 97, 115, 115, 73, + 110, 100, 101, 120, 0, 105, + 110, 116, 0, 171, 0, 0, + 2, 0, 1, 0, 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, + 59, 3, 0, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 103, 109, 97, + 83, 113, 117, 97, 114, 101, + 100, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 109, 105, 108, 97, 114, + 105, 116, 121, 68, 105, 115, + 116, 97, 110, 99, 101, 83, + 105, 103, 109, 97, 0, 80, + 97, 116, 116, 101, 114, 110, + 82, 111, 116, 83, 99, 97, + 108, 101, 77, 97, 116, 114, + 105, 99, 101, 115, 0, 102, + 108, 111, 97, 116, 52, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 5, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 179, 3, + 0, 0, 78, 111, 114, 109, + 97, 108, 115, 85, 110, 112, + 97, 99, 107, 77, 117, 108, + 0, 78, 111, 114, 109, 97, + 108, 115, 85, 110, 112, 97, + 99, 107, 65, 100, 100, 0, + 68, 101, 116, 97, 105, 108, + 65, 79, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 68, + 117, 109, 109, 121, 48, 0, + 83, 83, 65, 79, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 83, 83, 65, + 79, 66, 117, 102, 102, 101, + 114, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 73, 110, + 118, 101, 114, 115, 101, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 79, 102, 102, + 115, 101, 116, 0, 105, 110, + 116, 50, 0, 171, 171, 171, + 1, 0, 2, 0, 1, 0, + 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, 144, 4, 0, 0, + 80, 101, 114, 80, 97, 115, + 115, 70, 117, 108, 108, 82, + 101, 115, 85, 86, 79, 102, + 102, 115, 101, 116, 0, 79, + 117, 116, 112, 117, 116, 66, + 117, 102, 102, 101, 114, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 79, 117, + 116, 112, 117, 116, 66, 117, + 102, 102, 101, 114, 73, 110, + 118, 101, 114, 115, 101, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 73, 109, + 112, 111, 114, 116, 97, 110, + 99, 101, 77, 97, 112, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 73, 109, + 112, 111, 114, 116, 97, 110, + 99, 101, 77, 97, 112, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 105, 110, 116, 101, 114, + 108, 101, 97, 118, 101, 100, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 68, 101, + 105, 110, 116, 101, 114, 108, + 101, 97, 118, 101, 100, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 73, 110, + 118, 101, 114, 115, 101, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 68, 101, + 105, 110, 116, 101, 114, 108, + 101, 97, 118, 101, 100, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 79, 102, + 102, 115, 101, 116, 0, 68, + 101, 105, 110, 116, 101, 114, + 108, 101, 97, 118, 101, 100, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 78, + 111, 114, 109, 97, 108, 105, + 115, 101, 100, 79, 102, 102, + 115, 101, 116, 0, 78, 111, + 114, 109, 97, 108, 115, 87, + 111, 114, 108, 100, 84, 111, + 86, 105, 101, 119, 115, 112, + 97, 99, 101, 77, 97, 116, + 114, 105, 120, 0, 102, 108, + 111, 97, 116, 52, 120, 52, + 0, 171, 3, 0, 3, 0, + 4, 0, 4, 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, 242, 5, + 0, 0, 105, 1, 0, 0, + 132, 1, 0, 0, 0, 0, + 0, 0, 168, 1, 0, 0, + 132, 1, 0, 0, 8, 0, + 0, 0, 185, 1, 0, 0, + 132, 1, 0, 0, 16, 0, + 0, 0, 198, 1, 0, 0, + 132, 1, 0, 0, 24, 0, + 0, 0, 211, 1, 0, 0, + 132, 1, 0, 0, 32, 0, + 0, 0, 234, 1, 0, 0, + 132, 1, 0, 0, 40, 0, + 0, 0, 1, 2, 0, 0, + 20, 2, 0, 0, 48, 0, + 0, 0, 56, 2, 0, 0, + 20, 2, 0, 0, 52, 0, + 0, 0, 77, 2, 0, 0, + 20, 2, 0, 0, 56, 0, + 0, 0, 93, 2, 0, 0, + 20, 2, 0, 0, 60, 0, + 0, 0, 111, 2, 0, 0, + 20, 2, 0, 0, 64, 0, + 0, 0, 128, 2, 0, 0, + 20, 2, 0, 0, 68, 0, + 0, 0, 145, 2, 0, 0, + 20, 2, 0, 0, 72, 0, + 0, 0, 173, 2, 0, 0, + 20, 2, 0, 0, 76, 0, + 0, 0, 206, 2, 0, 0, + 20, 2, 0, 0, 80, 0, + 0, 0, 230, 2, 0, 0, + 20, 2, 0, 0, 84, 0, + 0, 0, 249, 2, 0, 0, + 20, 2, 0, 0, 88, 0, + 0, 0, 11, 3, 0, 0, + 20, 2, 0, 0, 92, 0, + 0, 0, 36, 3, 0, 0, + 20, 2, 0, 0, 96, 0, + 0, 0, 49, 3, 0, 0, + 64, 3, 0, 0, 100, 0, + 0, 0, 100, 3, 0, 0, + 20, 2, 0, 0, 104, 0, + 0, 0, 122, 3, 0, 0, + 20, 2, 0, 0, 108, 0, + 0, 0, 155, 3, 0, 0, + 188, 3, 0, 0, 112, 0, + 0, 0, 224, 3, 0, 0, + 20, 2, 0, 0, 192, 0, + 0, 0, 241, 3, 0, 0, + 20, 2, 0, 0, 196, 0, + 0, 0, 2, 4, 0, 0, + 20, 2, 0, 0, 200, 0, + 0, 0, 19, 4, 0, 0, + 20, 2, 0, 0, 204, 0, + 0, 0, 26, 4, 0, 0, + 132, 1, 0, 0, 208, 0, + 0, 0, 47, 4, 0, 0, + 132, 1, 0, 0, 216, 0, + 0, 0, 75, 4, 0, 0, + 132, 1, 0, 0, 224, 0, + 0, 0, 97, 4, 0, 0, + 132, 1, 0, 0, 232, 0, + 0, 0, 126, 4, 0, 0, + 152, 4, 0, 0, 240, 0, + 0, 0, 188, 4, 0, 0, + 132, 1, 0, 0, 248, 0, + 0, 0, 211, 4, 0, 0, + 132, 1, 0, 0, 0, 1, + 0, 0, 234, 4, 0, 0, + 132, 1, 0, 0, 8, 1, + 0, 0, 8, 5, 0, 0, + 132, 1, 0, 0, 16, 1, + 0, 0, 32, 5, 0, 0, + 132, 1, 0, 0, 24, 1, + 0, 0, 63, 5, 0, 0, + 132, 1, 0, 0, 32, 1, + 0, 0, 98, 5, 0, 0, + 132, 1, 0, 0, 40, 1, + 0, 0, 140, 5, 0, 0, + 132, 1, 0, 0, 48, 1, + 0, 0, 171, 5, 0, 0, + 132, 1, 0, 0, 56, 1, + 0, 0, 212, 5, 0, 0, + 252, 5, 0, 0, 64, 1, + 0, 0, 5, 0, 0, 0, + 1, 0, 96, 0, 0, 0, + 42, 0, 32, 6, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 1, + 0, 0, 77, 105, 99, 114, + 111, 115, 111, 102, 116, 32, + 40, 82, 41, 32, 72, 76, + 83, 76, 32, 83, 104, 97, + 100, 101, 114, 32, 67, 111, + 109, 112, 105, 108, 101, 114, + 32, 49, 48, 46, 49, 0, + 73, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 79, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 83, 72, 69, 88, + 248, 6, 0, 0, 80, 0, + 5, 0, 190, 1, 0, 0, + 106, 8, 0, 1, 89, 0, + 0, 4, 70, 142, 32, 0, + 0, 0, 0, 0, 14, 0, + 0, 0, 90, 0, 0, 3, + 0, 96, 16, 0, 0, 0, + 0, 0, 88, 64, 0, 4, + 0, 112, 16, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 156, 24, 0, 4, 0, 224, + 17, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 95, 0, + 0, 2, 50, 0, 2, 0, + 104, 0, 0, 2, 4, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 8, 0, + 0, 0, 1, 0, 0, 0, + 41, 0, 0, 9, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 86, 0, 0, 5, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 128, 63, 109, 0, + 0, 139, 2, 2, 0, 128, + 67, 85, 21, 0, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 10, 96, + 16, 0, 0, 0, 0, 0, + 109, 0, 0, 139, 2, 2, + 0, 128, 67, 85, 21, 0, + 242, 0, 16, 0, 2, 0, + 0, 0, 70, 3, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 10, 96, 16, 0, 0, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 2, 0, + 0, 0, 86, 133, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 47, 0, + 0, 5, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 166, 138, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 25, 0, 0, 5, + 242, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 1, 0, 0, 0, 86, 133, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 47, 0, 0, 5, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 166, 138, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 25, 0, + 0, 5, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 51, 0, 0, 7, 50, 0, + 16, 0, 3, 0, 0, 0, + 214, 5, 16, 0, 1, 0, + 0, 0, 134, 0, 16, 0, + 1, 0, 0, 0, 52, 0, + 0, 7, 50, 0, 16, 0, + 1, 0, 0, 0, 214, 5, + 16, 0, 1, 0, 0, 0, + 134, 0, 16, 0, 1, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 51, 0, 0, 7, 34, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 51, 0, + 0, 7, 34, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 51, 0, 0, 7, + 194, 0, 16, 0, 1, 0, + 0, 0, 86, 13, 16, 0, + 2, 0, 0, 0, 6, 8, + 16, 0, 2, 0, 0, 0, + 52, 0, 0, 7, 50, 0, + 16, 0, 2, 0, 0, 0, + 214, 5, 16, 0, 2, 0, + 0, 0, 134, 0, 16, 0, + 2, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 51, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 51, 0, + 0, 7, 34, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64, + 0, 0, 64, 64, 109, 0, + 0, 139, 2, 2, 0, 128, + 67, 85, 21, 0, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 10, 96, + 16, 0, 0, 0, 0, 0, + 109, 0, 0, 139, 2, 2, + 0, 128, 67, 85, 21, 0, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 3, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 10, 96, 16, 0, 0, 0, + 0, 0, 50, 32, 0, 14, + 242, 0, 16, 0, 0, 0, + 0, 0, 86, 133, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 47, 0, + 0, 5, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 166, 138, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 25, 0, 0, 5, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 50, 32, + 0, 14, 242, 0, 16, 0, + 2, 0, 0, 0, 86, 133, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 47, 0, 0, 5, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 166, 138, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 25, 0, + 0, 5, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 51, 0, 0, 7, 194, 0, + 16, 0, 1, 0, 0, 0, + 86, 13, 16, 0, 2, 0, + 0, 0, 6, 8, 16, 0, + 2, 0, 0, 0, 52, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 214, 5, + 16, 0, 2, 0, 0, 0, + 134, 0, 16, 0, 2, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 26, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 51, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 51, 0, 0, 7, + 34, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 51, 0, 0, 7, 194, 0, + 16, 0, 1, 0, 0, 0, + 86, 13, 16, 0, 0, 0, + 0, 0, 6, 8, 16, 0, + 0, 0, 0, 0, 52, 0, + 0, 7, 50, 0, 16, 0, + 0, 0, 0, 0, 214, 5, + 16, 0, 0, 0, 0, 0, + 134, 0, 16, 0, 0, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 51, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 51, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 0, 32, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 47, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 205, 204, 76, 63, + 25, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 6, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 2, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 56, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 46, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 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, + 2, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 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, 1, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ0.h b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ0.h new file mode 100644 index 0000000..75285d7 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ0.h @@ -0,0 +1,1414 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_ViewspaceDepthTapSampler sampler NA NA s3 1 +// g_ViewspaceDepthSource texture float 2d t0 1 +// g_deinterlacedNormals texture float4 2darray t6 1 +// g_SSAOOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[20], dynamicIndexed +dcl_sampler s1, mode_default +dcl_sampler s3, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2darray (float,float,float,float) t6 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 7 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +mad r0.z, r0.y, l(2.000000), r0.x +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +ftou r0.z, r0.z +udiv null, r0.z, r0.z, l(5) +mad r1.xy, r0.xyxx, cb0[18].zwzz, cb0[19].zwzz +mul r0.xy, r0.xyxx, cb0[13].zwzz +mad r0.xy, cb0[1].xyxx, r0.xyxx, cb0[1].zwzz +gather4_aoffimmi_indexable(-1,-1,0)(texture2d)(float,float,float,float) r2.z, r1.xyxx, t0.xzyw, s1.x +mul r0.w, r2.z, cb0[1].x +mul r0.w, r0.w, cb0[13].z +mul r2.xy, r0.xyxx, r2.zzzz +dp3 r0.x, r2.xyzx, r2.xyzx +sqrt r0.x, r0.x +mul_sat r0.x, r0.x, cb0[4].w +mad r0.x, r0.x, l(0.800000), l(0.200000) +mul r0.x, r0.x, cb0[3].x +mul r0.y, r0.x, l(0.850000) +mul r0.x, r0.x, r0.x +div r0.x, l(-1.000000), r0.x +div r0.y, r0.y, r0.w +mul r3.xyzw, r0.yyyy, cb0[r0.z + 7].xyzw +dp2 r0.y, r3.xyxx, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r4.x, r0.y +dp2 r0.y, r3.zwzz, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r4.y, r0.y +mad r0.yz, -r4.xxyx, cb0[18].zzwz, r1.xxyx +mad r1.zw, r4.xxxy, cb0[18].zzzw, r1.xxxy +mad r4.xy, cb0[2].xyxx, r0.yzyy, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r0.w, r0.yzyy, t0.wyzx, s3, l(0.000000) +mul r0.yz, r0.wwww, r4.xxyx +mad r0.yzw, -r2.xxyz, cb0[5].xxxx, r0.yyzw +dp3 r2.w, r0.yzwy, r0.yzwy +sqrt r4.x, r2.w +mad r2.w, r2.w, r0.x, l(1.000000) +max r2.w, r2.w, l(0.000000) +mov r5.xy, vThreadID.xyxx +mov r5.z, cb0[6].y +mov r5.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r4.yzw, r5.xyzw, t6.wxyz +dp3 r0.y, r4.yzwy, r0.yzwy +div r0.y, r0.y, r4.x +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +mul r0.y, r2.w, r0.y +mul r0.y, r0.y, l(1.500000) +mad r0.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r5.xy, r0.zwzz, r5.zzzz +mad r5.xyz, -r2.xyzx, cb0[5].xxxx, r5.xyzx +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r0.w, r4.yzwy, r5.xyzx +sqrt r1.z, r0.z +mad r0.z, r0.z, r0.x, l(1.000000) +div r0.w, r0.w, r1.z +add r0.w, r0.w, -cb0[4].z +max r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.z, r0.z, r0.w +mad r0.y, r0.z, l(1.500000), r0.y +dp2 r0.z, r3.xyxx, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r5.x, r0.z +dp2 r0.z, r3.zwzz, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r5.y, r0.z +mad r0.zw, r5.xxxy, cb0[18].zzzw, r1.xxxy +mad r1.zw, -r5.xxxy, cb0[18].zzzw, r1.xxxy +mad r5.xy, cb0[2].xyxx, r0.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r0.zwzz, t0.yzxw, s3, l(0.000000) +mul r6.xy, r5.xyxx, r6.zzzz +mad r5.xyz, -r2.xyzx, cb0[5].xxxx, r6.xyzx +dp3 r0.z, r4.yzwy, r5.xyzx +dp3 r0.w, r5.xyzx, r5.xyzx +sqrt r2.w, r0.w +mad r0.w, r0.w, r0.x, l(1.000000) +div r0.z, r0.z, r2.w +add r0.z, r0.z, -cb0[4].z +max r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.z, r0.w, r0.z +mad r0.y, r0.z, l(1.500000), r0.y +mad r0.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r5.xy, r0.zwzz, r5.zzzz +mad r5.xyz, -r2.xyzx, cb0[5].xxxx, r5.xyzx +dp3 r0.z, r4.yzwy, r5.xyzx +dp3 r0.w, r5.xyzx, r5.xyzx +sqrt r1.z, r0.w +mad r0.w, r0.w, r0.x, l(1.000000) +div r0.z, r0.z, r1.z +add r0.z, r0.z, -cb0[4].z +max r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.z, r0.w, r0.z +mad r0.y, r0.z, l(1.500000), r0.y +dp2 r0.z, r3.xyxx, l(0.104594, 0.083725, 0.000000, 0.000000) +dp2 r0.w, r3.zwzz, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r3.xy, r0.zwzz +mad r0.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r1.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r1.zw, cb0[2].xxxy, r0.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r0.zwzz, t0.yzxw, s3, l(0.000000) +mul r3.xy, r1.zwzz, r3.zzzz +mad r3.xyz, -r2.xyzx, cb0[5].xxxx, r3.xyzx +dp3 r0.z, r4.yzwy, r3.xyzx +dp3 r0.w, r3.xyzx, r3.xyzx +sqrt r1.z, r0.w +mad r0.w, r0.w, r0.x, l(1.000000) +div r0.z, r0.z, r1.z +add r0.z, r0.z, -cb0[4].z +max r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.z, r0.w, r0.z +mad r0.y, r0.z, l(1.110000), r0.y +mad r0.zw, cb0[2].xxxy, r1.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r1.z, r1.xyxx, t0.yzxw, s3, l(0.000000) +mul r1.xy, r0.zwzz, r1.zzzz +mad r1.xyz, -r2.xyzx, cb0[5].xxxx, r1.xyzx +mul r0.z, r2.z, cb0[5].x +mad_sat r0.z, r0.z, cb0[4].x, cb0[4].y +dp3 r0.w, r4.yzwy, r1.xyzx +dp3 r1.x, r1.xyzx, r1.xyzx +sqrt r1.y, r1.x +mad r0.x, r1.x, r0.x, l(1.000000) +div r0.w, r0.w, r1.y +add r0.w, r0.w, -cb0[4].z +max r0.xw, r0.xxxw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.x, r0.x, r0.w +mad r0.x, r0.x, l(1.110000), r0.y +mul r0.x, r0.x, cb0[3].y +mul r0.x, r0.x, l(0.121654) +min r0.x, r0.x, cb0[3].w +mad_sat r0.x, -r0.x, r0.z, l(1.000000) +log r0.x, r0.x +mul r0.x, r0.x, cb0[3].z +exp r0.xzw, r0.xxxx +mov r0.y, l(1.000000) +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xyzw +ret +// Approximately 134 instruction slots used +#endif + +const BYTE CSGenerateQ0DXIL[] = +{ + 68, 88, 66, 67, 166, 142, + 227, 161, 111, 182, 44, 87, + 203, 3, 71, 196, 40, 245, + 28, 30, 1, 0, 0, 0, + 152, 27, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 16, 9, 0, 0, 32, 9, + 0, 0, 48, 9, 0, 0, + 252, 26, 0, 0, 82, 68, + 69, 70, 212, 8, 0, 0, + 1, 0, 0, 0, 124, 1, + 0, 0, 6, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 172, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 252, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 17, 1, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 44, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 67, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 6, 0, 0, 0, + 1, 0, 0, 0, 13, 0, + 0, 0, 89, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 102, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 86, + 105, 101, 119, 115, 112, 97, + 99, 101, 68, 101, 112, 116, + 104, 84, 97, 112, 83, 97, + 109, 112, 108, 101, 114, 0, + 103, 95, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 68, + 101, 112, 116, 104, 83, 111, + 117, 114, 99, 101, 0, 103, + 95, 100, 101, 105, 110, 116, + 101, 114, 108, 97, 99, 101, + 100, 78, 111, 114, 109, 97, + 108, 115, 0, 103, 95, 83, + 83, 65, 79, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 102, 1, 0, 0, + 1, 0, 0, 0, 148, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 188, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 136, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 235, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 126, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 171, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 35, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 98, 6, 0, 0, + 217, 1, 0, 0, 244, 1, + 0, 0, 0, 0, 0, 0, + 24, 2, 0, 0, 244, 1, + 0, 0, 8, 0, 0, 0, + 41, 2, 0, 0, 244, 1, + 0, 0, 16, 0, 0, 0, + 54, 2, 0, 0, 244, 1, + 0, 0, 24, 0, 0, 0, + 67, 2, 0, 0, 244, 1, + 0, 0, 32, 0, 0, 0, + 90, 2, 0, 0, 244, 1, + 0, 0, 40, 0, 0, 0, + 113, 2, 0, 0, 132, 2, + 0, 0, 48, 0, 0, 0, + 168, 2, 0, 0, 132, 2, + 0, 0, 52, 0, 0, 0, + 189, 2, 0, 0, 132, 2, + 0, 0, 56, 0, 0, 0, + 205, 2, 0, 0, 132, 2, + 0, 0, 60, 0, 0, 0, + 223, 2, 0, 0, 132, 2, + 0, 0, 64, 0, 0, 0, + 240, 2, 0, 0, 132, 2, + 0, 0, 68, 0, 0, 0, + 1, 3, 0, 0, 132, 2, + 0, 0, 72, 0, 0, 0, + 29, 3, 0, 0, 132, 2, + 0, 0, 76, 0, 0, 0, + 62, 3, 0, 0, 132, 2, + 0, 0, 80, 0, 0, 0, + 86, 3, 0, 0, 132, 2, + 0, 0, 84, 0, 0, 0, + 105, 3, 0, 0, 132, 2, + 0, 0, 88, 0, 0, 0, + 123, 3, 0, 0, 132, 2, + 0, 0, 92, 0, 0, 0, + 148, 3, 0, 0, 132, 2, + 0, 0, 96, 0, 0, 0, + 161, 3, 0, 0, 176, 3, + 0, 0, 100, 0, 0, 0, + 212, 3, 0, 0, 132, 2, + 0, 0, 104, 0, 0, 0, + 234, 3, 0, 0, 132, 2, + 0, 0, 108, 0, 0, 0, + 11, 4, 0, 0, 44, 4, + 0, 0, 112, 0, 0, 0, + 80, 4, 0, 0, 132, 2, + 0, 0, 192, 0, 0, 0, + 97, 4, 0, 0, 132, 2, + 0, 0, 196, 0, 0, 0, + 114, 4, 0, 0, 132, 2, + 0, 0, 200, 0, 0, 0, + 131, 4, 0, 0, 132, 2, + 0, 0, 204, 0, 0, 0, + 138, 4, 0, 0, 244, 1, + 0, 0, 208, 0, 0, 0, + 159, 4, 0, 0, 244, 1, + 0, 0, 216, 0, 0, 0, + 187, 4, 0, 0, 244, 1, + 0, 0, 224, 0, 0, 0, + 209, 4, 0, 0, 244, 1, + 0, 0, 232, 0, 0, 0, + 238, 4, 0, 0, 8, 5, + 0, 0, 240, 0, 0, 0, + 44, 5, 0, 0, 244, 1, + 0, 0, 248, 0, 0, 0, + 67, 5, 0, 0, 244, 1, + 0, 0, 0, 1, 0, 0, + 90, 5, 0, 0, 244, 1, + 0, 0, 8, 1, 0, 0, + 120, 5, 0, 0, 244, 1, + 0, 0, 16, 1, 0, 0, + 144, 5, 0, 0, 244, 1, + 0, 0, 24, 1, 0, 0, + 175, 5, 0, 0, 244, 1, + 0, 0, 32, 1, 0, 0, + 210, 5, 0, 0, 244, 1, + 0, 0, 40, 1, 0, 0, + 252, 5, 0, 0, 244, 1, + 0, 0, 48, 1, 0, 0, + 27, 6, 0, 0, 244, 1, + 0, 0, 56, 1, 0, 0, + 68, 6, 0, 0, 108, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 144, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 202, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 196, 17, + 0, 0, 80, 0, 5, 0, + 113, 4, 0, 0, 106, 8, + 0, 1, 89, 8, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 3, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 88, 64, + 0, 4, 0, 112, 16, 0, + 6, 0, 0, 0, 85, 85, + 0, 0, 156, 24, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 7, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 10, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 78, 0, 0, 8, 0, 208, + 0, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 109, 0, 0, 140, + 1, 254, 1, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 134, 125, + 16, 0, 0, 0, 0, 0, + 10, 96, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 8, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 8, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 75, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 32, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 58, 128, 32, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 205, 204, 76, 63, 1, 64, + 0, 0, 205, 204, 76, 62, + 56, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 56, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 89, 63, + 56, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 191, + 10, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 10, 242, 0, + 16, 0, 3, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 70, 142, 32, 6, + 0, 0, 0, 0, 7, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 240, 237, + 72, 63, 203, 13, 17, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 18, 0, 16, 0, 4, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 34, 0, 16, 0, + 0, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 240, 237, + 72, 63, 203, 13, 17, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 34, 0, 16, 0, 4, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 98, 0, 16, 0, + 0, 0, 0, 0, 6, 1, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 166, 139, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 1, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 4, 16, 0, 4, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 150, 5, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 130, 0, 16, 0, 0, 0, + 0, 0, 150, 5, 16, 0, + 0, 0, 0, 0, 118, 114, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 0, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 6, 1, 16, 0, 4, 0, + 0, 0, 50, 0, 0, 11, + 226, 0, 16, 0, 0, 0, + 0, 0, 6, 9, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 86, 14, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 150, 7, + 16, 0, 0, 0, 0, 0, + 150, 7, 16, 0, 0, 0, + 0, 0, 75, 0, 0, 5, + 18, 0, 16, 0, 4, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 6, 66, 0, + 16, 0, 5, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 45, 0, 0, 137, + 2, 2, 0, 128, 67, 85, + 21, 0, 226, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 54, 121, 16, 0, 6, 0, + 0, 0, 16, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 150, 7, 16, 0, + 4, 0, 0, 0, 150, 7, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 50, 0, + 0, 11, 194, 0, 16, 0, + 0, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 1, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 0, 0, 0, 0, + 166, 10, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 150, 7, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 14, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 10, 194, 0, + 16, 0, 0, 0, 0, 0, + 166, 14, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 192, 63, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 220, 59, 133, 62, + 197, 108, 151, 190, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 220, 59, 133, 62, + 197, 108, 151, 190, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 5, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 6, 4, 16, 0, + 5, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 4, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 150, 7, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 75, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 14, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 0, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 10, 194, 0, 16, 0, + 0, 0, 0, 0, 166, 14, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 26, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 0, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 166, 14, 16, 0, 1, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 5, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 150, 7, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 75, 0, 0, 5, + 66, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 166, 14, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 26, 0, 16, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 39, 53, + 214, 61, 40, 120, 171, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 130, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 39, 53, 214, 61, + 40, 120, 171, 61, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 50, 0, + 16, 0, 3, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 1, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 166, 14, 16, 0, + 0, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 3, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 166, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 150, 7, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 75, 0, + 0, 5, 66, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 14, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 10, 194, 0, 16, 0, + 0, 0, 0, 0, 166, 14, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 123, 20, 142, 63, 26, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 0, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 56, 0, 0, 8, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 50, 32, 0, 11, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 150, 7, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 75, 0, 0, 5, 34, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 14, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 10, 146, 0, + 16, 0, 0, 0, 0, 0, + 6, 12, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 123, 20, 142, 63, + 26, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 254, 37, + 249, 61, 51, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 50, 32, + 0, 10, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 47, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 25, 0, 0, 5, 210, 0, + 16, 0, 0, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 134, 0, + 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 117, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 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, 7, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 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, 1, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ1.h b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ1.h new file mode 100644 index 0000000..a82d6ac --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ1.h @@ -0,0 +1,2619 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_ViewspaceDepthTapSampler sampler NA NA s3 1 +// g_ViewspaceDepthSource texture float 2d t0 1 +// g_deinterlacedNormals texture float4 2darray t6 1 +// g_SSAOOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[20], dynamicIndexed +dcl_sampler s1, mode_default +dcl_sampler s3, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2darray (float,float,float,float) t6 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 11 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +add r0.zw, r0.xxxy, l(0.000000, 0.000000, 0.500000, 0.500000) +mad r0.x, r0.y, l(2.000000), r0.x +ftou r0.x, r0.x +udiv null, r0.x, r0.x, l(5) +mad r1.xy, r0.zwzz, cb0[18].zwzz, cb0[19].zwzz +mul r0.yz, r0.zzwz, cb0[13].zzwz +mad r0.yz, cb0[1].xxyx, r0.yyzy, cb0[1].zzwz +gather4_indexable(texture2d)(float,float,float,float) r2.yw, r1.xyxx, t0.yzwx, s1.x +gather4_aoffimmi_indexable(-1,-1,0)(texture2d)(float,float,float,float) r3.xyz, r1.xyxx, t0.xyzw, s1.x +mov r2.xz, r3.xxzx +add r4.xyzw, r2.xyzw, -r3.yyyy +add r5.xyzw, r4.yyww, r4.xxzz +min r4.xyzw, |r4.xyzw|, |r5.xyzw| +mul r0.w, r3.y, l(0.040000) +div r4.xyzw, r4.xyzw, r0.wwww +add_sat r4.xyzw, -r4.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mov r5.z, l(0) +mov r6.z, l(1.000000) +mul r1.zw, r3.yyyy, cb0[1].xxxy +mul r7.xy, r1.zwzz, cb0[13].zwzz +mov r5.xy, -r7.xyxx +mul r8.yz, r0.yyzy, r3.yyyy +mov r8.xw, r3.yyyy +mad r0.yz, -r8.xxxx, cb0[5].xxxx, r2.xxzx +mul r3.xyz, r8.yzwy, cb0[5].xxxx +div r6.xy, r3.xyxx, r3.zzzz +mad_sat r0.w, r3.z, cb0[4].x, cb0[4].y +mad r3.xyz, r6.xyzx, r0.yyyy, r5.xzzx +mad r5.xyz, r6.xyzx, r0.zzzz, r5.zyzz +dp3 r0.y, r3.xyzx, r3.xyzx +dp3 r0.z, r8.yzwy, r8.yzwy +sqrt r0.z, r0.z +mul_sat r0.z, r0.z, cb0[4].w +mad r0.z, r0.z, l(0.800000), l(0.200000) +mul r0.z, r0.z, cb0[3].x +mul r1.z, r0.z, r0.z +mul r0.z, r0.z, l(0.850000) +div r0.z, r0.z, r7.x +mul r9.xyzw, r0.zzzz, cb0[r0.x + 7].xyzw +div r0.x, l(-1.000000), r1.z +mul r0.z, r0.x, l(4.000000) +mad r1.z, r0.y, r0.z, l(1.000000) +sqrt r0.y, r0.y +max r1.z, r1.z, l(0.000000) +mov r10.xy, vThreadID.xyxx +mov r10.z, cb0[6].y +mov r10.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r10.xyz, r10.xyzw, t6.xyzw +dp3 r1.w, r10.xyzx, r3.xyzx +div r0.y, r1.w, r0.y +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +mul r3.x, r1.z, r0.y +mov r7.z, l(0) +mad r1.zw, -r8.xxxx, cb0[5].xxxx, r2.yyyw +mad r2.xyz, r6.xyzx, r1.zzzz, r7.xzzx +mad r6.xyz, r6.xyzx, r1.wwww, r7.zyzz +dp3 r0.y, r2.xyzx, r2.xyzx +dp3 r1.z, r10.xyzx, r2.xyzx +mad r1.w, r0.y, r0.z, l(1.000000) +sqrt r0.y, r0.y +div r0.y, r1.z, r0.y +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +max r1.z, r1.w, l(0.000000) +mul r3.y, r0.y, r1.z +dp3 r0.y, r5.xyzx, r5.xyzx +dp3 r1.z, r10.xyzx, r5.xyzx +sqrt r1.w, r0.y +mad r0.y, r0.y, r0.z, l(1.000000) +max r0.y, r0.y, l(0.000000) +div r1.z, r1.z, r1.w +add r1.z, r1.z, -cb0[4].z +max r1.z, r1.z, l(0.000000) +mul r3.z, r0.y, r1.z +dp3 r0.y, r6.xyzx, r6.xyzx +dp3 r1.z, r10.xyzx, r6.xyzx +sqrt r1.w, r0.y +mad r0.y, r0.y, r0.z, l(1.000000) +div r0.z, r1.z, r1.w +add r0.z, r0.z, -cb0[4].z +max r0.yz, r0.yyzy, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r3.w, r0.y, r0.z +dp4 r0.y, r3.xyzw, r4.xyzw +dp2 r0.z, r9.xyxx, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r2.x, r0.z +dp2 r0.z, r9.zwzz, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r2.y, r0.z +mad r1.zw, r2.xxxy, cb0[18].zzzw, r1.xxxy +mad r2.xy, -r2.xyxx, cb0[18].zwzz, r1.xyxx +mad r2.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r3.xy, r2.zwzz, r3.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r3.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.z, r0.z, l(1.500000) +dp3 r1.w, r3.xyzx, r3.xyzx +dp3 r2.z, r10.xyzx, r3.xyzx +sqrt r2.w, r1.w +mad r1.w, r1.w, r0.x, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r2.z, r2.z, r2.w +add r2.z, r2.z, -cb0[4].z +max r2.z, r2.z, l(0.000000) +mul r1.w, r1.w, r2.z +mul r1.z, r1.z, r1.w +mad r0.y, cb0[12].z, r0.y, r1.z +mad r1.zw, cb0[2].xxxy, r2.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r2.xyxx, t0.yzxw, s3, l(0.000000) +mul r2.xy, r1.zwzz, r2.zzzz +mad r2.xyz, -r8.yzwy, cb0[5].xxxx, r2.xyzx +max r1.z, -r2.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.z, r1.z, l(1.500000) +dp3 r1.w, r2.xyzx, r2.xyzx +dp3 r2.x, r10.xyzx, r2.xyzx +sqrt r2.y, r1.w +mad r1.w, r1.w, r0.x, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r2.x, r2.x, r2.y +add r2.x, r2.x, -cb0[4].z +max r2.x, r2.x, l(0.000000) +mul r1.w, r1.w, r2.x +mad r0.y, r1.w, r1.z, r0.y +mad r0.z, r0.z, l(1.500000), r1.z +dp2 r1.z, r9.xyxx, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r2.x, r1.z +dp2 r1.z, r9.zwzz, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r2.y, r1.z +mad r1.zw, r2.xxxy, cb0[18].zzzw, r1.xxxy +mad r2.xy, -r2.xyxx, cb0[18].zwzz, r1.xyxx +mad r2.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r3.xy, r2.zwzz, r3.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r3.xyzx +max r1.z, -r3.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.500000) +mad r0.z, r1.z, l(1.500000), r0.z +dp3 r1.z, r3.xyzx, r3.xyzx +dp3 r2.z, r10.xyzx, r3.xyzx +sqrt r2.w, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.z, r2.z, r2.w +add r2.z, r2.z, -cb0[4].z +max r2.z, r2.z, l(0.000000) +mul r1.z, r1.z, r2.z +mad r0.y, r1.z, r1.w, r0.y +mad r1.zw, cb0[2].xxxy, r2.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r2.xyxx, t0.yzxw, s3, l(0.000000) +mul r2.xy, r1.zwzz, r2.zzzz +mad r2.xyz, -r8.yzwy, cb0[5].xxxx, r2.xyzx +max r1.z, -r2.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.500000) +mad r0.z, r1.z, l(1.500000), r0.z +dp3 r1.z, r2.xyzx, r2.xyzx +dp3 r2.x, r10.xyzx, r2.xyzx +sqrt r2.y, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.x, r2.x, r2.y +add r2.x, r2.x, -cb0[4].z +max r2.x, r2.x, l(0.000000) +mul r1.z, r1.z, r2.x +mad r0.y, r1.z, r1.w, r0.y +dp2 r1.z, r9.xyxx, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r2.x, r1.z +dp2 r1.z, r9.zwzz, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r2.y, r1.z +mad r1.zw, r2.xxxy, cb0[18].zzzw, r1.xxxy +mad r2.xy, -r2.xyxx, cb0[18].zwzz, r1.xyxx +mad r2.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r3.xy, r2.zwzz, r3.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r3.xyzx +max r1.z, -r3.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.110000) +mad r0.z, r1.z, l(1.110000), r0.z +dp3 r1.z, r3.xyzx, r3.xyzx +dp3 r2.z, r10.xyzx, r3.xyzx +sqrt r2.w, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.z, r2.z, r2.w +add r2.z, r2.z, -cb0[4].z +max r2.z, r2.z, l(0.000000) +mul r1.z, r1.z, r2.z +mad r0.y, r1.z, r1.w, r0.y +mad r1.zw, cb0[2].xxxy, r2.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r2.xyxx, t0.yzxw, s3, l(0.000000) +mul r2.xy, r1.zwzz, r2.zzzz +mad r2.xyz, -r8.yzwy, cb0[5].xxxx, r2.xyzx +max r1.z, -r2.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.110000) +mad r0.z, r1.z, l(1.110000), r0.z +dp3 r1.z, r2.xyzx, r2.xyzx +dp3 r2.x, r10.xyzx, r2.xyzx +sqrt r2.y, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.x, r2.x, r2.y +add r2.x, r2.x, -cb0[4].z +max r2.x, r2.x, l(0.000000) +mul r1.z, r1.z, r2.x +mad r0.y, r1.z, r1.w, r0.y +dp2 r1.z, r9.xyxx, l(-0.682868, 0.049630, 0.000000, 0.000000) +round_ne r2.x, r1.z +dp2 r1.z, r9.zwzz, l(-0.682868, 0.049630, 0.000000, 0.000000) +round_ne r2.y, r1.z +mad r1.zw, r2.xxxy, cb0[18].zzzw, r1.xxxy +mad r2.xy, -r2.xyxx, cb0[18].zwzz, r1.xyxx +mad r2.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r3.xy, r2.zwzz, r3.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r3.xyzx +max r1.z, -r3.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.090000) +mad r0.z, r1.z, l(1.090000), r0.z +dp3 r1.z, r10.xyzx, r3.xyzx +dp3 r2.z, r3.xyzx, r3.xyzx +sqrt r2.w, r2.z +mad r2.z, r2.z, r0.x, l(1.000000) +max r2.z, r2.z, l(0.000000) +div r1.z, r1.z, r2.w +add r1.z, r1.z, -cb0[4].z +max r1.z, r1.z, l(0.000000) +mul r1.z, r2.z, r1.z +mad r0.y, r1.z, r1.w, r0.y +mad r1.zw, cb0[2].xxxy, r2.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r2.xyxx, t0.yzxw, s3, l(0.000000) +mul r2.xy, r1.zwzz, r2.zzzz +mad r2.xyz, -r8.yzwy, cb0[5].xxxx, r2.xyzx +max r1.z, -r2.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.090000) +mad r0.z, r1.z, l(1.090000), r0.z +dp3 r1.z, r10.xyzx, r2.xyzx +dp3 r2.x, r2.xyzx, r2.xyzx +sqrt r2.y, r2.x +mad r2.x, r2.x, r0.x, l(1.000000) +max r2.x, r2.x, l(0.000000) +div r1.z, r1.z, r2.y +add r1.z, r1.z, -cb0[4].z +max r1.z, r1.z, l(0.000000) +mul r1.z, r2.x, r1.z +mad r0.y, r1.z, r1.w, r0.y +dp2 r1.z, r9.xyxx, l(-0.135702, -0.641902, 0.000000, 0.000000) +dp2 r1.w, r9.zwzz, l(-0.135702, -0.641902, 0.000000, 0.000000) +round_ne r2.xy, r1.zwzz +mad r1.zw, r2.xxxy, cb0[18].zzzw, r1.xxxy +mad r1.xy, -r2.xyxx, cb0[18].zwzz, r1.xyxx +mad r2.xy, cb0[2].xyxx, r1.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r1.zwzz, t0.yzxw, s3, l(0.000000) +mul r3.xy, r2.xyxx, r3.zzzz +mad r2.xyz, -r8.yzwy, cb0[5].xxxx, r3.xyzx +max r1.z, -r2.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.250000) +mad r0.z, r1.z, l(1.250000), r0.z +dp3 r1.z, r10.xyzx, r2.xyzx +dp3 r2.x, r2.xyzx, r2.xyzx +sqrt r2.y, r2.x +mad r2.x, r2.x, r0.x, l(1.000000) +max r2.x, r2.x, l(0.000000) +div r1.z, r1.z, r2.y +add r1.z, r1.z, -cb0[4].z +max r1.z, r1.z, l(0.000000) +mul r1.z, r2.x, r1.z +mad r0.y, r1.z, r1.w, r0.y +mad r1.zw, cb0[2].xxxy, r1.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r1.xyxx, t0.yzxw, s3, l(0.000000) +mul r2.xy, r1.zwzz, r2.zzzz +mad r1.xyz, -r8.yzwy, cb0[5].xxxx, r2.xyzx +max r1.w, -r1.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r2.x, r1.w, l(1.250000) +mad r0.z, r1.w, l(1.250000), r0.z +dp3 r1.w, r10.xyzx, r1.xyzx +dp3 r1.x, r1.xyzx, r1.xyzx +sqrt r1.y, r1.x +mad r0.x, r1.x, r0.x, l(1.000000) +max r0.x, r0.x, l(0.000000) +div r1.x, r1.w, r1.y +add r1.x, r1.x, -cb0[4].z +max r1.x, r1.x, l(0.000000) +mul r0.x, r0.x, r1.x +mad r0.x, r0.x, r2.x, r0.y +div r0.x, r0.x, r0.z +mul r0.x, r0.x, cb0[3].y +min r0.x, r0.x, cb0[3].w +add r0.yz, -r4.xxzx, l(0.000000, 1.000000, 1.000000, 0.000000) +add r0.yz, -r4.yywy, r0.yyzy +mul r1.xyzw, r4.xyzw, l(3.050000, 3.050000, 3.050000, 3.050000) +round_ne r1.xyzw, r1.xyzw +dp4 r1.y, r1.xyzw, l(0.250980, 0.062745, 0.015686, 0.003922) +mul r0.yz, r0.yyzy, l(0.000000, 0.350000, 0.350000, 0.000000) +max r0.yz, r0.yyzy, l(0.000000, 0.000000, 0.000000, 0.000000) +add r0.y, r0.z, r0.y +add r0.y, -r0.y, l(1.000000) +mul r0.y, r0.y, r0.w +mad_sat r0.x, -r0.x, r0.y, l(1.000000) +log r0.x, r0.x +mul r0.x, r0.x, cb0[3].z +exp r1.xzw, r0.xxxx +store_uav_typed u0.xyzw, vThreadID.xyyy, r1.xyzw +ret +// Approximately 323 instruction slots used +#endif + +const BYTE CSGenerateQ1DXIL[] = +{ + 68, 88, 66, 67, 89, 197, + 122, 53, 236, 163, 90, 5, + 27, 38, 56, 122, 121, 234, + 190, 87, 1, 0, 0, 0, + 104, 51, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 16, 9, 0, 0, 32, 9, + 0, 0, 48, 9, 0, 0, + 204, 50, 0, 0, 82, 68, + 69, 70, 212, 8, 0, 0, + 1, 0, 0, 0, 124, 1, + 0, 0, 6, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 172, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 252, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 17, 1, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 44, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 67, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 6, 0, 0, 0, + 1, 0, 0, 0, 13, 0, + 0, 0, 89, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 102, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 86, + 105, 101, 119, 115, 112, 97, + 99, 101, 68, 101, 112, 116, + 104, 84, 97, 112, 83, 97, + 109, 112, 108, 101, 114, 0, + 103, 95, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 68, + 101, 112, 116, 104, 83, 111, + 117, 114, 99, 101, 0, 103, + 95, 100, 101, 105, 110, 116, + 101, 114, 108, 97, 99, 101, + 100, 78, 111, 114, 109, 97, + 108, 115, 0, 103, 95, 83, + 83, 65, 79, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 102, 1, 0, 0, + 1, 0, 0, 0, 148, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 188, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 136, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 235, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 126, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 171, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 35, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 98, 6, 0, 0, + 217, 1, 0, 0, 244, 1, + 0, 0, 0, 0, 0, 0, + 24, 2, 0, 0, 244, 1, + 0, 0, 8, 0, 0, 0, + 41, 2, 0, 0, 244, 1, + 0, 0, 16, 0, 0, 0, + 54, 2, 0, 0, 244, 1, + 0, 0, 24, 0, 0, 0, + 67, 2, 0, 0, 244, 1, + 0, 0, 32, 0, 0, 0, + 90, 2, 0, 0, 244, 1, + 0, 0, 40, 0, 0, 0, + 113, 2, 0, 0, 132, 2, + 0, 0, 48, 0, 0, 0, + 168, 2, 0, 0, 132, 2, + 0, 0, 52, 0, 0, 0, + 189, 2, 0, 0, 132, 2, + 0, 0, 56, 0, 0, 0, + 205, 2, 0, 0, 132, 2, + 0, 0, 60, 0, 0, 0, + 223, 2, 0, 0, 132, 2, + 0, 0, 64, 0, 0, 0, + 240, 2, 0, 0, 132, 2, + 0, 0, 68, 0, 0, 0, + 1, 3, 0, 0, 132, 2, + 0, 0, 72, 0, 0, 0, + 29, 3, 0, 0, 132, 2, + 0, 0, 76, 0, 0, 0, + 62, 3, 0, 0, 132, 2, + 0, 0, 80, 0, 0, 0, + 86, 3, 0, 0, 132, 2, + 0, 0, 84, 0, 0, 0, + 105, 3, 0, 0, 132, 2, + 0, 0, 88, 0, 0, 0, + 123, 3, 0, 0, 132, 2, + 0, 0, 92, 0, 0, 0, + 148, 3, 0, 0, 132, 2, + 0, 0, 96, 0, 0, 0, + 161, 3, 0, 0, 176, 3, + 0, 0, 100, 0, 0, 0, + 212, 3, 0, 0, 132, 2, + 0, 0, 104, 0, 0, 0, + 234, 3, 0, 0, 132, 2, + 0, 0, 108, 0, 0, 0, + 11, 4, 0, 0, 44, 4, + 0, 0, 112, 0, 0, 0, + 80, 4, 0, 0, 132, 2, + 0, 0, 192, 0, 0, 0, + 97, 4, 0, 0, 132, 2, + 0, 0, 196, 0, 0, 0, + 114, 4, 0, 0, 132, 2, + 0, 0, 200, 0, 0, 0, + 131, 4, 0, 0, 132, 2, + 0, 0, 204, 0, 0, 0, + 138, 4, 0, 0, 244, 1, + 0, 0, 208, 0, 0, 0, + 159, 4, 0, 0, 244, 1, + 0, 0, 216, 0, 0, 0, + 187, 4, 0, 0, 244, 1, + 0, 0, 224, 0, 0, 0, + 209, 4, 0, 0, 244, 1, + 0, 0, 232, 0, 0, 0, + 238, 4, 0, 0, 8, 5, + 0, 0, 240, 0, 0, 0, + 44, 5, 0, 0, 244, 1, + 0, 0, 248, 0, 0, 0, + 67, 5, 0, 0, 244, 1, + 0, 0, 0, 1, 0, 0, + 90, 5, 0, 0, 244, 1, + 0, 0, 8, 1, 0, 0, + 120, 5, 0, 0, 244, 1, + 0, 0, 16, 1, 0, 0, + 144, 5, 0, 0, 244, 1, + 0, 0, 24, 1, 0, 0, + 175, 5, 0, 0, 244, 1, + 0, 0, 32, 1, 0, 0, + 210, 5, 0, 0, 244, 1, + 0, 0, 40, 1, 0, 0, + 252, 5, 0, 0, 244, 1, + 0, 0, 48, 1, 0, 0, + 27, 6, 0, 0, 244, 1, + 0, 0, 56, 1, 0, 0, + 68, 6, 0, 0, 108, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 144, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 202, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 148, 41, + 0, 0, 80, 0, 5, 0, + 101, 10, 0, 0, 106, 8, + 0, 1, 89, 8, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 3, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 88, 64, + 0, 4, 0, 112, 16, 0, + 6, 0, 0, 0, 85, 85, + 0, 0, 156, 24, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 11, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 0, 0, 0, 10, 194, 0, + 16, 0, 0, 0, 0, 0, + 6, 4, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 10, 0, 16, 0, + 0, 0, 0, 0, 28, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 78, 0, 0, 8, 0, 208, + 0, 0, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 230, 10, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 56, 0, + 0, 8, 98, 0, 16, 0, + 0, 0, 0, 0, 166, 11, + 16, 0, 0, 0, 0, 0, + 166, 139, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 50, 0, 0, 11, 98, 0, + 16, 0, 0, 0, 0, 0, + 6, 129, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 166, 139, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 109, 0, 0, 139, + 194, 0, 0, 128, 67, 85, + 21, 0, 162, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 150, 115, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 1, 0, 0, 0, 109, 0, + 0, 140, 1, 254, 1, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 3, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 82, 0, 16, 0, + 2, 0, 0, 0, 6, 2, + 16, 0, 3, 0, 0, 0, + 0, 0, 0, 8, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 86, 5, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 7, + 242, 0, 16, 0, 5, 0, + 0, 0, 86, 15, 16, 0, + 4, 0, 0, 0, 6, 10, + 16, 0, 4, 0, 0, 0, + 51, 0, 0, 9, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 10, 215, 35, 61, 14, 0, + 0, 7, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 0, 32, 0, 11, + 242, 0, 16, 0, 4, 0, + 0, 0, 70, 14, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 54, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 66, 0, + 16, 0, 6, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 56, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 86, 5, 16, 0, + 3, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 54, 0, 0, 6, 50, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 7, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 8, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 86, 5, 16, 0, + 3, 0, 0, 0, 54, 0, + 0, 5, 146, 0, 16, 0, + 8, 0, 0, 0, 86, 5, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 98, 0, + 16, 0, 0, 0, 0, 0, + 6, 0, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 6, 2, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 8, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 7, 50, 0, 16, 0, + 6, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 166, 10, 16, 0, 3, 0, + 0, 0, 50, 32, 0, 11, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 134, 2, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 166, 10, 16, 0, 0, 0, + 0, 0, 102, 10, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 150, 7, 16, 0, + 8, 0, 0, 0, 150, 7, + 16, 0, 8, 0, 0, 0, + 75, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 56, 32, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 205, 204, + 76, 63, 1, 64, 0, 0, + 205, 204, 76, 62, 56, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 89, 63, 14, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 7, 0, 0, 0, + 56, 0, 0, 10, 242, 0, + 16, 0, 9, 0, 0, 0, + 166, 10, 16, 0, 0, 0, + 0, 0, 70, 142, 32, 6, + 0, 0, 0, 0, 7, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 191, + 42, 0, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 75, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 10, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 6, 66, 0, 16, 0, + 10, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 10, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 2, 2, + 0, 128, 67, 85, 21, 0, + 114, 0, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 70, 126, + 16, 0, 6, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 14, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 7, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 86, 13, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 166, 10, + 16, 0, 1, 0, 0, 0, + 134, 2, 16, 0, 7, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 6, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 102, 10, 16, 0, 7, 0, + 0, 0, 16, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 130, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 75, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 16, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 75, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 10, + 98, 0, 16, 0, 0, 0, + 0, 0, 86, 6, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 17, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 240, 237, 72, 63, + 203, 13, 17, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 240, 237, 72, 63, + 203, 13, 17, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 1, 0, + 0, 0, 6, 4, 16, 0, + 2, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 2, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 166, 14, 16, 0, + 1, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 3, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 166, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 192, 63, + 16, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 75, 0, 0, 5, + 130, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 9, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 66, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 9, 66, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 166, 10, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 2, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 16, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 42, 0, 16, 0, + 1, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 220, 59, + 133, 62, 197, 108, 151, 190, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 18, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 220, 59, + 133, 62, 197, 108, 151, 190, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 34, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 10, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 2, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 1, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 3, 0, 0, 0, 230, 10, + 16, 0, 2, 0, 0, 0, + 166, 10, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 192, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 75, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 166, 10, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 2, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 192, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 39, 53, + 214, 61, 40, 120, 171, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 18, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 39, 53, + 214, 61, 40, 120, 171, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 34, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 10, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 2, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 1, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 3, 0, 0, 0, 230, 10, + 16, 0, 2, 0, 0, 0, + 166, 10, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 123, 20, + 142, 63, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 123, 20, 142, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 75, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 166, 10, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 2, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 123, 20, + 142, 63, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 123, 20, 142, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 112, 208, + 46, 191, 76, 73, 75, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 18, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 112, 208, + 46, 191, 76, 73, 75, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 34, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 10, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 2, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 1, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 3, 0, 0, 0, 230, 10, + 16, 0, 2, 0, 0, 0, + 166, 10, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 31, 133, + 139, 63, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 31, 133, 139, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 75, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 66, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 166, 10, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 2, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 52, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 31, 133, + 139, 63, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 31, 133, 139, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 93, 245, + 10, 190, 169, 83, 36, 191, + 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 230, 10, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 93, 245, 10, 190, + 169, 83, 36, 191, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 50, 0, + 16, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 1, 0, + 0, 0, 6, 4, 16, 0, + 2, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 3, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 3, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 166, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 2, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 160, 63, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 160, 63, 42, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 75, 0, 0, 5, + 34, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 1, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 166, 10, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 1, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 52, 0, 0, 8, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 160, 63, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 160, 63, 42, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 75, 0, 0, 5, + 34, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 51, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 11, 98, 0, 16, 0, + 0, 0, 0, 0, 6, 2, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 0, 0, + 0, 0, 0, 8, 98, 0, + 16, 0, 0, 0, 0, 0, + 86, 7, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 10, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 2, 64, + 0, 0, 51, 51, 67, 64, + 51, 51, 67, 64, 51, 51, + 67, 64, 51, 51, 67, 64, + 64, 0, 0, 5, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 17, 0, 0, 10, + 34, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 129, 128, 128, 62, + 129, 128, 128, 61, 129, 128, + 128, 60, 129, 128, 128, 59, + 56, 0, 0, 10, 98, 0, + 16, 0, 0, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 51, 51, + 179, 62, 51, 51, 179, 62, + 0, 0, 0, 0, 52, 0, + 0, 10, 98, 0, 16, 0, + 0, 0, 0, 0, 86, 6, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 56, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 47, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 42, 128, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 25, 0, 0, 5, + 210, 0, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 67, 1, + 0, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 41, 1, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 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, 11, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 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, 1, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ2.h b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ2.h new file mode 100644 index 0000000..11accbb --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ2.h @@ -0,0 +1,4806 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_ViewspaceDepthTapSampler sampler NA NA s3 1 +// g_ViewspaceDepthSource texture float 2d t0 1 +// g_deinterlacedNormals texture float4 2darray t6 1 +// g_SSAOOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[20], dynamicIndexed +dcl_sampler s1, mode_default +dcl_sampler s3, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2darray (float,float,float,float) t6 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 12 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +add r0.zw, r0.xxxy, l(0.000000, 0.000000, 0.500000, 0.500000) +mad r0.x, r0.y, l(2.000000), r0.x +ftou r0.x, r0.x +udiv null, r0.x, r0.x, l(5) +mad r1.xy, r0.zwzz, cb0[18].zwzz, cb0[19].zwzz +mul r0.yz, r0.zzwz, cb0[13].zzwz +mad r0.yz, cb0[1].xxyx, r0.yyzy, cb0[1].zzwz +gather4_indexable(texture2d)(float,float,float,float) r2.yw, r1.xyxx, t0.yzwx, s1.x +gather4_aoffimmi_indexable(-1,-1,0)(texture2d)(float,float,float,float) r3.xyz, r1.xyxx, t0.xyzw, s1.x +mov r2.xz, r3.xxzx +add r4.xyzw, r2.xyzw, -r3.yyyy +add r5.xyzw, r4.yyww, r4.xxzz +min r4.xyzw, |r4.xyzw|, |r5.xyzw| +mul r0.w, r3.y, l(0.040000) +div r4.xyzw, r4.xyzw, r0.wwww +add_sat r4.xyzw, -r4.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mov r5.z, l(0) +mov r6.z, l(1.000000) +mul r1.zw, r3.yyyy, cb0[1].xxxy +mul r7.xy, r1.zwzz, cb0[13].zwzz +mov r5.xy, -r7.xyxx +mul r8.yz, r0.yyzy, r3.yyyy +mov r8.xw, r3.yyyy +mad r0.yz, -r8.xxxx, cb0[5].xxxx, r2.xxzx +mul r3.xyz, r8.yzwy, cb0[5].xxxx +div r6.xy, r3.xyxx, r3.zzzz +mad_sat r0.w, r3.z, cb0[4].x, cb0[4].y +mad r3.xyz, r6.xyzx, r0.yyyy, r5.xzzx +mad r5.xyz, r6.xyzx, r0.zzzz, r5.zyzz +dp3 r0.y, r3.xyzx, r3.xyzx +dp3 r0.z, r8.yzwy, r8.yzwy +sqrt r0.z, r0.z +mul_sat r0.z, r0.z, cb0[4].w +mad r0.z, r0.z, l(0.800000), l(0.200000) +mul r0.z, r0.z, cb0[3].x +mul r1.z, r0.z, r0.z +mul r0.z, r0.z, l(0.850000) +div r0.z, r0.z, r7.x +div r1.z, l(-1.000000), r1.z +mul r1.w, r1.z, l(4.000000) +mad r2.x, r0.y, r1.w, l(1.000000) +sqrt r0.y, r0.y +max r2.x, r2.x, l(0.000000) +mov r9.w, l(0) +mov r9.xy, vThreadID.xyxx +mov r9.z, cb0[6].y +ld_indexable(texture2darray)(float,float,float,float) r10.xyz, r9.xyzw, t6.xyzw +dp3 r2.z, r10.xyzx, r3.xyzx +div r0.y, r2.z, r0.y +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +mul r3.x, r2.x, r0.y +mov r7.z, l(0) +mad r2.xy, -r8.xxxx, cb0[5].xxxx, r2.ywyy +mad r2.xzw, r6.xxyz, r2.xxxx, r7.xxzz +mad r6.xyz, r6.xyzx, r2.yyyy, r7.zyzz +dp3 r0.y, r2.xzwx, r2.xzwx +dp3 r2.x, r10.xyzx, r2.xzwx +mad r2.y, r0.y, r1.w, l(1.000000) +sqrt r0.y, r0.y +div r0.y, r2.x, r0.y +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +max r2.x, r2.y, l(0.000000) +mul r3.y, r0.y, r2.x +dp3 r0.y, r5.xyzx, r5.xyzx +dp3 r2.x, r10.xyzx, r5.xyzx +mad r2.y, r0.y, r1.w, l(1.000000) +sqrt r0.y, r0.y +div r0.y, r2.x, r0.y +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +max r2.x, r2.y, l(0.000000) +mul r3.z, r0.y, r2.x +dp3 r0.y, r6.xyzx, r6.xyzx +dp3 r2.x, r10.xyzx, r6.xyzx +mad r1.w, r0.y, r1.w, l(1.000000) +sqrt r0.y, r0.y +div r0.y, r2.x, r0.y +add r0.y, r0.y, -cb0[4].z +max r0.y, r0.y, l(0.000000) +max r1.w, r1.w, l(0.000000) +mul r3.w, r0.y, r1.w +dp4 r0.y, r3.xyzw, r4.xyzw +mul r2.xyzw, r0.zzzz, cb0[r0.x + 7].xyzw +log r0.x, r0.z +dp2 r0.z, r2.xyxx, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +add r6.xyzw, r0.xxxx, l(-4.426083, -5.364030, -7.030563, -4.798827) +sample_l_indexable(texture2d)(float,float,float,float) r7.z, r3.zwzz, t0.yzxw, s3, r6.x +mul r7.xy, r5.xyxx, r7.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r7.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(1.500000) +dp3 r3.z, r5.xyzx, r5.xyzx +dp3 r3.w, r10.xyzx, r5.xyzx +sqrt r5.x, r3.z +mad r3.z, r3.z, r1.z, l(1.000000) +div r3.w, r3.w, r5.x +add r3.w, r3.w, -cb0[4].z +max r3.zw, r3.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r3.z, r3.z, r3.w +mul r1.w, r1.w, r3.z +mad r0.y, cb0[12].z, r0.y, r1.w +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r6.x +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r1.w, -r3.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r1.w, r1.w, l(1.500000) +dp3 r3.w, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +sqrt r3.y, r3.w +mad r3.z, r3.w, r1.z, l(1.000000) +div r3.x, r3.x, r3.y +add r3.x, r3.x, -cb0[4].z +max r3.xz, r3.xxzx, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r3.x, r3.z, r3.x +mad r0.y, r3.x, r1.w, r0.y +mad r0.z, r0.z, l(1.500000), r1.w +dp2 r1.w, r2.xyxx, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r3.x, r1.w +dp2 r1.w, r2.zwzz, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r3.y, r1.w +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r7.z, r3.zwzz, t0.yzxw, s3, r6.y +mul r7.xy, r5.xyxx, r7.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r7.xyzx +max r1.w, -r5.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r3.z, r1.w, l(1.500000) +mad r0.z, r1.w, l(1.500000), r0.z +dp3 r1.w, r5.xyzx, r5.xyzx +dp3 r3.w, r10.xyzx, r5.xyzx +sqrt r5.x, r1.w +mad r1.w, r1.w, r1.z, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r3.w, r3.w, r5.x +add r3.w, r3.w, -cb0[4].z +max r3.w, r3.w, l(0.000000) +mul r1.w, r1.w, r3.w +mad r0.y, r1.w, r3.z, r0.y +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r6.y +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r1.w, -r3.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r3.w, r1.w, l(1.500000) +mad r0.z, r1.w, l(1.500000), r0.z +dp3 r1.w, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +sqrt r3.y, r1.w +mad r1.w, r1.w, r1.z, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r3.x, r3.x, r3.y +add r3.x, r3.x, -cb0[4].z +max r3.x, r3.x, l(0.000000) +mul r1.w, r1.w, r3.x +mad r0.y, r1.w, r3.w, r0.y +dp2 r1.w, r2.xyxx, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r3.x, r1.w +dp2 r1.w, r2.zwzz, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r3.y, r1.w +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.zwzz, t0.yzxw, s3, r6.z +mad r3.zw, cb0[2].xxxy, r3.zzzw, cb0[2].zzzw +mul r5.xy, r5.zzzz, r3.zwzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r1.w, -r5.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r3.z, r1.w, l(1.110000) +mad r0.z, r1.w, l(1.110000), r0.z +dp3 r1.w, r5.xyzx, r5.xyzx +dp3 r3.w, r10.xyzx, r5.xyzx +sqrt r5.x, r1.w +mad r1.w, r1.w, r1.z, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r3.w, r3.w, r5.x +add r3.w, r3.w, -cb0[4].z +max r3.w, r3.w, l(0.000000) +mul r1.w, r1.w, r3.w +mad r0.y, r1.w, r3.z, r0.y +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r6.z +mad r3.xy, cb0[2].xyxx, r3.xyxx, cb0[2].zwzz +mul r5.xy, r5.zzzz, r3.xyxx +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r1.w, -r3.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r3.w, r1.w, l(1.110000) +mad r0.z, r1.w, l(1.110000), r0.z +dp3 r1.w, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +sqrt r3.y, r1.w +mad r1.w, r1.w, r1.z, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r3.x, r3.x, r3.y +add r3.x, r3.x, -cb0[4].z +max r3.x, r3.x, l(0.000000) +mul r1.w, r1.w, r3.x +mad r0.y, r1.w, r3.w, r0.y +dp2 r1.w, r2.xyxx, l(-0.682868, 0.049630, 0.000000, 0.000000) +round_ne r3.x, r1.w +dp2 r1.w, r2.zwzz, l(-0.682868, 0.049630, 0.000000, 0.000000) +round_ne r3.y, r1.w +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.zwzz, t0.yzxw, s3, r6.w +mad r3.zw, cb0[2].xxxy, r3.zzzw, cb0[2].zzzw +mul r5.xy, r5.zzzz, r3.zwzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r3.xyxx, t0.yzxw, s3, r6.w +mad r3.xy, cb0[2].xyxx, r3.xyxx, cb0[2].zwzz +mul r6.xy, r6.zzzz, r3.xyxx +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r6.xyzx +max r1.w, -r5.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r3.w, r1.w, l(1.090000) +mad r0.z, r1.w, l(1.090000), r0.z +dp3 r1.w, r5.xyzx, r5.xyzx +dp3 r5.x, r10.xyzx, r5.xyzx +sqrt r5.y, r1.w +mad r1.w, r1.w, r1.z, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r5.x, r5.x, r5.y +add r5.x, r5.x, -cb0[4].z +max r5.x, r5.x, l(0.000000) +mul r1.w, r1.w, r5.x +mad r0.y, r1.w, r3.w, r0.y +max r1.w, -r3.z, l(0.000000) +mad_sat r1.w, r1.w, cb0[5].y, l(2.000000) +mad r1.w, r1.w, l(0.600000), l(0.400000) +mul r3.w, r1.w, l(1.090000) +mad r0.z, r1.w, l(1.090000), r0.z +dp3 r1.w, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +sqrt r3.y, r1.w +mad r1.w, r1.w, r1.z, l(1.000000) +max r1.w, r1.w, l(0.000000) +div r3.x, r3.x, r3.y +add r3.x, r3.x, -cb0[4].z +max r3.x, r3.x, l(0.000000) +mul r1.w, r1.w, r3.x +mad r0.y, r1.w, r3.w, r0.y +dp2 r1.w, r2.xyxx, l(-0.135702, -0.641902, 0.000000, 0.000000) +round_ne r3.x, r1.w +dp2 r1.w, r2.zwzz, l(-0.135702, -0.641902, 0.000000, 0.000000) +round_ne r3.y, r1.w +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +add r6.xyzw, r0.xxxx, l(-4.832765, -6.083245, -4.344234, -5.467283) +add r7.xyzw, r0.xxxx, l(-4.759002, -6.029424, -9.092042, -5.367055) +sample_l_indexable(texture2d)(float,float,float,float) r11.z, r3.zwzz, t0.yzxw, s3, r6.x +mul r11.xy, r5.xyxx, r11.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r11.xyzx +max r0.x, -r5.z, l(0.000000) +mad_sat r0.x, r0.x, cb0[5].y, l(2.000000) +mad r0.x, r0.x, l(0.600000), l(0.400000) +mul r1.w, r0.x, l(1.250000) +mad r0.x, r0.x, l(1.250000), r0.z +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.z, r10.xyzx, r5.xyzx +sqrt r3.w, r0.z +mad r0.z, r0.z, r1.z, l(1.000000) +max r0.z, r0.z, l(0.000000) +div r3.z, r3.z, r3.w +add r3.z, r3.z, -cb0[4].z +max r3.z, r3.z, l(0.000000) +mul r0.z, r0.z, r3.z +mad r0.y, r0.z, r1.w, r0.y +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r6.x +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(1.250000) +mad r0.x, r0.z, l(1.250000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(-0.261938, -0.082051, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(-0.261938, -0.082051, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r11.z, r3.zwzz, t0.yzxw, s3, r6.y +mul r11.xy, r5.xyxx, r11.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r11.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.670000) +mad r0.x, r0.z, l(0.670000), r0.x +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.z, r10.xyzx, r5.xyzx +mad r3.w, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.z, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.z, r3.w, l(0.000000) +mul r0.z, r0.z, r3.z +mad r0.y, r0.z, r1.w, r0.y +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r6.y +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.670000) +mad r0.x, r0.z, l(0.670000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(-0.611775, 0.666642, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(-0.611775, 0.666642, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.zwzz, t0.yzxw, s3, r6.z +mad r3.zw, cb0[2].xxxy, r3.zzzw, cb0[2].zzzw +mul r5.xy, r5.zzzz, r3.zwzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.710000) +mad r0.x, r0.z, l(0.710000), r0.x +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.z, r10.xyzx, r5.xyzx +mad r3.w, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.z, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.z, r3.w, l(0.000000) +mul r0.z, r0.z, r3.z +mad r0.y, r0.z, r1.w, r0.y +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r6.z +mad r3.xy, cb0[2].xyxx, r3.xyxx, cb0[2].zwzz +mul r5.xy, r5.zzzz, r3.xyxx +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.710000) +mad r0.x, r0.z, l(0.710000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(0.436756, 0.251190, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(0.436756, 0.251190, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.zwzz, t0.yzxw, s3, r6.w +mad r3.zw, cb0[2].xxxy, r3.zzzw, cb0[2].zzzw +mul r5.xy, r5.zzzz, r3.zwzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r3.xyxx, t0.yzxw, s3, r6.w +mad r3.xy, cb0[2].xyxx, r3.xyxx, cb0[2].zwzz +mul r6.xy, r6.zzzz, r3.xyxx +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r6.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.610000) +mad r0.x, r0.z, l(0.610000), r0.x +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.w, r10.xyzx, r5.xyzx +mad r5.x, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.w, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.w, r5.x, l(0.000000) +mul r0.z, r0.z, r3.w +mad r0.y, r0.z, r1.w, r0.y +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.610000) +mad r0.x, r0.z, l(0.610000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(0.078844, 0.866187, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(0.078844, 0.866187, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r3.zwzz, t0.yzxw, s3, r7.x +mul r6.xy, r5.xyxx, r6.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r6.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.640000) +mad r0.x, r0.z, l(0.640000), r0.x +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.z, r10.xyzx, r5.xyzx +mad r3.w, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.z, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.z, r3.w, l(0.000000) +mul r0.z, r0.z, r3.z +mad r0.y, r0.z, r1.w, r0.y +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r7.x +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.640000) +mad r0.x, r0.z, l(0.640000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(-0.127909, -0.298690, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(-0.127909, -0.298690, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r3.zwzz, t0.yzxw, s3, r7.y +mul r6.xy, r5.xyxx, r6.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r6.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.600000) +mad r0.x, r0.z, l(0.600000), r0.x +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.z, r10.xyzx, r5.xyzx +mad r3.w, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.z, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.z, r3.w, l(0.000000) +mul r0.z, r0.z, r3.z +mad r0.y, r0.z, r1.w, r0.y +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r7.y +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.600000) +mad r0.x, r0.z, l(0.600000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(-0.040311, 0.024136, 0.000000, 0.000000) +round_ne r3.x, r0.z +dp2 r0.z, r2.zwzz, l(-0.040311, 0.024136, 0.000000, 0.000000) +round_ne r3.y, r0.z +mad r3.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r3.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r5.xy, cb0[2].xyxx, r3.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r3.zwzz, t0.yzxw, s3, r7.z +mul r6.xy, r5.xyxx, r6.zzzz +mad r5.xyz, -r8.yzwy, cb0[5].xxxx, r6.xyzx +max r0.z, -r5.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.600000) +mad r0.x, r0.z, l(0.600000), r0.x +dp3 r0.z, r5.xyzx, r5.xyzx +dp3 r3.z, r10.xyzx, r5.xyzx +mad r3.w, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.z, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.z, r3.w, l(0.000000) +mul r0.z, r0.z, r3.z +mad r0.y, r0.z, r1.w, r0.y +mad r3.zw, cb0[2].xxxy, r3.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r3.xyxx, t0.yzxw, s3, r7.z +mul r5.xy, r3.zwzz, r5.zzzz +mad r3.xyz, -r8.yzwy, cb0[5].xxxx, r5.xyzx +max r0.z, -r3.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r1.w, r0.z, l(0.600000) +mad r0.x, r0.z, l(0.600000), r0.x +dp3 r0.z, r3.xyzx, r3.xyzx +dp3 r3.x, r10.xyzx, r3.xyzx +mad r3.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r3.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r3.x, r3.y, l(0.000000) +mul r0.z, r0.z, r3.x +mad r0.y, r0.z, r1.w, r0.y +dp2 r0.z, r2.xyxx, l(0.162012, -0.528514, 0.000000, 0.000000) +dp2 r1.w, r2.zwzz, l(0.162012, -0.528514, 0.000000, 0.000000) +round_ne r2.y, r1.w +round_ne r2.x, r0.z +mad r2.zw, r2.xxxy, cb0[18].zzzw, r1.xxxy +mad r1.xy, -r2.xyxx, cb0[18].zwzz, r1.xyxx +mad r2.xy, cb0[2].xyxx, r2.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r3.z, r2.zwzz, t0.yzxw, s3, r7.w +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r1.xyxx, t0.yzxw, s3, r7.w +mad r1.xy, cb0[2].xyxx, r1.xyxx, cb0[2].zwzz +mul r5.xy, r5.zzzz, r1.xyxx +mad r1.xyw, -r8.yzyw, cb0[5].xxxx, r5.xyxz +mul r3.xy, r2.xyxx, r3.zzzz +mad r2.xyz, -r8.yzwy, cb0[5].xxxx, r3.xyzx +max r0.z, -r2.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r2.w, r0.z, l(0.790000) +mad r0.x, r0.z, l(0.790000), r0.x +dp3 r0.z, r2.xyzx, r2.xyzx +dp3 r2.x, r10.xyzx, r2.xyzx +mad r2.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r2.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r2.x, r2.y, l(0.000000) +mul r0.z, r0.z, r2.x +mad r0.y, r0.z, r2.w, r0.y +max r0.z, -r1.w, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r2.x, r0.z, l(0.790000) +mad r0.x, r0.z, l(0.790000), r0.x +dp3 r0.z, r1.xywx, r1.xywx +dp3 r1.x, r10.xyzx, r1.xywx +mad r1.y, r0.z, r1.z, l(1.000000) +sqrt r0.z, r0.z +div r0.z, r1.x, r0.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +max r1.x, r1.y, l(0.000000) +mul r0.z, r0.z, r1.x +mad r0.y, r0.z, r2.x, r0.y +div r0.x, r0.y, r0.x +mul r0.x, r0.x, cb0[3].y +min r0.x, r0.x, cb0[3].w +mov r1.w, l(0) +iadd r1.xyz, r9.xyzx, l(-1, 0, 0, 0) +ld_indexable(texture2darray)(float,float,float,float) r1.xyz, r1.xyzw, t6.xyzw +dp3 r0.y, r10.xyzx, r1.xyzx +add_sat r1.x, r0.y, l(0.500000) +mov r2.w, l(0) +iadd r2.xyz, r9.xyzx, l(0, -1, 0, 0) +ld_indexable(texture2darray)(float,float,float,float) r2.xyz, r2.xyzw, t6.xyzw +dp3 r0.y, r10.xyzx, r2.xyzx +add_sat r1.z, r0.y, l(0.500000) +mad r0.yz, -r4.xxzx, r1.xxzx, l(0.000000, 1.000000, 1.000000, 0.000000) +iadd r2.xyz, r9.xyzx, l(1, 0, 0, 0) +iadd r3.xyz, r9.xyzx, l(0, 1, 0, 0) +mov r2.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r2.xyz, r2.xyzw, t6.xyzw +dp3 r2.x, r10.xyzx, r2.xyzx +add_sat r1.y, r2.x, l(0.500000) +mov r3.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r2.xyz, r3.xyzw, t6.xyzw +dp3 r2.x, r10.xyzx, r2.xyzx +add_sat r1.w, r2.x, l(0.500000) +mad r0.yz, -r4.yywy, r1.yywy, r0.yyzy +mul r1.xyzw, r1.xyzw, r4.xyzw +mul r1.xyzw, r1.xyzw, l(3.050000, 3.050000, 3.050000, 3.050000) +round_ne r1.xyzw, r1.xyzw +dp4 r1.y, r1.xyzw, l(0.250980, 0.062745, 0.015686, 0.003922) +mul r0.yz, r0.yyzy, l(0.000000, 0.350000, 0.350000, 0.000000) +max r0.yz, r0.yyzy, l(0.000000, 0.000000, 0.000000, 0.000000) +add r0.y, r0.z, r0.y +add r0.y, -r0.y, l(1.000000) +mul r0.y, r0.y, r0.w +mad_sat r0.x, -r0.x, r0.y, l(1.000000) +log r0.x, r0.x +mul r0.x, r0.x, cb0[3].z +exp r1.xzw, r0.xxxx +store_uav_typed u0.xyzw, vThreadID.xyyy, r1.xyzw +ret +// Approximately 656 instruction slots used +#endif + +const BYTE CSGenerateQ2DXIL[] = +{ + 68, 88, 66, 67, 242, 9, + 48, 143, 250, 62, 32, 157, + 56, 106, 81, 76, 78, 165, + 62, 231, 1, 0, 0, 0, + 224, 94, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 16, 9, 0, 0, 32, 9, + 0, 0, 48, 9, 0, 0, + 68, 94, 0, 0, 82, 68, + 69, 70, 212, 8, 0, 0, + 1, 0, 0, 0, 124, 1, + 0, 0, 6, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 172, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 252, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 17, 1, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 44, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 67, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 6, 0, 0, 0, + 1, 0, 0, 0, 13, 0, + 0, 0, 89, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 102, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 86, + 105, 101, 119, 115, 112, 97, + 99, 101, 68, 101, 112, 116, + 104, 84, 97, 112, 83, 97, + 109, 112, 108, 101, 114, 0, + 103, 95, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 68, + 101, 112, 116, 104, 83, 111, + 117, 114, 99, 101, 0, 103, + 95, 100, 101, 105, 110, 116, + 101, 114, 108, 97, 99, 101, + 100, 78, 111, 114, 109, 97, + 108, 115, 0, 103, 95, 83, + 83, 65, 79, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 102, 1, 0, 0, + 1, 0, 0, 0, 148, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 188, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 136, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 235, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 126, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 171, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 35, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 98, 6, 0, 0, + 217, 1, 0, 0, 244, 1, + 0, 0, 0, 0, 0, 0, + 24, 2, 0, 0, 244, 1, + 0, 0, 8, 0, 0, 0, + 41, 2, 0, 0, 244, 1, + 0, 0, 16, 0, 0, 0, + 54, 2, 0, 0, 244, 1, + 0, 0, 24, 0, 0, 0, + 67, 2, 0, 0, 244, 1, + 0, 0, 32, 0, 0, 0, + 90, 2, 0, 0, 244, 1, + 0, 0, 40, 0, 0, 0, + 113, 2, 0, 0, 132, 2, + 0, 0, 48, 0, 0, 0, + 168, 2, 0, 0, 132, 2, + 0, 0, 52, 0, 0, 0, + 189, 2, 0, 0, 132, 2, + 0, 0, 56, 0, 0, 0, + 205, 2, 0, 0, 132, 2, + 0, 0, 60, 0, 0, 0, + 223, 2, 0, 0, 132, 2, + 0, 0, 64, 0, 0, 0, + 240, 2, 0, 0, 132, 2, + 0, 0, 68, 0, 0, 0, + 1, 3, 0, 0, 132, 2, + 0, 0, 72, 0, 0, 0, + 29, 3, 0, 0, 132, 2, + 0, 0, 76, 0, 0, 0, + 62, 3, 0, 0, 132, 2, + 0, 0, 80, 0, 0, 0, + 86, 3, 0, 0, 132, 2, + 0, 0, 84, 0, 0, 0, + 105, 3, 0, 0, 132, 2, + 0, 0, 88, 0, 0, 0, + 123, 3, 0, 0, 132, 2, + 0, 0, 92, 0, 0, 0, + 148, 3, 0, 0, 132, 2, + 0, 0, 96, 0, 0, 0, + 161, 3, 0, 0, 176, 3, + 0, 0, 100, 0, 0, 0, + 212, 3, 0, 0, 132, 2, + 0, 0, 104, 0, 0, 0, + 234, 3, 0, 0, 132, 2, + 0, 0, 108, 0, 0, 0, + 11, 4, 0, 0, 44, 4, + 0, 0, 112, 0, 0, 0, + 80, 4, 0, 0, 132, 2, + 0, 0, 192, 0, 0, 0, + 97, 4, 0, 0, 132, 2, + 0, 0, 196, 0, 0, 0, + 114, 4, 0, 0, 132, 2, + 0, 0, 200, 0, 0, 0, + 131, 4, 0, 0, 132, 2, + 0, 0, 204, 0, 0, 0, + 138, 4, 0, 0, 244, 1, + 0, 0, 208, 0, 0, 0, + 159, 4, 0, 0, 244, 1, + 0, 0, 216, 0, 0, 0, + 187, 4, 0, 0, 244, 1, + 0, 0, 224, 0, 0, 0, + 209, 4, 0, 0, 244, 1, + 0, 0, 232, 0, 0, 0, + 238, 4, 0, 0, 8, 5, + 0, 0, 240, 0, 0, 0, + 44, 5, 0, 0, 244, 1, + 0, 0, 248, 0, 0, 0, + 67, 5, 0, 0, 244, 1, + 0, 0, 0, 1, 0, 0, + 90, 5, 0, 0, 244, 1, + 0, 0, 8, 1, 0, 0, + 120, 5, 0, 0, 244, 1, + 0, 0, 16, 1, 0, 0, + 144, 5, 0, 0, 244, 1, + 0, 0, 24, 1, 0, 0, + 175, 5, 0, 0, 244, 1, + 0, 0, 32, 1, 0, 0, + 210, 5, 0, 0, 244, 1, + 0, 0, 40, 1, 0, 0, + 252, 5, 0, 0, 244, 1, + 0, 0, 48, 1, 0, 0, + 27, 6, 0, 0, 244, 1, + 0, 0, 56, 1, 0, 0, + 68, 6, 0, 0, 108, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 144, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 202, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 12, 85, + 0, 0, 80, 0, 5, 0, + 67, 21, 0, 0, 106, 8, + 0, 1, 89, 8, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 3, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 88, 64, + 0, 4, 0, 112, 16, 0, + 6, 0, 0, 0, 85, 85, + 0, 0, 156, 24, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 12, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 0, 0, 0, 10, 194, 0, + 16, 0, 0, 0, 0, 0, + 6, 4, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 10, 0, 16, 0, + 0, 0, 0, 0, 28, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 78, 0, 0, 8, 0, 208, + 0, 0, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 230, 10, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 56, 0, + 0, 8, 98, 0, 16, 0, + 0, 0, 0, 0, 166, 11, + 16, 0, 0, 0, 0, 0, + 166, 139, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 50, 0, 0, 11, 98, 0, + 16, 0, 0, 0, 0, 0, + 6, 129, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 166, 139, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 109, 0, 0, 139, + 194, 0, 0, 128, 67, 85, + 21, 0, 162, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 150, 115, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 1, 0, 0, 0, 109, 0, + 0, 140, 1, 254, 1, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 3, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 82, 0, 16, 0, + 2, 0, 0, 0, 6, 2, + 16, 0, 3, 0, 0, 0, + 0, 0, 0, 8, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 86, 5, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 7, + 242, 0, 16, 0, 5, 0, + 0, 0, 86, 15, 16, 0, + 4, 0, 0, 0, 6, 10, + 16, 0, 4, 0, 0, 0, + 51, 0, 0, 9, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 10, 215, 35, 61, 14, 0, + 0, 7, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 0, 32, 0, 11, + 242, 0, 16, 0, 4, 0, + 0, 0, 70, 14, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 54, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 66, 0, + 16, 0, 6, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 56, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 86, 5, 16, 0, + 3, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 54, 0, 0, 6, 50, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 7, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 8, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 86, 5, 16, 0, + 3, 0, 0, 0, 54, 0, + 0, 5, 146, 0, 16, 0, + 8, 0, 0, 0, 86, 5, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 98, 0, + 16, 0, 0, 0, 0, 0, + 6, 0, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 6, 2, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 8, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 14, 0, + 0, 7, 50, 0, 16, 0, + 6, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 166, 10, 16, 0, 3, 0, + 0, 0, 50, 32, 0, 11, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 134, 2, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 166, 10, 16, 0, 0, 0, + 0, 0, 102, 10, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 150, 7, 16, 0, + 8, 0, 0, 0, 150, 7, + 16, 0, 8, 0, 0, 0, + 75, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 56, 32, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 205, 204, + 76, 63, 1, 64, 0, 0, + 205, 204, 76, 62, 56, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 89, 63, 14, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 7, 0, 0, 0, + 14, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 191, 42, 0, 16, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 64, 50, 0, 0, 9, + 18, 0, 16, 0, 2, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 9, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 9, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 6, + 66, 0, 16, 0, 9, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 45, 0, 0, 137, + 2, 2, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 0, 9, 0, 0, 0, + 70, 126, 16, 0, 6, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 14, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 66, 0, + 16, 0, 7, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 6, 0, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 214, 5, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 210, 0, 16, 0, + 2, 0, 0, 0, 6, 9, + 16, 0, 6, 0, 0, 0, + 6, 0, 16, 0, 2, 0, + 0, 0, 6, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 86, 5, 16, 0, 2, 0, + 0, 0, 102, 10, 16, 0, + 7, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 134, 3, + 16, 0, 2, 0, 0, 0, + 134, 3, 16, 0, 2, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 134, 3, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 75, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 2, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 16, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 9, 130, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 75, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 17, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 56, 0, 0, 10, + 242, 0, 16, 0, 2, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 70, 142, + 32, 6, 0, 0, 0, 0, + 7, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 47, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 240, 237, 72, 63, + 203, 13, 17, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 240, 237, 72, 63, + 203, 13, 17, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 6, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 121, 162, + 141, 192, 35, 166, 171, 192, + 96, 250, 224, 192, 254, 143, + 153, 192, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 6, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 7, 0, 0, 0, + 70, 0, 16, 0, 5, 0, + 0, 0, 166, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 5, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 14, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 5, 0, 0, 0, + 0, 0, 0, 9, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 10, 194, 0, + 16, 0, 3, 0, 0, 0, + 166, 14, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 10, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 3, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 3, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 6, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 166, 10, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 3, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 52, 0, + 0, 8, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 16, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 14, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 10, 82, 0, 16, 0, + 3, 0, 0, 0, 6, 2, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 58, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 220, 59, 133, 62, 197, 108, + 151, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 220, 59, 133, 62, 197, 108, + 151, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 4, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 5, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 6, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 7, 0, 0, 0, + 70, 0, 16, 0, 5, 0, + 0, 0, 166, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 5, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 6, 4, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 6, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 5, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 3, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 75, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 39, 53, 214, 61, 40, 120, + 171, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 39, 53, 214, 61, 40, 120, + 171, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 4, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 3, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 3, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 5, 0, 0, 0, + 166, 10, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 5, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 123, 20, 142, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 123, 20, + 142, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 5, 0, 0, 0, + 166, 10, 16, 0, 5, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 3, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 123, 20, 142, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 123, 20, + 142, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 75, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 112, 208, 46, 191, 76, 73, + 75, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 112, 208, 46, 191, 76, 73, + 75, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 4, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 3, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 3, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 5, 0, 0, 0, + 166, 10, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 5, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 6, 0, 0, 0, + 166, 10, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 3, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 31, 133, 139, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 31, 133, + 139, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 34, 0, + 16, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 18, 0, + 16, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 5, 0, + 0, 0, 26, 0, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 5, 0, 0, 0, 10, 0, + 16, 0, 5, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 5, 0, 0, 0, 10, 0, + 16, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 31, 133, 139, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 31, 133, + 139, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 75, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 93, 245, 10, 190, 169, 83, + 36, 191, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 93, 245, 10, 190, 169, 83, + 36, 191, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 4, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 5, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 6, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 3, 166, 154, 192, + 242, 169, 194, 192, 247, 3, + 139, 192, 252, 243, 174, 192, + 0, 0, 0, 10, 242, 0, + 16, 0, 7, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 191, 73, 152, 192, 11, 241, + 192, 192, 1, 121, 17, 193, + 234, 190, 171, 192, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 11, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 6, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 11, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 11, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 52, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 160, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 160, 63, 42, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 75, 0, 0, 5, + 130, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 66, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 0, 0, 0, 9, 66, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 6, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 166, 10, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 160, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 160, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 187, 28, 134, 190, + 115, 10, 168, 189, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 187, 28, 134, 190, + 115, 10, 168, 189, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 11, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 6, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 11, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 11, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 31, 133, 43, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 31, 133, 43, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 6, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 166, 10, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 31, 133, 43, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 31, 133, 43, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 66, 157, 28, 191, + 16, 169, 42, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 66, 157, 28, 191, + 16, 169, 42, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 166, 14, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 143, 194, 53, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 143, 194, 53, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 143, 194, 53, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 143, 194, 53, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 111, 158, 223, 62, + 2, 156, 128, 62, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 111, 158, 223, 62, + 2, 156, 128, 62, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 3, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 166, 14, 16, 0, 3, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 6, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 6, 0, + 0, 0, 166, 10, 16, 0, + 6, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 246, 40, 28, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 246, 40, 28, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 18, 0, 16, 0, 5, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 130, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 246, 40, 28, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 246, 40, 28, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 50, 121, 161, 61, + 105, 190, 93, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 50, 121, 161, 61, + 105, 190, 93, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 10, 215, 35, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 10, 215, 35, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 166, 10, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 10, 215, 35, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 10, 215, 35, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 171, 250, 2, 190, + 231, 237, 152, 190, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 171, 250, 2, 190, + 231, 237, 152, 190, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 166, 10, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 105, 29, 37, 189, + 82, 185, 197, 60, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 105, 29, 37, 189, + 82, 185, 197, 60, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 3, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 3, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 166, 10, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 151, 230, 37, 62, + 180, 76, 7, 191, 0, 0, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 130, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 151, 230, 37, 62, 180, 76, + 7, 191, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 2, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 3, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 7, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 7, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 5, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 178, 0, + 16, 0, 1, 0, 0, 0, + 150, 13, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 8, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 3, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 166, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 2, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 113, 61, 74, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 113, 61, 74, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 113, 61, 74, 63, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 113, 61, 74, 63, 10, 0, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 3, 16, 0, 1, 0, + 0, 0, 70, 3, 16, 0, + 1, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 3, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 75, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 51, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 114, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 6, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 0, 32, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 114, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 2, 2, + 0, 128, 67, 85, 21, 0, + 114, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 70, 126, + 16, 0, 6, 0, 0, 0, + 16, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 0, 32, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 63, 50, 0, 0, 13, + 98, 0, 16, 0, 0, 0, + 0, 0, 6, 2, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 6, 2, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 0, 0, + 30, 0, 0, 10, 114, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 70, 126, 16, 0, + 6, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 0, 32, 0, 7, + 34, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 63, + 54, 0, 0, 5, 130, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 45, 0, 0, 137, + 2, 2, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 70, 126, 16, 0, 6, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 0, 32, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 63, 50, 0, + 0, 10, 98, 0, 16, 0, + 0, 0, 0, 0, 86, 7, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 86, 7, + 16, 0, 1, 0, 0, 0, + 86, 6, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 10, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 51, 51, 67, 64, 51, 51, + 67, 64, 51, 51, 67, 64, + 51, 51, 67, 64, 64, 0, + 0, 5, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 17, 0, 0, 10, 34, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 129, 128, 128, 62, 129, 128, + 128, 61, 129, 128, 128, 60, + 129, 128, 128, 59, 56, 0, + 0, 10, 98, 0, 16, 0, + 0, 0, 0, 0, 86, 6, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 51, 51, 179, 62, + 51, 51, 179, 62, 0, 0, + 0, 0, 52, 0, 0, 10, + 98, 0, 16, 0, 0, 0, + 0, 0, 86, 6, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 8, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 56, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 47, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 25, 0, 0, 5, 210, 0, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 6, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 2, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 144, 2, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 92, 2, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 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, 29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ3.h b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ3.h new file mode 100644 index 0000000..a61f630 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ3.h @@ -0,0 +1,2220 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_LinearClampSampler sampler NA NA s2 1 +// g_ViewspaceDepthTapSampler sampler NA NA s3 1 +// g_ViewspaceDepthSource texture float 2d t0 1 +// g_LoadCounter texture uint 1d t2 1 +// g_ImportanceMap texture float 2d t3 1 +// g_FinalSSAO texture float4 2darray t4 1 +// g_deinterlacedNormals texture float4 2darray t6 1 +// g_SSAOOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_immediateConstantBuffer { { 0.784881, 0.566617, 1.500000, -0.126083}, + { 0.260222, -0.295752, 1.500000, -1.064030}, + { 0.104594, 0.083725, 1.110000, -2.730563}, + { -0.682868, 0.049630, 1.090000, -0.498827}, + { -0.135702, -0.641902, 1.250000, -0.532765}, + { -0.261938, -0.082051, 0.670000, -1.783245}, + { -0.611775, 0.666642, 0.710000, -0.044234}, + { 0.436756, 0.251190, 0.610000, -1.167283}, + { 0.078844, 0.866187, 0.640000, -0.459002}, + { -0.127909, -0.298690, 0.600000, -1.729424}, + { -0.040311, 0.024136, 0.600000, -4.792042}, + { 0.162012, -0.528514, 0.790000, -1.067055}, + { -0.709912, 0.473011, 0.640000, -0.335236}, + { 0.032777, -0.223497, 0.600000, -1.982384}, + { 0.689217, 0.368007, 0.630000, -0.266718}, + { 0.292518, 0.377754, 0.610000, -1.422520}, + { -0.122241, 0.965826, 0.600000, -0.426142}, + { 0.110715, -0.161311, 0.600000, -2.165947}, + { 0.465621, -0.597477, 0.600000, -0.189760}, + { -0.515488, 0.118042, 0.600000, -1.246800}, + { 0.891413, -0.420904, 0.600000, 0.028192}, + { -0.324025, -0.015915, 0.600000, -1.543018}, + { 0.607712, 0.416352, 0.600000, -0.605411}, + { 0.023796, -0.082398, 0.600000, -3.809046}, + { 0.489512, -0.236570, 0.600000, -1.189011}, + { -0.176116, -0.816969, 0.600000, -0.513724}, + { -0.339302, -0.207322, 0.600000, -1.698047}, + { -0.919744, 0.054032, 0.600000, 0.062246}, + { -0.150646, -0.149493, 0.600000, -1.896062}, + { 0.531810, -0.352104, 0.600000, -0.758838}, + { 0.414872, 0.814426, 0.600000, -0.505648}, + { -0.241070, -0.327215, 0.600000, -1.665244} } +dcl_constantbuffer CB0[20], dynamicIndexed +dcl_sampler s1, mode_default +dcl_sampler s2, mode_default +dcl_sampler s3, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture1d (uint,uint,uint,uint) t2 +dcl_resource_texture2d (float,float,float,float) t3 +dcl_resource_texture2darray (float,float,float,float) t4 +dcl_resource_texture2darray (float,float,float,float) t6 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 16 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +add r0.zw, r0.xxxy, l(0.000000, 0.000000, 0.500000, 0.500000) +mad r1.xy, r0.zwzz, cb0[18].zwzz, cb0[19].zwzz +gather4_aoffimmi_indexable(-1,-1,0)(texture2d)(float,float,float,float) r2.xyz, r1.xyxx, t0.xyzw, s1.x +gather4_indexable(texture2d)(float,float,float,float) r3.yw, r1.xyxx, t0.yzwx, s1.x +mul r1.zw, r0.zzzw, cb0[13].zzzw +mad r1.zw, cb0[1].xxxy, r1.zzzw, cb0[1].zzzw +mul r4.yz, r2.yyyy, r1.zzwz +mov r5.xy, vThreadID.xyxx +mov r5.z, cb0[6].y +mov r5.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r6.xyz, r5.xyzw, t6.xyzw +mul r1.zw, r2.yyyy, cb0[1].xxxy +mul r7.xy, r1.zwzz, cb0[13].zwzz +mov r4.xw, r2.yyyy +dp3 r1.z, r4.yzwy, r4.yzwy +sqrt r1.z, r1.z +mul_sat r1.z, r1.z, cb0[4].w +mad r1.z, r1.z, l(0.800000), l(0.200000) +mul r1.z, r1.z, cb0[3].x +mul r1.w, r1.z, l(0.850000) +div r1.w, r1.w, r7.x +mul r1.z, r1.z, r1.z +div r1.z, l(-1.000000), r1.z +mad r0.x, r0.y, l(2.000000), r0.x +ftou r0.x, r0.x +udiv null, r0.x, r0.x, l(5) +mul r8.xyzw, r1.wwww, cb0[r0.x + 7].xyzw +mul r9.xyz, r4.yzwy, cb0[5].xxxx +mov r3.xz, r2.xxzx +add r10.xyzw, -r2.yyyy, r3.xyzw +add r11.xyzw, r10.yyww, r10.xxzz +min r10.xyzw, |r10.xyzw|, |r11.xyzw| +mul r0.x, r2.y, l(0.040000) +div r2.xyzw, r10.xyzw, r0.xxxx +add_sat r2.xyzw, -r2.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +div r10.xy, r9.xyxx, r9.zzzz +mov r11.xy, -r7.xyxx +mad r0.xy, -r4.xxxx, cb0[5].xxxx, r3.xzxx +mov r10.z, l(1.000000) +mov r11.z, l(0) +mad r9.xyw, r10.xyxz, r0.xxxx, r11.xzxz +mad r3.xy, -r4.xxxx, cb0[5].xxxx, r3.ywyy +mov r7.zw, l(0,0,0,0) +mad r3.xzw, r10.xxyz, r3.xxxx, r7.xxzz +mad r11.xyz, r10.xyzx, r0.yyyy, r11.zyzz +mad r7.xyz, r10.xyzx, r3.yyyy, r7.zyzz +mul r0.x, r1.z, l(4.000000) +dp3 r0.y, r9.xywx, r9.xywx +dp3 r3.y, r6.xyzx, r9.xywx +sqrt r4.x, r0.y +div r3.y, r3.y, r4.x +mad r0.y, r0.y, r0.x, l(1.000000) +max r0.y, r0.y, l(0.000000) +add r3.y, r3.y, -cb0[4].z +max r3.y, r3.y, l(0.000000) +mul r10.x, r0.y, r3.y +dp3 r0.y, r3.xzwx, r3.xzwx +dp3 r3.x, r6.xyzx, r3.xzwx +sqrt r3.y, r0.y +div r3.x, r3.x, r3.y +mad r0.y, r0.y, r0.x, l(1.000000) +max r0.y, r0.y, l(0.000000) +add r3.x, r3.x, -cb0[4].z +max r3.x, r3.x, l(0.000000) +mul r10.y, r0.y, r3.x +dp3 r0.y, r11.xyzx, r11.xyzx +dp3 r3.x, r6.xyzx, r11.xyzx +sqrt r3.y, r0.y +div r3.x, r3.x, r3.y +mad r0.y, r0.y, r0.x, l(1.000000) +max r0.y, r0.y, l(0.000000) +add r3.x, r3.x, -cb0[4].z +max r3.x, r3.x, l(0.000000) +mul r10.z, r0.y, r3.x +dp3 r0.y, r7.xyzx, r7.xyzx +dp3 r3.x, r6.xyzx, r7.xyzx +sqrt r3.y, r0.y +div r3.x, r3.x, r3.y +mad r0.x, r0.y, r0.x, l(1.000000) +add r0.y, r3.x, -cb0[4].z +max r0.xy, r0.xyxx, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r10.w, r0.x, r0.y +dp4 r0.x, r10.xyzw, r2.xyzw +mul r0.x, r0.x, cb0[12].z +iadd r3.xyz, r5.xyzx, l(-1, 0, 0, 0) +mov r3.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r3.xyz, r3.xyzw, t6.xyzw +iadd r7.xyz, r5.xyzx, l(1, 0, 0, 0) +ld_indexable(texture2darray)(float,float,float,float) r7.xyz, r7.xyzw, t6.xyzw +iadd r10.xyz, r5.xyzx, l(0, -1, 0, 0) +mov r10.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r9.xyw, r10.xyzw, t6.xywz +iadd r10.xyz, r5.xyzx, l(0, 1, 0, 0) +mov r10.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r10.xyz, r10.xyzw, t6.xyzw +dp3 r0.y, r6.xyzx, r3.xyzx +add_sat r3.x, r0.y, l(0.500000) +dp3 r0.y, r6.xyzx, r7.xyzx +add_sat r3.y, r0.y, l(0.500000) +dp3 r0.y, r6.xyzx, r9.xywx +add_sat r3.z, r0.y, l(0.500000) +dp3 r0.y, r6.xyzx, r10.xyzx +add_sat r3.w, r0.y, l(0.500000) +mul r7.xyzw, r2.xyzw, r3.xyzw +log r0.y, r1.w +mad r0.zw, r0.zzzw, cb0[13].zzzw, cb0[15].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r0.z, r0.zwzz, t3.yzxw, s2, l(0.000000) +mad r0.w, r0.z, l(0.843750), l(0.156250) +ld_indexable(texture2darray)(float,float,float,float) r5.xy, r5.xyzw, t4.xyzw +mul r1.w, r5.y, l(20.000000) +mul r4.x, r1.w, r5.x +mad r0.x, r0.x, r0.w, r4.x +ld_indexable(texture1d)(uint,uint,uint,uint) r0.w, l(0, 0, 0, 0), t2.yzwx +utof r0.w, r0.w +mul r0.w, r0.w, cb0[5].z +div_sat r0.w, cb0[5].w, r0.w +mul r0.z, r0.w, r0.z +mad r0.z, r0.z, l(27.000000), l(1.500000) +ftou r0.z, r0.z +iadd r0.z, r0.z, l(5) +umin r0.z, r0.z, l(32) +dp2 r0.w, r8.xyxx, l(-0.261938, -0.082051, 0.000000, 0.000000) +dp2 r4.x, r8.zwzz, l(-0.261938, -0.082051, 0.000000, 0.000000) +round_ne r5.x, r0.w +round_ne r5.y, r4.x +add r0.yw, r0.yyyy, l(0.000000, -4.300000, 0.000000, -6.083245) +mad r5.zw, r5.xxxy, cb0[18].zzzw, r1.xxxy +sample_l_indexable(texture2d)(float,float,float,float) r4.x, r5.zwzz, t0.xyzw, s3, r0.w +mad r5.xy, -r5.xyxx, cb0[18].zwzz, r1.xyxx +sample_l_indexable(texture2d)(float,float,float,float) r0.w, r5.xyxx, t0.yzwx, s3, r0.w +iadd r0.z, r0.z, l(-1) +mov r10.xy, r5.zwzz +mov r10.z, r4.x +mov r11.xy, r5.xyxx +mov r11.z, r0.w +mov r9.x, r0.x +mov r9.y, r1.w +mov r6.w, l(-0.044234) +mov r12.xyz, l(-0.611775,0.666642,5,0) +loop + uge r9.w, r12.z, r0.z + breakc_nz r9.w + dp2 r9.w, r8.xyxx, r12.xyxx + dp2 r10.w, r8.zwzz, r12.xyxx + round_ne r13.x, r9.w + round_ne r13.y, r10.w + add r9.w, r0.y, r6.w + mad r14.xy, r13.xyxx, cb0[18].zwzz, r1.xyxx + sample_l_indexable(texture2d)(float,float,float,float) r14.z, r14.xyxx, t0.yzxw, s3, r9.w + mad r13.xy, -r13.xyxx, cb0[18].zwzz, r1.xyxx + sample_l_indexable(texture2d)(float,float,float,float) r13.z, r13.xyxx, t0.yzxw, s3, r9.w + mad r15.xy, cb0[2].xyxx, r10.xyxx, cb0[2].zwzz + mul r10.xy, r10.zzzz, r15.xyxx + mad r15.xyz, -r4.yzwy, cb0[5].xxxx, r10.xyzx + dp3 r9.w, r15.xyzx, r15.xyzx + dp3 r10.w, r6.xyzx, r15.xyzx + sqrt r11.w, r9.w + div r10.w, r10.w, r11.w + mad r9.w, r9.w, r1.z, l(1.000000) + max r9.w, r9.w, l(0.000000) + add r10.w, r10.w, -cb0[4].z + max r10.w, r10.w, l(0.000000) + mul r9.w, r9.w, r10.w + max r10.w, -r15.z, l(0.000000) + mad_sat r10.w, r10.w, cb0[5].y, l(2.000000) + mad r10.w, r10.w, l(0.600000), l(0.400000) + mad r9.w, r9.w, r10.w, r9.x + add r10.w, r9.y, r10.w + mad r15.xy, cb0[2].xyxx, r11.xyxx, cb0[2].zwzz + mul r11.xy, r11.zzzz, r15.xyxx + mad r15.xyz, -r4.yzwy, cb0[5].xxxx, r11.xyzx + dp3 r11.w, r15.xyzx, r15.xyzx + dp3 r13.w, r6.xyzx, r15.xyzx + sqrt r14.w, r11.w + div r13.w, r13.w, r14.w + mad r11.w, r11.w, r1.z, l(1.000000) + max r11.w, r11.w, l(0.000000) + add r13.w, r13.w, -cb0[4].z + max r13.w, r13.w, l(0.000000) + mul r11.w, r11.w, r13.w + max r13.w, -r15.z, l(0.000000) + mad_sat r13.w, r13.w, cb0[5].y, l(2.000000) + mad r13.w, r13.w, l(0.600000), l(0.400000) + mad r9.x, r11.w, r13.w, r9.w + add r9.y, r10.w, r13.w + iadd r12.zw, r12.zzzz, l(0, 0, 1, 2) + mov r10.xyz, r14.xyzx + mov r11.xyz, r13.xyzx + mov r12.xy, icb[r12.w + 0].xyxx + mov r6.w, icb[r12.w + 0].w +endloop +mad r0.xy, cb0[2].xyxx, r10.xyxx, cb0[2].zwzz +mul r10.xy, r10.zzzz, r0.xyxx +mad r0.xyz, -r4.yzwy, cb0[5].xxxx, r10.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +dp3 r0.x, r6.xyzx, r0.xyzx +sqrt r0.y, r0.w +div r0.x, r0.x, r0.y +mad r0.y, r0.w, r1.z, l(1.000000) +add r0.x, r0.x, -cb0[4].z +max r0.xy, r0.xyxx, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.x, r0.y, r0.x +max r0.y, -r0.z, l(0.000000) +mad_sat r0.y, r0.y, cb0[5].y, l(2.000000) +mad r0.y, r0.y, l(0.600000), l(0.400000) +mad r0.x, r0.x, r0.y, r9.x +add r0.y, r0.y, r9.y +mad r0.zw, cb0[2].xxxy, r11.xxxy, cb0[2].zzzw +mul r11.xy, r11.zzzz, r0.zwzz +mad r1.xyw, -r4.yzyw, cb0[5].xxxx, r11.xyxz +dp3 r0.z, r1.xywx, r1.xywx +dp3 r0.w, r6.xyzx, r1.xywx +sqrt r1.x, r0.z +div r0.w, r0.w, r1.x +mad r0.z, r0.z, r1.z, l(1.000000) +add r0.w, r0.w, -cb0[4].z +max r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.z, r0.z, r0.w +max r0.w, -r1.w, l(0.000000) +mad_sat r0.w, r0.w, cb0[5].y, l(2.000000) +mad r0.w, r0.w, l(0.600000), l(0.400000) +mad r0.x, r0.z, r0.w, r0.x +add r0.y, r0.w, r0.y +div r0.x, r0.x, r0.y +mad_sat r0.y, r9.z, cb0[4].x, cb0[4].y +mad r0.zw, -r2.xxxz, r3.xxxz, l(0.000000, 0.000000, 1.000000, 1.000000) +mad r0.zw, -r2.yyyw, r3.yyyw, r0.zzzw +mul r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.350000, 0.350000) +max r0.zw, r0.zzzw, l(0.000000, 0.000000, 0.000000, 0.000000) +add r0.z, r0.w, r0.z +add r0.z, -r0.z, l(1.000000) +mul r0.y, r0.z, r0.y +mul r0.x, r0.x, cb0[3].y +min r0.x, r0.x, cb0[3].w +mad_sat r0.x, -r0.x, r0.y, l(1.000000) +log r0.x, r0.x +mul r0.x, r0.x, cb0[3].z +exp r0.xzw, r0.xxxx +mul r1.xyzw, r7.xyzw, l(3.050000, 3.050000, 3.050000, 3.050000) +round_ne r1.xyzw, r1.xyzw +dp4 r0.y, r1.xyzw, l(0.250980, 0.062745, 0.015686, 0.003922) +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xyzw +ret +// Approximately 244 instruction slots used +#endif + +const BYTE CSGenerateQ3DXIL[] = +{ + 68, 88, 66, 67, 30, 10, + 94, 210, 141, 107, 253, 50, + 224, 112, 34, 183, 228, 81, + 180, 125, 1, 0, 0, 0, + 248, 42, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 208, 9, 0, 0, 224, 9, + 0, 0, 240, 9, 0, 0, + 92, 42, 0, 0, 82, 68, + 69, 70, 148, 9, 0, 0, + 1, 0, 0, 0, 60, 2, + 0, 0, 10, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 108, 9, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 124, 1, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 145, 1, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 166, 1, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 193, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 216, 1, 0, 0, + 2, 0, 0, 0, 4, 0, + 0, 0, 2, 0, 0, 0, + 255, 255, 255, 255, 2, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 230, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 3, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 246, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 4, 0, 0, 0, + 1, 0, 0, 0, 13, 0, + 0, 0, 2, 2, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 6, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 24, 2, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 5, 0, 0, 0, + 37, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 77, 105, 114, + 114, 111, 114, 83, 97, 109, + 112, 108, 101, 114, 0, 103, + 95, 76, 105, 110, 101, 97, + 114, 67, 108, 97, 109, 112, + 83, 97, 109, 112, 108, 101, + 114, 0, 103, 95, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 68, 101, 112, 116, 104, + 84, 97, 112, 83, 97, 109, + 112, 108, 101, 114, 0, 103, + 95, 86, 105, 101, 119, 115, + 112, 97, 99, 101, 68, 101, + 112, 116, 104, 83, 111, 117, + 114, 99, 101, 0, 103, 95, + 76, 111, 97, 100, 67, 111, + 117, 110, 116, 101, 114, 0, + 103, 95, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 0, 103, 95, + 70, 105, 110, 97, 108, 83, + 83, 65, 79, 0, 103, 95, + 100, 101, 105, 110, 116, 101, + 114, 108, 97, 99, 101, 100, + 78, 111, 114, 109, 97, 108, + 115, 0, 103, 95, 83, 83, + 65, 79, 79, 117, 116, 112, + 117, 116, 0, 83, 83, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 66, 117, + 102, 102, 101, 114, 0, 171, + 171, 171, 37, 2, 0, 0, + 1, 0, 0, 0, 84, 2, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 124, 2, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 72, 9, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 171, 2, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 62, 3, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 107, 4, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 227, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 192, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 34, 7, 0, 0, + 153, 2, 0, 0, 180, 2, + 0, 0, 0, 0, 0, 0, + 216, 2, 0, 0, 180, 2, + 0, 0, 8, 0, 0, 0, + 233, 2, 0, 0, 180, 2, + 0, 0, 16, 0, 0, 0, + 246, 2, 0, 0, 180, 2, + 0, 0, 24, 0, 0, 0, + 3, 3, 0, 0, 180, 2, + 0, 0, 32, 0, 0, 0, + 26, 3, 0, 0, 180, 2, + 0, 0, 40, 0, 0, 0, + 49, 3, 0, 0, 68, 3, + 0, 0, 48, 0, 0, 0, + 104, 3, 0, 0, 68, 3, + 0, 0, 52, 0, 0, 0, + 125, 3, 0, 0, 68, 3, + 0, 0, 56, 0, 0, 0, + 141, 3, 0, 0, 68, 3, + 0, 0, 60, 0, 0, 0, + 159, 3, 0, 0, 68, 3, + 0, 0, 64, 0, 0, 0, + 176, 3, 0, 0, 68, 3, + 0, 0, 68, 0, 0, 0, + 193, 3, 0, 0, 68, 3, + 0, 0, 72, 0, 0, 0, + 221, 3, 0, 0, 68, 3, + 0, 0, 76, 0, 0, 0, + 254, 3, 0, 0, 68, 3, + 0, 0, 80, 0, 0, 0, + 22, 4, 0, 0, 68, 3, + 0, 0, 84, 0, 0, 0, + 41, 4, 0, 0, 68, 3, + 0, 0, 88, 0, 0, 0, + 59, 4, 0, 0, 68, 3, + 0, 0, 92, 0, 0, 0, + 84, 4, 0, 0, 68, 3, + 0, 0, 96, 0, 0, 0, + 97, 4, 0, 0, 112, 4, + 0, 0, 100, 0, 0, 0, + 148, 4, 0, 0, 68, 3, + 0, 0, 104, 0, 0, 0, + 170, 4, 0, 0, 68, 3, + 0, 0, 108, 0, 0, 0, + 203, 4, 0, 0, 236, 4, + 0, 0, 112, 0, 0, 0, + 16, 5, 0, 0, 68, 3, + 0, 0, 192, 0, 0, 0, + 33, 5, 0, 0, 68, 3, + 0, 0, 196, 0, 0, 0, + 50, 5, 0, 0, 68, 3, + 0, 0, 200, 0, 0, 0, + 67, 5, 0, 0, 68, 3, + 0, 0, 204, 0, 0, 0, + 74, 5, 0, 0, 180, 2, + 0, 0, 208, 0, 0, 0, + 95, 5, 0, 0, 180, 2, + 0, 0, 216, 0, 0, 0, + 123, 5, 0, 0, 180, 2, + 0, 0, 224, 0, 0, 0, + 145, 5, 0, 0, 180, 2, + 0, 0, 232, 0, 0, 0, + 174, 5, 0, 0, 200, 5, + 0, 0, 240, 0, 0, 0, + 236, 5, 0, 0, 180, 2, + 0, 0, 248, 0, 0, 0, + 3, 6, 0, 0, 180, 2, + 0, 0, 0, 1, 0, 0, + 26, 6, 0, 0, 180, 2, + 0, 0, 8, 1, 0, 0, + 56, 6, 0, 0, 180, 2, + 0, 0, 16, 1, 0, 0, + 80, 6, 0, 0, 180, 2, + 0, 0, 24, 1, 0, 0, + 111, 6, 0, 0, 180, 2, + 0, 0, 32, 1, 0, 0, + 146, 6, 0, 0, 180, 2, + 0, 0, 40, 1, 0, 0, + 188, 6, 0, 0, 180, 2, + 0, 0, 48, 1, 0, 0, + 219, 6, 0, 0, 180, 2, + 0, 0, 56, 1, 0, 0, + 4, 7, 0, 0, 44, 7, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 80, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 138, 2, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 100, 32, + 0, 0, 80, 0, 5, 0, + 25, 8, 0, 0, 106, 8, + 0, 1, 53, 24, 0, 0, + 130, 0, 0, 0, 240, 237, + 72, 63, 203, 13, 17, 63, + 0, 0, 192, 63, 231, 27, + 1, 190, 220, 59, 133, 62, + 197, 108, 151, 190, 0, 0, + 192, 63, 35, 50, 136, 191, + 39, 53, 214, 61, 40, 120, + 171, 61, 123, 20, 142, 63, + 139, 193, 46, 192, 112, 208, + 46, 191, 76, 73, 75, 61, + 31, 133, 139, 63, 65, 102, + 255, 190, 93, 245, 10, 190, + 169, 83, 36, 191, 0, 0, + 160, 63, 73, 99, 8, 191, + 187, 28, 134, 190, 115, 10, + 168, 189, 31, 133, 43, 63, + 95, 65, 228, 191, 66, 157, + 28, 191, 16, 169, 42, 63, + 143, 194, 53, 63, 182, 46, + 53, 189, 111, 158, 223, 62, + 2, 156, 128, 62, 246, 40, + 28, 63, 136, 105, 149, 191, + 50, 121, 161, 61, 105, 190, + 93, 63, 10, 215, 35, 63, + 79, 2, 235, 190, 171, 250, + 2, 190, 231, 237, 152, 190, + 154, 153, 25, 63, 196, 93, + 221, 191, 105, 29, 37, 189, + 82, 185, 197, 60, 154, 153, + 25, 63, 104, 88, 153, 192, + 151, 230, 37, 62, 180, 76, + 7, 191, 113, 61, 74, 63, + 66, 149, 136, 191, 206, 188, + 53, 191, 118, 46, 242, 62, + 10, 215, 35, 63, 14, 164, + 171, 190, 64, 65, 6, 61, + 95, 220, 100, 190, 154, 153, + 25, 63, 194, 190, 253, 191, + 139, 112, 48, 63, 120, 107, + 188, 62, 174, 71, 33, 63, + 67, 143, 136, 190, 240, 196, + 149, 62, 253, 104, 193, 62, + 246, 40, 28, 63, 35, 21, + 182, 191, 111, 89, 250, 189, + 94, 64, 119, 63, 154, 153, + 25, 63, 73, 47, 218, 190, + 82, 190, 226, 61, 154, 46, + 37, 190, 154, 153, 25, 63, + 224, 158, 10, 192, 238, 101, + 238, 62, 64, 244, 24, 191, + 154, 153, 25, 63, 114, 80, + 66, 190, 5, 247, 3, 191, + 248, 191, 241, 61, 154, 153, + 25, 63, 36, 151, 159, 191, + 166, 51, 100, 63, 201, 128, + 215, 190, 154, 153, 25, 63, + 233, 242, 230, 60, 165, 230, + 165, 190, 200, 96, 130, 188, + 154, 153, 25, 63, 157, 129, + 197, 191, 11, 147, 27, 63, + 30, 44, 213, 62, 154, 153, + 25, 63, 55, 252, 26, 191, + 24, 239, 194, 60, 101, 192, + 168, 189, 154, 153, 25, 63, + 105, 199, 115, 192, 65, 161, + 250, 62, 134, 63, 114, 190, + 154, 153, 25, 63, 131, 49, + 152, 191, 169, 87, 52, 190, + 224, 36, 81, 191, 154, 153, + 25, 63, 107, 131, 3, 191, + 249, 184, 173, 190, 59, 76, + 84, 190, 154, 153, 25, 63, + 155, 89, 217, 191, 92, 116, + 107, 191, 193, 80, 93, 61, + 154, 153, 25, 63, 169, 245, + 126, 61, 4, 67, 26, 190, + 199, 20, 25, 190, 154, 153, + 25, 63, 41, 178, 242, 191, + 175, 36, 8, 63, 250, 70, + 180, 190, 154, 153, 25, 63, + 53, 67, 66, 191, 15, 106, + 212, 62, 55, 126, 80, 63, + 154, 153, 25, 63, 38, 114, + 1, 191, 244, 218, 118, 190, + 191, 136, 167, 190, 154, 153, + 25, 63, 183, 38, 213, 191, + 89, 8, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 1, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 2, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 3, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 88, 16, 0, 4, + 0, 112, 16, 0, 2, 0, + 0, 0, 68, 68, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 3, 0, 0, 0, + 85, 85, 0, 0, 88, 64, + 0, 4, 0, 112, 16, 0, + 4, 0, 0, 0, 85, 85, + 0, 0, 88, 64, 0, 4, + 0, 112, 16, 0, 6, 0, + 0, 0, 85, 85, 0, 0, + 156, 24, 0, 4, 0, 224, + 17, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 95, 0, + 0, 2, 50, 0, 2, 0, + 104, 0, 0, 2, 16, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 8, 0, + 0, 0, 1, 0, 0, 0, + 86, 0, 0, 4, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 0, 0, + 0, 10, 194, 0, 16, 0, + 0, 0, 0, 0, 6, 4, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 230, 10, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 109, 0, + 0, 140, 1, 254, 1, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 1, 0, 0, 0, 109, 0, + 0, 139, 194, 0, 0, 128, + 67, 85, 21, 0, 162, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 150, 115, 16, 0, + 0, 0, 0, 0, 10, 96, + 16, 0, 1, 0, 0, 0, + 56, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 166, 14, 16, 0, 0, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 50, 0, 0, 11, + 194, 0, 16, 0, 1, 0, + 0, 0, 6, 132, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 166, 14, 16, 0, + 1, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 4, 0, 0, 0, 86, 5, + 16, 0, 2, 0, 0, 0, + 166, 11, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 6, 66, 0, + 16, 0, 5, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 45, 0, 0, 137, + 2, 2, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 126, 16, 0, 6, 0, + 0, 0, 56, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 86, 5, 16, 0, + 2, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 54, 0, 0, 5, 146, 0, + 16, 0, 4, 0, 0, 0, + 86, 5, 16, 0, 2, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 150, 7, 16, 0, + 4, 0, 0, 0, 150, 7, + 16, 0, 4, 0, 0, 0, + 75, 0, 0, 5, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 56, 32, 0, 8, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 50, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 205, 204, + 76, 63, 1, 64, 0, 0, + 205, 204, 76, 62, 56, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 89, 63, 14, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 14, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 191, 42, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 10, 0, 16, 0, + 0, 0, 0, 0, 28, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 78, 0, 0, 8, 0, 208, + 0, 0, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 56, 0, 0, 10, + 242, 0, 16, 0, 8, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 70, 142, + 32, 6, 0, 0, 0, 0, + 7, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 114, 0, + 16, 0, 9, 0, 0, 0, + 150, 7, 16, 0, 4, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 5, + 82, 0, 16, 0, 3, 0, + 0, 0, 6, 2, 16, 0, + 2, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 10, 0, 0, 0, 86, 5, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 0, 0, 0, 7, 242, 0, + 16, 0, 11, 0, 0, 0, + 86, 15, 16, 0, 10, 0, + 0, 0, 6, 10, 16, 0, + 10, 0, 0, 0, 51, 0, + 0, 9, 242, 0, 16, 0, + 10, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 10, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 11, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 10, 215, + 35, 61, 14, 0, 0, 7, + 242, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 10, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 0, 32, 0, 11, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 102, 102, + 166, 63, 14, 0, 0, 7, + 50, 0, 16, 0, 10, 0, + 0, 0, 70, 0, 16, 0, + 9, 0, 0, 0, 166, 10, + 16, 0, 9, 0, 0, 0, + 54, 0, 0, 6, 50, 0, + 16, 0, 11, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 7, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 0, 0, 0, 0, + 6, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 134, 0, 16, 0, 3, 0, + 0, 0, 54, 0, 0, 5, + 66, 0, 16, 0, 10, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 54, 0, + 0, 5, 66, 0, 16, 0, + 11, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 178, 0, + 16, 0, 9, 0, 0, 0, + 70, 8, 16, 0, 10, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 134, 8, + 16, 0, 11, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 3, 0, 0, 0, + 6, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 214, 5, 16, 0, 3, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 7, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 210, 0, 16, 0, + 3, 0, 0, 0, 6, 9, + 16, 0, 10, 0, 0, 0, + 6, 0, 16, 0, 3, 0, + 0, 0, 6, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 11, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 102, 10, 16, 0, + 11, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 86, 5, 16, 0, 3, 0, + 0, 0, 102, 10, 16, 0, + 7, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 64, 16, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 70, 3, 16, 0, + 9, 0, 0, 0, 70, 3, + 16, 0, 9, 0, 0, 0, + 16, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 70, 3, 16, 0, + 9, 0, 0, 0, 75, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 7, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 18, 0, + 16, 0, 10, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 134, 3, + 16, 0, 3, 0, 0, 0, + 134, 3, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 134, 3, + 16, 0, 3, 0, 0, 0, + 75, 0, 0, 5, 34, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 34, 0, 16, 0, 10, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 70, 2, 16, 0, + 11, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 75, 0, 0, 5, + 34, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 3, 0, + 0, 0, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 10, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 16, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 3, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 10, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 10, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 17, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 56, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 30, 0, 0, 10, 114, 0, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 2, 2, + 0, 128, 67, 85, 21, 0, + 114, 0, 16, 0, 3, 0, + 0, 0, 70, 14, 16, 0, + 3, 0, 0, 0, 70, 126, + 16, 0, 6, 0, 0, 0, + 30, 0, 0, 10, 114, 0, + 16, 0, 7, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 70, 126, 16, 0, + 6, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 10, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 178, 0, + 16, 0, 9, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 123, 16, 0, + 6, 0, 0, 0, 30, 0, + 0, 10, 114, 0, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 10, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 10, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 70, 126, 16, 0, + 6, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 0, 32, 0, 7, + 18, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 63, + 16, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 0, 32, + 0, 7, 34, 0, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 63, 16, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 3, + 16, 0, 9, 0, 0, 0, + 0, 32, 0, 7, 66, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 63, 16, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 0, 32, 0, 7, + 130, 0, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 63, + 56, 0, 0, 7, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 3, 0, 0, 0, 47, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 0, 0, 0, 0, + 166, 14, 16, 0, 0, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 13, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 15, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 230, 10, + 16, 0, 0, 0, 0, 0, + 150, 124, 16, 0, 3, 0, + 0, 0, 0, 96, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 88, 63, 1, 64, + 0, 0, 0, 0, 32, 62, + 45, 0, 0, 137, 2, 2, + 0, 128, 67, 85, 21, 0, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 14, 16, 0, + 5, 0, 0, 0, 70, 126, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 160, 65, 56, 0, + 0, 7, 18, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 4, 0, + 0, 0, 45, 0, 0, 140, + 130, 0, 0, 128, 3, 17, + 17, 0, 130, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 150, 115, 16, 0, 2, 0, + 0, 0, 86, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 14, 32, 0, 8, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 216, 65, 1, 64, + 0, 0, 0, 0, 192, 63, + 28, 0, 0, 5, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 5, 0, 0, 0, + 84, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 32, 0, 0, 0, 15, 0, + 0, 10, 130, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 8, 0, 0, 0, + 2, 64, 0, 0, 187, 28, + 134, 190, 115, 10, 168, 189, + 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 10, + 18, 0, 16, 0, 4, 0, + 0, 0, 230, 10, 16, 0, + 8, 0, 0, 0, 2, 64, + 0, 0, 187, 28, 134, 190, + 115, 10, 168, 189, 0, 0, + 0, 0, 0, 0, 0, 0, + 64, 0, 0, 5, 18, 0, + 16, 0, 5, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 34, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 10, 162, 0, 16, 0, + 0, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 154, 153, 137, 192, + 0, 0, 0, 0, 242, 169, + 194, 192, 50, 0, 0, 10, + 194, 0, 16, 0, 5, 0, + 0, 0, 6, 4, 16, 0, + 5, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 4, 0, + 0, 0, 230, 10, 16, 0, + 5, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 5, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 5, 0, 0, 0, 150, 115, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 255, 255, + 255, 255, 54, 0, 0, 5, + 50, 0, 16, 0, 10, 0, + 0, 0, 230, 10, 16, 0, + 5, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 10, 0, 0, 0, 10, 0, + 16, 0, 4, 0, 0, 0, + 54, 0, 0, 5, 50, 0, + 16, 0, 11, 0, 0, 0, + 70, 0, 16, 0, 5, 0, + 0, 0, 54, 0, 0, 5, + 66, 0, 16, 0, 11, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 9, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 6, 0, + 0, 0, 1, 64, 0, 0, + 182, 46, 53, 189, 54, 0, + 0, 8, 114, 0, 16, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 66, 157, 28, 191, + 16, 169, 42, 63, 5, 0, + 0, 0, 0, 0, 0, 0, + 48, 0, 0, 1, 80, 0, + 0, 7, 130, 0, 16, 0, + 9, 0, 0, 0, 42, 0, + 16, 0, 12, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 3, 0, 4, 3, + 58, 0, 16, 0, 9, 0, + 0, 0, 15, 0, 0, 7, + 130, 0, 16, 0, 9, 0, + 0, 0, 70, 0, 16, 0, + 8, 0, 0, 0, 70, 0, + 16, 0, 12, 0, 0, 0, + 15, 0, 0, 7, 130, 0, + 16, 0, 10, 0, 0, 0, + 230, 10, 16, 0, 8, 0, + 0, 0, 70, 0, 16, 0, + 12, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 13, 0, 0, 0, 58, 0, + 16, 0, 9, 0, 0, 0, + 64, 0, 0, 5, 34, 0, + 16, 0, 13, 0, 0, 0, + 58, 0, 16, 0, 10, 0, + 0, 0, 0, 0, 0, 7, + 130, 0, 16, 0, 9, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 10, 50, 0, + 16, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 13, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 14, 0, 0, 0, + 70, 0, 16, 0, 14, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 13, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 13, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 13, 0, 0, 0, + 70, 0, 16, 0, 13, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 15, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 10, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 10, 0, 0, 0, 166, 10, + 16, 0, 10, 0, 0, 0, + 70, 0, 16, 0, 15, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 15, 0, + 0, 0, 150, 7, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 9, 0, 0, 0, 70, 2, + 16, 0, 15, 0, 0, 0, + 70, 2, 16, 0, 15, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 10, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 15, 0, 0, 0, + 75, 0, 0, 5, 130, 0, + 16, 0, 11, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 14, 0, 0, 7, + 130, 0, 16, 0, 10, 0, + 0, 0, 58, 0, 16, 0, + 10, 0, 0, 0, 58, 0, + 16, 0, 11, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 130, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 10, 0, 0, 0, 58, 0, + 16, 0, 10, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 10, 0, 0, 0, 58, 0, + 16, 0, 10, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 9, 0, 0, 0, 58, 0, + 16, 0, 10, 0, 0, 0, + 52, 0, 0, 8, 130, 0, + 16, 0, 10, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 15, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 10, 0, + 0, 0, 58, 0, 16, 0, + 10, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 10, 0, 0, 0, + 58, 0, 16, 0, 10, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 50, 0, 0, 9, 130, 0, + 16, 0, 9, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 10, 0, 0, 0, 10, 0, + 16, 0, 9, 0, 0, 0, + 0, 0, 0, 7, 130, 0, + 16, 0, 10, 0, 0, 0, + 26, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 10, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 15, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 11, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 11, 0, 0, 0, + 166, 10, 16, 0, 11, 0, + 0, 0, 70, 0, 16, 0, + 15, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 15, 0, 0, 0, 150, 7, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 11, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 11, 0, 0, 0, + 70, 2, 16, 0, 15, 0, + 0, 0, 70, 2, 16, 0, + 15, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 13, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 15, 0, + 0, 0, 75, 0, 0, 5, + 130, 0, 16, 0, 14, 0, + 0, 0, 58, 0, 16, 0, + 11, 0, 0, 0, 14, 0, + 0, 7, 130, 0, 16, 0, + 13, 0, 0, 0, 58, 0, + 16, 0, 13, 0, 0, 0, + 58, 0, 16, 0, 14, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 11, 0, + 0, 0, 58, 0, 16, 0, + 11, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 11, 0, + 0, 0, 58, 0, 16, 0, + 11, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 130, 0, + 16, 0, 13, 0, 0, 0, + 58, 0, 16, 0, 13, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 130, 0, + 16, 0, 13, 0, 0, 0, + 58, 0, 16, 0, 13, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 130, 0, 16, 0, + 11, 0, 0, 0, 58, 0, + 16, 0, 11, 0, 0, 0, + 58, 0, 16, 0, 13, 0, + 0, 0, 52, 0, 0, 8, + 130, 0, 16, 0, 13, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 130, 0, 16, 0, + 13, 0, 0, 0, 58, 0, + 16, 0, 13, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 130, 0, 16, 0, 13, 0, + 0, 0, 58, 0, 16, 0, + 13, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 50, 0, 0, 9, + 18, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 11, 0, 0, 0, 58, 0, + 16, 0, 13, 0, 0, 0, + 58, 0, 16, 0, 9, 0, + 0, 0, 0, 0, 0, 7, + 34, 0, 16, 0, 9, 0, + 0, 0, 58, 0, 16, 0, + 10, 0, 0, 0, 58, 0, + 16, 0, 13, 0, 0, 0, + 30, 0, 0, 10, 194, 0, + 16, 0, 12, 0, 0, 0, + 166, 10, 16, 0, 12, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 114, 0, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 14, 0, 0, 0, + 54, 0, 0, 5, 114, 0, + 16, 0, 11, 0, 0, 0, + 70, 2, 16, 0, 13, 0, + 0, 0, 54, 0, 0, 6, + 50, 0, 16, 0, 12, 0, + 0, 0, 70, 144, 144, 0, + 58, 0, 16, 0, 12, 0, + 0, 0, 54, 0, 0, 6, + 130, 0, 16, 0, 6, 0, + 0, 0, 58, 144, 144, 0, + 58, 0, 16, 0, 12, 0, + 0, 0, 22, 0, 0, 1, + 50, 0, 0, 11, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 10, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 10, 0, + 0, 0, 166, 10, 16, 0, + 10, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 0, 0, 0, 0, + 150, 7, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 75, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 10, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 52, 0, 0, 8, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 9, 0, 0, 0, + 0, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 9, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 0, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 11, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 11, 0, 0, 0, + 166, 10, 16, 0, 11, 0, + 0, 0, 230, 10, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 178, 0, 16, 0, + 1, 0, 0, 0, 150, 13, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 8, + 16, 0, 11, 0, 0, 0, + 16, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 3, 16, 0, 1, 0, + 0, 0, 70, 3, 16, 0, + 1, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 3, 16, 0, 1, 0, + 0, 0, 75, 0, 0, 5, + 18, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 0, 9, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 52, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 166, 14, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 52, 0, + 0, 8, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 128, 65, 0, 0, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 50, 32, 0, 11, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 9, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 50, 0, 0, 13, + 194, 0, 16, 0, 0, 0, + 0, 0, 6, 8, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 6, 8, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 50, 0, 0, 10, 194, 0, + 16, 0, 0, 0, 0, 0, + 86, 13, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 86, 13, 16, 0, 3, 0, + 0, 0, 166, 14, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 10, 194, 0, 16, 0, + 0, 0, 0, 0, 166, 14, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 51, 51, 179, 62, 51, 51, + 179, 62, 52, 0, 0, 10, + 194, 0, 16, 0, 0, 0, + 0, 0, 166, 14, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 56, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 51, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 58, 128, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 50, 32, 0, 10, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 47, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 128, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 25, 0, + 0, 5, 210, 0, 16, 0, + 0, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 10, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 7, 0, + 0, 0, 2, 64, 0, 0, + 51, 51, 67, 64, 51, 51, + 67, 64, 51, 51, 67, 64, + 51, 51, 67, 64, 64, 0, + 0, 5, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 17, 0, 0, 10, 34, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 129, 128, 128, 62, 129, 128, + 128, 61, 129, 128, 128, 60, + 129, 128, 128, 59, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 244, 0, + 0, 0, 16, 0, 0, 0, + 32, 0, 0, 0, 1, 0, + 0, 0, 188, 0, 0, 0, + 7, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 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, 12, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 23, 0, 0, 0, + 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 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, 1, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ3Base.h b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ3Base.h new file mode 100644 index 0000000..00f4c1e --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOGenerateQ3Base.h @@ -0,0 +1,2172 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointMirrorSampler sampler NA NA s1 1 +// g_ViewspaceDepthTapSampler sampler NA NA s3 1 +// g_ViewspaceDepthSource texture float 2d t0 1 +// g_deinterlacedNormals texture float4 2darray t6 1 +// g_SSAOOutput UAV float2 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[20], dynamicIndexed +dcl_sampler s1, mode_default +dcl_sampler s3, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_resource_texture2darray (float,float,float,float) t6 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 8 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +mad r0.z, r0.y, l(2.000000), r0.x +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +ftou r0.z, r0.z +udiv null, r0.z, r0.z, l(5) +mad r1.xy, r0.xyxx, cb0[18].zwzz, cb0[19].zwzz +mul r0.xy, r0.xyxx, cb0[13].zwzz +mad r0.xy, cb0[1].xyxx, r0.xyxx, cb0[1].zwzz +gather4_aoffimmi_indexable(-1,-1,0)(texture2d)(float,float,float,float) r2.z, r1.xyxx, t0.xzyw, s1.x +mul r0.w, r2.z, cb0[1].x +mul r0.w, r0.w, cb0[13].z +mul r2.xy, r0.xyxx, r2.zzzz +dp3 r0.x, r2.xyzx, r2.xyzx +sqrt r0.x, r0.x +mul_sat r0.x, r0.x, cb0[4].w +mad r0.x, r0.x, l(0.800000), l(0.200000) +mul r0.x, r0.x, cb0[3].x +mul r0.y, r0.x, l(0.850000) +mul r0.x, r0.x, r0.x +div r0.x, l(-1.000000), r0.x +div r0.y, r0.y, r0.w +mul r3.xyzw, r0.yyyy, cb0[r0.z + 7].xyzw +log r0.y, r0.y +dp2 r0.z, r3.xyxx, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r4.x, r0.z +dp2 r0.z, r3.zwzz, l(0.784881, 0.566617, 0.000000, 0.000000) +round_ne r4.y, r0.z +mad r0.zw, -r4.xxxy, cb0[18].zzzw, r1.xxxy +mad r1.zw, r4.xxxy, cb0[18].zzzw, r1.xxxy +mad r4.xy, cb0[2].xyxx, r0.zwzz, cb0[2].zwzz +add r5.xyzw, r0.yyyy, l(-4.426083, -5.364030, -7.030563, -4.798827) +add r0.y, r0.y, l(-4.832765) +sample_l_indexable(texture2d)(float,float,float,float) r6.z, r0.zwzz, t0.yzxw, s3, r5.x +mul r6.xy, r4.xyxx, r6.zzzz +mad r4.xyz, -r2.xyzx, cb0[5].xxxx, r6.xyzx +max r0.z, -r4.z, l(0.000000) +mad_sat r0.z, r0.z, cb0[5].y, l(2.000000) +mad r0.z, r0.z, l(0.600000), l(0.400000) +mul r0.z, r0.z, l(1.500000) +dp3 r0.w, r4.xyzx, r4.xyzx +sqrt r2.w, r0.w +mad r0.w, r0.w, r0.x, l(1.000000) +max r0.w, r0.w, l(0.000000) +mov r6.xy, vThreadID.xyxx +mov r6.z, cb0[6].y +mov r6.w, l(0) +ld_indexable(texture2darray)(float,float,float,float) r6.xyz, r6.xyzw, t6.xyzw +dp3 r4.x, r6.xyzx, r4.xyzx +div r2.w, r4.x, r2.w +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r0.w, r0.w, r2.w +mul r0.w, r0.z, r0.w +mad r4.xy, cb0[2].xyxx, r1.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r7.z, r1.zwzz, t0.yzxw, s3, r5.x +mul r7.xy, r4.xyxx, r7.zzzz +mad r4.xyz, -r2.xyzx, cb0[5].xxxx, r7.xyzx +max r1.z, -r4.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.500000) +mad r0.z, r1.z, l(1.500000), r0.z +dp3 r1.z, r4.xyzx, r4.xyzx +dp3 r2.w, r6.xyzx, r4.xyzx +sqrt r4.x, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.w, r2.w, r4.x +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r1.z, r1.z, r2.w +mad r0.w, r1.z, r1.w, r0.w +dp2 r1.z, r3.xyxx, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r4.x, r1.z +dp2 r1.z, r3.zwzz, l(0.260222, -0.295752, 0.000000, 0.000000) +round_ne r4.y, r1.z +mad r1.zw, r4.xxxy, cb0[18].zzzw, r1.xxxy +mad r4.xy, -r4.xyxx, cb0[18].zwzz, r1.xyxx +mad r4.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r7.z, r1.zwzz, t0.yzxw, s3, r5.y +mul r7.xy, r4.zwzz, r7.zzzz +mad r7.xyz, -r2.xyzx, cb0[5].xxxx, r7.xyzx +max r1.z, -r7.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.500000) +mad r0.z, r1.z, l(1.500000), r0.z +dp3 r1.z, r7.xyzx, r7.xyzx +dp3 r2.w, r6.xyzx, r7.xyzx +sqrt r4.z, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.w, r2.w, r4.z +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r1.z, r1.z, r2.w +mad r0.w, r1.z, r1.w, r0.w +mad r1.zw, cb0[2].xxxy, r4.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r4.z, r4.xyxx, t0.yzxw, s3, r5.y +mul r4.xy, r1.zwzz, r4.zzzz +mad r4.xyz, -r2.xyzx, cb0[5].xxxx, r4.xyzx +max r1.z, -r4.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.500000) +mad r0.z, r1.z, l(1.500000), r0.z +dp3 r1.z, r4.xyzx, r4.xyzx +dp3 r2.w, r6.xyzx, r4.xyzx +sqrt r4.x, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.w, r2.w, r4.x +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r1.z, r1.z, r2.w +mad r0.w, r1.z, r1.w, r0.w +dp2 r1.z, r3.xyxx, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r4.x, r1.z +dp2 r1.z, r3.zwzz, l(0.104594, 0.083725, 0.000000, 0.000000) +round_ne r4.y, r1.z +mad r1.zw, r4.xxxy, cb0[18].zzzw, r1.xxxy +mad r4.xy, -r4.xyxx, cb0[18].zwzz, r1.xyxx +mad r4.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r7.z, r1.zwzz, t0.yzxw, s3, r5.z +mul r7.xy, r4.zwzz, r7.zzzz +mad r7.xyz, -r2.xyzx, cb0[5].xxxx, r7.xyzx +max r1.z, -r7.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.110000) +mad r0.z, r1.z, l(1.110000), r0.z +dp3 r1.z, r7.xyzx, r7.xyzx +dp3 r2.w, r6.xyzx, r7.xyzx +sqrt r4.z, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.w, r2.w, r4.z +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r1.z, r1.z, r2.w +mad r0.w, r1.z, r1.w, r0.w +mad r1.zw, cb0[2].xxxy, r4.xxxy, cb0[2].zzzw +sample_l_indexable(texture2d)(float,float,float,float) r4.z, r4.xyxx, t0.yzxw, s3, r5.z +mul r4.xy, r1.zwzz, r4.zzzz +mad r4.xyz, -r2.xyzx, cb0[5].xxxx, r4.xyzx +max r1.z, -r4.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.110000) +mad r0.z, r1.z, l(1.110000), r0.z +dp3 r1.z, r4.xyzx, r4.xyzx +dp3 r2.w, r6.xyzx, r4.xyzx +sqrt r4.x, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.w, r2.w, r4.x +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r1.z, r1.z, r2.w +mad r0.w, r1.z, r1.w, r0.w +dp2 r1.z, r3.xyxx, l(-0.682868, 0.049630, 0.000000, 0.000000) +round_ne r4.x, r1.z +dp2 r1.z, r3.zwzz, l(-0.682868, 0.049630, 0.000000, 0.000000) +round_ne r4.y, r1.z +mad r1.zw, r4.xxxy, cb0[18].zzzw, r1.xxxy +mad r4.xy, -r4.xyxx, cb0[18].zwzz, r1.xyxx +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r1.zwzz, t0.yzxw, s3, r5.w +mad r1.zw, cb0[2].xxxy, r1.zzzw, cb0[2].zzzw +mul r5.xy, r5.zzzz, r1.zwzz +mad r5.xyz, -r2.xyzx, cb0[5].xxxx, r5.xyzx +sample_l_indexable(texture2d)(float,float,float,float) r7.z, r4.xyxx, t0.yzxw, s3, r5.w +mad r1.zw, cb0[2].xxxy, r4.xxxy, cb0[2].zzzw +mul r7.xy, r7.zzzz, r1.zwzz +mad r4.xyz, -r2.xyzx, cb0[5].xxxx, r7.xyzx +max r1.z, -r5.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.090000) +mad r0.z, r1.z, l(1.090000), r0.z +dp3 r1.z, r5.xyzx, r5.xyzx +dp3 r2.w, r6.xyzx, r5.xyzx +sqrt r4.w, r1.z +mad r1.z, r1.z, r0.x, l(1.000000) +max r1.z, r1.z, l(0.000000) +div r2.w, r2.w, r4.w +add r2.w, r2.w, -cb0[4].z +max r2.w, r2.w, l(0.000000) +mul r1.z, r1.z, r2.w +mad r0.w, r1.z, r1.w, r0.w +max r1.z, -r4.z, l(0.000000) +mad_sat r1.z, r1.z, cb0[5].y, l(2.000000) +mad r1.z, r1.z, l(0.600000), l(0.400000) +mul r1.w, r1.z, l(1.090000) +mad r0.z, r1.z, l(1.090000), r0.z +dp3 r1.z, r6.xyzx, r4.xyzx +dp3 r2.w, r4.xyzx, r4.xyzx +sqrt r4.x, r2.w +mad r2.w, r2.w, r0.x, l(1.000000) +max r2.w, r2.w, l(0.000000) +div r1.z, r1.z, r4.x +add r1.z, r1.z, -cb0[4].z +max r1.z, r1.z, l(0.000000) +mul r1.z, r2.w, r1.z +mad r0.w, r1.z, r1.w, r0.w +dp2 r1.z, r3.xyxx, l(-0.135702, -0.641902, 0.000000, 0.000000) +dp2 r1.w, r3.zwzz, l(-0.135702, -0.641902, 0.000000, 0.000000) +round_ne r3.xy, r1.zwzz +mad r1.zw, r3.xxxy, cb0[18].zzzw, r1.xxxy +mad r1.xy, -r3.xyxx, cb0[18].zwzz, r1.xyxx +mad r3.xy, cb0[2].xyxx, r1.zwzz, cb0[2].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r4.z, r1.zwzz, t0.yzxw, s3, r0.y +sample_l_indexable(texture2d)(float,float,float,float) r5.z, r1.xyxx, t0.yzxw, s3, r0.y +mad r1.xy, cb0[2].xyxx, r1.xyxx, cb0[2].zwzz +mul r5.xy, r5.zzzz, r1.xyxx +mad r1.xyz, -r2.xyzx, cb0[5].xxxx, r5.xyzx +mul r4.xy, r3.xyxx, r4.zzzz +mad r2.xyz, -r2.xyzx, cb0[5].xxxx, r4.xyzx +max r0.y, -r2.z, l(0.000000) +mad_sat r0.y, r0.y, cb0[5].y, l(2.000000) +mad r0.y, r0.y, l(0.600000), l(0.400000) +mul r1.w, r0.y, l(1.250000) +mad r0.y, r0.y, l(1.250000), r0.z +dp3 r0.z, r6.xyzx, r2.xyzx +dp3 r2.x, r2.xyzx, r2.xyzx +dp3 r2.y, r6.xyzx, r1.xyzx +sqrt r2.z, r2.x +mad r2.x, r2.x, r0.x, l(1.000000) +max r2.x, r2.x, l(0.000000) +div r0.z, r0.z, r2.z +add r0.z, r0.z, -cb0[4].z +max r0.z, r0.z, l(0.000000) +mul r0.z, r2.x, r0.z +mad r0.z, r0.z, r1.w, r0.w +max r0.w, -r1.z, l(0.000000) +dp3 r1.x, r1.xyzx, r1.xyzx +mad_sat r0.w, r0.w, cb0[5].y, l(2.000000) +mad r0.w, r0.w, l(0.600000), l(0.400000) +mul r1.y, r0.w, l(1.250000) +mad r0.y, r0.w, l(1.250000), r0.y +mad r0.x, r1.x, r0.x, l(1.000000) +sqrt r0.w, r1.x +div r0.w, r2.y, r0.w +add r0.w, r0.w, -cb0[4].z +max r0.xw, r0.xxxw, l(0.000000, 0.000000, 0.000000, 0.000000) +mul r0.x, r0.x, r0.w +mad r0.x, r0.x, r1.y, r0.z +div r1.xzw, r0.xxxx, r0.yyyy +mul r1.y, r0.y, l(0.050000) +store_uav_typed u0.xyzw, vThreadID.xyyy, r1.xyzw +ret +// Approximately 250 instruction slots used +#endif + +const BYTE CSGenerateQ3BaseDXIL[] = +{ + 68, 88, 66, 67, 36, 228, + 138, 104, 154, 84, 161, 208, + 236, 194, 218, 234, 61, 199, + 9, 230, 1, 0, 0, 0, + 168, 42, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 16, 9, 0, 0, 32, 9, + 0, 0, 48, 9, 0, 0, + 12, 42, 0, 0, 82, 68, + 69, 70, 212, 8, 0, 0, + 1, 0, 0, 0, 124, 1, + 0, 0, 6, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 172, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 252, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 17, 1, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 44, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 67, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 6, 0, 0, 0, + 1, 0, 0, 0, 13, 0, + 0, 0, 89, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 5, 0, 0, 0, 102, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 77, 105, 114, 114, 111, + 114, 83, 97, 109, 112, 108, + 101, 114, 0, 103, 95, 86, + 105, 101, 119, 115, 112, 97, + 99, 101, 68, 101, 112, 116, + 104, 84, 97, 112, 83, 97, + 109, 112, 108, 101, 114, 0, + 103, 95, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 68, + 101, 112, 116, 104, 83, 111, + 117, 114, 99, 101, 0, 103, + 95, 100, 101, 105, 110, 116, + 101, 114, 108, 97, 99, 101, + 100, 78, 111, 114, 109, 97, + 108, 115, 0, 103, 95, 83, + 83, 65, 79, 79, 117, 116, + 112, 117, 116, 0, 83, 83, + 65, 79, 67, 111, 110, 115, + 116, 97, 110, 116, 115, 66, + 117, 102, 102, 101, 114, 0, + 171, 171, 102, 1, 0, 0, + 1, 0, 0, 0, 148, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 188, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 136, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 235, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 126, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 171, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 35, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 98, 6, 0, 0, + 217, 1, 0, 0, 244, 1, + 0, 0, 0, 0, 0, 0, + 24, 2, 0, 0, 244, 1, + 0, 0, 8, 0, 0, 0, + 41, 2, 0, 0, 244, 1, + 0, 0, 16, 0, 0, 0, + 54, 2, 0, 0, 244, 1, + 0, 0, 24, 0, 0, 0, + 67, 2, 0, 0, 244, 1, + 0, 0, 32, 0, 0, 0, + 90, 2, 0, 0, 244, 1, + 0, 0, 40, 0, 0, 0, + 113, 2, 0, 0, 132, 2, + 0, 0, 48, 0, 0, 0, + 168, 2, 0, 0, 132, 2, + 0, 0, 52, 0, 0, 0, + 189, 2, 0, 0, 132, 2, + 0, 0, 56, 0, 0, 0, + 205, 2, 0, 0, 132, 2, + 0, 0, 60, 0, 0, 0, + 223, 2, 0, 0, 132, 2, + 0, 0, 64, 0, 0, 0, + 240, 2, 0, 0, 132, 2, + 0, 0, 68, 0, 0, 0, + 1, 3, 0, 0, 132, 2, + 0, 0, 72, 0, 0, 0, + 29, 3, 0, 0, 132, 2, + 0, 0, 76, 0, 0, 0, + 62, 3, 0, 0, 132, 2, + 0, 0, 80, 0, 0, 0, + 86, 3, 0, 0, 132, 2, + 0, 0, 84, 0, 0, 0, + 105, 3, 0, 0, 132, 2, + 0, 0, 88, 0, 0, 0, + 123, 3, 0, 0, 132, 2, + 0, 0, 92, 0, 0, 0, + 148, 3, 0, 0, 132, 2, + 0, 0, 96, 0, 0, 0, + 161, 3, 0, 0, 176, 3, + 0, 0, 100, 0, 0, 0, + 212, 3, 0, 0, 132, 2, + 0, 0, 104, 0, 0, 0, + 234, 3, 0, 0, 132, 2, + 0, 0, 108, 0, 0, 0, + 11, 4, 0, 0, 44, 4, + 0, 0, 112, 0, 0, 0, + 80, 4, 0, 0, 132, 2, + 0, 0, 192, 0, 0, 0, + 97, 4, 0, 0, 132, 2, + 0, 0, 196, 0, 0, 0, + 114, 4, 0, 0, 132, 2, + 0, 0, 200, 0, 0, 0, + 131, 4, 0, 0, 132, 2, + 0, 0, 204, 0, 0, 0, + 138, 4, 0, 0, 244, 1, + 0, 0, 208, 0, 0, 0, + 159, 4, 0, 0, 244, 1, + 0, 0, 216, 0, 0, 0, + 187, 4, 0, 0, 244, 1, + 0, 0, 224, 0, 0, 0, + 209, 4, 0, 0, 244, 1, + 0, 0, 232, 0, 0, 0, + 238, 4, 0, 0, 8, 5, + 0, 0, 240, 0, 0, 0, + 44, 5, 0, 0, 244, 1, + 0, 0, 248, 0, 0, 0, + 67, 5, 0, 0, 244, 1, + 0, 0, 0, 1, 0, 0, + 90, 5, 0, 0, 244, 1, + 0, 0, 8, 1, 0, 0, + 120, 5, 0, 0, 244, 1, + 0, 0, 16, 1, 0, 0, + 144, 5, 0, 0, 244, 1, + 0, 0, 24, 1, 0, 0, + 175, 5, 0, 0, 244, 1, + 0, 0, 32, 1, 0, 0, + 210, 5, 0, 0, 244, 1, + 0, 0, 40, 1, 0, 0, + 252, 5, 0, 0, 244, 1, + 0, 0, 48, 1, 0, 0, + 27, 6, 0, 0, 244, 1, + 0, 0, 56, 1, 0, 0, + 68, 6, 0, 0, 108, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 144, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 202, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 212, 32, + 0, 0, 80, 0, 5, 0, + 53, 8, 0, 0, 106, 8, + 0, 1, 89, 8, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 1, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 3, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 88, 64, + 0, 4, 0, 112, 16, 0, + 6, 0, 0, 0, 85, 85, + 0, 0, 156, 24, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 8, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 50, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 10, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 78, 0, 0, 8, 0, 208, + 0, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 109, 0, 0, 140, + 1, 254, 1, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 134, 125, + 16, 0, 0, 0, 0, 0, + 10, 96, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 8, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 8, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 75, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 32, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 58, 128, 32, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 205, 204, 76, 63, 1, 64, + 0, 0, 205, 204, 76, 62, + 56, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 56, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 89, 63, + 56, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 14, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 191, + 10, 0, 16, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 10, 242, 0, + 16, 0, 3, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 70, 142, 32, 6, + 0, 0, 0, 0, 7, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 47, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 240, 237, 72, 63, 203, 13, + 17, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 0, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 240, 237, 72, 63, 203, 13, + 17, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 0, 0, 0, 0, + 6, 4, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 10, + 194, 0, 16, 0, 1, 0, + 0, 0, 6, 4, 16, 0, + 4, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 6, 4, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 4, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 5, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 121, 162, 141, 192, + 35, 166, 171, 192, 96, 250, + 224, 192, 254, 143, 153, 192, + 0, 0, 0, 7, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 166, 154, 192, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 6, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 10, 0, 16, 0, 5, 0, + 0, 0, 56, 0, 0, 7, + 50, 0, 16, 0, 6, 0, + 0, 0, 70, 0, 16, 0, + 4, 0, 0, 0, 166, 10, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 52, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 32, + 0, 10, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 64, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 154, 153, 25, 63, + 1, 64, 0, 0, 205, 204, + 204, 62, 56, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 192, 63, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 75, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 52, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 6, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 6, + 66, 0, 16, 0, 6, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 6, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 6, 0, 0, 0, + 70, 14, 16, 0, 6, 0, + 0, 0, 70, 126, 16, 0, + 6, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 14, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 9, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 4, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 7, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 166, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 220, 59, 133, 62, 197, 108, + 151, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 220, 59, 133, 62, 197, 108, + 151, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 4, 16, 0, 4, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 4, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 166, 14, 16, 0, 1, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 7, 0, 0, 0, + 230, 10, 16, 0, 4, 0, + 0, 0, 166, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 7, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 75, 0, 0, 5, 66, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 6, 4, 16, 0, 4, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 0, 4, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 26, 0, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 4, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 166, 10, 16, 0, + 4, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 192, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 192, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 39, 53, 214, 61, 40, 120, + 171, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 39, 53, 214, 61, 40, 120, + 171, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 4, 16, 0, 4, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 4, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 166, 14, 16, 0, 1, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 7, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 7, 0, 0, 0, + 230, 10, 16, 0, 4, 0, + 0, 0, 166, 10, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 7, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 123, 20, 142, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 123, 20, + 142, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 75, 0, 0, 5, 66, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 6, 4, 16, 0, 4, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 0, 4, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 4, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 166, 10, 16, 0, + 4, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 123, 20, 142, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 123, 20, + 142, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 112, 208, 46, 191, 76, 73, + 75, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 112, 208, 46, 191, 76, 73, + 75, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 0, + 0, 5, 34, 0, 16, 0, + 4, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 10, 194, 0, + 16, 0, 1, 0, 0, 0, + 6, 4, 16, 0, 4, 0, + 0, 0, 166, 142, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 1, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 5, 0, 0, 0, + 166, 10, 16, 0, 5, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 7, 0, + 0, 0, 70, 0, 16, 0, + 4, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 11, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 4, + 16, 0, 4, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 50, 0, + 16, 0, 7, 0, 0, 0, + 166, 10, 16, 0, 7, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 31, 133, 139, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 31, 133, + 139, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 75, 0, 0, 5, 130, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 52, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 50, 32, 0, 10, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 31, 133, 139, 63, 50, 0, + 0, 9, 66, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 31, 133, + 139, 63, 42, 0, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 75, 0, 0, 5, 18, 0, + 16, 0, 4, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 9, + 130, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 52, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 7, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 66, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 15, 0, 0, 10, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 93, 245, 10, 190, 169, 83, + 36, 191, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 0, + 0, 10, 130, 0, 16, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 93, 245, + 10, 190, 169, 83, 36, 191, + 0, 0, 0, 0, 0, 0, + 0, 0, 64, 0, 0, 5, + 50, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 10, 194, 0, 16, 0, + 1, 0, 0, 0, 6, 4, + 16, 0, 3, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 3, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 18, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 3, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 4, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 3, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 70, 0, 16, 0, + 1, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 5, 0, 0, 0, 166, 10, + 16, 0, 5, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 166, 10, 16, 0, 4, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 52, 0, + 0, 8, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 32, 0, 10, 34, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 64, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 154, 153, + 25, 63, 1, 64, 0, 0, + 205, 204, 204, 62, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 160, 63, 50, 0, 0, 9, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 160, 63, + 42, 0, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 7, 34, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 75, 0, 0, 5, + 66, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 50, 0, + 0, 9, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 52, 0, + 0, 7, 18, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 42, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 52, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 9, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 52, 0, 0, 8, + 130, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 50, 32, 0, 10, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 64, + 50, 0, 0, 9, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 154, 153, 25, 63, 1, 64, + 0, 0, 205, 204, 204, 62, + 56, 0, 0, 7, 34, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 160, 63, 50, 0, + 0, 9, 34, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 160, 63, 26, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 75, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 14, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 52, 0, + 0, 10, 146, 0, 16, 0, + 0, 0, 0, 0, 6, 12, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 14, 0, 0, 7, 210, 0, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 34, 0, 16, 0, + 1, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 205, 204, + 76, 61, 164, 0, 0, 6, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 2, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 250, 0, 0, 0, + 8, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 230, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 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, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAONonSmartApply.h b/ffx-cacao/src/PrecompiledShaders/CACAONonSmartApply.h new file mode 100644 index 0000000..535b6a8 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAONonSmartApply.h @@ -0,0 +1,606 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_LinearClampSampler sampler NA NA s2 1 +// g_ApplyFinalSSAO texture float4 2darray t0 1 +// g_ApplyOutput UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[17], immediateIndexed +dcl_sampler s2, mode_default +dcl_resource_texture2darray (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 2 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +mul r0.xy, r0.xyxx, cb0[16].zwzz +mov r0.zw, l(0,0,0,1.000000) +sample_l_indexable(texture2darray)(float,float,float,float) r1.x, r0.xyzx, t0.xyzw, s2, l(0.000000) +sample_l_indexable(texture2darray)(float,float,float,float) r1.y, r0.xywx, t0.yxzw, s2, l(0.000000) +add r1.x, r1.y, r1.x +mov r0.zw, l(0,0,2.000000,3.000000) +sample_l_indexable(texture2darray)(float,float,float,float) r0.z, r0.xyzx, t0.yzxw, s2, l(0.000000) +sample_l_indexable(texture2darray)(float,float,float,float) r0.x, r0.xywx, t0.xyzw, s2, l(0.000000) +add r0.y, r0.z, r1.x +add r0.x, r0.x, r0.y +mul r0.x, r0.x, l(0.250000) +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xxxx +ret +// Approximately 14 instruction slots used +#endif + +const BYTE CSNonSmartApplyDXIL[] = +{ + 68, 88, 66, 67, 47, 141, + 51, 117, 67, 168, 4, 229, + 39, 115, 134, 78, 103, 118, + 66, 147, 1, 0, 0, 0, + 144, 11, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 244, 10, 0, 0, 82, 68, + 69, 70, 92, 8, 0, 0, + 1, 0, 0, 0, 4, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 52, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 209, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 226, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 240, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 76, 105, + 110, 101, 97, 114, 67, 108, + 97, 109, 112, 83, 97, 109, + 112, 108, 101, 114, 0, 103, + 95, 65, 112, 112, 108, 121, + 70, 105, 110, 97, 108, 83, + 83, 65, 79, 0, 103, 95, + 65, 112, 112, 108, 121, 79, + 117, 116, 112, 117, 116, 0, + 83, 83, 65, 79, 67, 111, + 110, 115, 116, 97, 110, 116, + 115, 66, 117, 102, 102, 101, + 114, 0, 240, 0, 0, 0, + 1, 0, 0, 0, 28, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 68, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 16, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 115, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 6, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 51, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 171, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 136, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 234, 5, 0, 0, + 97, 1, 0, 0, 124, 1, + 0, 0, 0, 0, 0, 0, + 160, 1, 0, 0, 124, 1, + 0, 0, 8, 0, 0, 0, + 177, 1, 0, 0, 124, 1, + 0, 0, 16, 0, 0, 0, + 190, 1, 0, 0, 124, 1, + 0, 0, 24, 0, 0, 0, + 203, 1, 0, 0, 124, 1, + 0, 0, 32, 0, 0, 0, + 226, 1, 0, 0, 124, 1, + 0, 0, 40, 0, 0, 0, + 249, 1, 0, 0, 12, 2, + 0, 0, 48, 0, 0, 0, + 48, 2, 0, 0, 12, 2, + 0, 0, 52, 0, 0, 0, + 69, 2, 0, 0, 12, 2, + 0, 0, 56, 0, 0, 0, + 85, 2, 0, 0, 12, 2, + 0, 0, 60, 0, 0, 0, + 103, 2, 0, 0, 12, 2, + 0, 0, 64, 0, 0, 0, + 120, 2, 0, 0, 12, 2, + 0, 0, 68, 0, 0, 0, + 137, 2, 0, 0, 12, 2, + 0, 0, 72, 0, 0, 0, + 165, 2, 0, 0, 12, 2, + 0, 0, 76, 0, 0, 0, + 198, 2, 0, 0, 12, 2, + 0, 0, 80, 0, 0, 0, + 222, 2, 0, 0, 12, 2, + 0, 0, 84, 0, 0, 0, + 241, 2, 0, 0, 12, 2, + 0, 0, 88, 0, 0, 0, + 3, 3, 0, 0, 12, 2, + 0, 0, 92, 0, 0, 0, + 28, 3, 0, 0, 12, 2, + 0, 0, 96, 0, 0, 0, + 41, 3, 0, 0, 56, 3, + 0, 0, 100, 0, 0, 0, + 92, 3, 0, 0, 12, 2, + 0, 0, 104, 0, 0, 0, + 114, 3, 0, 0, 12, 2, + 0, 0, 108, 0, 0, 0, + 147, 3, 0, 0, 180, 3, + 0, 0, 112, 0, 0, 0, + 216, 3, 0, 0, 12, 2, + 0, 0, 192, 0, 0, 0, + 233, 3, 0, 0, 12, 2, + 0, 0, 196, 0, 0, 0, + 250, 3, 0, 0, 12, 2, + 0, 0, 200, 0, 0, 0, + 11, 4, 0, 0, 12, 2, + 0, 0, 204, 0, 0, 0, + 18, 4, 0, 0, 124, 1, + 0, 0, 208, 0, 0, 0, + 39, 4, 0, 0, 124, 1, + 0, 0, 216, 0, 0, 0, + 67, 4, 0, 0, 124, 1, + 0, 0, 224, 0, 0, 0, + 89, 4, 0, 0, 124, 1, + 0, 0, 232, 0, 0, 0, + 118, 4, 0, 0, 144, 4, + 0, 0, 240, 0, 0, 0, + 180, 4, 0, 0, 124, 1, + 0, 0, 248, 0, 0, 0, + 203, 4, 0, 0, 124, 1, + 0, 0, 0, 1, 0, 0, + 226, 4, 0, 0, 124, 1, + 0, 0, 8, 1, 0, 0, + 0, 5, 0, 0, 124, 1, + 0, 0, 16, 1, 0, 0, + 24, 5, 0, 0, 124, 1, + 0, 0, 24, 1, 0, 0, + 55, 5, 0, 0, 124, 1, + 0, 0, 32, 1, 0, 0, + 90, 5, 0, 0, 124, 1, + 0, 0, 40, 1, 0, 0, + 132, 5, 0, 0, 124, 1, + 0, 0, 48, 1, 0, 0, + 163, 5, 0, 0, 124, 1, + 0, 0, 56, 1, 0, 0, + 204, 5, 0, 0, 244, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 24, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 52, 2, + 0, 0, 80, 0, 5, 0, + 141, 0, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 2, 0, 0, 0, + 88, 64, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 2, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 86, 0, + 0, 4, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 63, + 72, 0, 0, 141, 2, 2, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 141, 2, 2, 0, 128, + 67, 85, 21, 0, 34, 0, + 16, 0, 1, 0, 0, 0, + 70, 3, 16, 0, 0, 0, + 0, 0, 22, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, + 18, 0, 16, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 64, 0, 0, + 64, 64, 72, 0, 0, 141, + 2, 2, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 150, 124, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 141, 2, 2, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 3, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 62, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 14, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 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, 4, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAONonSmartHalfApply.h b/ffx-cacao/src/PrecompiledShaders/CACAONonSmartHalfApply.h new file mode 100644 index 0000000..941e4ef --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAONonSmartHalfApply.h @@ -0,0 +1,569 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_LinearClampSampler sampler NA NA s2 1 +// g_ApplyFinalSSAO texture float4 2darray t0 1 +// g_ApplyOutput UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[17], immediateIndexed +dcl_sampler s2, mode_default +dcl_resource_texture2darray (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 1 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +mul r0.xy, r0.xyxx, cb0[16].zwzz +mov r0.zw, l(0,0,0,3.000000) +sample_l_indexable(texture2darray)(float,float,float,float) r0.z, r0.xyzx, t0.yzxw, s2, l(0.000000) +sample_l_indexable(texture2darray)(float,float,float,float) r0.x, r0.xywx, t0.xyzw, s2, l(0.000000) +add r0.x, r0.x, r0.z +mul r0.x, r0.x, l(0.500000) +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xxxx +ret +// Approximately 9 instruction slots used +#endif + +const BYTE CSNonSmartHalfApplyDXIL[] = +{ + 68, 88, 66, 67, 100, 36, + 65, 243, 14, 238, 36, 37, + 84, 153, 99, 62, 160, 250, + 196, 166, 1, 0, 0, 0, + 208, 10, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 152, 8, 0, 0, 168, 8, + 0, 0, 184, 8, 0, 0, + 52, 10, 0, 0, 82, 68, + 69, 70, 92, 8, 0, 0, + 1, 0, 0, 0, 4, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 52, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 209, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 226, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 240, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 76, 105, + 110, 101, 97, 114, 67, 108, + 97, 109, 112, 83, 97, 109, + 112, 108, 101, 114, 0, 103, + 95, 65, 112, 112, 108, 121, + 70, 105, 110, 97, 108, 83, + 83, 65, 79, 0, 103, 95, + 65, 112, 112, 108, 121, 79, + 117, 116, 112, 117, 116, 0, + 83, 83, 65, 79, 67, 111, + 110, 115, 116, 97, 110, 116, + 115, 66, 117, 102, 102, 101, + 114, 0, 240, 0, 0, 0, + 1, 0, 0, 0, 28, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 68, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 16, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 115, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 6, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 51, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 171, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 136, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 234, 5, 0, 0, + 97, 1, 0, 0, 124, 1, + 0, 0, 0, 0, 0, 0, + 160, 1, 0, 0, 124, 1, + 0, 0, 8, 0, 0, 0, + 177, 1, 0, 0, 124, 1, + 0, 0, 16, 0, 0, 0, + 190, 1, 0, 0, 124, 1, + 0, 0, 24, 0, 0, 0, + 203, 1, 0, 0, 124, 1, + 0, 0, 32, 0, 0, 0, + 226, 1, 0, 0, 124, 1, + 0, 0, 40, 0, 0, 0, + 249, 1, 0, 0, 12, 2, + 0, 0, 48, 0, 0, 0, + 48, 2, 0, 0, 12, 2, + 0, 0, 52, 0, 0, 0, + 69, 2, 0, 0, 12, 2, + 0, 0, 56, 0, 0, 0, + 85, 2, 0, 0, 12, 2, + 0, 0, 60, 0, 0, 0, + 103, 2, 0, 0, 12, 2, + 0, 0, 64, 0, 0, 0, + 120, 2, 0, 0, 12, 2, + 0, 0, 68, 0, 0, 0, + 137, 2, 0, 0, 12, 2, + 0, 0, 72, 0, 0, 0, + 165, 2, 0, 0, 12, 2, + 0, 0, 76, 0, 0, 0, + 198, 2, 0, 0, 12, 2, + 0, 0, 80, 0, 0, 0, + 222, 2, 0, 0, 12, 2, + 0, 0, 84, 0, 0, 0, + 241, 2, 0, 0, 12, 2, + 0, 0, 88, 0, 0, 0, + 3, 3, 0, 0, 12, 2, + 0, 0, 92, 0, 0, 0, + 28, 3, 0, 0, 12, 2, + 0, 0, 96, 0, 0, 0, + 41, 3, 0, 0, 56, 3, + 0, 0, 100, 0, 0, 0, + 92, 3, 0, 0, 12, 2, + 0, 0, 104, 0, 0, 0, + 114, 3, 0, 0, 12, 2, + 0, 0, 108, 0, 0, 0, + 147, 3, 0, 0, 180, 3, + 0, 0, 112, 0, 0, 0, + 216, 3, 0, 0, 12, 2, + 0, 0, 192, 0, 0, 0, + 233, 3, 0, 0, 12, 2, + 0, 0, 196, 0, 0, 0, + 250, 3, 0, 0, 12, 2, + 0, 0, 200, 0, 0, 0, + 11, 4, 0, 0, 12, 2, + 0, 0, 204, 0, 0, 0, + 18, 4, 0, 0, 124, 1, + 0, 0, 208, 0, 0, 0, + 39, 4, 0, 0, 124, 1, + 0, 0, 216, 0, 0, 0, + 67, 4, 0, 0, 124, 1, + 0, 0, 224, 0, 0, 0, + 89, 4, 0, 0, 124, 1, + 0, 0, 232, 0, 0, 0, + 118, 4, 0, 0, 144, 4, + 0, 0, 240, 0, 0, 0, + 180, 4, 0, 0, 124, 1, + 0, 0, 248, 0, 0, 0, + 203, 4, 0, 0, 124, 1, + 0, 0, 0, 1, 0, 0, + 226, 4, 0, 0, 124, 1, + 0, 0, 8, 1, 0, 0, + 0, 5, 0, 0, 124, 1, + 0, 0, 16, 1, 0, 0, + 24, 5, 0, 0, 124, 1, + 0, 0, 24, 1, 0, 0, + 55, 5, 0, 0, 124, 1, + 0, 0, 32, 1, 0, 0, + 90, 5, 0, 0, 124, 1, + 0, 0, 40, 1, 0, 0, + 132, 5, 0, 0, 124, 1, + 0, 0, 48, 1, 0, 0, + 163, 5, 0, 0, 124, 1, + 0, 0, 56, 1, 0, 0, + 204, 5, 0, 0, 244, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 24, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 116, 1, + 0, 0, 80, 0, 5, 0, + 93, 0, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 2, 0, 0, 0, + 88, 64, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 1, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 86, 0, + 0, 4, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 64, 64, + 72, 0, 0, 141, 2, 2, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 141, 2, 2, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 3, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 63, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 9, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 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, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPostprocessImportanceMapA.h b/ffx-cacao/src/PrecompiledShaders/CACAOPostprocessImportanceMapA.h new file mode 100644 index 0000000..b6f756d --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPostprocessImportanceMapA.h @@ -0,0 +1,606 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_LinearClampSampler sampler NA NA s2 1 +// g_ImportanceAIn texture float 2d t0 1 +// g_ImportanceAOut UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[18], immediateIndexed +dcl_sampler s2, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 3 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[17].zwzz +mad r1.xyzw, cb0[17].zwzw, l(-1.500000, -0.500000, 0.500000, -1.500000), r0.xyxy +mad r0.xyzw, cb0[17].zwzw, l(1.500000, 0.500000, -0.500000, 1.500000), r0.xyxy +sample_l_indexable(texture2d)(float,float,float,float) r2.x, r1.xyxx, t0.xyzw, s2, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r2.y, r1.zwzz, t0.yxzw, s2, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r0.xyxx, t0.yzxw, s2, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r2.w, r0.zwzz, t0.yzwx, s2, l(0.000000) +dp4 r0.x, r2.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000) +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xxxx +ret +// Approximately 12 instruction slots used +#endif + +const BYTE CSPostprocessImportanceMapADXIL[] = +{ + 68, 88, 66, 67, 75, 71, + 147, 197, 206, 97, 24, 202, + 235, 161, 205, 223, 251, 218, + 32, 131, 1, 0, 0, 0, + 156, 11, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 156, 8, 0, 0, 172, 8, + 0, 0, 188, 8, 0, 0, + 0, 11, 0, 0, 82, 68, + 69, 70, 96, 8, 0, 0, + 1, 0, 0, 0, 8, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 56, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 209, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 225, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 76, 105, + 110, 101, 97, 114, 67, 108, + 97, 109, 112, 83, 97, 109, + 112, 108, 101, 114, 0, 103, + 95, 73, 109, 112, 111, 114, + 116, 97, 110, 99, 101, 65, + 73, 110, 0, 103, 95, 73, + 109, 112, 111, 114, 116, 97, + 110, 99, 101, 65, 79, 117, + 116, 0, 83, 83, 65, 79, + 67, 111, 110, 115, 116, 97, + 110, 116, 115, 66, 117, 102, + 102, 101, 114, 0, 171, 171, + 242, 0, 0, 0, 1, 0, + 0, 0, 32, 1, 0, 0, + 128, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 72, 1, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 2, 0, 0, 0, 20, 8, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 103, 95, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 115, 0, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 0, 68, 101, 112, + 116, 104, 85, 110, 112, 97, + 99, 107, 67, 111, 110, 115, + 116, 115, 0, 102, 108, 111, + 97, 116, 50, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 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, 119, 1, 0, 0, + 67, 97, 109, 101, 114, 97, + 84, 97, 110, 72, 97, 108, + 102, 70, 79, 86, 0, 78, + 68, 67, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 78, 68, 67, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 85, 86, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 85, + 86, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 82, + 97, 100, 105, 117, 115, 0, + 102, 108, 111, 97, 116, 0, + 0, 0, 3, 0, 1, 0, + 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, 10, 2, 0, 0, + 69, 102, 102, 101, 99, 116, + 83, 104, 97, 100, 111, 119, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 80, 111, 119, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 67, 108, 97, 109, 112, + 0, 69, 102, 102, 101, 99, + 116, 70, 97, 100, 101, 79, + 117, 116, 77, 117, 108, 0, + 69, 102, 102, 101, 99, 116, + 70, 97, 100, 101, 79, 117, + 116, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 72, + 111, 114, 105, 122, 111, 110, + 65, 110, 103, 108, 101, 84, + 104, 114, 101, 115, 104, 111, + 108, 100, 0, 69, 102, 102, + 101, 99, 116, 83, 97, 109, + 112, 108, 105, 110, 103, 82, + 97, 100, 105, 117, 115, 78, + 101, 97, 114, 76, 105, 109, + 105, 116, 82, 101, 99, 0, + 68, 101, 112, 116, 104, 80, + 114, 101, 99, 105, 115, 105, + 111, 110, 79, 102, 102, 115, + 101, 116, 77, 111, 100, 0, + 78, 101, 103, 82, 101, 99, + 69, 102, 102, 101, 99, 116, + 82, 97, 100, 105, 117, 115, + 0, 76, 111, 97, 100, 67, + 111, 117, 110, 116, 101, 114, + 65, 118, 103, 68, 105, 118, + 0, 65, 100, 97, 112, 116, + 105, 118, 101, 83, 97, 109, + 112, 108, 101, 67, 111, 117, + 110, 116, 76, 105, 109, 105, + 116, 0, 73, 110, 118, 83, + 104, 97, 114, 112, 110, 101, + 115, 115, 0, 80, 97, 115, + 115, 73, 110, 100, 101, 120, + 0, 105, 110, 116, 0, 171, + 0, 0, 2, 0, 1, 0, + 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, 55, 3, 0, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 103, + 109, 97, 83, 113, 117, 97, + 114, 101, 100, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 109, 105, 108, + 97, 114, 105, 116, 121, 68, + 105, 115, 116, 97, 110, 99, + 101, 83, 105, 103, 109, 97, + 0, 80, 97, 116, 116, 101, + 114, 110, 82, 111, 116, 83, + 99, 97, 108, 101, 77, 97, + 116, 114, 105, 99, 101, 115, + 0, 102, 108, 111, 97, 116, + 52, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 175, 3, 0, 0, 78, 111, + 114, 109, 97, 108, 115, 85, + 110, 112, 97, 99, 107, 77, + 117, 108, 0, 78, 111, 114, + 109, 97, 108, 115, 85, 110, + 112, 97, 99, 107, 65, 100, + 100, 0, 68, 101, 116, 97, + 105, 108, 65, 79, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 68, 117, 109, 109, 121, + 48, 0, 83, 83, 65, 79, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 83, + 83, 65, 79, 66, 117, 102, + 102, 101, 114, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 79, + 102, 102, 115, 101, 116, 0, + 105, 110, 116, 50, 0, 171, + 171, 171, 1, 0, 2, 0, + 1, 0, 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, 140, 4, + 0, 0, 80, 101, 114, 80, + 97, 115, 115, 70, 117, 108, + 108, 82, 101, 115, 85, 86, + 79, 102, 102, 115, 101, 116, + 0, 79, 117, 116, 112, 117, + 116, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 79, 117, 116, 112, 117, 116, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 79, 102, 102, 115, 101, 116, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 78, 111, 114, 109, 97, + 108, 105, 115, 101, 100, 79, + 102, 102, 115, 101, 116, 0, + 78, 111, 114, 109, 97, 108, + 115, 87, 111, 114, 108, 100, + 84, 111, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 77, + 97, 116, 114, 105, 120, 0, + 102, 108, 111, 97, 116, 52, + 120, 52, 0, 171, 3, 0, + 3, 0, 4, 0, 4, 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, + 238, 5, 0, 0, 101, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 164, 1, + 0, 0, 128, 1, 0, 0, + 8, 0, 0, 0, 181, 1, + 0, 0, 128, 1, 0, 0, + 16, 0, 0, 0, 194, 1, + 0, 0, 128, 1, 0, 0, + 24, 0, 0, 0, 207, 1, + 0, 0, 128, 1, 0, 0, + 32, 0, 0, 0, 230, 1, + 0, 0, 128, 1, 0, 0, + 40, 0, 0, 0, 253, 1, + 0, 0, 16, 2, 0, 0, + 48, 0, 0, 0, 52, 2, + 0, 0, 16, 2, 0, 0, + 52, 0, 0, 0, 73, 2, + 0, 0, 16, 2, 0, 0, + 56, 0, 0, 0, 89, 2, + 0, 0, 16, 2, 0, 0, + 60, 0, 0, 0, 107, 2, + 0, 0, 16, 2, 0, 0, + 64, 0, 0, 0, 124, 2, + 0, 0, 16, 2, 0, 0, + 68, 0, 0, 0, 141, 2, + 0, 0, 16, 2, 0, 0, + 72, 0, 0, 0, 169, 2, + 0, 0, 16, 2, 0, 0, + 76, 0, 0, 0, 202, 2, + 0, 0, 16, 2, 0, 0, + 80, 0, 0, 0, 226, 2, + 0, 0, 16, 2, 0, 0, + 84, 0, 0, 0, 245, 2, + 0, 0, 16, 2, 0, 0, + 88, 0, 0, 0, 7, 3, + 0, 0, 16, 2, 0, 0, + 92, 0, 0, 0, 32, 3, + 0, 0, 16, 2, 0, 0, + 96, 0, 0, 0, 45, 3, + 0, 0, 60, 3, 0, 0, + 100, 0, 0, 0, 96, 3, + 0, 0, 16, 2, 0, 0, + 104, 0, 0, 0, 118, 3, + 0, 0, 16, 2, 0, 0, + 108, 0, 0, 0, 151, 3, + 0, 0, 184, 3, 0, 0, + 112, 0, 0, 0, 220, 3, + 0, 0, 16, 2, 0, 0, + 192, 0, 0, 0, 237, 3, + 0, 0, 16, 2, 0, 0, + 196, 0, 0, 0, 254, 3, + 0, 0, 16, 2, 0, 0, + 200, 0, 0, 0, 15, 4, + 0, 0, 16, 2, 0, 0, + 204, 0, 0, 0, 22, 4, + 0, 0, 128, 1, 0, 0, + 208, 0, 0, 0, 43, 4, + 0, 0, 128, 1, 0, 0, + 216, 0, 0, 0, 71, 4, + 0, 0, 128, 1, 0, 0, + 224, 0, 0, 0, 93, 4, + 0, 0, 128, 1, 0, 0, + 232, 0, 0, 0, 122, 4, + 0, 0, 148, 4, 0, 0, + 240, 0, 0, 0, 184, 4, + 0, 0, 128, 1, 0, 0, + 248, 0, 0, 0, 207, 4, + 0, 0, 128, 1, 0, 0, + 0, 1, 0, 0, 230, 4, + 0, 0, 128, 1, 0, 0, + 8, 1, 0, 0, 4, 5, + 0, 0, 128, 1, 0, 0, + 16, 1, 0, 0, 28, 5, + 0, 0, 128, 1, 0, 0, + 24, 1, 0, 0, 59, 5, + 0, 0, 128, 1, 0, 0, + 32, 1, 0, 0, 94, 5, + 0, 0, 128, 1, 0, 0, + 40, 1, 0, 0, 136, 5, + 0, 0, 128, 1, 0, 0, + 48, 1, 0, 0, 167, 5, + 0, 0, 128, 1, 0, 0, + 56, 1, 0, 0, 208, 5, + 0, 0, 248, 5, 0, 0, + 64, 1, 0, 0, 5, 0, + 0, 0, 1, 0, 96, 0, + 0, 0, 42, 0, 28, 6, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 86, 1, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 60, 2, 0, 0, + 80, 0, 5, 0, 143, 0, + 0, 0, 106, 8, 0, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 2, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 24, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 3, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 50, 0, 0, 13, 242, 0, + 16, 0, 1, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 192, 191, 0, 0, 0, 191, + 0, 0, 0, 63, 0, 0, + 192, 191, 70, 4, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 13, 242, 0, 16, 0, + 0, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 192, 63, + 0, 0, 0, 63, 0, 0, + 0, 191, 0, 0, 192, 63, + 70, 4, 16, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 34, 0, 16, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 1, 0, 0, 0, 22, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 130, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 0, 0, 0, 0, + 150, 115, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 17, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 62, 0, 0, + 128, 62, 0, 0, 128, 62, + 0, 0, 128, 62, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 12, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 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, 4, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 1, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPostprocessImportanceMapB.h b/ffx-cacao/src/PrecompiledShaders/CACAOPostprocessImportanceMapB.h new file mode 100644 index 0000000..8db1457 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPostprocessImportanceMapB.h @@ -0,0 +1,659 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_LinearClampSampler sampler NA NA s2 1 +// g_ImportanceBIn texture float 2d t0 1 +// g_ImportanceBOut UAV float 2d u0 1 +// g_ImportanceBLoadCounter UAV uint 1d u1 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[18], immediateIndexed +dcl_sampler s2, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_uav_typed_texture1d (uint,uint,uint,uint) u1 +dcl_input vThreadID.xy +dcl_temps 3 +dcl_thread_group 8, 8, 1 +utof r0.xy, vThreadID.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[17].zwzz +mad r1.xyzw, cb0[17].zwzw, l(-0.500000, -1.500000, 1.500000, -0.500000), r0.xyxy +sample_l_indexable(texture2d)(float,float,float,float) r2.x, r1.xyxx, t0.xyzw, s2, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r2.y, r1.zwzz, t0.yxzw, s2, l(0.000000) +mad r0.xyzw, cb0[17].zwzw, l(0.500000, 1.500000, -1.500000, 0.500000), r0.xyxy +sample_l_indexable(texture2d)(float,float,float,float) r2.z, r0.xyxx, t0.yzxw, s2, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r2.w, r0.zwzz, t0.yzwx, s2, l(0.000000) +dp4 r0.x, r2.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000) +store_uav_typed u0.xyzw, vThreadID.xyyy, r0.xxxx +udiv null, r0.yz, vThreadID.xxyx, l(0, 3, 3, 0) +iadd r0.y, r0.z, r0.y +if_z r0.y + mov_sat r0.x, r0.x + mad r0.x, r0.x, l(255.000000), l(0.500000) + ftou r0.x, r0.x + atomic_iadd u1, l(0), r0.x +endif +ret +// Approximately 20 instruction slots used +#endif + +const BYTE CSPostprocessImportanceMapBDXIL[] = +{ + 68, 88, 66, 67, 68, 224, + 81, 243, 84, 76, 6, 32, + 175, 242, 194, 109, 174, 218, + 167, 195, 1, 0, 0, 0, + 160, 12, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 212, 8, 0, 0, 228, 8, + 0, 0, 244, 8, 0, 0, + 4, 12, 0, 0, 82, 68, + 69, 70, 152, 8, 0, 0, + 1, 0, 0, 0, 64, 1, + 0, 0, 5, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 112, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 220, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 241, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 1, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 18, 1, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 255, 255, + 255, 255, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 43, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 103, 95, + 76, 105, 110, 101, 97, 114, + 67, 108, 97, 109, 112, 83, + 97, 109, 112, 108, 101, 114, + 0, 103, 95, 73, 109, 112, + 111, 114, 116, 97, 110, 99, + 101, 66, 73, 110, 0, 103, + 95, 73, 109, 112, 111, 114, + 116, 97, 110, 99, 101, 66, + 79, 117, 116, 0, 103, 95, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 66, 76, + 111, 97, 100, 67, 111, 117, + 110, 116, 101, 114, 0, 83, + 83, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 66, 117, 102, 102, 101, 114, + 0, 171, 43, 1, 0, 0, + 1, 0, 0, 0, 88, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 76, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 175, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 66, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 111, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 231, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 196, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 38, 6, 0, 0, + 157, 1, 0, 0, 184, 1, + 0, 0, 0, 0, 0, 0, + 220, 1, 0, 0, 184, 1, + 0, 0, 8, 0, 0, 0, + 237, 1, 0, 0, 184, 1, + 0, 0, 16, 0, 0, 0, + 250, 1, 0, 0, 184, 1, + 0, 0, 24, 0, 0, 0, + 7, 2, 0, 0, 184, 1, + 0, 0, 32, 0, 0, 0, + 30, 2, 0, 0, 184, 1, + 0, 0, 40, 0, 0, 0, + 53, 2, 0, 0, 72, 2, + 0, 0, 48, 0, 0, 0, + 108, 2, 0, 0, 72, 2, + 0, 0, 52, 0, 0, 0, + 129, 2, 0, 0, 72, 2, + 0, 0, 56, 0, 0, 0, + 145, 2, 0, 0, 72, 2, + 0, 0, 60, 0, 0, 0, + 163, 2, 0, 0, 72, 2, + 0, 0, 64, 0, 0, 0, + 180, 2, 0, 0, 72, 2, + 0, 0, 68, 0, 0, 0, + 197, 2, 0, 0, 72, 2, + 0, 0, 72, 0, 0, 0, + 225, 2, 0, 0, 72, 2, + 0, 0, 76, 0, 0, 0, + 2, 3, 0, 0, 72, 2, + 0, 0, 80, 0, 0, 0, + 26, 3, 0, 0, 72, 2, + 0, 0, 84, 0, 0, 0, + 45, 3, 0, 0, 72, 2, + 0, 0, 88, 0, 0, 0, + 63, 3, 0, 0, 72, 2, + 0, 0, 92, 0, 0, 0, + 88, 3, 0, 0, 72, 2, + 0, 0, 96, 0, 0, 0, + 101, 3, 0, 0, 116, 3, + 0, 0, 100, 0, 0, 0, + 152, 3, 0, 0, 72, 2, + 0, 0, 104, 0, 0, 0, + 174, 3, 0, 0, 72, 2, + 0, 0, 108, 0, 0, 0, + 207, 3, 0, 0, 240, 3, + 0, 0, 112, 0, 0, 0, + 20, 4, 0, 0, 72, 2, + 0, 0, 192, 0, 0, 0, + 37, 4, 0, 0, 72, 2, + 0, 0, 196, 0, 0, 0, + 54, 4, 0, 0, 72, 2, + 0, 0, 200, 0, 0, 0, + 71, 4, 0, 0, 72, 2, + 0, 0, 204, 0, 0, 0, + 78, 4, 0, 0, 184, 1, + 0, 0, 208, 0, 0, 0, + 99, 4, 0, 0, 184, 1, + 0, 0, 216, 0, 0, 0, + 127, 4, 0, 0, 184, 1, + 0, 0, 224, 0, 0, 0, + 149, 4, 0, 0, 184, 1, + 0, 0, 232, 0, 0, 0, + 178, 4, 0, 0, 204, 4, + 0, 0, 240, 0, 0, 0, + 240, 4, 0, 0, 184, 1, + 0, 0, 248, 0, 0, 0, + 7, 5, 0, 0, 184, 1, + 0, 0, 0, 1, 0, 0, + 30, 5, 0, 0, 184, 1, + 0, 0, 8, 1, 0, 0, + 60, 5, 0, 0, 184, 1, + 0, 0, 16, 1, 0, 0, + 84, 5, 0, 0, 184, 1, + 0, 0, 24, 1, 0, 0, + 115, 5, 0, 0, 184, 1, + 0, 0, 32, 1, 0, 0, + 150, 5, 0, 0, 184, 1, + 0, 0, 40, 1, 0, 0, + 192, 5, 0, 0, 184, 1, + 0, 0, 48, 1, 0, 0, + 223, 5, 0, 0, 184, 1, + 0, 0, 56, 1, 0, 0, + 8, 6, 0, 0, 48, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 84, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 142, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 8, 3, + 0, 0, 80, 0, 5, 0, + 194, 0, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 18, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 2, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 24, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 16, 0, 4, + 0, 224, 17, 0, 1, 0, + 0, 0, 68, 68, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 3, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 86, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 50, 0, 0, 13, 242, 0, + 16, 0, 1, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 191, 0, 0, 192, 191, + 0, 0, 192, 63, 0, 0, + 0, 191, 70, 4, 16, 0, + 0, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 34, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 22, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 13, 242, 0, + 16, 0, 0, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 17, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 192, 63, + 0, 0, 192, 191, 0, 0, + 0, 63, 70, 4, 16, 0, + 0, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 130, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 0, 0, 0, 0, + 150, 115, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 17, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 62, 0, 0, + 128, 62, 0, 0, 128, 62, + 0, 0, 128, 62, 164, 0, + 0, 6, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 78, 0, + 0, 10, 0, 208, 0, 0, + 98, 0, 16, 0, 0, 0, + 0, 0, 6, 1, 2, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 34, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 31, 0, 0, 3, 26, 0, + 16, 0, 0, 0, 0, 0, + 54, 32, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 9, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 127, 67, + 1, 64, 0, 0, 0, 0, + 0, 63, 28, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 173, 0, + 0, 7, 0, 224, 17, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 21, 0, 0, 1, + 62, 0, 0, 1, 83, 84, + 65, 84, 148, 0, 0, 0, + 20, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 6, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 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, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 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, 1, 0, 0, 0, + 1, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepths.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepths.h new file mode 100644 index 0000000..fbb9deb --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepths.h @@ -0,0 +1,660 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_DepthSource texture float 2d t0 1 +// g_PrepareDepthsOut UAV float 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[15], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 2 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(2, 2, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[14].zwzz +sample_l_aoffimmi_indexable(0,2,0)(texture2d)(float,float,float,float) r1.x, r0.xyxx, t0.xyzw, s0, l(0.000000) +sample_l_aoffimmi_indexable(2,2,0)(texture2d)(float,float,float,float) r1.y, r0.xyxx, t0.yxzw, s0, l(0.000000) +sample_l_aoffimmi_indexable(2,0,0)(texture2d)(float,float,float,float) r1.z, r0.xyxx, t0.yzxw, s0, l(0.000000) +sample_l_aoffimmi_indexable(0,0,0)(texture2d)(float,float,float,float) r1.w, r0.xyxx, t0.yzwx, s0, l(0.000000) +add r0.xyzw, -r1.xyzw, cb0[0].yyyy +div r0.xyzw, cb0[0].xxxx, r0.xyzw +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,0,0) +store_uav_typed u0.xyzw, r1.xyzw, r0.wwww +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,1,1) +store_uav_typed u0.xyzw, r1.xyzw, r0.zzzz +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,2,2) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +store_uav_typed u0.xyzw, r1.xyzw, r0.yyyy +ret +// Approximately 23 instruction slots used +#endif + +const BYTE CSPrepareDownsampledDepthsDXIL[] = +{ + 68, 88, 66, 67, 91, 113, + 18, 213, 218, 74, 109, 172, + 230, 97, 118, 38, 233, 237, + 239, 194, 1, 0, 0, 0, + 160, 12, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 156, 8, 0, 0, 172, 8, + 0, 0, 188, 8, 0, 0, + 4, 12, 0, 0, 82, 68, + 69, 70, 96, 8, 0, 0, + 1, 0, 0, 0, 8, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 56, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 208, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 222, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 241, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 67, 108, 97, + 109, 112, 83, 97, 109, 112, + 108, 101, 114, 0, 103, 95, + 68, 101, 112, 116, 104, 83, + 111, 117, 114, 99, 101, 0, + 103, 95, 80, 114, 101, 112, + 97, 114, 101, 68, 101, 112, + 116, 104, 115, 79, 117, 116, + 0, 83, 83, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 66, 117, 102, 102, + 101, 114, 0, 171, 171, 171, + 241, 0, 0, 0, 1, 0, + 0, 0, 32, 1, 0, 0, + 128, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 72, 1, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 2, 0, 0, 0, 20, 8, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 103, 95, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 115, 0, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 0, 68, 101, 112, + 116, 104, 85, 110, 112, 97, + 99, 107, 67, 111, 110, 115, + 116, 115, 0, 102, 108, 111, + 97, 116, 50, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 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, 119, 1, 0, 0, + 67, 97, 109, 101, 114, 97, + 84, 97, 110, 72, 97, 108, + 102, 70, 79, 86, 0, 78, + 68, 67, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 78, 68, 67, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 85, 86, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 85, + 86, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 82, + 97, 100, 105, 117, 115, 0, + 102, 108, 111, 97, 116, 0, + 0, 0, 3, 0, 1, 0, + 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, 10, 2, 0, 0, + 69, 102, 102, 101, 99, 116, + 83, 104, 97, 100, 111, 119, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 80, 111, 119, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 67, 108, 97, 109, 112, + 0, 69, 102, 102, 101, 99, + 116, 70, 97, 100, 101, 79, + 117, 116, 77, 117, 108, 0, + 69, 102, 102, 101, 99, 116, + 70, 97, 100, 101, 79, 117, + 116, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 72, + 111, 114, 105, 122, 111, 110, + 65, 110, 103, 108, 101, 84, + 104, 114, 101, 115, 104, 111, + 108, 100, 0, 69, 102, 102, + 101, 99, 116, 83, 97, 109, + 112, 108, 105, 110, 103, 82, + 97, 100, 105, 117, 115, 78, + 101, 97, 114, 76, 105, 109, + 105, 116, 82, 101, 99, 0, + 68, 101, 112, 116, 104, 80, + 114, 101, 99, 105, 115, 105, + 111, 110, 79, 102, 102, 115, + 101, 116, 77, 111, 100, 0, + 78, 101, 103, 82, 101, 99, + 69, 102, 102, 101, 99, 116, + 82, 97, 100, 105, 117, 115, + 0, 76, 111, 97, 100, 67, + 111, 117, 110, 116, 101, 114, + 65, 118, 103, 68, 105, 118, + 0, 65, 100, 97, 112, 116, + 105, 118, 101, 83, 97, 109, + 112, 108, 101, 67, 111, 117, + 110, 116, 76, 105, 109, 105, + 116, 0, 73, 110, 118, 83, + 104, 97, 114, 112, 110, 101, + 115, 115, 0, 80, 97, 115, + 115, 73, 110, 100, 101, 120, + 0, 105, 110, 116, 0, 171, + 0, 0, 2, 0, 1, 0, + 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, 55, 3, 0, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 103, + 109, 97, 83, 113, 117, 97, + 114, 101, 100, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 109, 105, 108, + 97, 114, 105, 116, 121, 68, + 105, 115, 116, 97, 110, 99, + 101, 83, 105, 103, 109, 97, + 0, 80, 97, 116, 116, 101, + 114, 110, 82, 111, 116, 83, + 99, 97, 108, 101, 77, 97, + 116, 114, 105, 99, 101, 115, + 0, 102, 108, 111, 97, 116, + 52, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 175, 3, 0, 0, 78, 111, + 114, 109, 97, 108, 115, 85, + 110, 112, 97, 99, 107, 77, + 117, 108, 0, 78, 111, 114, + 109, 97, 108, 115, 85, 110, + 112, 97, 99, 107, 65, 100, + 100, 0, 68, 101, 116, 97, + 105, 108, 65, 79, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 68, 117, 109, 109, 121, + 48, 0, 83, 83, 65, 79, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 83, + 83, 65, 79, 66, 117, 102, + 102, 101, 114, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 79, + 102, 102, 115, 101, 116, 0, + 105, 110, 116, 50, 0, 171, + 171, 171, 1, 0, 2, 0, + 1, 0, 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, 140, 4, + 0, 0, 80, 101, 114, 80, + 97, 115, 115, 70, 117, 108, + 108, 82, 101, 115, 85, 86, + 79, 102, 102, 115, 101, 116, + 0, 79, 117, 116, 112, 117, + 116, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 79, 117, 116, 112, 117, 116, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 79, 102, 102, 115, 101, 116, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 78, 111, 114, 109, 97, + 108, 105, 115, 101, 100, 79, + 102, 102, 115, 101, 116, 0, + 78, 111, 114, 109, 97, 108, + 115, 87, 111, 114, 108, 100, + 84, 111, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 77, + 97, 116, 114, 105, 120, 0, + 102, 108, 111, 97, 116, 52, + 120, 52, 0, 171, 3, 0, + 3, 0, 4, 0, 4, 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, + 238, 5, 0, 0, 101, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 164, 1, + 0, 0, 128, 1, 0, 0, + 8, 0, 0, 0, 181, 1, + 0, 0, 128, 1, 0, 0, + 16, 0, 0, 0, 194, 1, + 0, 0, 128, 1, 0, 0, + 24, 0, 0, 0, 207, 1, + 0, 0, 128, 1, 0, 0, + 32, 0, 0, 0, 230, 1, + 0, 0, 128, 1, 0, 0, + 40, 0, 0, 0, 253, 1, + 0, 0, 16, 2, 0, 0, + 48, 0, 0, 0, 52, 2, + 0, 0, 16, 2, 0, 0, + 52, 0, 0, 0, 73, 2, + 0, 0, 16, 2, 0, 0, + 56, 0, 0, 0, 89, 2, + 0, 0, 16, 2, 0, 0, + 60, 0, 0, 0, 107, 2, + 0, 0, 16, 2, 0, 0, + 64, 0, 0, 0, 124, 2, + 0, 0, 16, 2, 0, 0, + 68, 0, 0, 0, 141, 2, + 0, 0, 16, 2, 0, 0, + 72, 0, 0, 0, 169, 2, + 0, 0, 16, 2, 0, 0, + 76, 0, 0, 0, 202, 2, + 0, 0, 16, 2, 0, 0, + 80, 0, 0, 0, 226, 2, + 0, 0, 16, 2, 0, 0, + 84, 0, 0, 0, 245, 2, + 0, 0, 16, 2, 0, 0, + 88, 0, 0, 0, 7, 3, + 0, 0, 16, 2, 0, 0, + 92, 0, 0, 0, 32, 3, + 0, 0, 16, 2, 0, 0, + 96, 0, 0, 0, 45, 3, + 0, 0, 60, 3, 0, 0, + 100, 0, 0, 0, 96, 3, + 0, 0, 16, 2, 0, 0, + 104, 0, 0, 0, 118, 3, + 0, 0, 16, 2, 0, 0, + 108, 0, 0, 0, 151, 3, + 0, 0, 184, 3, 0, 0, + 112, 0, 0, 0, 220, 3, + 0, 0, 16, 2, 0, 0, + 192, 0, 0, 0, 237, 3, + 0, 0, 16, 2, 0, 0, + 196, 0, 0, 0, 254, 3, + 0, 0, 16, 2, 0, 0, + 200, 0, 0, 0, 15, 4, + 0, 0, 16, 2, 0, 0, + 204, 0, 0, 0, 22, 4, + 0, 0, 128, 1, 0, 0, + 208, 0, 0, 0, 43, 4, + 0, 0, 128, 1, 0, 0, + 216, 0, 0, 0, 71, 4, + 0, 0, 128, 1, 0, 0, + 224, 0, 0, 0, 93, 4, + 0, 0, 128, 1, 0, 0, + 232, 0, 0, 0, 122, 4, + 0, 0, 148, 4, 0, 0, + 240, 0, 0, 0, 184, 4, + 0, 0, 128, 1, 0, 0, + 248, 0, 0, 0, 207, 4, + 0, 0, 128, 1, 0, 0, + 0, 1, 0, 0, 230, 4, + 0, 0, 128, 1, 0, 0, + 8, 1, 0, 0, 4, 5, + 0, 0, 128, 1, 0, 0, + 16, 1, 0, 0, 28, 5, + 0, 0, 128, 1, 0, 0, + 24, 1, 0, 0, 59, 5, + 0, 0, 128, 1, 0, 0, + 32, 1, 0, 0, 94, 5, + 0, 0, 128, 1, 0, 0, + 40, 1, 0, 0, 136, 5, + 0, 0, 128, 1, 0, 0, + 48, 1, 0, 0, 167, 5, + 0, 0, 128, 1, 0, 0, + 56, 1, 0, 0, 208, 5, + 0, 0, 248, 5, 0, 0, + 64, 1, 0, 0, 5, 0, + 0, 0, 1, 0, 96, 0, + 0, 0, 42, 0, 28, 6, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 86, 1, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 64, 3, 0, 0, + 80, 0, 5, 0, 208, 0, + 0, 0, 106, 8, 0, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 0, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 2, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 41, 0, 0, 9, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 43, 0, 0, 5, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 10, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 72, 0, + 0, 142, 1, 64, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 1, 68, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 34, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 22, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 1, 4, 0, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 150, 124, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 1, 0, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 150, 115, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 65, 0, + 0, 0, 1, 0, 0, 0, + 86, 133, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 242, 0, + 16, 0, 0, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 62, 0, 0, 1, 83, 84, + 65, 84, 148, 0, 0, 0, + 23, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 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, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 0, 0, 0, 0, + 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, + 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepthsAndMips.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepthsAndMips.h new file mode 100644 index 0000000..c19c3eb --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepthsAndMips.h @@ -0,0 +1,1226 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_DepthSource texture float 2d t0 1 +// g_PrepareDepthsAndMips_OutMip0 UAV float 2darray u0 1 +// g_PrepareDepthsAndMips_OutMip1 UAV float 2darray u1 1 +// g_PrepareDepthsAndMips_OutMip2 UAV float 2darray u2 1 +// g_PrepareDepthsAndMips_OutMip3 UAV float 2darray u3 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[15], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_uav_typed_texture2darray (float,float,float,float) u1 +dcl_uav_typed_texture2darray (float,float,float,float) u2 +dcl_uav_typed_texture2darray (float,float,float,float) u3 +dcl_input vThreadIDInGroup.xy +dcl_input vThreadID.xy +dcl_temps 7 +dcl_tgsm_structured g0, 256, 4 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(2, 2, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[14].zwzz +sample_l_aoffimmi_indexable(0,2,0)(texture2d)(float,float,float,float) r1.x, r0.xyxx, t0.xyzw, s0, l(0.000000) +sample_l_aoffimmi_indexable(2,2,0)(texture2d)(float,float,float,float) r1.y, r0.xyxx, t0.yxzw, s0, l(0.000000) +sample_l_aoffimmi_indexable(2,0,0)(texture2d)(float,float,float,float) r1.z, r0.xyxx, t0.yzxw, s0, l(0.000000) +sample_l_aoffimmi_indexable(0,0,0)(texture2d)(float,float,float,float) r1.w, r0.xyxx, t0.yzwx, s0, l(0.000000) +add r0.xyzw, -r1.xyzw, cb0[0].yyyy +div r0.xyzw, cb0[0].xxxx, r0.xyzw +ishl r1.x, vThreadIDInGroup.y, l(2) +imad r1.x, vThreadIDInGroup.x, l(32), r1.x +store_structured g0.x, l(0), r1.x, r0.w +store_structured g0.x, l(1), r1.x, r0.z +store_structured g0.x, l(2), r1.x, r0.x +store_structured g0.x, l(3), r1.x, r0.y +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,0,0) +store_uav_typed u0.xyzw, r1.xyzw, r0.wwww +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,1,1) +store_uav_typed u0.xyzw, r1.xyzw, r0.zzzz +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,2,2) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +store_uav_typed u0.xyzw, r1.xyzw, r0.yyyy +bfi r0.x, l(1), l(1), vThreadIDInGroup.y, l(0) +and r1.xyzw, vThreadIDInGroup.yxxy, l(1, 1, 3, 3) +bfi r0.zw, l(0, 0, 1, 1), l(0, 0, 0, 0), vThreadIDInGroup.xxxx, r0.xxxx +iadd r2.xy, -r1.yxyy, vThreadIDInGroup.xyxx +ushr r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r2.xy, r2.xyxx, l(5, 2, 0, 0) +iadd r2.z, r2.y, r2.x +ld_structured r3.x, r0.w, r2.z, g0.xxxx +iadd r4.xy, r2.yxyy, l(4, 32, 0, 0) +iadd r4.zw, r2.xxxy, r4.xxxy +ld_structured r3.y, r0.w, r4.z, g0.xxxx +ld_structured r3.z, r0.w, r4.w, g0.xxxx +iadd r2.w, r4.x, r4.y +ld_structured r3.w, r0.w, r2.w, g0.xxxx +min r5.xy {min16f}, r3.ywyy {def32 as min16f}, r3.xzxx {def32 as min16f} +min r5.x {min16f}, r5.y {min16f}, r5.x {min16f} +add r4.xyzw {min16f}, r3.xyzw {def32 as min16f}, -r5.xxxx {min16f} +mad r4.xyzw {min16f}, -r4.xyzw {min16f}, r4.xyzw {min16f}, l(1.000000, 1.000000, 1.000000, 1.000000) {def32 as min16f} +max r4.xyzw {min16f}, r4.xyzw {min16f}, l(0.000000, 0.000000, 0.000000, 0.000000) {def32 as min16f} +dp4 r5.x {min16f}, r4.xyzw {min16f}, r3.xyzw {def32 as min16f} +dp4 r2.w, r4.xyzw {min16f as def32}, l(1.000000, 1.000000, 1.000000, 1.000000) +div r2.w, r5.x {min16f as def32}, r2.w +store_uav_typed u1.xyzw, r0.xyzw, r2.wwww +store_structured g0.x, r0.w, r2.z, r2.w +ieq r1.xz, r1.yyxy, r1.zzwz +and r0.z, r1.z, r1.x +ushr r3.xy, r0.xyxx, l(1, 1, 0, 0) +sync_g_t +if_nz r0.z + ld_structured r4.x, r0.w, r2.z, g0.xxxx + iadd r0.xy, r2.yxyy, l(8, 64, 0, 0) + iadd r1.xz, r0.xxyx, r2.xxyx + ld_structured r4.y, r0.w, r1.x, g0.xxxx + ld_structured r4.z, r0.w, r1.z, g0.xxxx + iadd r0.x, r0.x, r0.y + ld_structured r4.w, r0.w, r0.x, g0.xxxx + min r5.xy {min16f}, r4.ywyy {def32 as min16f}, r4.xzxx {def32 as min16f} + min r5.x {min16f}, r5.y {min16f}, r5.x {min16f} + add r5.xyzw {min16f}, r4.xyzw {def32 as min16f}, -r5.xxxx {min16f} + mad r5.xyzw {min16f}, -r5.xyzw {min16f}, r5.xyzw {min16f}, l(1.000000, 1.000000, 1.000000, 1.000000) {def32 as min16f} + max r5.xyzw {min16f}, r5.xyzw {min16f}, l(0.000000, 0.000000, 0.000000, 0.000000) {def32 as min16f} + dp4 r6.x {min16f}, r5.xyzw {min16f}, r4.xyzw {def32 as min16f} + dp4 r0.x, r5.xyzw {min16f as def32}, l(1.000000, 1.000000, 1.000000, 1.000000) + div r0.x, r6.x {min16f as def32}, r0.x + mov r3.zw, r0.wwww + store_uav_typed u2.xyzw, r3.xyzw, r0.xxxx + store_structured g0.x, r0.w, r2.z, r0.x +endif +ieq r0.x, r1.y, vThreadIDInGroup.x +sync_g_t +if_nz r0.x + ushr r1.xy, r3.xyxx, l(1, 1, 0, 0) + ld_structured r3.x, r0.w, r2.z, g0.xxxx + iadd r0.xy, r2.yxyy, l(16, 128, 0, 0) + iadd r2.xy, r0.xyxx, r2.xyxx + ld_structured r3.y, r0.w, r2.x, g0.xxxx + ld_structured r3.z, r0.w, r2.y, g0.xxxx + iadd r0.x, r0.x, r0.y + ld_structured r3.w, r0.w, r0.x, g0.xxxx + min r5.xy {min16f}, r3.ywyy {def32 as min16f}, r3.xzxx {def32 as min16f} + min r5.x {min16f}, r5.y {min16f}, r5.x {min16f} + add r2.xyzw {min16f}, r3.xyzw {def32 as min16f}, -r5.xxxx {min16f} + mad r2.xyzw {min16f}, -r2.xyzw {min16f}, r2.xyzw {min16f}, l(1.000000, 1.000000, 1.000000, 1.000000) {def32 as min16f} + max r2.xyzw {min16f}, r2.xyzw {min16f}, l(0.000000, 0.000000, 0.000000, 0.000000) {def32 as min16f} + dp4 r5.x {min16f}, r2.xyzw {min16f}, r3.xyzw {def32 as min16f} + dp4 r0.x, r2.xyzw {min16f as def32}, l(1.000000, 1.000000, 1.000000, 1.000000) + div r0.x, r5.x {min16f as def32}, r0.x + mov r1.zw, r0.wwww + store_uav_typed u3.xyzw, r1.xyzw, r0.xxxx +endif +ret +// Approximately 99 instruction slots used +#endif + +const BYTE CSPrepareDownsampledDepthsAndMipsDXIL[] = +{ + 68, 88, 66, 67, 11, 45, + 186, 106, 153, 122, 51, 97, + 248, 199, 230, 36, 255, 95, + 111, 142, 1, 0, 0, 0, + 212, 23, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 104, 9, 0, 0, 120, 9, + 0, 0, 136, 9, 0, 0, + 40, 23, 0, 0, 56, 23, + 0, 0, 82, 68, 69, 70, + 40, 9, 0, 0, 1, 0, + 0, 0, 208, 1, 0, 0, + 7, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 0, 9, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 28, 1, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 48, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 62, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 93, 1, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 124, 1, 0, 0, 4, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 155, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 3, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 186, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 67, 108, 97, 109, 112, + 83, 97, 109, 112, 108, 101, + 114, 0, 103, 95, 68, 101, + 112, 116, 104, 83, 111, 117, + 114, 99, 101, 0, 103, 95, + 80, 114, 101, 112, 97, 114, + 101, 68, 101, 112, 116, 104, + 115, 65, 110, 100, 77, 105, + 112, 115, 95, 79, 117, 116, + 77, 105, 112, 48, 0, 103, + 95, 80, 114, 101, 112, 97, + 114, 101, 68, 101, 112, 116, + 104, 115, 65, 110, 100, 77, + 105, 112, 115, 95, 79, 117, + 116, 77, 105, 112, 49, 0, + 103, 95, 80, 114, 101, 112, + 97, 114, 101, 68, 101, 112, + 116, 104, 115, 65, 110, 100, + 77, 105, 112, 115, 95, 79, + 117, 116, 77, 105, 112, 50, + 0, 103, 95, 80, 114, 101, + 112, 97, 114, 101, 68, 101, + 112, 116, 104, 115, 65, 110, + 100, 77, 105, 112, 115, 95, + 79, 117, 116, 77, 105, 112, + 51, 0, 83, 83, 65, 79, + 67, 111, 110, 115, 116, 97, + 110, 116, 115, 66, 117, 102, + 102, 101, 114, 0, 171, 171, + 186, 1, 0, 0, 1, 0, + 0, 0, 232, 1, 0, 0, + 128, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 16, 2, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 2, 0, 0, 0, 220, 8, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 103, 95, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 115, 0, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 0, 68, 101, 112, + 116, 104, 85, 110, 112, 97, + 99, 107, 67, 111, 110, 115, + 116, 115, 0, 102, 108, 111, + 97, 116, 50, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 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, 63, 2, 0, 0, + 67, 97, 109, 101, 114, 97, + 84, 97, 110, 72, 97, 108, + 102, 70, 79, 86, 0, 78, + 68, 67, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 78, 68, 67, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 85, 86, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 85, + 86, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 82, + 97, 100, 105, 117, 115, 0, + 102, 108, 111, 97, 116, 0, + 0, 0, 3, 0, 1, 0, + 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, 210, 2, 0, 0, + 69, 102, 102, 101, 99, 116, + 83, 104, 97, 100, 111, 119, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 80, 111, 119, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 67, 108, 97, 109, 112, + 0, 69, 102, 102, 101, 99, + 116, 70, 97, 100, 101, 79, + 117, 116, 77, 117, 108, 0, + 69, 102, 102, 101, 99, 116, + 70, 97, 100, 101, 79, 117, + 116, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 72, + 111, 114, 105, 122, 111, 110, + 65, 110, 103, 108, 101, 84, + 104, 114, 101, 115, 104, 111, + 108, 100, 0, 69, 102, 102, + 101, 99, 116, 83, 97, 109, + 112, 108, 105, 110, 103, 82, + 97, 100, 105, 117, 115, 78, + 101, 97, 114, 76, 105, 109, + 105, 116, 82, 101, 99, 0, + 68, 101, 112, 116, 104, 80, + 114, 101, 99, 105, 115, 105, + 111, 110, 79, 102, 102, 115, + 101, 116, 77, 111, 100, 0, + 78, 101, 103, 82, 101, 99, + 69, 102, 102, 101, 99, 116, + 82, 97, 100, 105, 117, 115, + 0, 76, 111, 97, 100, 67, + 111, 117, 110, 116, 101, 114, + 65, 118, 103, 68, 105, 118, + 0, 65, 100, 97, 112, 116, + 105, 118, 101, 83, 97, 109, + 112, 108, 101, 67, 111, 117, + 110, 116, 76, 105, 109, 105, + 116, 0, 73, 110, 118, 83, + 104, 97, 114, 112, 110, 101, + 115, 115, 0, 80, 97, 115, + 115, 73, 110, 100, 101, 120, + 0, 105, 110, 116, 0, 171, + 0, 0, 2, 0, 1, 0, + 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, 255, 3, 0, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 103, + 109, 97, 83, 113, 117, 97, + 114, 101, 100, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 109, 105, 108, + 97, 114, 105, 116, 121, 68, + 105, 115, 116, 97, 110, 99, + 101, 83, 105, 103, 109, 97, + 0, 80, 97, 116, 116, 101, + 114, 110, 82, 111, 116, 83, + 99, 97, 108, 101, 77, 97, + 116, 114, 105, 99, 101, 115, + 0, 102, 108, 111, 97, 116, + 52, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 119, 4, 0, 0, 78, 111, + 114, 109, 97, 108, 115, 85, + 110, 112, 97, 99, 107, 77, + 117, 108, 0, 78, 111, 114, + 109, 97, 108, 115, 85, 110, + 112, 97, 99, 107, 65, 100, + 100, 0, 68, 101, 116, 97, + 105, 108, 65, 79, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 68, 117, 109, 109, 121, + 48, 0, 83, 83, 65, 79, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 83, + 83, 65, 79, 66, 117, 102, + 102, 101, 114, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 79, + 102, 102, 115, 101, 116, 0, + 105, 110, 116, 50, 0, 171, + 171, 171, 1, 0, 2, 0, + 1, 0, 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, 84, 5, + 0, 0, 80, 101, 114, 80, + 97, 115, 115, 70, 117, 108, + 108, 82, 101, 115, 85, 86, + 79, 102, 102, 115, 101, 116, + 0, 79, 117, 116, 112, 117, + 116, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 79, 117, 116, 112, 117, 116, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 79, 102, 102, 115, 101, 116, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 78, 111, 114, 109, 97, + 108, 105, 115, 101, 100, 79, + 102, 102, 115, 101, 116, 0, + 78, 111, 114, 109, 97, 108, + 115, 87, 111, 114, 108, 100, + 84, 111, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 77, + 97, 116, 114, 105, 120, 0, + 102, 108, 111, 97, 116, 52, + 120, 52, 0, 171, 3, 0, + 3, 0, 4, 0, 4, 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, + 182, 6, 0, 0, 45, 2, + 0, 0, 72, 2, 0, 0, + 0, 0, 0, 0, 108, 2, + 0, 0, 72, 2, 0, 0, + 8, 0, 0, 0, 125, 2, + 0, 0, 72, 2, 0, 0, + 16, 0, 0, 0, 138, 2, + 0, 0, 72, 2, 0, 0, + 24, 0, 0, 0, 151, 2, + 0, 0, 72, 2, 0, 0, + 32, 0, 0, 0, 174, 2, + 0, 0, 72, 2, 0, 0, + 40, 0, 0, 0, 197, 2, + 0, 0, 216, 2, 0, 0, + 48, 0, 0, 0, 252, 2, + 0, 0, 216, 2, 0, 0, + 52, 0, 0, 0, 17, 3, + 0, 0, 216, 2, 0, 0, + 56, 0, 0, 0, 33, 3, + 0, 0, 216, 2, 0, 0, + 60, 0, 0, 0, 51, 3, + 0, 0, 216, 2, 0, 0, + 64, 0, 0, 0, 68, 3, + 0, 0, 216, 2, 0, 0, + 68, 0, 0, 0, 85, 3, + 0, 0, 216, 2, 0, 0, + 72, 0, 0, 0, 113, 3, + 0, 0, 216, 2, 0, 0, + 76, 0, 0, 0, 146, 3, + 0, 0, 216, 2, 0, 0, + 80, 0, 0, 0, 170, 3, + 0, 0, 216, 2, 0, 0, + 84, 0, 0, 0, 189, 3, + 0, 0, 216, 2, 0, 0, + 88, 0, 0, 0, 207, 3, + 0, 0, 216, 2, 0, 0, + 92, 0, 0, 0, 232, 3, + 0, 0, 216, 2, 0, 0, + 96, 0, 0, 0, 245, 3, + 0, 0, 4, 4, 0, 0, + 100, 0, 0, 0, 40, 4, + 0, 0, 216, 2, 0, 0, + 104, 0, 0, 0, 62, 4, + 0, 0, 216, 2, 0, 0, + 108, 0, 0, 0, 95, 4, + 0, 0, 128, 4, 0, 0, + 112, 0, 0, 0, 164, 4, + 0, 0, 216, 2, 0, 0, + 192, 0, 0, 0, 181, 4, + 0, 0, 216, 2, 0, 0, + 196, 0, 0, 0, 198, 4, + 0, 0, 216, 2, 0, 0, + 200, 0, 0, 0, 215, 4, + 0, 0, 216, 2, 0, 0, + 204, 0, 0, 0, 222, 4, + 0, 0, 72, 2, 0, 0, + 208, 0, 0, 0, 243, 4, + 0, 0, 72, 2, 0, 0, + 216, 0, 0, 0, 15, 5, + 0, 0, 72, 2, 0, 0, + 224, 0, 0, 0, 37, 5, + 0, 0, 72, 2, 0, 0, + 232, 0, 0, 0, 66, 5, + 0, 0, 92, 5, 0, 0, + 240, 0, 0, 0, 128, 5, + 0, 0, 72, 2, 0, 0, + 248, 0, 0, 0, 151, 5, + 0, 0, 72, 2, 0, 0, + 0, 1, 0, 0, 174, 5, + 0, 0, 72, 2, 0, 0, + 8, 1, 0, 0, 204, 5, + 0, 0, 72, 2, 0, 0, + 16, 1, 0, 0, 228, 5, + 0, 0, 72, 2, 0, 0, + 24, 1, 0, 0, 3, 6, + 0, 0, 72, 2, 0, 0, + 32, 1, 0, 0, 38, 6, + 0, 0, 72, 2, 0, 0, + 40, 1, 0, 0, 80, 6, + 0, 0, 72, 2, 0, 0, + 48, 1, 0, 0, 111, 6, + 0, 0, 72, 2, 0, 0, + 56, 1, 0, 0, 152, 6, + 0, 0, 192, 6, 0, 0, + 64, 1, 0, 0, 5, 0, + 0, 0, 1, 0, 96, 0, + 0, 0, 42, 0, 228, 6, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 2, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 49, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 152, 13, 0, 0, + 80, 0, 5, 0, 102, 3, + 0, 0, 106, 8, 1, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 0, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 156, 64, 0, 4, 0, 224, + 17, 0, 1, 0, 0, 0, + 85, 85, 0, 0, 156, 64, + 0, 4, 0, 224, 17, 0, + 2, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 3, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 32, + 2, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 7, 0, 0, 0, + 160, 0, 0, 5, 0, 240, + 17, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 4, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 8, 0, + 0, 0, 1, 0, 0, 0, + 41, 0, 0, 9, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 14, 0, + 0, 0, 72, 0, 0, 142, + 1, 64, 0, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 72, 0, + 0, 142, 1, 68, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 34, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 22, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 72, 0, 0, 142, 1, 4, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 150, 124, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 142, + 1, 0, 0, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 130, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 150, 115, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 65, 0, 0, 0, + 1, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 242, 0, 16, 0, + 0, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 1, 0, 0, 0, + 26, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 35, 0, 0, 8, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 32, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 140, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 22, 36, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 140, 0, + 0, 16, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 6, 32, 2, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 50, 0, 16, 0, 2, 0, + 0, 0, 22, 5, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 70, 32, 2, 0, + 85, 0, 0, 9, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 10, 50, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 5, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 18, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 50, 0, 16, 0, 4, 0, + 0, 0, 22, 5, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 194, 0, + 16, 0, 4, 0, 0, 0, + 6, 4, 16, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 4, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 4, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 4, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 4, 0, 0, 0, + 26, 0, 16, 0, 4, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 51, 0, 0, 8, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 214, 5, 16, 0, 3, 0, + 0, 0, 134, 0, 16, 0, + 3, 0, 0, 0, 51, 0, + 0, 10, 18, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 6, 0, 16, 128, + 65, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 15, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 65, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 52, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 9, + 18, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 17, 0, 0, 11, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 14, 0, + 0, 8, 130, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 2, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 32, 0, + 0, 7, 82, 0, 16, 0, + 1, 0, 0, 0, 86, 4, + 16, 0, 1, 0, 0, 0, + 166, 11, 16, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 190, 24, + 0, 1, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 22, 5, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 8, 0, 0, 0, + 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 82, 0, + 16, 0, 1, 0, 0, 0, + 6, 1, 16, 0, 0, 0, + 0, 0, 6, 1, 16, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 4, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 51, 0, 0, 8, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 214, 5, 16, 0, 4, 0, + 0, 0, 134, 0, 16, 0, + 4, 0, 0, 0, 51, 0, + 0, 10, 18, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 128, + 65, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 15, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 65, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 52, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 9, + 18, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 17, 0, 0, 11, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 14, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 194, 0, + 16, 0, 3, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 3, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 32, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 10, 32, 2, 0, 190, 24, + 0, 1, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 18, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 22, 5, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 51, 0, 0, 8, 50, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 214, 5, + 16, 0, 3, 0, 0, 0, + 134, 0, 16, 0, 3, 0, + 0, 0, 51, 0, 0, 10, + 18, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 10, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 6, 0, 16, 128, 65, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 15, 242, 0, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 128, 65, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 52, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 17, 0, 0, 9, 18, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 17, 0, 0, 11, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 14, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 194, 0, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 62, 0, 0, 1, + 83, 70, 73, 48, 8, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 83, 84, + 65, 84, 148, 0, 0, 0, + 99, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 28, 0, + 0, 0, 17, 0, 0, 0, + 5, 0, 0, 0, 1, 0, + 0, 0, 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, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, + 0, 0, 0, 0, 0, 0, + 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, 2, 0, + 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepthsHalf.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepthsHalf.h new file mode 100644 index 0000000..6fb6fcf --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledDepthsHalf.h @@ -0,0 +1,607 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_DepthSource texture float 2d t0 1 +// g_PrepareDepthsOut UAV float 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[1], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 2 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(2, 2, 0, 0) +mov r0.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r0.x, r0.xyzw, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r0.x, cb0[0].x, r0.x +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,0,0) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +imad r0.xy, vThreadID.xyxx, l(4, 4, 0, 0), l(2, 2, 0, 0) +mov r0.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r0.x, r0.xyzw, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r0.x, cb0[0].x, r0.x +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +ret +// Approximately 17 instruction slots used +#endif + +const BYTE CSPrepareDownsampledDepthsHalfDXIL[] = +{ + 68, 88, 66, 67, 187, 180, + 129, 46, 187, 92, 31, 143, + 2, 13, 113, 182, 38, 81, + 161, 100, 1, 0, 0, 0, + 144, 11, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 104, 8, 0, 0, 120, 8, + 0, 0, 136, 8, 0, 0, + 244, 10, 0, 0, 82, 68, + 69, 70, 44, 8, 0, 0, + 1, 0, 0, 0, 212, 0, + 0, 0, 3, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 4, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 170, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 189, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 68, 101, 112, 116, + 104, 83, 111, 117, 114, 99, + 101, 0, 103, 95, 80, 114, + 101, 112, 97, 114, 101, 68, + 101, 112, 116, 104, 115, 79, + 117, 116, 0, 83, 83, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 66, 117, + 102, 102, 101, 114, 0, 171, + 171, 171, 189, 0, 0, 0, + 1, 0, 0, 0, 236, 0, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 20, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 224, 7, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 67, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 214, 1, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 3, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 123, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 88, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 186, 5, 0, 0, + 49, 1, 0, 0, 76, 1, + 0, 0, 0, 0, 0, 0, + 112, 1, 0, 0, 76, 1, + 0, 0, 8, 0, 0, 0, + 129, 1, 0, 0, 76, 1, + 0, 0, 16, 0, 0, 0, + 142, 1, 0, 0, 76, 1, + 0, 0, 24, 0, 0, 0, + 155, 1, 0, 0, 76, 1, + 0, 0, 32, 0, 0, 0, + 178, 1, 0, 0, 76, 1, + 0, 0, 40, 0, 0, 0, + 201, 1, 0, 0, 220, 1, + 0, 0, 48, 0, 0, 0, + 0, 2, 0, 0, 220, 1, + 0, 0, 52, 0, 0, 0, + 21, 2, 0, 0, 220, 1, + 0, 0, 56, 0, 0, 0, + 37, 2, 0, 0, 220, 1, + 0, 0, 60, 0, 0, 0, + 55, 2, 0, 0, 220, 1, + 0, 0, 64, 0, 0, 0, + 72, 2, 0, 0, 220, 1, + 0, 0, 68, 0, 0, 0, + 89, 2, 0, 0, 220, 1, + 0, 0, 72, 0, 0, 0, + 117, 2, 0, 0, 220, 1, + 0, 0, 76, 0, 0, 0, + 150, 2, 0, 0, 220, 1, + 0, 0, 80, 0, 0, 0, + 174, 2, 0, 0, 220, 1, + 0, 0, 84, 0, 0, 0, + 193, 2, 0, 0, 220, 1, + 0, 0, 88, 0, 0, 0, + 211, 2, 0, 0, 220, 1, + 0, 0, 92, 0, 0, 0, + 236, 2, 0, 0, 220, 1, + 0, 0, 96, 0, 0, 0, + 249, 2, 0, 0, 8, 3, + 0, 0, 100, 0, 0, 0, + 44, 3, 0, 0, 220, 1, + 0, 0, 104, 0, 0, 0, + 66, 3, 0, 0, 220, 1, + 0, 0, 108, 0, 0, 0, + 99, 3, 0, 0, 132, 3, + 0, 0, 112, 0, 0, 0, + 168, 3, 0, 0, 220, 1, + 0, 0, 192, 0, 0, 0, + 185, 3, 0, 0, 220, 1, + 0, 0, 196, 0, 0, 0, + 202, 3, 0, 0, 220, 1, + 0, 0, 200, 0, 0, 0, + 219, 3, 0, 0, 220, 1, + 0, 0, 204, 0, 0, 0, + 226, 3, 0, 0, 76, 1, + 0, 0, 208, 0, 0, 0, + 247, 3, 0, 0, 76, 1, + 0, 0, 216, 0, 0, 0, + 19, 4, 0, 0, 76, 1, + 0, 0, 224, 0, 0, 0, + 41, 4, 0, 0, 76, 1, + 0, 0, 232, 0, 0, 0, + 70, 4, 0, 0, 96, 4, + 0, 0, 240, 0, 0, 0, + 132, 4, 0, 0, 76, 1, + 0, 0, 248, 0, 0, 0, + 155, 4, 0, 0, 76, 1, + 0, 0, 0, 1, 0, 0, + 178, 4, 0, 0, 76, 1, + 0, 0, 8, 1, 0, 0, + 208, 4, 0, 0, 76, 1, + 0, 0, 16, 1, 0, 0, + 232, 4, 0, 0, 76, 1, + 0, 0, 24, 1, 0, 0, + 7, 5, 0, 0, 76, 1, + 0, 0, 32, 1, 0, 0, + 42, 5, 0, 0, 76, 1, + 0, 0, 40, 1, 0, 0, + 84, 5, 0, 0, 76, 1, + 0, 0, 48, 1, 0, 0, + 115, 5, 0, 0, 76, 1, + 0, 0, 56, 1, 0, 0, + 156, 5, 0, 0, 196, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 232, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 34, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 100, 2, + 0, 0, 80, 0, 5, 0, + 153, 0, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 64, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 2, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 41, 0, + 0, 9, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 35, 0, 0, 14, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 17, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 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, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 6, 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, 2, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledNormals.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledNormals.h new file mode 100644 index 0000000..0c20084 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledNormals.h @@ -0,0 +1,1998 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_DepthIn texture float 2d t0 1 +// g_PrepareNormals_NormalOut UAV float4 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[17], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 18 +dcl_thread_group 8, 8, 1 +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,0,0) +mov r1.w, l(1.000000) +ishl r2.xyzw, vThreadID.xyxy, l(2, 2, 2, 2) +itof r3.xyzw, r2.xyzw +iadd r2.xy, r2.zwzz, cb0[15].xyxx +add r3.xyzw, r3.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r3.xyzw, r3.xyzw, cb0[16].zwzw +mad r4.xyzw, cb0[16].zwzw, l(-2.000000, 0.000000, 2.000000, 0.000000), r3.zwzw +mad r4.xyzw, cb0[1].xyxy, r4.xyzw, cb0[1].zwzw +mov r2.zw, l(0,0,0,0) +ld_aoffimmi_indexable(-2,0,0)(texture2d)(float,float,float,float) r5.x, r2.xyww, t0.xyzw +add r5.x, -r5.x, cb0[0].y +div r5.y, cb0[0].x, r5.x +mul r5.xz, r4.yyxy, r5.yyyy +ld_indexable(texture2d)(float,float,float,float) r4.x, r2.xyww, t0.xyzw +add r4.x, -r4.x, cb0[0].y +div r6.y, cb0[0].x, r4.x +ld_aoffimmi_indexable(2,2,0)(texture2d)(float,float,float,float) r4.x, r2.xyww, t0.xyzw +add r4.x, -r4.x, cb0[0].y +div r6.w, cb0[0].x, r4.x +mov r7.xz, r6.yywy +mov r8.x, r7.x +mad r4.xy, cb0[1].xyxx, r3.zwzz, cb0[1].zwzz +mul r8.yz, r6.yyyy, r4.xxyx +add r9.xyz, r5.xyzx, -r8.zxyz +dp3 r4.x, r9.xyzx, r9.xyzx +rsq r4.x, r4.x +mul r9.xyz, r4.xxxx, r9.xyzx +mad r10.xyzw, cb0[16].zwzw, l(0.000000, -2.000000, 2.000000, -2.000000), r3.zwzw +mad r10.xyzw, cb0[1].xyxy, r10.xyzw, cb0[1].zwzw +ld_aoffimmi_indexable(0,-2,0)(texture2d)(float,float,float,float) r4.x, r2.xyww, t0.xyzw +add r4.x, -r4.x, cb0[0].y +div r5.x, cb0[0].x, r4.x +mul r11.yz, r5.xxxx, r10.xxyx +mov r11.x, r5.x +add r11.xyz, -r8.xyzx, r11.xyzx +dp3 r4.x, r11.xyzx, r11.xyzx +rsq r4.x, r4.x +mul r11.xyz, r4.xxxx, r11.xyzx +mul r12.xyz, r9.yzxy, r11.zxyz +mad r12.xyz, r9.xyzx, r11.xyzx, -r12.xyzx +ld_aoffimmi_indexable(2,0,0)(texture2d)(float,float,float,float) r4.x, r2.xyww, t0.xyzw +add r4.x, -r4.x, cb0[0].y +div r5.z, cb0[0].x, r4.x +ld_aoffimmi_indexable(0,2,0)(texture2d)(float,float,float,float) r4.x, r2.xyww, t0.xyzw +add r4.x, -r4.x, cb0[0].y +div r5.w, cb0[0].x, r4.x +add r13.xyzw, r5.yxzw, -r6.yyyy +add r14.xyzw, r13.zwzw, r13.xyxy +min r13.xyzw, |r13.xyzw|, |r14.xyzw| +mul r4.xy, r6.ywyy, l(0.040000, 0.040000, 0.000000, 0.000000) +div r13.xyzw, r13.xyzw, r4.xxxx +add_sat r13.xyzw, -r13.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r13.xyzw, r13.yzwx, r13.xyzw +mad r12.xyz, r13.xxxx, r12.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +mul r14.yz, r4.zzwz, r5.zzzz +mov r14.x, r5.z +add r4.xzw, -r8.xxyz, r14.xxyz +dp3 r8.w, r4.xzwx, r4.xzwx +rsq r8.w, r8.w +mul r4.xzw, r4.xxzw, r8.wwww +mul r15.xyz, r4.wxzw, r11.xyzx +mad r11.xyz, r11.zxyz, r4.xzwx, -r15.xyzx +mad r11.xyz, r13.yyyy, r11.xyzx, r12.xyzx +mad r12.xyzw, cb0[16].zwzw, l(0.000000, 2.000000, 4.000000, 2.000000), r3.zwzw +mad r12.xyzw, cb0[1].xyxy, r12.xyzw, cb0[1].zwzw +mul r15.xz, r5.wwww, r12.yyxy +mov r15.y, r5.w +add r16.xyz, -r8.xyzx, r15.yzxy +dp3 r8.w, r16.xyzx, r16.xyzx +rsq r8.w, r8.w +mul r16.xyz, r8.wwww, r16.xyzx +mul r17.xyz, r4.xzwx, r16.zxyz +mad r4.xzw, r4.wwxz, r16.xxyz, -r17.xxyz +mad r4.xzw, r13.zzzz, r4.xxzw, r11.xxyz +mul r11.xyz, r9.xyzx, r16.xyzx +mad r9.xyz, r16.zxyz, r9.yzxy, -r11.xyzx +mad r4.xzw, r13.wwww, r9.xxyz, r4.xxzw +dp3 r8.w, r4.xzwx, r4.xzwx +rsq r8.w, r8.w +mul r1.xyz, r4.xzwx, r8.wwww +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +ld_aoffimmi_indexable(2,-2,0)(texture2d)(float,float,float,float) r0.x, r2.xyww, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r6.z, cb0[0].x, r0.x +ld_aoffimmi_indexable(4,0,0)(texture2d)(float,float,float,float) r0.x, r2.xyww, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r6.x, cb0[0].x, r0.x +add r0.xyzw, -r5.zzzz, r6.yzxw +mul r1.xy, r5.zwzz, l(0.040000, 0.040000, 0.000000, 0.000000) +add r9.xyzw, r0.zwzw, r0.xyxy +min r0.xyzw, |r0.xyzw|, |r9.xyzw| +div r0.xyzw, r0.xyzw, r1.xxxx +add_sat r0.xyzw, -r0.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r0.xyzw, r0.yzwx, r0.xyzw +mul r9.yz, r6.zzzz, r10.zzwz +mov r9.x, r6.z +add r1.xzw, -r14.xxyz, r9.xxyz +dp3 r4.x, r1.xzwx, r1.xzwx +rsq r4.x, r4.x +mul r1.xzw, r1.xxzw, r4.xxxx +add r4.xzw, r8.zzxy, -r14.zzxy +add r8.xyz, r8.xyzx, -r15.yzxy +dp3 r8.w, r4.xzwx, r4.xzwx +rsq r8.w, r8.w +mul r4.xzw, r4.xxzw, r8.wwww +mul r9.xyz, r1.wxzw, r4.zwxz +mad r9.xyz, r4.xzwx, r1.xzwx, -r9.xyzx +mad r9.xyz, r0.xxxx, r9.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +mad r10.xyzw, cb0[16].zwzw, l(4.000000, 0.000000, -2.000000, 2.000000), r3.zwzw +mad r10.xyzw, cb0[1].xyxy, r10.xyzw, cb0[1].zwzw +mul r6.yz, r6.xxxx, r10.xxyx +add r6.xyz, -r14.xyzx, r6.xyzx +dp3 r0.x, r6.xyzx, r6.xyzx +rsq r0.x, r0.x +mul r6.xyz, r0.xxxx, r6.xyzx +mul r11.xyz, r1.xzwx, r6.zxyz +mad r1.xzw, r1.wwxz, r6.xxyz, -r11.xxyz +mad r1.xzw, r0.yyyy, r1.xxzw, r9.xxyz +mad r0.xy, cb0[16].zwzz, l(2.000000, 2.000000, 0.000000, 0.000000), r3.zwzz +mad r3.xyzw, cb0[16].zwzw, l(0.000000, 4.000000, 2.000000, 4.000000), r3.xyzw +mad r3.xyzw, cb0[1].xyxy, r3.xyzw, cb0[1].zwzw +mad r0.xy, cb0[1].xyxx, r0.xyxx, cb0[1].zwzz +mul r9.yz, r6.wwww, r0.xxyx +mov r9.x, r7.z +add r11.xyz, -r14.xyzx, r9.xyzx +add r13.xyz, -r9.xyzx, r14.xyzx +dp3 r0.x, r11.xyzx, r11.xyzx +rsq r0.x, r0.x +mul r11.xyz, r0.xxxx, r11.xyzx +mul r14.xyz, r6.xyzx, r11.zxyz +mad r6.xyz, r6.zxyz, r11.xyzx, -r14.xyzx +mad r0.xyz, r0.zzzz, r6.xyzx, r1.xzwx +mul r1.xzw, r4.xxzw, r11.xxyz +mad r1.xzw, r11.zzxy, r4.zzwx, -r1.xxzw +mad r0.xyz, r0.wwww, r1.xzwx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mov r11.xy, vThreadID.xyxx +mov r11.zw, l(0,0,1,1) +mov r0.w, l(1.000000) +store_uav_typed u0.xyzw, r11.xyzw, r0.xyzw +ld_aoffimmi_indexable(-2,2,0)(texture2d)(float,float,float,float) r0.x, r2.xyww, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r7.y, cb0[0].x, r0.x +ld_aoffimmi_indexable(0,4,0)(texture2d)(float,float,float,float) r0.x, r2.xyww, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r7.w, cb0[0].x, r0.x +add r0.xyzw, -r5.wwww, r7.yxzw +add r11.xyzw, r0.zwzw, r0.xyxy +min r0.xyzw, |r0.xyzw|, |r11.xyzw| +div r0.xyzw, r0.xyzw, r1.yyyy +add_sat r0.xyzw, -r0.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r0.xyzw, r0.yzwx, r0.xyzw +mul r7.xz, r7.yyyy, r10.wwzw +add r1.xyz, -r15.xyzx, r7.xyzx +dp3 r1.w, r1.xyzx, r1.xyzx +rsq r1.w, r1.w +mul r1.xyz, r1.wwww, r1.xyzx +dp3 r1.w, r8.xyzx, r8.xyzx +rsq r1.w, r1.w +mul r4.xzw, r1.wwww, r8.xxyz +mul r6.xyz, r1.yzxy, r4.wxzw +mad r6.xyz, r1.xyzx, r4.xzwx, -r6.xyzx +mad r6.xyz, r0.xxxx, r6.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +add r8.xyz, -r15.yzxy, r9.xyzx +dp3 r0.x, r8.xyzx, r8.xyzx +rsq r0.x, r0.x +mul r8.xyz, r0.xxxx, r8.xyzx +mul r10.xyz, r4.xzwx, r8.zxyz +mad r4.xzw, r4.wwxz, r8.xxyz, -r10.xxyz +mad r4.xzw, r0.yyyy, r4.xxzw, r6.xxyz +mul r7.xy, r3.yxyy, r7.wwww +add r6.xyz, -r15.yzxy, r7.wyxw +add r7.xyz, -r9.zxyz, r15.xyzx +dp3 r0.x, r6.xyzx, r6.xyzx +rsq r0.x, r0.x +mul r6.xyz, r0.xxxx, r6.xyzx +mul r10.xyz, r6.zxyz, r8.xyzx +mad r8.xyz, r8.zxyz, r6.xyzx, -r10.xyzx +mad r0.xyz, r0.zzzz, r8.xyzx, r4.xzwx +mul r4.xzw, r1.xxyz, r6.xxyz +mad r1.xyz, r6.zxyz, r1.yzxy, -r4.xzwx +mad r0.xyz, r0.wwww, r1.xyzx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,2,2) +mov r0.w, l(1.000000) +store_uav_typed u0.xyzw, r1.xyzw, r0.xyzw +ld_aoffimmi_indexable(4,2,0)(texture2d)(float,float,float,float) r0.x, r2.xyww, t0.xyzw +ld_aoffimmi_indexable(2,4,0)(texture2d)(float,float,float,float) r0.y, r2.xyzw, t0.yxzw +add r0.xy, -r0.xyxx, cb0[0].yyyy +div r5.xy, cb0[0].xxxx, r0.yxyy +mul r0.yz, r5.yyyy, r12.zzwz +mov r0.x, r5.y +add r1.xyzw, -r6.wwww, r5.wzyx +add r0.xyz, -r9.xyzx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mul r5.zw, r3.wwwz, r5.xxxx +add r2.xyz, -r9.xyzx, r5.xwzx +dp3 r0.w, r2.xyzx, r2.xyzx +rsq r0.w, r0.w +mul r2.xyz, r0.wwww, r2.xyzx +mul r3.xyz, r0.xyzx, r2.zxyz +mad r3.xyz, r0.zxyz, r2.xyzx, -r3.xyzx +dp3 r0.w, r13.xyzx, r13.xyzx +rsq r0.w, r0.w +mul r4.xzw, r0.wwww, r13.xxyz +mul r5.xyz, r0.zxyz, r4.xzwx +mad r0.xyz, r4.wxzw, r0.xyzx, -r5.xyzx +dp3 r0.w, r7.xyzx, r7.xyzx +rsq r0.w, r0.w +mul r5.xyz, r0.wwww, r7.xyzx +mul r6.xyz, r4.wxzw, r5.yzxy +mad r4.xzw, r5.xxyz, r4.xxzw, -r6.xxyz +add r6.xyzw, r1.zwzw, r1.xyxy +min r1.xyzw, |r1.xyzw|, |r6.xyzw| +div r1.xyzw, r1.xyzw, r4.yyyy +add_sat r1.xyzw, -r1.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r1.xyzw, r1.yzwx, r1.xyzw +mad r4.xyz, r1.xxxx, r4.xzwx, l(0.000000, 0.000000, -0.000500, 0.000000) +mad r0.xyz, r1.yyyy, r0.xyzx, r4.xyzx +mad r0.xyz, r1.zzzz, r3.xyzx, r0.xyzx +mul r1.xyz, r2.xyzx, r5.xyzx +mad r1.xyz, r2.zxyz, r5.yzxy, -r1.xyzx +mad r0.xyz, r1.wwww, r1.xyzx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +mov r0.w, l(1.000000) +store_uav_typed u0.xyzw, r1.xyzw, r0.xyzw +ret +// Approximately 240 instruction slots used +#endif + +const BYTE CSPrepareDownsampledNormalsDXIL[] = +{ + 68, 88, 66, 67, 15, 241, + 23, 23, 186, 184, 159, 67, + 207, 80, 155, 24, 17, 141, + 73, 123, 1, 0, 0, 0, + 244, 38, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 108, 8, 0, 0, 124, 8, + 0, 0, 140, 8, 0, 0, + 88, 38, 0, 0, 82, 68, + 69, 70, 48, 8, 0, 0, + 1, 0, 0, 0, 216, 0, + 0, 0, 3, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 8, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 166, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 193, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 68, 101, 112, 116, + 104, 73, 110, 0, 103, 95, + 80, 114, 101, 112, 97, 114, + 101, 78, 111, 114, 109, 97, + 108, 115, 95, 78, 111, 114, + 109, 97, 108, 79, 117, 116, + 0, 83, 83, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 66, 117, 102, 102, + 101, 114, 0, 171, 171, 171, + 193, 0, 0, 0, 1, 0, + 0, 0, 240, 0, 0, 0, + 128, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 24, 1, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 2, 0, 0, 0, 228, 7, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 103, 95, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 115, 0, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 0, 68, 101, 112, + 116, 104, 85, 110, 112, 97, + 99, 107, 67, 111, 110, 115, + 116, 115, 0, 102, 108, 111, + 97, 116, 50, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 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, 71, 1, 0, 0, + 67, 97, 109, 101, 114, 97, + 84, 97, 110, 72, 97, 108, + 102, 70, 79, 86, 0, 78, + 68, 67, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 78, 68, 67, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 85, 86, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 85, + 86, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 82, + 97, 100, 105, 117, 115, 0, + 102, 108, 111, 97, 116, 0, + 0, 0, 3, 0, 1, 0, + 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, 218, 1, 0, 0, + 69, 102, 102, 101, 99, 116, + 83, 104, 97, 100, 111, 119, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 80, 111, 119, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 67, 108, 97, 109, 112, + 0, 69, 102, 102, 101, 99, + 116, 70, 97, 100, 101, 79, + 117, 116, 77, 117, 108, 0, + 69, 102, 102, 101, 99, 116, + 70, 97, 100, 101, 79, 117, + 116, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 72, + 111, 114, 105, 122, 111, 110, + 65, 110, 103, 108, 101, 84, + 104, 114, 101, 115, 104, 111, + 108, 100, 0, 69, 102, 102, + 101, 99, 116, 83, 97, 109, + 112, 108, 105, 110, 103, 82, + 97, 100, 105, 117, 115, 78, + 101, 97, 114, 76, 105, 109, + 105, 116, 82, 101, 99, 0, + 68, 101, 112, 116, 104, 80, + 114, 101, 99, 105, 115, 105, + 111, 110, 79, 102, 102, 115, + 101, 116, 77, 111, 100, 0, + 78, 101, 103, 82, 101, 99, + 69, 102, 102, 101, 99, 116, + 82, 97, 100, 105, 117, 115, + 0, 76, 111, 97, 100, 67, + 111, 117, 110, 116, 101, 114, + 65, 118, 103, 68, 105, 118, + 0, 65, 100, 97, 112, 116, + 105, 118, 101, 83, 97, 109, + 112, 108, 101, 67, 111, 117, + 110, 116, 76, 105, 109, 105, + 116, 0, 73, 110, 118, 83, + 104, 97, 114, 112, 110, 101, + 115, 115, 0, 80, 97, 115, + 115, 73, 110, 100, 101, 120, + 0, 105, 110, 116, 0, 171, + 0, 0, 2, 0, 1, 0, + 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, 7, 3, 0, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 103, + 109, 97, 83, 113, 117, 97, + 114, 101, 100, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 109, 105, 108, + 97, 114, 105, 116, 121, 68, + 105, 115, 116, 97, 110, 99, + 101, 83, 105, 103, 109, 97, + 0, 80, 97, 116, 116, 101, + 114, 110, 82, 111, 116, 83, + 99, 97, 108, 101, 77, 97, + 116, 114, 105, 99, 101, 115, + 0, 102, 108, 111, 97, 116, + 52, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 127, 3, 0, 0, 78, 111, + 114, 109, 97, 108, 115, 85, + 110, 112, 97, 99, 107, 77, + 117, 108, 0, 78, 111, 114, + 109, 97, 108, 115, 85, 110, + 112, 97, 99, 107, 65, 100, + 100, 0, 68, 101, 116, 97, + 105, 108, 65, 79, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 68, 117, 109, 109, 121, + 48, 0, 83, 83, 65, 79, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 83, + 83, 65, 79, 66, 117, 102, + 102, 101, 114, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 79, + 102, 102, 115, 101, 116, 0, + 105, 110, 116, 50, 0, 171, + 171, 171, 1, 0, 2, 0, + 1, 0, 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, 92, 4, + 0, 0, 80, 101, 114, 80, + 97, 115, 115, 70, 117, 108, + 108, 82, 101, 115, 85, 86, + 79, 102, 102, 115, 101, 116, + 0, 79, 117, 116, 112, 117, + 116, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 79, 117, 116, 112, 117, 116, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 79, 102, 102, 115, 101, 116, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 78, 111, 114, 109, 97, + 108, 105, 115, 101, 100, 79, + 102, 102, 115, 101, 116, 0, + 78, 111, 114, 109, 97, 108, + 115, 87, 111, 114, 108, 100, + 84, 111, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 77, + 97, 116, 114, 105, 120, 0, + 102, 108, 111, 97, 116, 52, + 120, 52, 0, 171, 3, 0, + 3, 0, 4, 0, 4, 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, + 190, 5, 0, 0, 53, 1, + 0, 0, 80, 1, 0, 0, + 0, 0, 0, 0, 116, 1, + 0, 0, 80, 1, 0, 0, + 8, 0, 0, 0, 133, 1, + 0, 0, 80, 1, 0, 0, + 16, 0, 0, 0, 146, 1, + 0, 0, 80, 1, 0, 0, + 24, 0, 0, 0, 159, 1, + 0, 0, 80, 1, 0, 0, + 32, 0, 0, 0, 182, 1, + 0, 0, 80, 1, 0, 0, + 40, 0, 0, 0, 205, 1, + 0, 0, 224, 1, 0, 0, + 48, 0, 0, 0, 4, 2, + 0, 0, 224, 1, 0, 0, + 52, 0, 0, 0, 25, 2, + 0, 0, 224, 1, 0, 0, + 56, 0, 0, 0, 41, 2, + 0, 0, 224, 1, 0, 0, + 60, 0, 0, 0, 59, 2, + 0, 0, 224, 1, 0, 0, + 64, 0, 0, 0, 76, 2, + 0, 0, 224, 1, 0, 0, + 68, 0, 0, 0, 93, 2, + 0, 0, 224, 1, 0, 0, + 72, 0, 0, 0, 121, 2, + 0, 0, 224, 1, 0, 0, + 76, 0, 0, 0, 154, 2, + 0, 0, 224, 1, 0, 0, + 80, 0, 0, 0, 178, 2, + 0, 0, 224, 1, 0, 0, + 84, 0, 0, 0, 197, 2, + 0, 0, 224, 1, 0, 0, + 88, 0, 0, 0, 215, 2, + 0, 0, 224, 1, 0, 0, + 92, 0, 0, 0, 240, 2, + 0, 0, 224, 1, 0, 0, + 96, 0, 0, 0, 253, 2, + 0, 0, 12, 3, 0, 0, + 100, 0, 0, 0, 48, 3, + 0, 0, 224, 1, 0, 0, + 104, 0, 0, 0, 70, 3, + 0, 0, 224, 1, 0, 0, + 108, 0, 0, 0, 103, 3, + 0, 0, 136, 3, 0, 0, + 112, 0, 0, 0, 172, 3, + 0, 0, 224, 1, 0, 0, + 192, 0, 0, 0, 189, 3, + 0, 0, 224, 1, 0, 0, + 196, 0, 0, 0, 206, 3, + 0, 0, 224, 1, 0, 0, + 200, 0, 0, 0, 223, 3, + 0, 0, 224, 1, 0, 0, + 204, 0, 0, 0, 230, 3, + 0, 0, 80, 1, 0, 0, + 208, 0, 0, 0, 251, 3, + 0, 0, 80, 1, 0, 0, + 216, 0, 0, 0, 23, 4, + 0, 0, 80, 1, 0, 0, + 224, 0, 0, 0, 45, 4, + 0, 0, 80, 1, 0, 0, + 232, 0, 0, 0, 74, 4, + 0, 0, 100, 4, 0, 0, + 240, 0, 0, 0, 136, 4, + 0, 0, 80, 1, 0, 0, + 248, 0, 0, 0, 159, 4, + 0, 0, 80, 1, 0, 0, + 0, 1, 0, 0, 182, 4, + 0, 0, 80, 1, 0, 0, + 8, 1, 0, 0, 212, 4, + 0, 0, 80, 1, 0, 0, + 16, 1, 0, 0, 236, 4, + 0, 0, 80, 1, 0, 0, + 24, 1, 0, 0, 11, 5, + 0, 0, 80, 1, 0, 0, + 32, 1, 0, 0, 46, 5, + 0, 0, 80, 1, 0, 0, + 40, 1, 0, 0, 88, 5, + 0, 0, 80, 1, 0, 0, + 48, 1, 0, 0, 119, 5, + 0, 0, 80, 1, 0, 0, + 56, 1, 0, 0, 160, 5, + 0, 0, 200, 5, 0, 0, + 64, 1, 0, 0, 5, 0, + 0, 0, 1, 0, 96, 0, + 0, 0, 42, 0, 236, 5, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 38, 1, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 196, 29, 0, 0, + 80, 0, 5, 0, 113, 7, + 0, 0, 106, 8, 0, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 17, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 18, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 41, 0, + 0, 9, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 4, + 2, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 3, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 30, 0, 0, 8, 50, 0, + 16, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 15, 0, + 0, 0, 0, 0, 0, 10, + 242, 0, 16, 0, 3, 0, + 0, 0, 70, 14, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 56, 0, 0, 8, 242, 0, + 16, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 4, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 192, 0, 0, + 0, 0, 0, 0, 0, 64, + 0, 0, 0, 0, 230, 14, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 4, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 138, 1, 28, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 5, 0, 0, 0, 70, 15, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 5, 0, + 0, 0, 10, 0, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 34, 0, 16, 0, 5, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 5, 0, 0, 0, 56, 0, + 0, 7, 82, 0, 16, 0, + 5, 0, 0, 0, 86, 4, + 16, 0, 4, 0, 0, 0, + 86, 5, 16, 0, 5, 0, + 0, 0, 45, 0, 0, 137, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 15, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 10, 0, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 34, 0, 16, 0, 6, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 45, 0, + 0, 138, 1, 68, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 15, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 10, 0, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 130, 0, 16, 0, 6, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 54, 0, + 0, 5, 82, 0, 16, 0, + 7, 0, 0, 0, 86, 7, + 16, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 8, 0, 0, 0, + 10, 0, 16, 0, 7, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 4, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 8, 0, 0, 0, 86, 5, + 16, 0, 6, 0, 0, 0, + 6, 1, 16, 0, 4, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 38, 9, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 68, 0, 0, 5, + 18, 0, 16, 0, 4, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 9, 0, 0, 0, 6, 0, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 10, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 192, 0, 0, 0, 64, + 0, 0, 0, 192, 230, 14, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 10, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 45, 0, 0, 138, + 1, 192, 1, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 4, 0, + 0, 0, 70, 15, 16, 0, + 2, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 4, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 4, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 18, 0, + 16, 0, 5, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 4, 0, + 0, 0, 56, 0, 0, 7, + 98, 0, 16, 0, 11, 0, + 0, 0, 6, 0, 16, 0, + 5, 0, 0, 0, 6, 1, + 16, 0, 10, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 11, 0, 0, 0, + 10, 0, 16, 0, 5, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 11, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 70, 2, 16, 0, + 11, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 11, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 68, 0, 0, 5, + 18, 0, 16, 0, 4, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 11, 0, 0, 0, 6, 0, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 12, 0, + 0, 0, 150, 4, 16, 0, + 9, 0, 0, 0, 38, 9, + 16, 0, 11, 0, 0, 0, + 50, 0, 0, 10, 114, 0, + 16, 0, 12, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 0, + 11, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 12, 0, 0, 0, 45, 0, + 0, 138, 1, 4, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 15, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 10, 0, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 66, 0, 16, 0, 5, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 45, 0, + 0, 138, 1, 64, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 18, 0, 16, 0, + 4, 0, 0, 0, 70, 15, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 10, 0, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 130, 0, 16, 0, 5, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 13, 0, 0, 0, 22, 14, + 16, 0, 5, 0, 0, 0, + 86, 5, 16, 128, 65, 0, + 0, 0, 6, 0, 0, 0, + 0, 0, 0, 7, 242, 0, + 16, 0, 14, 0, 0, 0, + 230, 14, 16, 0, 13, 0, + 0, 0, 70, 4, 16, 0, + 13, 0, 0, 0, 51, 0, + 0, 9, 242, 0, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 13, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 14, 0, 0, 0, 56, 0, + 0, 10, 50, 0, 16, 0, + 4, 0, 0, 0, 214, 5, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 10, 215, + 35, 61, 10, 215, 35, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 7, + 242, 0, 16, 0, 13, 0, + 0, 0, 70, 14, 16, 0, + 13, 0, 0, 0, 6, 0, + 16, 0, 4, 0, 0, 0, + 0, 32, 0, 11, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 14, 16, 128, 65, 0, + 0, 0, 13, 0, 0, 0, + 2, 64, 0, 0, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 102, 102, + 166, 63, 56, 0, 0, 7, + 242, 0, 16, 0, 13, 0, + 0, 0, 150, 3, 16, 0, + 13, 0, 0, 0, 70, 14, + 16, 0, 13, 0, 0, 0, + 50, 0, 0, 12, 114, 0, + 16, 0, 12, 0, 0, 0, + 6, 0, 16, 0, 13, 0, + 0, 0, 70, 2, 16, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 18, + 3, 186, 0, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 14, 0, 0, 0, + 166, 11, 16, 0, 4, 0, + 0, 0, 166, 10, 16, 0, + 5, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 14, 0, 0, 0, 42, 0, + 16, 0, 5, 0, 0, 0, + 0, 0, 0, 8, 210, 0, + 16, 0, 4, 0, 0, 0, + 6, 9, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 6, 9, 16, 0, 14, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 8, 0, + 0, 0, 134, 3, 16, 0, + 4, 0, 0, 0, 134, 3, + 16, 0, 4, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 8, 0, 0, 0, + 58, 0, 16, 0, 8, 0, + 0, 0, 56, 0, 0, 7, + 210, 0, 16, 0, 4, 0, + 0, 0, 6, 14, 16, 0, + 4, 0, 0, 0, 246, 15, + 16, 0, 8, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 15, 0, 0, 0, + 54, 14, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 0, + 11, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 11, 0, 0, 0, 38, 9, + 16, 0, 11, 0, 0, 0, + 134, 3, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 11, 0, + 0, 0, 86, 5, 16, 0, + 13, 0, 0, 0, 70, 2, + 16, 0, 11, 0, 0, 0, + 70, 2, 16, 0, 12, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 12, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 128, 64, + 0, 0, 0, 64, 230, 14, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 12, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 12, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 82, 0, 16, 0, 15, 0, + 0, 0, 246, 15, 16, 0, + 5, 0, 0, 0, 86, 4, + 16, 0, 12, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 15, 0, 0, 0, + 58, 0, 16, 0, 5, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 16, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 150, 4, 16, 0, + 15, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 8, 0, 0, 0, 70, 2, + 16, 0, 16, 0, 0, 0, + 70, 2, 16, 0, 16, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 8, 0, + 0, 0, 58, 0, 16, 0, + 8, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 16, 0, 0, 0, 246, 15, + 16, 0, 8, 0, 0, 0, + 70, 2, 16, 0, 16, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 17, 0, + 0, 0, 134, 3, 16, 0, + 4, 0, 0, 0, 38, 9, + 16, 0, 16, 0, 0, 0, + 50, 0, 0, 10, 210, 0, + 16, 0, 4, 0, 0, 0, + 246, 8, 16, 0, 4, 0, + 0, 0, 6, 9, 16, 0, + 16, 0, 0, 0, 6, 9, + 16, 128, 65, 0, 0, 0, + 17, 0, 0, 0, 50, 0, + 0, 9, 210, 0, 16, 0, + 4, 0, 0, 0, 166, 10, + 16, 0, 13, 0, 0, 0, + 6, 14, 16, 0, 4, 0, + 0, 0, 6, 9, 16, 0, + 11, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 11, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 0, 16, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 9, 0, + 0, 0, 38, 9, 16, 0, + 16, 0, 0, 0, 150, 4, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 11, 0, 0, 0, + 50, 0, 0, 9, 210, 0, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 13, 0, + 0, 0, 6, 9, 16, 0, + 9, 0, 0, 0, 6, 14, + 16, 0, 4, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 8, 0, 0, 0, + 134, 3, 16, 0, 4, 0, + 0, 0, 134, 3, 16, 0, + 4, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 8, 0, 0, 0, 58, 0, + 16, 0, 8, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 1, 0, 0, 0, + 134, 3, 16, 0, 4, 0, + 0, 0, 246, 15, 16, 0, + 8, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 45, 0, 0, 138, + 1, 196, 1, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 15, 16, 0, + 2, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 66, 0, + 16, 0, 6, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 45, 0, 0, 138, + 1, 8, 0, 128, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 15, 16, 0, + 2, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 18, 0, + 16, 0, 6, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 8, + 242, 0, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 150, 12, 16, 0, + 6, 0, 0, 0, 56, 0, + 0, 10, 50, 0, 16, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 10, 215, + 35, 61, 10, 215, 35, 61, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, + 242, 0, 16, 0, 9, 0, + 0, 0, 230, 14, 16, 0, + 0, 0, 0, 0, 70, 4, + 16, 0, 0, 0, 0, 0, + 51, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 9, 0, 0, 0, + 14, 0, 0, 7, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 6, 0, 16, 0, + 1, 0, 0, 0, 0, 32, + 0, 11, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 102, 102, 166, 63, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 56, 0, 0, 7, 242, 0, + 16, 0, 0, 0, 0, 0, + 150, 3, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 9, 0, 0, 0, 166, 10, + 16, 0, 6, 0, 0, 0, + 166, 11, 16, 0, 10, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 9, 0, + 0, 0, 42, 0, 16, 0, + 6, 0, 0, 0, 0, 0, + 0, 8, 210, 0, 16, 0, + 1, 0, 0, 0, 6, 9, + 16, 128, 65, 0, 0, 0, + 14, 0, 0, 0, 6, 9, + 16, 0, 9, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 4, 0, 0, 0, + 134, 3, 16, 0, 1, 0, + 0, 0, 134, 3, 16, 0, + 1, 0, 0, 0, 68, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 10, 0, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 7, 210, 0, + 16, 0, 1, 0, 0, 0, + 6, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 8, 210, 0, 16, 0, + 4, 0, 0, 0, 166, 4, + 16, 0, 8, 0, 0, 0, + 166, 4, 16, 128, 65, 0, + 0, 0, 14, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 8, 0, 0, 0, + 70, 2, 16, 0, 8, 0, + 0, 0, 150, 4, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 8, 0, + 0, 0, 134, 3, 16, 0, + 4, 0, 0, 0, 134, 3, + 16, 0, 4, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 8, 0, 0, 0, + 58, 0, 16, 0, 8, 0, + 0, 0, 56, 0, 0, 7, + 210, 0, 16, 0, 4, 0, + 0, 0, 6, 14, 16, 0, + 4, 0, 0, 0, 246, 15, + 16, 0, 8, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 9, 0, 0, 0, + 54, 14, 16, 0, 1, 0, + 0, 0, 230, 8, 16, 0, + 4, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 9, 0, 0, 0, 134, 3, + 16, 0, 4, 0, 0, 0, + 134, 3, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 9, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 9, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 10, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 64, 0, 0, + 0, 0, 0, 0, 0, 192, + 0, 0, 0, 64, 230, 14, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 10, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 10, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 98, 0, 16, 0, 6, 0, + 0, 0, 6, 0, 16, 0, + 6, 0, 0, 0, 6, 1, + 16, 0, 10, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 14, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 68, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 6, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 11, 0, 0, 0, + 134, 3, 16, 0, 1, 0, + 0, 0, 38, 9, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 10, 210, 0, 16, 0, + 1, 0, 0, 0, 246, 8, + 16, 0, 1, 0, 0, 0, + 6, 9, 16, 0, 6, 0, + 0, 0, 6, 9, 16, 128, + 65, 0, 0, 0, 11, 0, + 0, 0, 50, 0, 0, 9, + 210, 0, 16, 0, 1, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 6, 14, + 16, 0, 1, 0, 0, 0, + 6, 9, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 13, + 50, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 64, 0, 0, + 0, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 230, 10, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 13, 242, 0, + 16, 0, 3, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 64, + 0, 0, 0, 64, 0, 0, + 128, 64, 70, 14, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 0, + 3, 0, 0, 0, 70, 132, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 98, 0, 16, 0, 9, 0, + 0, 0, 246, 15, 16, 0, + 6, 0, 0, 0, 6, 1, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 9, 0, 0, 0, + 42, 0, 16, 0, 7, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 11, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 14, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 13, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 9, 0, 0, 0, 70, 2, + 16, 0, 14, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 11, 0, + 0, 0, 70, 2, 16, 0, + 11, 0, 0, 0, 68, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 11, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 11, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 14, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 38, 9, 16, 0, 11, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 6, 0, + 0, 0, 38, 9, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 11, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 14, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 0, 0, 0, 0, + 166, 10, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 134, 3, + 16, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 210, 0, + 16, 0, 1, 0, 0, 0, + 6, 14, 16, 0, 4, 0, + 0, 0, 6, 9, 16, 0, + 11, 0, 0, 0, 50, 0, + 0, 10, 210, 0, 16, 0, + 1, 0, 0, 0, 166, 4, + 16, 0, 11, 0, 0, 0, + 166, 3, 16, 0, 4, 0, + 0, 0, 6, 14, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 134, 3, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 11, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 11, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 45, 0, 0, 138, 1, 92, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 15, 16, 0, 2, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 34, 0, 16, 0, + 7, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 45, 0, 0, 138, 1, 128, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 15, 16, 0, 2, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 130, 0, 16, 0, + 7, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 242, 0, + 16, 0, 0, 0, 0, 0, + 246, 15, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 22, 14, 16, 0, 7, 0, + 0, 0, 0, 0, 0, 7, + 242, 0, 16, 0, 11, 0, + 0, 0, 230, 14, 16, 0, + 0, 0, 0, 0, 70, 4, + 16, 0, 0, 0, 0, 0, + 51, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 11, 0, 0, 0, + 14, 0, 0, 7, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 86, 5, 16, 0, + 1, 0, 0, 0, 0, 32, + 0, 11, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 102, 102, 166, 63, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 56, 0, 0, 7, 242, 0, + 16, 0, 0, 0, 0, 0, + 150, 3, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 82, 0, 16, 0, + 7, 0, 0, 0, 86, 5, + 16, 0, 7, 0, 0, 0, + 246, 14, 16, 0, 10, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 8, 0, 0, 0, 70, 2, + 16, 0, 8, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 210, 0, 16, 0, 4, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 6, 9, + 16, 0, 8, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 6, 0, 0, 0, + 150, 4, 16, 0, 1, 0, + 0, 0, 54, 14, 16, 0, + 4, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 6, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 134, 3, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 6, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 6, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 8, 0, + 0, 0, 150, 4, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 8, 0, 0, 0, + 70, 2, 16, 0, 8, 0, + 0, 0, 68, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 8, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 8, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 10, 0, + 0, 0, 134, 3, 16, 0, + 4, 0, 0, 0, 38, 9, + 16, 0, 8, 0, 0, 0, + 50, 0, 0, 10, 210, 0, + 16, 0, 4, 0, 0, 0, + 246, 8, 16, 0, 4, 0, + 0, 0, 6, 9, 16, 0, + 8, 0, 0, 0, 6, 9, + 16, 128, 65, 0, 0, 0, + 10, 0, 0, 0, 50, 0, + 0, 9, 210, 0, 16, 0, + 4, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 6, 14, 16, 0, 4, 0, + 0, 0, 6, 9, 16, 0, + 6, 0, 0, 0, 56, 0, + 0, 7, 50, 0, 16, 0, + 7, 0, 0, 0, 22, 5, + 16, 0, 3, 0, 0, 0, + 246, 15, 16, 0, 7, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 6, 0, + 0, 0, 150, 4, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 118, 12, 16, 0, + 7, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 7, 0, 0, 0, 38, 9, + 16, 128, 65, 0, 0, 0, + 9, 0, 0, 0, 70, 2, + 16, 0, 15, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 6, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 68, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 6, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 6, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 10, 0, 0, 0, 38, 9, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 8, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 8, 0, + 0, 0, 38, 9, 16, 0, + 8, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 10, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 0, 0, 0, 0, + 166, 10, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 8, 0, 0, 0, 134, 3, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 7, 210, 0, + 16, 0, 4, 0, 0, 0, + 6, 9, 16, 0, 1, 0, + 0, 0, 6, 9, 16, 0, + 6, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 1, 0, 0, 0, 38, 9, + 16, 0, 6, 0, 0, 0, + 150, 4, 16, 0, 1, 0, + 0, 0, 134, 3, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 45, 0, 0, 138, 1, 72, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 15, 16, 0, 2, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 45, 0, + 0, 138, 1, 132, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 34, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 22, 126, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 9, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 86, 133, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 50, 0, 16, 0, 5, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 22, 5, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 0, 0, 0, 0, 86, 5, + 16, 0, 5, 0, 0, 0, + 166, 11, 16, 0, 12, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 128, 65, 0, 0, 0, + 6, 0, 0, 0, 182, 1, + 16, 0, 5, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 9, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 194, 0, + 16, 0, 5, 0, 0, 0, + 246, 11, 16, 0, 3, 0, + 0, 0, 6, 0, 16, 0, + 5, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 9, 0, 0, 0, 198, 2, + 16, 0, 5, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 2, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 38, 9, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 3, 0, + 0, 0, 38, 9, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 3, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 13, 0, + 0, 0, 70, 2, 16, 0, + 13, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 210, 0, + 16, 0, 4, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 6, 9, 16, 0, + 13, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 5, 0, 0, 0, 38, 9, + 16, 0, 0, 0, 0, 0, + 134, 3, 16, 0, 4, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 0, 0, + 0, 0, 54, 14, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 5, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 6, 0, 0, 0, 54, 14, + 16, 0, 4, 0, 0, 0, + 150, 4, 16, 0, 5, 0, + 0, 0, 50, 0, 0, 10, + 210, 0, 16, 0, 4, 0, + 0, 0, 6, 9, 16, 0, + 5, 0, 0, 0, 6, 14, + 16, 0, 4, 0, 0, 0, + 6, 9, 16, 128, 65, 0, + 0, 0, 6, 0, 0, 0, + 0, 0, 0, 7, 242, 0, + 16, 0, 6, 0, 0, 0, + 230, 14, 16, 0, 1, 0, + 0, 0, 70, 4, 16, 0, + 1, 0, 0, 0, 51, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 1, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 6, 0, 0, 0, 14, 0, + 0, 7, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 86, 5, 16, 0, 4, 0, + 0, 0, 0, 32, 0, 11, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 56, 0, + 0, 7, 242, 0, 16, 0, + 1, 0, 0, 0, 150, 3, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 0, + 1, 0, 0, 0, 134, 3, + 16, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 0, 0, + 0, 0, 86, 5, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 50, 0, 0, 10, 114, 0, + 16, 0, 1, 0, 0, 0, + 38, 9, 16, 0, 2, 0, + 0, 0, 150, 4, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 1, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 0, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 0, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 240, 0, 0, 0, + 18, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 199, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 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, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 21, 0, 0, 0, 0, 0, + 0, 0, 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, 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledNormalsFromInputNormals.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledNormalsFromInputNormals.h new file mode 100644 index 0000000..d843e86 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareDownsampledNormalsFromInputNormals.h @@ -0,0 +1,833 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_PrepareNormalsFromNormalsInput texture float4 2d t0 1 +// g_PrepareNormalsFromNormalsOutput UAV float4 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[23], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 3 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(2, 2, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[16].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r0.xyz, r0.xyxx, t0.xyzw, s0, l(0.000000) +mad r0.xyz, r0.xyzx, cb0[12].xxxx, cb0[12].yyyy +dp3 r1.x, r0.xyzx, cb0[20].xyzx +dp3 r1.y, r0.xyzx, cb0[21].xyzx +dp3 r1.z, r0.xyzx, cb0[22].xyzx +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,0,0) +mov r1.w, l(1.000000) +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +imad r0.xyzw, vThreadID.xyxy, l(4, 4, 4, 4), l(2, 0, 0, 2) +itof r0.xyzw, r0.xyzw +add r0.xyzw, r0.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r0.xyzw, r0.xyzw, cb0[16].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r1.xyz, r0.xyxx, t0.xyzw, s0, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r0.xyz, r0.zwzz, t0.xyzw, s0, l(0.000000) +mad r0.xyz, r0.xyzx, cb0[12].xxxx, cb0[12].yyyy +mad r1.xyz, r1.xyzx, cb0[12].xxxx, cb0[12].yyyy +dp3 r2.x, r1.xyzx, cb0[20].xyzx +dp3 r2.y, r1.xyzx, cb0[21].xyzx +dp3 r2.z, r1.xyzx, cb0[22].xyzx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,1,1) +mov r2.w, l(1.000000) +store_uav_typed u0.xyzw, r1.xyzw, r2.xyzw +dp3 r1.x, r0.xyzx, cb0[20].xyzx +dp3 r1.y, r0.xyzx, cb0[21].xyzx +dp3 r1.z, r0.xyzx, cb0[22].xyzx +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,2,2) +mov r1.w, l(1.000000) +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +imad r0.xy, vThreadID.xyxx, l(4, 4, 0, 0), l(2, 2, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[16].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r0.xyz, r0.xyxx, t0.xyzw, s0, l(0.000000) +mad r0.xyz, r0.xyzx, cb0[12].xxxx, cb0[12].yyyy +dp3 r1.x, r0.xyzx, cb0[20].xyzx +dp3 r1.y, r0.xyzx, cb0[21].xyzx +dp3 r1.z, r0.xyzx, cb0[22].xyzx +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,3,3) +mov r1.w, l(1.000000) +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +ret +// Approximately 49 instruction slots used +#endif + +const BYTE CSPrepareDownsampledNormalsFromInputNormalsDXIL[] = +{ + 68, 88, 66, 67, 17, 198, + 36, 201, 156, 110, 45, 232, + 20, 119, 248, 58, 163, 37, + 210, 15, 1, 0, 0, 0, + 20, 16, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 188, 8, 0, 0, 204, 8, + 0, 0, 220, 8, 0, 0, + 120, 15, 0, 0, 82, 68, + 69, 70, 128, 8, 0, 0, + 1, 0, 0, 0, 40, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 88, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 208, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 241, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 13, 0, 0, 0, + 19, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 67, 108, 97, + 109, 112, 83, 97, 109, 112, + 108, 101, 114, 0, 103, 95, + 80, 114, 101, 112, 97, 114, + 101, 78, 111, 114, 109, 97, + 108, 115, 70, 114, 111, 109, + 78, 111, 114, 109, 97, 108, + 115, 73, 110, 112, 117, 116, + 0, 103, 95, 80, 114, 101, + 112, 97, 114, 101, 78, 111, + 114, 109, 97, 108, 115, 70, + 114, 111, 109, 78, 111, 114, + 109, 97, 108, 115, 79, 117, + 116, 112, 117, 116, 0, 83, + 83, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 66, 117, 102, 102, 101, 114, + 0, 171, 19, 1, 0, 0, + 1, 0, 0, 0, 64, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 104, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 52, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 151, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 42, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 87, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 207, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 172, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 14, 6, 0, 0, + 133, 1, 0, 0, 160, 1, + 0, 0, 0, 0, 0, 0, + 196, 1, 0, 0, 160, 1, + 0, 0, 8, 0, 0, 0, + 213, 1, 0, 0, 160, 1, + 0, 0, 16, 0, 0, 0, + 226, 1, 0, 0, 160, 1, + 0, 0, 24, 0, 0, 0, + 239, 1, 0, 0, 160, 1, + 0, 0, 32, 0, 0, 0, + 6, 2, 0, 0, 160, 1, + 0, 0, 40, 0, 0, 0, + 29, 2, 0, 0, 48, 2, + 0, 0, 48, 0, 0, 0, + 84, 2, 0, 0, 48, 2, + 0, 0, 52, 0, 0, 0, + 105, 2, 0, 0, 48, 2, + 0, 0, 56, 0, 0, 0, + 121, 2, 0, 0, 48, 2, + 0, 0, 60, 0, 0, 0, + 139, 2, 0, 0, 48, 2, + 0, 0, 64, 0, 0, 0, + 156, 2, 0, 0, 48, 2, + 0, 0, 68, 0, 0, 0, + 173, 2, 0, 0, 48, 2, + 0, 0, 72, 0, 0, 0, + 201, 2, 0, 0, 48, 2, + 0, 0, 76, 0, 0, 0, + 234, 2, 0, 0, 48, 2, + 0, 0, 80, 0, 0, 0, + 2, 3, 0, 0, 48, 2, + 0, 0, 84, 0, 0, 0, + 21, 3, 0, 0, 48, 2, + 0, 0, 88, 0, 0, 0, + 39, 3, 0, 0, 48, 2, + 0, 0, 92, 0, 0, 0, + 64, 3, 0, 0, 48, 2, + 0, 0, 96, 0, 0, 0, + 77, 3, 0, 0, 92, 3, + 0, 0, 100, 0, 0, 0, + 128, 3, 0, 0, 48, 2, + 0, 0, 104, 0, 0, 0, + 150, 3, 0, 0, 48, 2, + 0, 0, 108, 0, 0, 0, + 183, 3, 0, 0, 216, 3, + 0, 0, 112, 0, 0, 0, + 252, 3, 0, 0, 48, 2, + 0, 0, 192, 0, 0, 0, + 13, 4, 0, 0, 48, 2, + 0, 0, 196, 0, 0, 0, + 30, 4, 0, 0, 48, 2, + 0, 0, 200, 0, 0, 0, + 47, 4, 0, 0, 48, 2, + 0, 0, 204, 0, 0, 0, + 54, 4, 0, 0, 160, 1, + 0, 0, 208, 0, 0, 0, + 75, 4, 0, 0, 160, 1, + 0, 0, 216, 0, 0, 0, + 103, 4, 0, 0, 160, 1, + 0, 0, 224, 0, 0, 0, + 125, 4, 0, 0, 160, 1, + 0, 0, 232, 0, 0, 0, + 154, 4, 0, 0, 180, 4, + 0, 0, 240, 0, 0, 0, + 216, 4, 0, 0, 160, 1, + 0, 0, 248, 0, 0, 0, + 239, 4, 0, 0, 160, 1, + 0, 0, 0, 1, 0, 0, + 6, 5, 0, 0, 160, 1, + 0, 0, 8, 1, 0, 0, + 36, 5, 0, 0, 160, 1, + 0, 0, 16, 1, 0, 0, + 60, 5, 0, 0, 160, 1, + 0, 0, 24, 1, 0, 0, + 91, 5, 0, 0, 160, 1, + 0, 0, 32, 1, 0, 0, + 126, 5, 0, 0, 160, 1, + 0, 0, 40, 1, 0, 0, + 168, 5, 0, 0, 160, 1, + 0, 0, 48, 1, 0, 0, + 199, 5, 0, 0, 160, 1, + 0, 0, 56, 1, 0, 0, + 240, 5, 0, 0, 24, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 60, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 118, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 148, 6, + 0, 0, 80, 0, 5, 0, + 165, 1, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 23, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 0, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 64, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 3, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 41, 0, + 0, 9, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 114, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 86, 133, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 16, 0, 0, 8, 18, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 20, 0, + 0, 0, 16, 0, 0, 8, + 34, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 21, 0, 0, 0, 16, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 22, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 4, 2, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 43, 0, 0, 5, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 0, 0, 0, 0, 230, 10, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 86, 133, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 16, 0, + 0, 8, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 16, 0, 0, 8, 34, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 21, 0, + 0, 0, 16, 0, 0, 8, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 8, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 16, 0, 0, 8, 34, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 21, 0, + 0, 0, 16, 0, 0, 8, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 35, 0, + 0, 14, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 86, 133, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 16, 0, 0, 8, + 18, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 16, 0, + 0, 8, 34, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 21, 0, 0, 0, + 16, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 22, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 49, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 22, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 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, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 3, 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, 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepths.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepths.h new file mode 100644 index 0000000..8add4d3 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepths.h @@ -0,0 +1,627 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_DepthSource texture float 2d t0 1 +// g_PrepareDepthsOut UAV float 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[15], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 2 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[14].zwzz +gather4_indexable(texture2d)(float,float,float,float) r0.xyzw, r0.xyxx, t0.xyzw, s0.x +add r0.xyzw, -r0.xyzw, cb0[0].yyyy +div r0.xyzw, cb0[0].xxxx, r0.xyzw +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,0,0) +store_uav_typed u0.xyzw, r1.xyzw, r0.wwww +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,1,1) +store_uav_typed u0.xyzw, r1.xyzw, r0.zzzz +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,2,2) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +store_uav_typed u0.xyzw, r1.xyzw, r0.yyyy +ret +// Approximately 20 instruction slots used +#endif + +const BYTE CSPrepareNativeDepthsDXIL[] = +{ + 68, 88, 66, 67, 156, 237, + 144, 218, 201, 25, 35, 68, + 202, 18, 247, 83, 11, 20, + 195, 129, 1, 0, 0, 0, + 236, 11, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 156, 8, 0, 0, 172, 8, + 0, 0, 188, 8, 0, 0, + 80, 11, 0, 0, 82, 68, + 69, 70, 96, 8, 0, 0, + 1, 0, 0, 0, 8, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 56, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 208, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 222, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 241, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 67, 108, 97, + 109, 112, 83, 97, 109, 112, + 108, 101, 114, 0, 103, 95, + 68, 101, 112, 116, 104, 83, + 111, 117, 114, 99, 101, 0, + 103, 95, 80, 114, 101, 112, + 97, 114, 101, 68, 101, 112, + 116, 104, 115, 79, 117, 116, + 0, 83, 83, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 66, 117, 102, 102, + 101, 114, 0, 171, 171, 171, + 241, 0, 0, 0, 1, 0, + 0, 0, 32, 1, 0, 0, + 128, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 72, 1, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 2, 0, 0, 0, 20, 8, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 103, 95, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 115, 0, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 0, 68, 101, 112, + 116, 104, 85, 110, 112, 97, + 99, 107, 67, 111, 110, 115, + 116, 115, 0, 102, 108, 111, + 97, 116, 50, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 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, 119, 1, 0, 0, + 67, 97, 109, 101, 114, 97, + 84, 97, 110, 72, 97, 108, + 102, 70, 79, 86, 0, 78, + 68, 67, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 78, 68, 67, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 85, 86, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 85, + 86, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 82, + 97, 100, 105, 117, 115, 0, + 102, 108, 111, 97, 116, 0, + 0, 0, 3, 0, 1, 0, + 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, 10, 2, 0, 0, + 69, 102, 102, 101, 99, 116, + 83, 104, 97, 100, 111, 119, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 80, 111, 119, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 67, 108, 97, 109, 112, + 0, 69, 102, 102, 101, 99, + 116, 70, 97, 100, 101, 79, + 117, 116, 77, 117, 108, 0, + 69, 102, 102, 101, 99, 116, + 70, 97, 100, 101, 79, 117, + 116, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 72, + 111, 114, 105, 122, 111, 110, + 65, 110, 103, 108, 101, 84, + 104, 114, 101, 115, 104, 111, + 108, 100, 0, 69, 102, 102, + 101, 99, 116, 83, 97, 109, + 112, 108, 105, 110, 103, 82, + 97, 100, 105, 117, 115, 78, + 101, 97, 114, 76, 105, 109, + 105, 116, 82, 101, 99, 0, + 68, 101, 112, 116, 104, 80, + 114, 101, 99, 105, 115, 105, + 111, 110, 79, 102, 102, 115, + 101, 116, 77, 111, 100, 0, + 78, 101, 103, 82, 101, 99, + 69, 102, 102, 101, 99, 116, + 82, 97, 100, 105, 117, 115, + 0, 76, 111, 97, 100, 67, + 111, 117, 110, 116, 101, 114, + 65, 118, 103, 68, 105, 118, + 0, 65, 100, 97, 112, 116, + 105, 118, 101, 83, 97, 109, + 112, 108, 101, 67, 111, 117, + 110, 116, 76, 105, 109, 105, + 116, 0, 73, 110, 118, 83, + 104, 97, 114, 112, 110, 101, + 115, 115, 0, 80, 97, 115, + 115, 73, 110, 100, 101, 120, + 0, 105, 110, 116, 0, 171, + 0, 0, 2, 0, 1, 0, + 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, 55, 3, 0, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 103, + 109, 97, 83, 113, 117, 97, + 114, 101, 100, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 109, 105, 108, + 97, 114, 105, 116, 121, 68, + 105, 115, 116, 97, 110, 99, + 101, 83, 105, 103, 109, 97, + 0, 80, 97, 116, 116, 101, + 114, 110, 82, 111, 116, 83, + 99, 97, 108, 101, 77, 97, + 116, 114, 105, 99, 101, 115, + 0, 102, 108, 111, 97, 116, + 52, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 175, 3, 0, 0, 78, 111, + 114, 109, 97, 108, 115, 85, + 110, 112, 97, 99, 107, 77, + 117, 108, 0, 78, 111, 114, + 109, 97, 108, 115, 85, 110, + 112, 97, 99, 107, 65, 100, + 100, 0, 68, 101, 116, 97, + 105, 108, 65, 79, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 68, 117, 109, 109, 121, + 48, 0, 83, 83, 65, 79, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 83, + 83, 65, 79, 66, 117, 102, + 102, 101, 114, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 79, + 102, 102, 115, 101, 116, 0, + 105, 110, 116, 50, 0, 171, + 171, 171, 1, 0, 2, 0, + 1, 0, 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, 140, 4, + 0, 0, 80, 101, 114, 80, + 97, 115, 115, 70, 117, 108, + 108, 82, 101, 115, 85, 86, + 79, 102, 102, 115, 101, 116, + 0, 79, 117, 116, 112, 117, + 116, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 79, 117, 116, 112, 117, 116, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 79, 102, 102, 115, 101, 116, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 78, 111, 114, 109, 97, + 108, 105, 115, 101, 100, 79, + 102, 102, 115, 101, 116, 0, + 78, 111, 114, 109, 97, 108, + 115, 87, 111, 114, 108, 100, + 84, 111, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 77, + 97, 116, 114, 105, 120, 0, + 102, 108, 111, 97, 116, 52, + 120, 52, 0, 171, 3, 0, + 3, 0, 4, 0, 4, 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, + 238, 5, 0, 0, 101, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 164, 1, + 0, 0, 128, 1, 0, 0, + 8, 0, 0, 0, 181, 1, + 0, 0, 128, 1, 0, 0, + 16, 0, 0, 0, 194, 1, + 0, 0, 128, 1, 0, 0, + 24, 0, 0, 0, 207, 1, + 0, 0, 128, 1, 0, 0, + 32, 0, 0, 0, 230, 1, + 0, 0, 128, 1, 0, 0, + 40, 0, 0, 0, 253, 1, + 0, 0, 16, 2, 0, 0, + 48, 0, 0, 0, 52, 2, + 0, 0, 16, 2, 0, 0, + 52, 0, 0, 0, 73, 2, + 0, 0, 16, 2, 0, 0, + 56, 0, 0, 0, 89, 2, + 0, 0, 16, 2, 0, 0, + 60, 0, 0, 0, 107, 2, + 0, 0, 16, 2, 0, 0, + 64, 0, 0, 0, 124, 2, + 0, 0, 16, 2, 0, 0, + 68, 0, 0, 0, 141, 2, + 0, 0, 16, 2, 0, 0, + 72, 0, 0, 0, 169, 2, + 0, 0, 16, 2, 0, 0, + 76, 0, 0, 0, 202, 2, + 0, 0, 16, 2, 0, 0, + 80, 0, 0, 0, 226, 2, + 0, 0, 16, 2, 0, 0, + 84, 0, 0, 0, 245, 2, + 0, 0, 16, 2, 0, 0, + 88, 0, 0, 0, 7, 3, + 0, 0, 16, 2, 0, 0, + 92, 0, 0, 0, 32, 3, + 0, 0, 16, 2, 0, 0, + 96, 0, 0, 0, 45, 3, + 0, 0, 60, 3, 0, 0, + 100, 0, 0, 0, 96, 3, + 0, 0, 16, 2, 0, 0, + 104, 0, 0, 0, 118, 3, + 0, 0, 16, 2, 0, 0, + 108, 0, 0, 0, 151, 3, + 0, 0, 184, 3, 0, 0, + 112, 0, 0, 0, 220, 3, + 0, 0, 16, 2, 0, 0, + 192, 0, 0, 0, 237, 3, + 0, 0, 16, 2, 0, 0, + 196, 0, 0, 0, 254, 3, + 0, 0, 16, 2, 0, 0, + 200, 0, 0, 0, 15, 4, + 0, 0, 16, 2, 0, 0, + 204, 0, 0, 0, 22, 4, + 0, 0, 128, 1, 0, 0, + 208, 0, 0, 0, 43, 4, + 0, 0, 128, 1, 0, 0, + 216, 0, 0, 0, 71, 4, + 0, 0, 128, 1, 0, 0, + 224, 0, 0, 0, 93, 4, + 0, 0, 128, 1, 0, 0, + 232, 0, 0, 0, 122, 4, + 0, 0, 148, 4, 0, 0, + 240, 0, 0, 0, 184, 4, + 0, 0, 128, 1, 0, 0, + 248, 0, 0, 0, 207, 4, + 0, 0, 128, 1, 0, 0, + 0, 1, 0, 0, 230, 4, + 0, 0, 128, 1, 0, 0, + 8, 1, 0, 0, 4, 5, + 0, 0, 128, 1, 0, 0, + 16, 1, 0, 0, 28, 5, + 0, 0, 128, 1, 0, 0, + 24, 1, 0, 0, 59, 5, + 0, 0, 128, 1, 0, 0, + 32, 1, 0, 0, 94, 5, + 0, 0, 128, 1, 0, 0, + 40, 1, 0, 0, 136, 5, + 0, 0, 128, 1, 0, 0, + 48, 1, 0, 0, 167, 5, + 0, 0, 128, 1, 0, 0, + 56, 1, 0, 0, 208, 5, + 0, 0, 248, 5, 0, 0, + 64, 1, 0, 0, 5, 0, + 0, 0, 1, 0, 96, 0, + 0, 0, 42, 0, 28, 6, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 86, 1, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 140, 2, 0, 0, + 80, 0, 5, 0, 163, 0, + 0, 0, 106, 8, 0, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 0, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 0, + 2, 0, 104, 0, 0, 2, + 2, 0, 0, 0, 155, 0, + 0, 4, 8, 0, 0, 0, + 8, 0, 0, 0, 1, 0, + 0, 0, 41, 0, 0, 9, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 43, 0, 0, 5, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 10, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 109, 0, + 0, 139, 194, 0, 0, 128, + 67, 85, 21, 0, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 10, 96, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 86, 133, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 242, 0, + 16, 0, 0, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 62, 0, 0, 1, 83, 84, + 65, 84, 148, 0, 0, 0, + 20, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 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, 8, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 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, + 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepthsAndMips.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepthsAndMips.h new file mode 100644 index 0000000..6e4246d --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepthsAndMips.h @@ -0,0 +1,1193 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_DepthSource texture float 2d t0 1 +// g_PrepareDepthsAndMips_OutMip0 UAV float 2darray u0 1 +// g_PrepareDepthsAndMips_OutMip1 UAV float 2darray u1 1 +// g_PrepareDepthsAndMips_OutMip2 UAV float 2darray u2 1 +// g_PrepareDepthsAndMips_OutMip3 UAV float 2darray u3 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[15], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_uav_typed_texture2darray (float,float,float,float) u1 +dcl_uav_typed_texture2darray (float,float,float,float) u2 +dcl_uav_typed_texture2darray (float,float,float,float) u3 +dcl_input vThreadIDInGroup.xy +dcl_input vThreadID.xy +dcl_temps 7 +dcl_tgsm_structured g0, 256, 4 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[14].zwzz +gather4_indexable(texture2d)(float,float,float,float) r0.xyzw, r0.xyxx, t0.xyzw, s0.x +add r0.xyzw, -r0.xyzw, cb0[0].yyyy +div r0.xyzw, cb0[0].xxxx, r0.xyzw +ishl r1.x, vThreadIDInGroup.y, l(2) +imad r1.x, vThreadIDInGroup.x, l(32), r1.x +store_structured g0.x, l(0), r1.x, r0.w +store_structured g0.x, l(1), r1.x, r0.z +store_structured g0.x, l(2), r1.x, r0.x +store_structured g0.x, l(3), r1.x, r0.y +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,0,0) +store_uav_typed u0.xyzw, r1.xyzw, r0.wwww +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,1,1) +store_uav_typed u0.xyzw, r1.xyzw, r0.zzzz +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,2,2) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +store_uav_typed u0.xyzw, r1.xyzw, r0.yyyy +bfi r0.x, l(1), l(1), vThreadIDInGroup.y, l(0) +and r1.xyzw, vThreadIDInGroup.yxxy, l(1, 1, 3, 3) +bfi r0.zw, l(0, 0, 1, 1), l(0, 0, 0, 0), vThreadIDInGroup.xxxx, r0.xxxx +iadd r2.xy, -r1.yxyy, vThreadIDInGroup.xyxx +ushr r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +ishl r2.xy, r2.xyxx, l(5, 2, 0, 0) +iadd r2.z, r2.y, r2.x +ld_structured r3.x, r0.w, r2.z, g0.xxxx +iadd r4.xy, r2.yxyy, l(4, 32, 0, 0) +iadd r4.zw, r2.xxxy, r4.xxxy +ld_structured r3.y, r0.w, r4.z, g0.xxxx +ld_structured r3.z, r0.w, r4.w, g0.xxxx +iadd r2.w, r4.x, r4.y +ld_structured r3.w, r0.w, r2.w, g0.xxxx +min r5.xy {min16f}, r3.ywyy {def32 as min16f}, r3.xzxx {def32 as min16f} +min r5.x {min16f}, r5.y {min16f}, r5.x {min16f} +add r4.xyzw {min16f}, r3.xyzw {def32 as min16f}, -r5.xxxx {min16f} +mad r4.xyzw {min16f}, -r4.xyzw {min16f}, r4.xyzw {min16f}, l(1.000000, 1.000000, 1.000000, 1.000000) {def32 as min16f} +max r4.xyzw {min16f}, r4.xyzw {min16f}, l(0.000000, 0.000000, 0.000000, 0.000000) {def32 as min16f} +dp4 r5.x {min16f}, r4.xyzw {min16f}, r3.xyzw {def32 as min16f} +dp4 r2.w, r4.xyzw {min16f as def32}, l(1.000000, 1.000000, 1.000000, 1.000000) +div r2.w, r5.x {min16f as def32}, r2.w +store_uav_typed u1.xyzw, r0.xyzw, r2.wwww +store_structured g0.x, r0.w, r2.z, r2.w +ieq r1.xz, r1.yyxy, r1.zzwz +and r0.z, r1.z, r1.x +ushr r3.xy, r0.xyxx, l(1, 1, 0, 0) +sync_g_t +if_nz r0.z + ld_structured r4.x, r0.w, r2.z, g0.xxxx + iadd r0.xy, r2.yxyy, l(8, 64, 0, 0) + iadd r1.xz, r0.xxyx, r2.xxyx + ld_structured r4.y, r0.w, r1.x, g0.xxxx + ld_structured r4.z, r0.w, r1.z, g0.xxxx + iadd r0.x, r0.x, r0.y + ld_structured r4.w, r0.w, r0.x, g0.xxxx + min r5.xy {min16f}, r4.ywyy {def32 as min16f}, r4.xzxx {def32 as min16f} + min r5.x {min16f}, r5.y {min16f}, r5.x {min16f} + add r5.xyzw {min16f}, r4.xyzw {def32 as min16f}, -r5.xxxx {min16f} + mad r5.xyzw {min16f}, -r5.xyzw {min16f}, r5.xyzw {min16f}, l(1.000000, 1.000000, 1.000000, 1.000000) {def32 as min16f} + max r5.xyzw {min16f}, r5.xyzw {min16f}, l(0.000000, 0.000000, 0.000000, 0.000000) {def32 as min16f} + dp4 r6.x {min16f}, r5.xyzw {min16f}, r4.xyzw {def32 as min16f} + dp4 r0.x, r5.xyzw {min16f as def32}, l(1.000000, 1.000000, 1.000000, 1.000000) + div r0.x, r6.x {min16f as def32}, r0.x + mov r3.zw, r0.wwww + store_uav_typed u2.xyzw, r3.xyzw, r0.xxxx + store_structured g0.x, r0.w, r2.z, r0.x +endif +ieq r0.x, r1.y, vThreadIDInGroup.x +sync_g_t +if_nz r0.x + ushr r1.xy, r3.xyxx, l(1, 1, 0, 0) + ld_structured r3.x, r0.w, r2.z, g0.xxxx + iadd r0.xy, r2.yxyy, l(16, 128, 0, 0) + iadd r2.xy, r0.xyxx, r2.xyxx + ld_structured r3.y, r0.w, r2.x, g0.xxxx + ld_structured r3.z, r0.w, r2.y, g0.xxxx + iadd r0.x, r0.x, r0.y + ld_structured r3.w, r0.w, r0.x, g0.xxxx + min r5.xy {min16f}, r3.ywyy {def32 as min16f}, r3.xzxx {def32 as min16f} + min r5.x {min16f}, r5.y {min16f}, r5.x {min16f} + add r2.xyzw {min16f}, r3.xyzw {def32 as min16f}, -r5.xxxx {min16f} + mad r2.xyzw {min16f}, -r2.xyzw {min16f}, r2.xyzw {min16f}, l(1.000000, 1.000000, 1.000000, 1.000000) {def32 as min16f} + max r2.xyzw {min16f}, r2.xyzw {min16f}, l(0.000000, 0.000000, 0.000000, 0.000000) {def32 as min16f} + dp4 r5.x {min16f}, r2.xyzw {min16f}, r3.xyzw {def32 as min16f} + dp4 r0.x, r2.xyzw {min16f as def32}, l(1.000000, 1.000000, 1.000000, 1.000000) + div r0.x, r5.x {min16f as def32}, r0.x + mov r1.zw, r0.wwww + store_uav_typed u3.xyzw, r1.xyzw, r0.xxxx +endif +ret +// Approximately 96 instruction slots used +#endif + +const BYTE CSPrepareNativeDepthsAndMipsDXIL[] = +{ + 68, 88, 66, 67, 130, 178, + 242, 100, 233, 51, 46, 165, + 42, 58, 3, 169, 116, 105, + 200, 6, 1, 0, 0, 0, + 32, 23, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 104, 9, 0, 0, 120, 9, + 0, 0, 136, 9, 0, 0, + 116, 22, 0, 0, 132, 22, + 0, 0, 82, 68, 69, 70, + 40, 9, 0, 0, 1, 0, + 0, 0, 208, 1, 0, 0, + 7, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 0, 9, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 28, 1, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 48, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 62, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 93, 1, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 124, 1, 0, 0, 4, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 2, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 155, 1, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 3, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 186, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 80, 111, 105, 110, + 116, 67, 108, 97, 109, 112, + 83, 97, 109, 112, 108, 101, + 114, 0, 103, 95, 68, 101, + 112, 116, 104, 83, 111, 117, + 114, 99, 101, 0, 103, 95, + 80, 114, 101, 112, 97, 114, + 101, 68, 101, 112, 116, 104, + 115, 65, 110, 100, 77, 105, + 112, 115, 95, 79, 117, 116, + 77, 105, 112, 48, 0, 103, + 95, 80, 114, 101, 112, 97, + 114, 101, 68, 101, 112, 116, + 104, 115, 65, 110, 100, 77, + 105, 112, 115, 95, 79, 117, + 116, 77, 105, 112, 49, 0, + 103, 95, 80, 114, 101, 112, + 97, 114, 101, 68, 101, 112, + 116, 104, 115, 65, 110, 100, + 77, 105, 112, 115, 95, 79, + 117, 116, 77, 105, 112, 50, + 0, 103, 95, 80, 114, 101, + 112, 97, 114, 101, 68, 101, + 112, 116, 104, 115, 65, 110, + 100, 77, 105, 112, 115, 95, + 79, 117, 116, 77, 105, 112, + 51, 0, 83, 83, 65, 79, + 67, 111, 110, 115, 116, 97, + 110, 116, 115, 66, 117, 102, + 102, 101, 114, 0, 171, 171, + 186, 1, 0, 0, 1, 0, + 0, 0, 232, 1, 0, 0, + 128, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 16, 2, 0, 0, 0, 0, + 0, 0, 128, 1, 0, 0, + 2, 0, 0, 0, 220, 8, + 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 103, 95, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 115, 0, + 67, 65, 67, 65, 79, 67, + 111, 110, 115, 116, 97, 110, + 116, 115, 0, 68, 101, 112, + 116, 104, 85, 110, 112, 97, + 99, 107, 67, 111, 110, 115, + 116, 115, 0, 102, 108, 111, + 97, 116, 50, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 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, 63, 2, 0, 0, + 67, 97, 109, 101, 114, 97, + 84, 97, 110, 72, 97, 108, + 102, 70, 79, 86, 0, 78, + 68, 67, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 78, 68, 67, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 85, 86, 84, 111, 86, 105, + 101, 119, 77, 117, 108, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 85, + 86, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 82, + 97, 100, 105, 117, 115, 0, + 102, 108, 111, 97, 116, 0, + 0, 0, 3, 0, 1, 0, + 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, 210, 2, 0, 0, + 69, 102, 102, 101, 99, 116, + 83, 104, 97, 100, 111, 119, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 80, 111, 119, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 67, 108, 97, 109, 112, + 0, 69, 102, 102, 101, 99, + 116, 70, 97, 100, 101, 79, + 117, 116, 77, 117, 108, 0, + 69, 102, 102, 101, 99, 116, + 70, 97, 100, 101, 79, 117, + 116, 65, 100, 100, 0, 69, + 102, 102, 101, 99, 116, 72, + 111, 114, 105, 122, 111, 110, + 65, 110, 103, 108, 101, 84, + 104, 114, 101, 115, 104, 111, + 108, 100, 0, 69, 102, 102, + 101, 99, 116, 83, 97, 109, + 112, 108, 105, 110, 103, 82, + 97, 100, 105, 117, 115, 78, + 101, 97, 114, 76, 105, 109, + 105, 116, 82, 101, 99, 0, + 68, 101, 112, 116, 104, 80, + 114, 101, 99, 105, 115, 105, + 111, 110, 79, 102, 102, 115, + 101, 116, 77, 111, 100, 0, + 78, 101, 103, 82, 101, 99, + 69, 102, 102, 101, 99, 116, + 82, 97, 100, 105, 117, 115, + 0, 76, 111, 97, 100, 67, + 111, 117, 110, 116, 101, 114, + 65, 118, 103, 68, 105, 118, + 0, 65, 100, 97, 112, 116, + 105, 118, 101, 83, 97, 109, + 112, 108, 101, 67, 111, 117, + 110, 116, 76, 105, 109, 105, + 116, 0, 73, 110, 118, 83, + 104, 97, 114, 112, 110, 101, + 115, 115, 0, 80, 97, 115, + 115, 73, 110, 100, 101, 120, + 0, 105, 110, 116, 0, 171, + 0, 0, 2, 0, 1, 0, + 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, 255, 3, 0, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 103, + 109, 97, 83, 113, 117, 97, + 114, 101, 100, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 109, 105, 108, + 97, 114, 105, 116, 121, 68, + 105, 115, 116, 97, 110, 99, + 101, 83, 105, 103, 109, 97, + 0, 80, 97, 116, 116, 101, + 114, 110, 82, 111, 116, 83, + 99, 97, 108, 101, 77, 97, + 116, 114, 105, 99, 101, 115, + 0, 102, 108, 111, 97, 116, + 52, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 119, 4, 0, 0, 78, 111, + 114, 109, 97, 108, 115, 85, + 110, 112, 97, 99, 107, 77, + 117, 108, 0, 78, 111, 114, + 109, 97, 108, 115, 85, 110, + 112, 97, 99, 107, 65, 100, + 100, 0, 68, 101, 116, 97, + 105, 108, 65, 79, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 68, 117, 109, 109, 121, + 48, 0, 83, 83, 65, 79, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 83, + 83, 65, 79, 66, 117, 102, + 102, 101, 114, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 79, + 102, 102, 115, 101, 116, 0, + 105, 110, 116, 50, 0, 171, + 171, 171, 1, 0, 2, 0, + 1, 0, 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, 84, 5, + 0, 0, 80, 101, 114, 80, + 97, 115, 115, 70, 117, 108, + 108, 82, 101, 115, 85, 86, + 79, 102, 102, 115, 101, 116, + 0, 79, 117, 116, 112, 117, + 116, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 79, 117, 116, 112, 117, 116, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 73, 109, 112, 111, 114, 116, + 97, 110, 99, 101, 77, 97, + 112, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 73, 110, 118, 101, 114, 115, + 101, 68, 105, 109, 101, 110, + 115, 105, 111, 110, 115, 0, + 68, 101, 105, 110, 116, 101, + 114, 108, 101, 97, 118, 101, + 100, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 79, 102, 102, 115, 101, 116, + 0, 68, 101, 105, 110, 116, + 101, 114, 108, 101, 97, 118, + 101, 100, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 78, 111, 114, 109, 97, + 108, 105, 115, 101, 100, 79, + 102, 102, 115, 101, 116, 0, + 78, 111, 114, 109, 97, 108, + 115, 87, 111, 114, 108, 100, + 84, 111, 86, 105, 101, 119, + 115, 112, 97, 99, 101, 77, + 97, 116, 114, 105, 120, 0, + 102, 108, 111, 97, 116, 52, + 120, 52, 0, 171, 3, 0, + 3, 0, 4, 0, 4, 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, + 182, 6, 0, 0, 45, 2, + 0, 0, 72, 2, 0, 0, + 0, 0, 0, 0, 108, 2, + 0, 0, 72, 2, 0, 0, + 8, 0, 0, 0, 125, 2, + 0, 0, 72, 2, 0, 0, + 16, 0, 0, 0, 138, 2, + 0, 0, 72, 2, 0, 0, + 24, 0, 0, 0, 151, 2, + 0, 0, 72, 2, 0, 0, + 32, 0, 0, 0, 174, 2, + 0, 0, 72, 2, 0, 0, + 40, 0, 0, 0, 197, 2, + 0, 0, 216, 2, 0, 0, + 48, 0, 0, 0, 252, 2, + 0, 0, 216, 2, 0, 0, + 52, 0, 0, 0, 17, 3, + 0, 0, 216, 2, 0, 0, + 56, 0, 0, 0, 33, 3, + 0, 0, 216, 2, 0, 0, + 60, 0, 0, 0, 51, 3, + 0, 0, 216, 2, 0, 0, + 64, 0, 0, 0, 68, 3, + 0, 0, 216, 2, 0, 0, + 68, 0, 0, 0, 85, 3, + 0, 0, 216, 2, 0, 0, + 72, 0, 0, 0, 113, 3, + 0, 0, 216, 2, 0, 0, + 76, 0, 0, 0, 146, 3, + 0, 0, 216, 2, 0, 0, + 80, 0, 0, 0, 170, 3, + 0, 0, 216, 2, 0, 0, + 84, 0, 0, 0, 189, 3, + 0, 0, 216, 2, 0, 0, + 88, 0, 0, 0, 207, 3, + 0, 0, 216, 2, 0, 0, + 92, 0, 0, 0, 232, 3, + 0, 0, 216, 2, 0, 0, + 96, 0, 0, 0, 245, 3, + 0, 0, 4, 4, 0, 0, + 100, 0, 0, 0, 40, 4, + 0, 0, 216, 2, 0, 0, + 104, 0, 0, 0, 62, 4, + 0, 0, 216, 2, 0, 0, + 108, 0, 0, 0, 95, 4, + 0, 0, 128, 4, 0, 0, + 112, 0, 0, 0, 164, 4, + 0, 0, 216, 2, 0, 0, + 192, 0, 0, 0, 181, 4, + 0, 0, 216, 2, 0, 0, + 196, 0, 0, 0, 198, 4, + 0, 0, 216, 2, 0, 0, + 200, 0, 0, 0, 215, 4, + 0, 0, 216, 2, 0, 0, + 204, 0, 0, 0, 222, 4, + 0, 0, 72, 2, 0, 0, + 208, 0, 0, 0, 243, 4, + 0, 0, 72, 2, 0, 0, + 216, 0, 0, 0, 15, 5, + 0, 0, 72, 2, 0, 0, + 224, 0, 0, 0, 37, 5, + 0, 0, 72, 2, 0, 0, + 232, 0, 0, 0, 66, 5, + 0, 0, 92, 5, 0, 0, + 240, 0, 0, 0, 128, 5, + 0, 0, 72, 2, 0, 0, + 248, 0, 0, 0, 151, 5, + 0, 0, 72, 2, 0, 0, + 0, 1, 0, 0, 174, 5, + 0, 0, 72, 2, 0, 0, + 8, 1, 0, 0, 204, 5, + 0, 0, 72, 2, 0, 0, + 16, 1, 0, 0, 228, 5, + 0, 0, 72, 2, 0, 0, + 24, 1, 0, 0, 3, 6, + 0, 0, 72, 2, 0, 0, + 32, 1, 0, 0, 38, 6, + 0, 0, 72, 2, 0, 0, + 40, 1, 0, 0, 80, 6, + 0, 0, 72, 2, 0, 0, + 48, 1, 0, 0, 111, 6, + 0, 0, 72, 2, 0, 0, + 56, 1, 0, 0, 152, 6, + 0, 0, 192, 6, 0, 0, + 64, 1, 0, 0, 5, 0, + 0, 0, 1, 0, 96, 0, + 0, 0, 42, 0, 228, 6, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 2, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 49, 48, 46, + 49, 0, 73, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 79, 83, 71, 49, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 83, 72, + 69, 88, 228, 12, 0, 0, + 80, 0, 5, 0, 57, 3, + 0, 0, 106, 8, 1, 1, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 0, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 156, 64, 0, 4, 0, 224, + 17, 0, 1, 0, 0, 0, + 85, 85, 0, 0, 156, 64, + 0, 4, 0, 224, 17, 0, + 2, 0, 0, 0, 85, 85, + 0, 0, 156, 64, 0, 4, + 0, 224, 17, 0, 3, 0, + 0, 0, 85, 85, 0, 0, + 95, 0, 0, 2, 50, 32, + 2, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 7, 0, 0, 0, + 160, 0, 0, 5, 0, 240, + 17, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 4, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 8, 0, + 0, 0, 1, 0, 0, 0, + 41, 0, 0, 9, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 14, 0, + 0, 0, 109, 0, 0, 139, + 194, 0, 0, 128, 67, 85, + 21, 0, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 242, 0, 16, 0, + 0, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 41, 0, 0, 6, 18, 0, + 16, 0, 1, 0, 0, 0, + 26, 32, 2, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 35, 0, 0, 8, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 32, 2, 0, 1, 64, + 0, 0, 32, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 168, 0, 0, 9, + 18, 240, 17, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 140, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 26, 32, + 2, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 22, 36, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 140, 0, + 0, 16, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 6, 32, 2, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 50, 0, 16, 0, 2, 0, + 0, 0, 22, 5, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 70, 32, 2, 0, + 85, 0, 0, 9, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 41, 0, 0, 10, 50, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 5, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 18, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 50, 0, 16, 0, 4, 0, + 0, 0, 22, 5, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 4, 0, 0, 0, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 194, 0, + 16, 0, 4, 0, 0, 0, + 6, 4, 16, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 4, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 4, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 4, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 4, 0, 0, 0, + 26, 0, 16, 0, 4, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 51, 0, 0, 8, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 214, 5, 16, 0, 3, 0, + 0, 0, 134, 0, 16, 0, + 3, 0, 0, 0, 51, 0, + 0, 10, 18, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 6, 0, 16, 128, + 65, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 15, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 65, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 52, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 9, + 18, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 17, 0, 0, 11, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 14, 0, + 0, 8, 130, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 2, 0, 0, 0, 168, 0, + 0, 9, 18, 240, 17, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 32, 0, + 0, 7, 82, 0, 16, 0, + 1, 0, 0, 0, 86, 4, + 16, 0, 1, 0, 0, 0, + 166, 11, 16, 0, 1, 0, + 0, 0, 1, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 85, 0, 0, 10, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 190, 24, + 0, 1, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 30, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 22, 5, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 8, 0, 0, 0, + 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 82, 0, + 16, 0, 1, 0, 0, 0, + 6, 1, 16, 0, 0, 0, + 0, 0, 6, 1, 16, 0, + 2, 0, 0, 0, 167, 0, + 0, 9, 34, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 167, 0, + 0, 9, 66, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 6, 240, 17, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 130, 0, 16, 0, 4, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 51, 0, 0, 8, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 214, 5, 16, 0, 4, 0, + 0, 0, 134, 0, 16, 0, + 4, 0, 0, 0, 51, 0, + 0, 10, 18, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 26, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 6, 0, 16, 128, + 65, 64, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 15, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 65, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 52, 0, 0, 12, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 9, + 18, 0, 16, 128, 1, 64, + 0, 0, 6, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 17, 0, 0, 11, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 14, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 1, 64, 0, 0, + 6, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 194, 0, + 16, 0, 3, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 3, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 168, 0, 0, 9, 18, 240, + 17, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 21, 0, 0, 1, 32, 0, + 0, 6, 18, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 1, 0, 0, 0, + 10, 32, 2, 0, 190, 24, + 0, 1, 31, 0, 4, 3, + 10, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 18, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 22, 5, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 16, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 50, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 2, 0, + 0, 0, 167, 0, 0, 9, + 34, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 167, 0, 0, 9, + 66, 0, 16, 0, 3, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 6, 240, 17, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 167, 0, 0, 9, 130, 0, + 16, 0, 3, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 6, 240, + 17, 0, 0, 0, 0, 0, + 51, 0, 0, 8, 50, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 214, 5, + 16, 0, 3, 0, 0, 0, + 134, 0, 16, 0, 3, 0, + 0, 0, 51, 0, 0, 10, + 18, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 26, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 10, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 0, 0, 0, 9, 242, 0, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 6, 0, 16, 128, 65, 64, + 0, 0, 5, 0, 0, 0, + 50, 0, 0, 15, 242, 0, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 128, 65, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 52, 0, 0, 12, 242, 0, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 17, 0, 0, 9, 18, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 17, 0, 0, 11, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 1, 64, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 14, 0, 0, 8, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 194, 0, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 3, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 21, 0, + 0, 1, 62, 0, 0, 1, + 83, 70, 73, 48, 8, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 83, 84, + 65, 84, 148, 0, 0, 0, + 96, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 28, 0, + 0, 0, 17, 0, 0, 0, + 5, 0, 0, 0, 1, 0, + 0, 0, 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, 10, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 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, 2, 0, + 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepthsHalf.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepthsHalf.h new file mode 100644 index 0000000..66a0778 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeDepthsHalf.h @@ -0,0 +1,607 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_DepthSource texture float 2d t0 1 +// g_PrepareDepthsOut UAV float 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[1], immediateIndexed +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 2 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +mov r0.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r0.x, r0.xyzw, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r0.x, cb0[0].x, r0.x +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,0,0) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +imad r0.xy, vThreadID.xyxx, l(2, 2, 0, 0), l(1, 1, 0, 0) +mov r0.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r0.x, r0.xyzw, t0.xyzw +add r0.x, -r0.x, cb0[0].y +div r0.x, cb0[0].x, r0.x +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +store_uav_typed u0.xyzw, r1.xyzw, r0.xxxx +ret +// Approximately 17 instruction slots used +#endif + +const BYTE CSPrepareNativeDepthsHalfDXIL[] = +{ + 68, 88, 66, 67, 187, 109, + 100, 130, 162, 127, 5, 35, + 83, 135, 215, 181, 138, 91, + 202, 187, 1, 0, 0, 0, + 144, 11, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 104, 8, 0, 0, 120, 8, + 0, 0, 136, 8, 0, 0, + 244, 10, 0, 0, 82, 68, + 69, 70, 44, 8, 0, 0, + 1, 0, 0, 0, 212, 0, + 0, 0, 3, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 4, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 170, 0, 0, 0, + 4, 0, 0, 0, 5, 0, + 0, 0, 5, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 189, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 103, 95, 68, 101, 112, 116, + 104, 83, 111, 117, 114, 99, + 101, 0, 103, 95, 80, 114, + 101, 112, 97, 114, 101, 68, + 101, 112, 116, 104, 115, 79, + 117, 116, 0, 83, 83, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 66, 117, + 102, 102, 101, 114, 0, 171, + 171, 171, 189, 0, 0, 0, + 1, 0, 0, 0, 236, 0, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 20, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 224, 7, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 67, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 214, 1, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 3, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 123, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 88, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 186, 5, 0, 0, + 49, 1, 0, 0, 76, 1, + 0, 0, 0, 0, 0, 0, + 112, 1, 0, 0, 76, 1, + 0, 0, 8, 0, 0, 0, + 129, 1, 0, 0, 76, 1, + 0, 0, 16, 0, 0, 0, + 142, 1, 0, 0, 76, 1, + 0, 0, 24, 0, 0, 0, + 155, 1, 0, 0, 76, 1, + 0, 0, 32, 0, 0, 0, + 178, 1, 0, 0, 76, 1, + 0, 0, 40, 0, 0, 0, + 201, 1, 0, 0, 220, 1, + 0, 0, 48, 0, 0, 0, + 0, 2, 0, 0, 220, 1, + 0, 0, 52, 0, 0, 0, + 21, 2, 0, 0, 220, 1, + 0, 0, 56, 0, 0, 0, + 37, 2, 0, 0, 220, 1, + 0, 0, 60, 0, 0, 0, + 55, 2, 0, 0, 220, 1, + 0, 0, 64, 0, 0, 0, + 72, 2, 0, 0, 220, 1, + 0, 0, 68, 0, 0, 0, + 89, 2, 0, 0, 220, 1, + 0, 0, 72, 0, 0, 0, + 117, 2, 0, 0, 220, 1, + 0, 0, 76, 0, 0, 0, + 150, 2, 0, 0, 220, 1, + 0, 0, 80, 0, 0, 0, + 174, 2, 0, 0, 220, 1, + 0, 0, 84, 0, 0, 0, + 193, 2, 0, 0, 220, 1, + 0, 0, 88, 0, 0, 0, + 211, 2, 0, 0, 220, 1, + 0, 0, 92, 0, 0, 0, + 236, 2, 0, 0, 220, 1, + 0, 0, 96, 0, 0, 0, + 249, 2, 0, 0, 8, 3, + 0, 0, 100, 0, 0, 0, + 44, 3, 0, 0, 220, 1, + 0, 0, 104, 0, 0, 0, + 66, 3, 0, 0, 220, 1, + 0, 0, 108, 0, 0, 0, + 99, 3, 0, 0, 132, 3, + 0, 0, 112, 0, 0, 0, + 168, 3, 0, 0, 220, 1, + 0, 0, 192, 0, 0, 0, + 185, 3, 0, 0, 220, 1, + 0, 0, 196, 0, 0, 0, + 202, 3, 0, 0, 220, 1, + 0, 0, 200, 0, 0, 0, + 219, 3, 0, 0, 220, 1, + 0, 0, 204, 0, 0, 0, + 226, 3, 0, 0, 76, 1, + 0, 0, 208, 0, 0, 0, + 247, 3, 0, 0, 76, 1, + 0, 0, 216, 0, 0, 0, + 19, 4, 0, 0, 76, 1, + 0, 0, 224, 0, 0, 0, + 41, 4, 0, 0, 76, 1, + 0, 0, 232, 0, 0, 0, + 70, 4, 0, 0, 96, 4, + 0, 0, 240, 0, 0, 0, + 132, 4, 0, 0, 76, 1, + 0, 0, 248, 0, 0, 0, + 155, 4, 0, 0, 76, 1, + 0, 0, 0, 1, 0, 0, + 178, 4, 0, 0, 76, 1, + 0, 0, 8, 1, 0, 0, + 208, 4, 0, 0, 76, 1, + 0, 0, 16, 1, 0, 0, + 232, 4, 0, 0, 76, 1, + 0, 0, 24, 1, 0, 0, + 7, 5, 0, 0, 76, 1, + 0, 0, 32, 1, 0, 0, + 42, 5, 0, 0, 76, 1, + 0, 0, 40, 1, 0, 0, + 84, 5, 0, 0, 76, 1, + 0, 0, 48, 1, 0, 0, + 115, 5, 0, 0, 76, 1, + 0, 0, 56, 1, 0, 0, + 156, 5, 0, 0, 196, 5, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 232, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 34, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 100, 2, + 0, 0, 80, 0, 5, 0, + 153, 0, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 64, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 2, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 41, 0, + 0, 9, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 35, 0, 0, 14, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 3, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 17, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 4, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 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, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 6, 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, 2, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeNormals.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeNormals.h new file mode 100644 index 0000000..b5ed302 --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeNormals.h @@ -0,0 +1,1958 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_DepthIn texture float 2d t0 1 +// g_PrepareNormals_NormalOut UAV float4 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[17], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 20 +dcl_thread_group 8, 8, 1 +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,0,0) +mov r1.w, l(1.000000) +ishl r2.xyzw, vThreadID.xyxy, l(1, 1, 1, 1) +iadd r3.xy, r2.zwzz, cb0[15].xyxx +itof r2.xyzw, r2.xyzw +itof r3.xy, r3.xyxx +add r3.xy, r3.xyxx, l(-0.500000, -0.500000, 0.000000, 0.000000) +mul r3.xy, r3.xyxx, cb0[14].zwzz +gather4_indexable(texture2d)(float,float,float,float) r4.xyzw, r3.xyxx, t0.xyzw, s0.x +gather4_aoffimmi_indexable(2,0,0)(texture2d)(float,float,float,float) r5.xyzw, r3.xyxx, t0.xyzw, s0.x +add r3.z, r4.w, r5.z +add r4.xyz, -r4.zxyz, cb0[0].yyyy +div r4.xyz, cb0[0].xxxx, r4.xyzx +add r5.xyz, -r5.wxyw, cb0[0].yyyy +div r5.xyz, cb0[0].xxxx, r5.xyzx +gather4_aoffimmi_indexable(0,2,0)(texture2d)(float,float,float,float) r6.xyzw, r3.xyxx, t0.xyzw, s0.x +gather4_aoffimmi_indexable(2,2,0)(texture2d)(float,float,float,float) r7.xyzw, r3.xyxx, t0.xyzw, s0.x +add r3.x, r3.z, r6.x +add r3.yzw, -r6.wwzy, cb0[0].yyyy +div r3.yzw, cb0[0].xxxx, r3.yyzw +add r3.x, r7.y, r3.x +add r6.xyz, -r7.wzxw, cb0[0].yyyy +div r6.xyz, cb0[0].xxxx, r6.xyzx +mad r2.xyzw, r3.xxxx, l(0.000000, 0.000000, 0.000000, 0.000000), r2.xyzw +add r2.xyzw, r2.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r7.xyzw, r2.xyzw, cb0[16].zwzw +mad r2.xy, r2.zwzz, cb0[16].zwzz, cb0[16].zwzz +mad r2.xy, cb0[1].xyxx, r2.xyxx, cb0[1].zwzz +mul r2.yz, r6.xxxx, r2.xxyx +mad r8.xyzw, cb0[16].zwzw, l(-1.000000, 0.000000, 1.000000, 0.000000), r7.zwzw +mad r8.xyzw, cb0[1].xyxy, r8.xyzw, cb0[1].zwzw +mul r9.xz, r4.yyyy, r8.yyxy +mul r8.yz, r5.yyyy, r8.zzwz +mad r10.xy, cb0[1].xyxx, r7.zwzz, cb0[1].zwzz +mul r10.yz, r4.zzzz, r10.xxyx +mov r11.zw, r4.yyyx +mov r9.y, r11.z +mov r12.y, r4.z +mov r12.z, r6.x +mov r10.x, r12.y +add r9.xyz, r9.xyzx, -r10.zxyz +dp3 r2.w, r9.xyzx, r9.xyzx +rsq r2.w, r2.w +mul r9.xyz, r2.wwww, r9.xyzx +mad r13.xyzw, cb0[16].zwzw, l(0.000000, -1.000000, 1.000000, -1.000000), r7.zwzw +mad r13.xyzw, cb0[1].xyxy, r13.xyzw, cb0[1].zwzw +mul r14.yz, r4.xxxx, r13.xxyx +mul r13.yz, r5.xxxx, r13.zzwz +mov r14.x, r11.w +add r4.xyw, -r10.xyxz, r14.xyxz +dp3 r2.w, r4.xywx, r4.xywx +rsq r2.w, r2.w +mul r4.xyw, r2.wwww, r4.xyxw +mul r14.xyz, r4.wxyw, r9.yzxy +mad r14.xyz, r9.xyzx, r4.xywx, -r14.xyzx +mul r2.w, r4.z, l(0.040000) +mov r11.y, r5.y +mov r11.x, r3.z +add r15.xyzw, -r4.zzzz, r11.zwyx +add r16.xyzw, r15.zwzw, r15.xyxy +min r15.xyzw, |r15.xyzw|, |r16.xyzw| +div r15.xyzw, r15.xyzw, r2.wwww +add_sat r15.xyzw, -r15.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r15.xyzw, r15.yzwx, r15.xyzw +mad r14.xyz, r15.xxxx, r14.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +mov r8.x, r11.y +add r16.xyz, r8.xyzx, -r10.xyzx +dp3 r2.w, r16.xyzx, r16.xyzx +rsq r2.w, r2.w +mul r16.xyz, r2.wwww, r16.xyzx +mul r17.xyz, r4.xywx, r16.zxyz +mad r4.xyz, r4.wxyw, r16.xyzx, -r17.xyzx +mad r4.xyz, r15.yyyy, r4.xyzx, r14.xyzx +mad r14.xyzw, cb0[16].zwzw, l(0.000000, 1.000000, 2.000000, 1.000000), r7.zwzw +mad r14.xyzw, cb0[1].xyxy, r14.xyzw, cb0[1].zwzw +mul r17.xz, r3.zzzz, r14.yyxy +mul r14.yz, r6.yyyy, r14.zzwz +mov r17.y, r11.x +add r18.xyz, -r10.xyzx, r17.yzxy +dp3 r2.w, r18.xyzx, r18.xyzx +rsq r2.w, r2.w +mul r18.xyz, r2.wwww, r18.xyzx +mul r19.xyz, r16.xyzx, r18.zxyz +mad r16.xyz, r16.zxyz, r18.xyzx, -r19.xyzx +mad r4.xyz, r15.zzzz, r16.xyzx, r4.xyzx +mul r15.xyz, r9.xyzx, r18.xyzx +mad r9.xyz, r18.zxyz, r9.yzxy, -r15.xyzx +mad r4.xyz, r15.wwww, r9.xyzx, r4.xyzx +dp3 r2.w, r4.xyzx, r4.xyzx +rsq r2.w, r2.w +mul r1.xyz, r2.wwww, r4.xyzx +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +mov r12.xw, r5.xxxz +add r0.xyzw, -r5.yyyy, r12.yxwz +add r1.xyzw, r0.zwzw, r0.xyxy +min r0.xyzw, |r0.xyzw|, |r1.xyzw| +mul r1.x, r5.y, l(0.040000) +div r0.xyzw, r0.xyzw, r1.xxxx +add_sat r0.xyzw, -r0.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r0.xyzw, r0.yzwx, r0.xyzw +mad r1.xyzw, cb0[16].zwzw, l(2.000000, 0.000000, -1.000000, 1.000000), r7.zwzw +mad r4.xyzw, cb0[16].zwzw, l(0.000000, 2.000000, 1.000000, 2.000000), r7.xyzw +mad r4.xyzw, cb0[1].xyxy, r4.xyzw, cb0[1].zwzw +mad r1.xyzw, cb0[1].xyxy, r1.xyzw, cb0[1].zwzw +mul r5.yz, r12.wwww, r1.xxyx +mul r1.xz, r3.yyyy, r1.wwzw +mov r5.x, r12.w +mov r13.x, r12.x +add r7.xyz, -r8.xyzx, r13.xyzx +add r5.xyz, -r8.xyzx, r5.xyzx +dp3 r1.w, r5.xyzx, r5.xyzx +rsq r1.w, r1.w +mul r5.xyz, r1.wwww, r5.xyzx +dp3 r1.w, r7.xyzx, r7.xyzx +rsq r1.w, r1.w +mul r7.xyz, r1.wwww, r7.xyzx +mul r9.xyz, r5.zxyz, r7.xyzx +mad r9.xyz, r7.zxyz, r5.xyzx, -r9.xyzx +add r13.xyz, -r8.zxyz, r10.zxyz +add r10.xyz, r10.xyzx, -r17.yzxy +dp3 r1.w, r13.xyzx, r13.xyzx +rsq r1.w, r1.w +mul r13.xyz, r1.wwww, r13.xyzx +mul r15.xyz, r7.zxyz, r13.yzxy +mad r7.xyz, r13.xyzx, r7.xyzx, -r15.xyzx +mad r7.xyz, r0.xxxx, r7.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +mad r7.xyz, r0.yyyy, r9.xyzx, r7.xyzx +mov r2.x, r12.z +add r9.xyz, r2.xyzx, -r8.xyzx +add r8.xyz, -r2.xyzx, r8.xyzx +dp3 r0.x, r9.xyzx, r9.xyzx +rsq r0.x, r0.x +mul r9.xyz, r0.xxxx, r9.xyzx +mul r15.xyz, r5.xyzx, r9.zxyz +mad r5.xyz, r5.zxyz, r9.xyzx, -r15.xyzx +mad r0.xyz, r0.zzzz, r5.xyzx, r7.xyzx +mul r5.xyz, r13.xyzx, r9.xyzx +mad r5.xyz, r9.zxyz, r13.yzxy, -r5.xyzx +mad r0.xyz, r0.wwww, r5.xyzx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mov r5.xy, vThreadID.xyxx +mov r5.zw, l(0,0,1,1) +mov r0.w, l(1.000000) +store_uav_typed u0.xyzw, r5.xyzw, r0.xyzw +mov r12.xw, r3.yyyw +add r0.xyzw, -r3.zzzz, r12.xyzw +add r5.xyzw, r0.zwzw, r0.xyxy +min r0.xyzw, |r0.xyzw|, |r5.xyzw| +mul r1.w, r3.z, l(0.040000) +mul r3.yz, r3.wwww, r4.xxyx +mul r4.yz, r6.zzzz, r4.zzwz +div r0.xyzw, r0.xyzw, r1.wwww +add_sat r0.xyzw, -r0.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r0.xyzw, r0.yzwx, r0.xyzw +mov r1.y, r12.x +mov r3.x, r12.w +add r3.xyz, -r17.yzxy, r3.xyzx +add r1.xyz, -r17.xyzx, r1.xyzx +dp3 r1.w, r1.xyzx, r1.xyzx +rsq r1.w, r1.w +mul r1.xyz, r1.wwww, r1.xyzx +dp3 r1.w, r10.xyzx, r10.xyzx +rsq r1.w, r1.w +mul r5.xyz, r1.wwww, r10.xyzx +mul r7.xyz, r1.yzxy, r5.zxyz +mad r7.xyz, r1.xyzx, r5.xyzx, -r7.xyzx +mad r7.xyz, r0.xxxx, r7.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +add r9.xyz, r2.xyzx, -r17.yzxy +add r10.xyz, -r2.zxyz, r17.xyzx +dp3 r0.x, r9.xyzx, r9.xyzx +rsq r0.x, r0.x +mul r9.xyz, r0.xxxx, r9.xyzx +mul r12.xyz, r5.xyzx, r9.zxyz +mad r5.xyz, r5.zxyz, r9.xyzx, -r12.xyzx +mad r5.xyz, r0.yyyy, r5.xyzx, r7.xyzx +dp3 r0.x, r3.xyzx, r3.xyzx +rsq r0.x, r0.x +mul r3.xyz, r0.xxxx, r3.xyzx +mul r7.xyz, r3.zxyz, r9.xyzx +mad r7.xyz, r9.zxyz, r3.xyzx, -r7.xyzx +mad r0.xyz, r0.zzzz, r7.xyzx, r5.xyzx +mul r5.xyz, r1.xyzx, r3.xyzx +mad r1.xyz, r3.zxyz, r1.yzxy, -r5.xyzx +mad r0.xyz, r0.wwww, r1.xyzx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,2,2) +mov r0.w, l(1.000000) +store_uav_typed u0.xyzw, r1.xyzw, r0.xyzw +mov r11.zw, r6.yyyz +add r0.xyzw, -r6.xxxx, r11.xyzw +mul r1.x, r6.x, l(0.040000) +add r3.xyzw, r0.zwzw, r0.xyxy +min r0.xyzw, |r0.xyzw|, |r3.xyzw| +div r0.xyzw, r0.xyzw, r1.xxxx +add_sat r0.xyzw, -r0.xyzw, l(1.300000, 1.300000, 1.300000, 1.300000) +mul r0.xyzw, r0.yzwx, r0.xyzw +dp3 r1.x, r10.xyzx, r10.xyzx +rsq r1.x, r1.x +mul r1.xyz, r1.xxxx, r10.xyzx +dp3 r1.w, r8.xyzx, r8.xyzx +rsq r1.w, r1.w +mul r3.xyz, r1.wwww, r8.xyzx +mul r5.xyz, r1.yzxy, r3.zxyz +mad r5.xyz, r1.xyzx, r3.xyzx, -r5.xyzx +mad r5.xyz, r0.xxxx, r5.xyzx, l(0.000000, 0.000000, -0.000500, 0.000000) +mov r14.x, r11.z +mov r4.x, r11.w +add r4.xyz, -r2.xyzx, r4.xyzx +add r2.xyz, -r2.xyzx, r14.xyzx +dp3 r0.x, r2.xyzx, r2.xyzx +rsq r0.x, r0.x +mul r2.xyz, r0.xxxx, r2.xyzx +mul r6.xyz, r2.zxyz, r3.xyzx +mad r3.xyz, r3.zxyz, r2.xyzx, -r6.xyzx +mad r3.xyz, r0.yyyy, r3.xyzx, r5.xyzx +dp3 r0.x, r4.xyzx, r4.xyzx +rsq r0.x, r0.x +mul r4.xyz, r0.xxxx, r4.xyzx +mul r5.xyz, r2.xyzx, r4.zxyz +mad r2.xyz, r2.zxyz, r4.xyzx, -r5.xyzx +mad r0.xyz, r0.zzzz, r2.xyzx, r3.xyzx +mul r2.xyz, r1.xyzx, r4.xyzx +mad r1.xyz, r4.zxyz, r1.yzxy, -r2.xyzx +mad r0.xyz, r0.wwww, r1.xyzx, r0.xyzx +dp3 r0.w, r0.xyzx, r0.xyzx +rsq r0.w, r0.w +mul r0.xyz, r0.wwww, r0.xyzx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,3,3) +mov r0.w, l(1.000000) +store_uav_typed u0.xyzw, r1.xyzw, r0.xyzw +ret +// Approximately 238 instruction slots used +#endif + +const BYTE CSPrepareNativeNormalsDXIL[] = +{ + 68, 88, 66, 67, 9, 13, + 170, 108, 125, 249, 240, 248, + 249, 173, 92, 100, 176, 239, + 97, 182, 1, 0, 0, 0, + 0, 38, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 160, 8, 0, 0, 176, 8, + 0, 0, 192, 8, 0, 0, + 100, 37, 0, 0, 82, 68, + 69, 70, 100, 8, 0, 0, + 1, 0, 0, 0, 12, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 60, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 208, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 218, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 13, 0, 0, 0, + 245, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 67, 108, 97, + 109, 112, 83, 97, 109, 112, + 108, 101, 114, 0, 103, 95, + 68, 101, 112, 116, 104, 73, + 110, 0, 103, 95, 80, 114, + 101, 112, 97, 114, 101, 78, + 111, 114, 109, 97, 108, 115, + 95, 78, 111, 114, 109, 97, + 108, 79, 117, 116, 0, 83, + 83, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 66, 117, 102, 102, 101, 114, + 0, 171, 171, 171, 245, 0, + 0, 0, 1, 0, 0, 0, + 36, 1, 0, 0, 128, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 76, 1, + 0, 0, 0, 0, 0, 0, + 128, 1, 0, 0, 2, 0, + 0, 0, 24, 8, 0, 0, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 103, 95, 67, 65, + 67, 65, 79, 67, 111, 110, + 115, 116, 115, 0, 67, 65, + 67, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 0, 68, 101, 112, 116, 104, + 85, 110, 112, 97, 99, 107, + 67, 111, 110, 115, 116, 115, + 0, 102, 108, 111, 97, 116, + 50, 0, 171, 171, 1, 0, + 3, 0, 1, 0, 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, + 123, 1, 0, 0, 67, 97, + 109, 101, 114, 97, 84, 97, + 110, 72, 97, 108, 102, 70, + 79, 86, 0, 78, 68, 67, + 84, 111, 86, 105, 101, 119, + 77, 117, 108, 0, 78, 68, + 67, 84, 111, 86, 105, 101, + 119, 65, 100, 100, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 85, 86, + 84, 111, 86, 105, 101, 119, + 77, 117, 108, 0, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 85, 86, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 69, 102, 102, + 101, 99, 116, 82, 97, 100, + 105, 117, 115, 0, 102, 108, + 111, 97, 116, 0, 0, 0, + 3, 0, 1, 0, 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, + 14, 2, 0, 0, 69, 102, + 102, 101, 99, 116, 83, 104, + 97, 100, 111, 119, 83, 116, + 114, 101, 110, 103, 116, 104, + 0, 69, 102, 102, 101, 99, + 116, 83, 104, 97, 100, 111, + 119, 80, 111, 119, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 67, + 108, 97, 109, 112, 0, 69, + 102, 102, 101, 99, 116, 70, + 97, 100, 101, 79, 117, 116, + 77, 117, 108, 0, 69, 102, + 102, 101, 99, 116, 70, 97, + 100, 101, 79, 117, 116, 65, + 100, 100, 0, 69, 102, 102, + 101, 99, 116, 72, 111, 114, + 105, 122, 111, 110, 65, 110, + 103, 108, 101, 84, 104, 114, + 101, 115, 104, 111, 108, 100, + 0, 69, 102, 102, 101, 99, + 116, 83, 97, 109, 112, 108, + 105, 110, 103, 82, 97, 100, + 105, 117, 115, 78, 101, 97, + 114, 76, 105, 109, 105, 116, + 82, 101, 99, 0, 68, 101, + 112, 116, 104, 80, 114, 101, + 99, 105, 115, 105, 111, 110, + 79, 102, 102, 115, 101, 116, + 77, 111, 100, 0, 78, 101, + 103, 82, 101, 99, 69, 102, + 102, 101, 99, 116, 82, 97, + 100, 105, 117, 115, 0, 76, + 111, 97, 100, 67, 111, 117, + 110, 116, 101, 114, 65, 118, + 103, 68, 105, 118, 0, 65, + 100, 97, 112, 116, 105, 118, + 101, 83, 97, 109, 112, 108, + 101, 67, 111, 117, 110, 116, + 76, 105, 109, 105, 116, 0, + 73, 110, 118, 83, 104, 97, + 114, 112, 110, 101, 115, 115, + 0, 80, 97, 115, 115, 73, + 110, 100, 101, 120, 0, 105, + 110, 116, 0, 171, 0, 0, + 2, 0, 1, 0, 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, + 59, 3, 0, 0, 66, 105, + 108, 97, 116, 101, 114, 97, + 108, 83, 105, 103, 109, 97, + 83, 113, 117, 97, 114, 101, + 100, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 109, 105, 108, 97, 114, + 105, 116, 121, 68, 105, 115, + 116, 97, 110, 99, 101, 83, + 105, 103, 109, 97, 0, 80, + 97, 116, 116, 101, 114, 110, + 82, 111, 116, 83, 99, 97, + 108, 101, 77, 97, 116, 114, + 105, 99, 101, 115, 0, 102, + 108, 111, 97, 116, 52, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 5, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 179, 3, + 0, 0, 78, 111, 114, 109, + 97, 108, 115, 85, 110, 112, + 97, 99, 107, 77, 117, 108, + 0, 78, 111, 114, 109, 97, + 108, 115, 85, 110, 112, 97, + 99, 107, 65, 100, 100, 0, + 68, 101, 116, 97, 105, 108, + 65, 79, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 68, + 117, 109, 109, 121, 48, 0, + 83, 83, 65, 79, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 83, 83, 65, + 79, 66, 117, 102, 102, 101, + 114, 73, 110, 118, 101, 114, + 115, 101, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 68, 101, 112, 116, 104, + 66, 117, 102, 102, 101, 114, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 73, 110, + 118, 101, 114, 115, 101, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 79, 102, 102, + 115, 101, 116, 0, 105, 110, + 116, 50, 0, 171, 171, 171, + 1, 0, 2, 0, 1, 0, + 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, 144, 4, 0, 0, + 80, 101, 114, 80, 97, 115, + 115, 70, 117, 108, 108, 82, + 101, 115, 85, 86, 79, 102, + 102, 115, 101, 116, 0, 79, + 117, 116, 112, 117, 116, 66, + 117, 102, 102, 101, 114, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 79, 117, + 116, 112, 117, 116, 66, 117, + 102, 102, 101, 114, 73, 110, + 118, 101, 114, 115, 101, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 73, 109, + 112, 111, 114, 116, 97, 110, + 99, 101, 77, 97, 112, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 73, 109, + 112, 111, 114, 116, 97, 110, + 99, 101, 77, 97, 112, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 105, 110, 116, 101, 114, + 108, 101, 97, 118, 101, 100, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 68, 101, + 105, 110, 116, 101, 114, 108, + 101, 97, 118, 101, 100, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 73, 110, + 118, 101, 114, 115, 101, 68, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 68, 101, + 105, 110, 116, 101, 114, 108, + 101, 97, 118, 101, 100, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 79, 102, + 102, 115, 101, 116, 0, 68, + 101, 105, 110, 116, 101, 114, + 108, 101, 97, 118, 101, 100, + 68, 101, 112, 116, 104, 66, + 117, 102, 102, 101, 114, 78, + 111, 114, 109, 97, 108, 105, + 115, 101, 100, 79, 102, 102, + 115, 101, 116, 0, 78, 111, + 114, 109, 97, 108, 115, 87, + 111, 114, 108, 100, 84, 111, + 86, 105, 101, 119, 115, 112, + 97, 99, 101, 77, 97, 116, + 114, 105, 120, 0, 102, 108, + 111, 97, 116, 52, 120, 52, + 0, 171, 3, 0, 3, 0, + 4, 0, 4, 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, 242, 5, + 0, 0, 105, 1, 0, 0, + 132, 1, 0, 0, 0, 0, + 0, 0, 168, 1, 0, 0, + 132, 1, 0, 0, 8, 0, + 0, 0, 185, 1, 0, 0, + 132, 1, 0, 0, 16, 0, + 0, 0, 198, 1, 0, 0, + 132, 1, 0, 0, 24, 0, + 0, 0, 211, 1, 0, 0, + 132, 1, 0, 0, 32, 0, + 0, 0, 234, 1, 0, 0, + 132, 1, 0, 0, 40, 0, + 0, 0, 1, 2, 0, 0, + 20, 2, 0, 0, 48, 0, + 0, 0, 56, 2, 0, 0, + 20, 2, 0, 0, 52, 0, + 0, 0, 77, 2, 0, 0, + 20, 2, 0, 0, 56, 0, + 0, 0, 93, 2, 0, 0, + 20, 2, 0, 0, 60, 0, + 0, 0, 111, 2, 0, 0, + 20, 2, 0, 0, 64, 0, + 0, 0, 128, 2, 0, 0, + 20, 2, 0, 0, 68, 0, + 0, 0, 145, 2, 0, 0, + 20, 2, 0, 0, 72, 0, + 0, 0, 173, 2, 0, 0, + 20, 2, 0, 0, 76, 0, + 0, 0, 206, 2, 0, 0, + 20, 2, 0, 0, 80, 0, + 0, 0, 230, 2, 0, 0, + 20, 2, 0, 0, 84, 0, + 0, 0, 249, 2, 0, 0, + 20, 2, 0, 0, 88, 0, + 0, 0, 11, 3, 0, 0, + 20, 2, 0, 0, 92, 0, + 0, 0, 36, 3, 0, 0, + 20, 2, 0, 0, 96, 0, + 0, 0, 49, 3, 0, 0, + 64, 3, 0, 0, 100, 0, + 0, 0, 100, 3, 0, 0, + 20, 2, 0, 0, 104, 0, + 0, 0, 122, 3, 0, 0, + 20, 2, 0, 0, 108, 0, + 0, 0, 155, 3, 0, 0, + 188, 3, 0, 0, 112, 0, + 0, 0, 224, 3, 0, 0, + 20, 2, 0, 0, 192, 0, + 0, 0, 241, 3, 0, 0, + 20, 2, 0, 0, 196, 0, + 0, 0, 2, 4, 0, 0, + 20, 2, 0, 0, 200, 0, + 0, 0, 19, 4, 0, 0, + 20, 2, 0, 0, 204, 0, + 0, 0, 26, 4, 0, 0, + 132, 1, 0, 0, 208, 0, + 0, 0, 47, 4, 0, 0, + 132, 1, 0, 0, 216, 0, + 0, 0, 75, 4, 0, 0, + 132, 1, 0, 0, 224, 0, + 0, 0, 97, 4, 0, 0, + 132, 1, 0, 0, 232, 0, + 0, 0, 126, 4, 0, 0, + 152, 4, 0, 0, 240, 0, + 0, 0, 188, 4, 0, 0, + 132, 1, 0, 0, 248, 0, + 0, 0, 211, 4, 0, 0, + 132, 1, 0, 0, 0, 1, + 0, 0, 234, 4, 0, 0, + 132, 1, 0, 0, 8, 1, + 0, 0, 8, 5, 0, 0, + 132, 1, 0, 0, 16, 1, + 0, 0, 32, 5, 0, 0, + 132, 1, 0, 0, 24, 1, + 0, 0, 63, 5, 0, 0, + 132, 1, 0, 0, 32, 1, + 0, 0, 98, 5, 0, 0, + 132, 1, 0, 0, 40, 1, + 0, 0, 140, 5, 0, 0, + 132, 1, 0, 0, 48, 1, + 0, 0, 171, 5, 0, 0, + 132, 1, 0, 0, 56, 1, + 0, 0, 212, 5, 0, 0, + 252, 5, 0, 0, 64, 1, + 0, 0, 5, 0, 0, 0, + 1, 0, 96, 0, 0, 0, + 42, 0, 32, 6, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 1, + 0, 0, 77, 105, 99, 114, + 111, 115, 111, 102, 116, 32, + 40, 82, 41, 32, 72, 76, + 83, 76, 32, 83, 104, 97, + 100, 101, 114, 32, 67, 111, + 109, 112, 105, 108, 101, 114, + 32, 49, 48, 46, 49, 0, + 73, 83, 71, 78, 8, 0, + 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 79, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 83, 72, 69, 88, + 156, 28, 0, 0, 80, 0, + 5, 0, 39, 7, 0, 0, + 106, 8, 0, 1, 89, 0, + 0, 4, 70, 142, 32, 0, + 0, 0, 0, 0, 17, 0, + 0, 0, 90, 0, 0, 3, + 0, 96, 16, 0, 0, 0, + 0, 0, 88, 24, 0, 4, + 0, 112, 16, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 156, 64, 0, 4, 0, 224, + 17, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 95, 0, + 0, 2, 50, 0, 2, 0, + 104, 0, 0, 2, 20, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 8, 0, + 0, 0, 1, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 41, 0, 0, 9, + 242, 0, 16, 0, 2, 0, + 0, 0, 70, 4, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 30, 0, 0, 8, + 50, 0, 16, 0, 3, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 43, 0, + 0, 5, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 3, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 191, + 0, 0, 0, 191, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 14, 0, + 0, 0, 109, 0, 0, 139, + 194, 0, 0, 128, 67, 85, + 21, 0, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 0, 0, 0, 0, 109, 0, + 0, 140, 1, 4, 0, 128, + 194, 0, 0, 128, 67, 85, + 21, 0, 242, 0, 16, 0, + 5, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 10, 96, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 66, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 5, 0, + 0, 0, 0, 0, 0, 9, + 114, 0, 16, 0, 4, 0, + 0, 0, 38, 9, 16, 128, + 65, 0, 0, 0, 4, 0, + 0, 0, 86, 133, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 114, 0, 16, 0, 4, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 0, 0, + 0, 9, 114, 0, 16, 0, + 5, 0, 0, 0, 54, 13, + 16, 128, 65, 0, 0, 0, + 5, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 114, 0, 16, 0, + 5, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 109, 0, 0, 140, 1, 64, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 242, 0, + 16, 0, 6, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 10, 96, + 16, 0, 0, 0, 0, 0, + 109, 0, 0, 140, 1, 68, + 0, 128, 194, 0, 0, 128, + 67, 85, 21, 0, 242, 0, + 16, 0, 7, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 10, 96, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 3, 0, + 0, 0, 10, 0, 16, 0, + 6, 0, 0, 0, 0, 0, + 0, 9, 226, 0, 16, 0, + 3, 0, 0, 0, 246, 6, + 16, 128, 65, 0, 0, 0, + 6, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 226, 0, 16, 0, + 3, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 14, + 16, 0, 3, 0, 0, 0, + 0, 0, 0, 7, 18, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 7, 0, + 0, 0, 10, 0, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 9, 114, 0, 16, 0, + 6, 0, 0, 0, 182, 12, + 16, 128, 65, 0, 0, 0, + 7, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 114, 0, 16, 0, + 6, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 6, 0, 0, 0, + 50, 0, 0, 12, 242, 0, + 16, 0, 2, 0, 0, 0, + 6, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 8, 229, 60, 30, 8, 229, + 60, 30, 8, 229, 60, 30, + 8, 229, 60, 30, 70, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 10, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 56, 0, + 0, 8, 242, 0, 16, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 50, 0, 0, 11, 50, 0, + 16, 0, 2, 0, 0, 0, + 230, 10, 16, 0, 2, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 50, 0, 0, 11, + 50, 0, 16, 0, 2, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 2, 0, 0, 0, 6, 0, + 16, 0, 6, 0, 0, 0, + 6, 1, 16, 0, 2, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 8, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 191, 0, 0, + 0, 0, 0, 0, 128, 63, + 0, 0, 0, 0, 230, 14, + 16, 0, 7, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 8, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 8, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 82, 0, 16, 0, 9, 0, + 0, 0, 86, 5, 16, 0, + 4, 0, 0, 0, 86, 4, + 16, 0, 8, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 8, 0, 0, 0, + 86, 5, 16, 0, 5, 0, + 0, 0, 166, 11, 16, 0, + 8, 0, 0, 0, 50, 0, + 0, 11, 50, 0, 16, 0, + 10, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 7, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 10, 0, 0, 0, + 166, 10, 16, 0, 4, 0, + 0, 0, 6, 1, 16, 0, + 10, 0, 0, 0, 54, 0, + 0, 5, 194, 0, 16, 0, + 11, 0, 0, 0, 86, 1, + 16, 0, 4, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 9, 0, 0, 0, + 42, 0, 16, 0, 11, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 12, 0, + 0, 0, 42, 0, 16, 0, + 4, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 12, 0, 0, 0, 10, 0, + 16, 0, 6, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 10, 0, 0, 0, + 26, 0, 16, 0, 12, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 38, 9, + 16, 128, 65, 0, 0, 0, + 10, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 2, 0, + 0, 0, 58, 0, 16, 0, + 2, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 9, 0, 0, 0, 246, 15, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 13, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 128, 191, 0, 0, 128, 63, + 0, 0, 128, 191, 230, 14, + 16, 0, 7, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 13, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 13, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 98, 0, 16, 0, 14, 0, + 0, 0, 6, 0, 16, 0, + 4, 0, 0, 0, 6, 1, + 16, 0, 13, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 13, 0, 0, 0, + 6, 0, 16, 0, 5, 0, + 0, 0, 166, 11, 16, 0, + 13, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 14, 0, 0, 0, 58, 0, + 16, 0, 11, 0, 0, 0, + 0, 0, 0, 8, 178, 0, + 16, 0, 4, 0, 0, 0, + 70, 8, 16, 128, 65, 0, + 0, 0, 10, 0, 0, 0, + 70, 8, 16, 0, 14, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 3, 16, 0, + 4, 0, 0, 0, 70, 3, + 16, 0, 4, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 178, 0, 16, 0, 4, 0, + 0, 0, 246, 15, 16, 0, + 2, 0, 0, 0, 70, 12, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 14, 0, 0, 0, + 54, 13, 16, 0, 4, 0, + 0, 0, 150, 4, 16, 0, + 9, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 14, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 3, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 14, 0, + 0, 0, 56, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 10, 215, 35, 61, + 54, 0, 0, 5, 34, 0, + 16, 0, 11, 0, 0, 0, + 26, 0, 16, 0, 5, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 11, 0, + 0, 0, 42, 0, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 15, 0, 0, 0, 166, 10, + 16, 128, 65, 0, 0, 0, + 4, 0, 0, 0, 230, 1, + 16, 0, 11, 0, 0, 0, + 0, 0, 0, 7, 242, 0, + 16, 0, 16, 0, 0, 0, + 230, 14, 16, 0, 15, 0, + 0, 0, 70, 4, 16, 0, + 15, 0, 0, 0, 51, 0, + 0, 9, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 15, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 16, 0, 0, 0, 14, 0, + 0, 7, 242, 0, 16, 0, + 15, 0, 0, 0, 70, 14, + 16, 0, 15, 0, 0, 0, + 246, 15, 16, 0, 2, 0, + 0, 0, 0, 32, 0, 11, + 242, 0, 16, 0, 15, 0, + 0, 0, 70, 14, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 2, 64, 0, 0, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 56, 0, + 0, 7, 242, 0, 16, 0, + 15, 0, 0, 0, 150, 3, + 16, 0, 15, 0, 0, 0, + 70, 14, 16, 0, 15, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 14, 0, + 0, 0, 6, 0, 16, 0, + 15, 0, 0, 0, 70, 2, + 16, 0, 14, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 8, 0, + 0, 0, 26, 0, 16, 0, + 11, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 16, 0, 0, 0, 70, 2, + 16, 0, 8, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 10, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 16, 0, + 0, 0, 70, 2, 16, 0, + 16, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 16, 0, 0, 0, + 246, 15, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 16, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 17, 0, 0, 0, 70, 3, + 16, 0, 4, 0, 0, 0, + 38, 9, 16, 0, 16, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 4, 0, + 0, 0, 54, 13, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 16, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 17, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 4, 0, 0, 0, + 86, 5, 16, 0, 15, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 14, 0, 0, 0, + 50, 0, 0, 13, 242, 0, + 16, 0, 14, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 63, + 0, 0, 0, 64, 0, 0, + 128, 63, 230, 14, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 0, + 14, 0, 0, 0, 70, 132, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 14, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 82, 0, + 16, 0, 17, 0, 0, 0, + 166, 10, 16, 0, 3, 0, + 0, 0, 86, 4, 16, 0, + 14, 0, 0, 0, 56, 0, + 0, 7, 98, 0, 16, 0, + 14, 0, 0, 0, 86, 5, + 16, 0, 6, 0, 0, 0, + 166, 11, 16, 0, 14, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 17, 0, + 0, 0, 10, 0, 16, 0, + 11, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 18, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 10, 0, 0, 0, 150, 4, + 16, 0, 17, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 18, 0, + 0, 0, 70, 2, 16, 0, + 18, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 18, 0, 0, 0, + 246, 15, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 18, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 19, 0, 0, 0, 70, 2, + 16, 0, 16, 0, 0, 0, + 38, 9, 16, 0, 18, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 16, 0, + 0, 0, 38, 9, 16, 0, + 16, 0, 0, 0, 70, 2, + 16, 0, 18, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 19, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 4, 0, 0, 0, + 166, 10, 16, 0, 15, 0, + 0, 0, 70, 2, 16, 0, + 16, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 15, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 0, + 18, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 9, 0, 0, 0, 38, 9, + 16, 0, 18, 0, 0, 0, + 150, 4, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 4, 0, + 0, 0, 246, 15, 16, 0, + 15, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 1, 0, + 0, 0, 246, 15, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 146, 0, 16, 0, + 12, 0, 0, 0, 6, 8, + 16, 0, 5, 0, 0, 0, + 0, 0, 0, 8, 242, 0, + 16, 0, 0, 0, 0, 0, + 86, 5, 16, 128, 65, 0, + 0, 0, 5, 0, 0, 0, + 22, 11, 16, 0, 12, 0, + 0, 0, 0, 0, 0, 7, + 242, 0, 16, 0, 1, 0, + 0, 0, 230, 14, 16, 0, + 0, 0, 0, 0, 70, 4, + 16, 0, 0, 0, 0, 0, + 51, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 18, 0, + 16, 0, 1, 0, 0, 0, + 26, 0, 16, 0, 5, 0, + 0, 0, 1, 64, 0, 0, + 10, 215, 35, 61, 14, 0, + 0, 7, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 6, 0, 16, 0, 1, 0, + 0, 0, 0, 32, 0, 11, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 56, 0, + 0, 7, 242, 0, 16, 0, + 0, 0, 0, 0, 150, 3, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 13, + 242, 0, 16, 0, 1, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 64, 0, 0, + 0, 0, 0, 0, 128, 191, + 0, 0, 128, 63, 230, 14, + 16, 0, 7, 0, 0, 0, + 50, 0, 0, 13, 242, 0, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64, + 0, 0, 128, 63, 0, 0, + 0, 64, 70, 14, 16, 0, + 7, 0, 0, 0, 50, 0, + 0, 11, 242, 0, 16, 0, + 4, 0, 0, 0, 70, 132, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 4, 0, 0, 0, + 230, 142, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 50, 0, 0, 11, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 132, 32, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 230, 142, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 98, 0, 16, 0, 5, 0, + 0, 0, 246, 15, 16, 0, + 12, 0, 0, 0, 6, 1, + 16, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 82, 0, + 16, 0, 1, 0, 0, 0, + 86, 5, 16, 0, 3, 0, + 0, 0, 246, 14, 16, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 5, 0, 0, 0, 58, 0, + 16, 0, 12, 0, 0, 0, + 54, 0, 0, 5, 18, 0, + 16, 0, 13, 0, 0, 0, + 10, 0, 16, 0, 12, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 7, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 8, 0, + 0, 0, 70, 2, 16, 0, + 13, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 5, 0, 0, 0, + 246, 15, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 7, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 9, 0, + 0, 0, 38, 9, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 50, 0, 0, 10, 114, 0, + 16, 0, 9, 0, 0, 0, + 38, 9, 16, 0, 7, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 9, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 13, 0, 0, 0, 38, 9, + 16, 128, 65, 0, 0, 0, + 8, 0, 0, 0, 38, 9, + 16, 0, 10, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 150, 4, 16, 128, + 65, 0, 0, 0, 17, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 13, 0, 0, 0, 70, 2, + 16, 0, 13, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 13, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 13, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 15, 0, 0, 0, + 38, 9, 16, 0, 7, 0, + 0, 0, 150, 4, 16, 0, + 13, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 0, 13, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 7, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 7, 0, + 0, 0, 86, 5, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 12, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 9, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 8, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 8, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 8, 0, + 0, 0, 16, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 68, 0, 0, 5, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 9, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 15, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 38, 9, 16, 0, + 9, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 5, 0, 0, 0, 38, 9, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 15, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 0, 0, + 0, 0, 166, 10, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 7, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 13, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 50, 0, 0, 10, 114, 0, + 16, 0, 5, 0, 0, 0, + 38, 9, 16, 0, 9, 0, + 0, 0, 150, 4, 16, 0, + 13, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 5, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 0, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 0, 0, 0, 0, 246, 15, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 5, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 5, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 146, 0, 16, 0, 12, 0, + 0, 0, 86, 13, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 0, 0, 0, 0, 166, 10, + 16, 128, 65, 0, 0, 0, + 3, 0, 0, 0, 70, 14, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 7, 242, 0, + 16, 0, 5, 0, 0, 0, + 230, 14, 16, 0, 0, 0, + 0, 0, 70, 4, 16, 0, + 0, 0, 0, 0, 51, 0, + 0, 9, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 129, 0, 0, 0, + 5, 0, 0, 0, 56, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 1, 64, 0, 0, 10, 215, + 35, 61, 56, 0, 0, 7, + 98, 0, 16, 0, 3, 0, + 0, 0, 246, 15, 16, 0, + 3, 0, 0, 0, 6, 1, + 16, 0, 4, 0, 0, 0, + 56, 0, 0, 7, 98, 0, + 16, 0, 4, 0, 0, 0, + 166, 10, 16, 0, 6, 0, + 0, 0, 166, 11, 16, 0, + 4, 0, 0, 0, 14, 0, + 0, 7, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 246, 15, 16, 0, 1, 0, + 0, 0, 0, 32, 0, 11, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 102, 102, 166, 63, 56, 0, + 0, 7, 242, 0, 16, 0, + 0, 0, 0, 0, 150, 3, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 12, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 3, 0, 0, 0, 58, 0, + 16, 0, 12, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 3, 0, 0, 0, + 150, 4, 16, 128, 65, 0, + 0, 0, 17, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 17, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 16, 0, + 0, 7, 130, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 68, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 58, 0, 16, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 1, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 10, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 5, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 7, 0, 0, 0, + 150, 4, 16, 0, 1, 0, + 0, 0, 38, 9, 16, 0, + 5, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 7, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 7, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 150, 4, + 16, 128, 65, 0, 0, 0, + 17, 0, 0, 0, 0, 0, + 0, 8, 114, 0, 16, 0, + 10, 0, 0, 0, 38, 9, + 16, 128, 65, 0, 0, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 17, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 68, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 9, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 9, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 12, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 38, 9, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 5, 0, + 0, 0, 38, 9, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 9, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 12, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 5, 0, 0, 0, + 86, 5, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 7, 0, 0, 0, + 16, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 68, 0, + 0, 5, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 3, 0, 0, 0, + 6, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 7, 0, 0, 0, 38, 9, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 0, 9, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 7, 0, + 0, 0, 38, 9, 16, 0, + 9, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 7, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 0, 0, 0, 0, + 166, 10, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 7, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 5, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 1, 0, 0, 0, 38, 9, + 16, 0, 3, 0, 0, 0, + 150, 4, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 9, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 0, 0, + 0, 0, 246, 15, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 194, 0, + 16, 0, 11, 0, 0, 0, + 86, 9, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 8, + 242, 0, 16, 0, 0, 0, + 0, 0, 6, 0, 16, 128, + 65, 0, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 11, 0, 0, 0, 56, 0, + 0, 7, 18, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 0, 6, 0, 0, 0, + 1, 64, 0, 0, 10, 215, + 35, 61, 0, 0, 0, 7, + 242, 0, 16, 0, 3, 0, + 0, 0, 230, 14, 16, 0, + 0, 0, 0, 0, 70, 4, + 16, 0, 0, 0, 0, 0, + 51, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 0, 0, 0, 0, + 70, 14, 16, 128, 129, 0, + 0, 0, 3, 0, 0, 0, + 14, 0, 0, 7, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 6, 0, 16, 0, + 1, 0, 0, 0, 0, 32, + 0, 11, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 102, 102, 166, 63, + 102, 102, 166, 63, 102, 102, + 166, 63, 102, 102, 166, 63, + 56, 0, 0, 7, 242, 0, + 16, 0, 0, 0, 0, 0, + 150, 3, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 10, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 68, 0, 0, 5, + 18, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 1, 0, 0, 0, 6, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 10, 0, + 0, 0, 16, 0, 0, 7, + 130, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 8, 0, 0, 0, 70, 2, + 16, 0, 8, 0, 0, 0, + 68, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 3, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 8, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 5, 0, 0, 0, + 150, 4, 16, 0, 1, 0, + 0, 0, 38, 9, 16, 0, + 3, 0, 0, 0, 50, 0, + 0, 10, 114, 0, 16, 0, + 5, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 5, 0, + 0, 0, 50, 0, 0, 12, + 114, 0, 16, 0, 5, 0, + 0, 0, 6, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 111, 18, 3, 186, 0, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 14, 0, + 0, 0, 42, 0, 16, 0, + 11, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 11, 0, 0, 0, + 0, 0, 0, 8, 114, 0, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 0, 0, 0, 8, + 114, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 128, + 65, 0, 0, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 14, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 68, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 2, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 6, 0, + 0, 0, 38, 9, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 3, 0, 0, 0, + 50, 0, 0, 10, 114, 0, + 16, 0, 3, 0, 0, 0, + 38, 9, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 6, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 3, 0, 0, 0, 86, 5, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 5, 0, 0, 0, 16, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 68, 0, 0, 5, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 4, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 56, 0, 0, 7, + 114, 0, 16, 0, 5, 0, + 0, 0, 70, 2, 16, 0, + 2, 0, 0, 0, 38, 9, + 16, 0, 4, 0, 0, 0, + 50, 0, 0, 10, 114, 0, + 16, 0, 2, 0, 0, 0, + 38, 9, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 70, 2, + 16, 128, 65, 0, 0, 0, + 5, 0, 0, 0, 50, 0, + 0, 9, 114, 0, 16, 0, + 0, 0, 0, 0, 166, 10, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 56, 0, + 0, 7, 114, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 4, 0, + 0, 0, 50, 0, 0, 10, + 114, 0, 16, 0, 1, 0, + 0, 0, 38, 9, 16, 0, + 4, 0, 0, 0, 150, 4, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 128, 65, 0, + 0, 0, 2, 0, 0, 0, + 50, 0, 0, 9, 114, 0, + 16, 0, 0, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 16, 0, 0, 7, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 68, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 56, 0, 0, 7, 114, 0, + 16, 0, 0, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 3, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 148, 0, 0, 0, 238, 0, + 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 193, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 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, 32, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 4, 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, 4, 0, + 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeNormalsFromInputNormals.h b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeNormalsFromInputNormals.h new file mode 100644 index 0000000..cb5639c --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOPrepareNativeNormalsFromInputNormals.h @@ -0,0 +1,833 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_PrepareNormalsFromNormalsInput texture float4 2d t0 1 +// g_PrepareNormalsFromNormalsOutput UAV float4 2darray u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed +dcl_constantbuffer CB0[23], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2d (float,float,float,float) t0 +dcl_uav_typed_texture2darray (float,float,float,float) u0 +dcl_input vThreadID.xy +dcl_temps 3 +dcl_thread_group 8, 8, 1 +ishl r0.xy, vThreadID.xyxx, l(1, 1, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[16].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r0.xyz, r0.xyxx, t0.xyzw, s0, l(0.000000) +mad r0.xyz, r0.xyzx, cb0[12].xxxx, cb0[12].yyyy +dp3 r1.x, r0.xyzx, cb0[20].xyzx +dp3 r1.y, r0.xyzx, cb0[21].xyzx +dp3 r1.z, r0.xyzx, cb0[22].xyzx +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,0,0) +mov r1.w, l(1.000000) +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +imad r0.xyzw, vThreadID.xyxy, l(2, 2, 2, 2), l(1, 0, 0, 1) +itof r0.xyzw, r0.xyzw +add r0.xyzw, r0.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000) +mul r0.xyzw, r0.xyzw, cb0[16].zwzw +sample_l_indexable(texture2d)(float,float,float,float) r1.xyz, r0.xyxx, t0.xyzw, s0, l(0.000000) +sample_l_indexable(texture2d)(float,float,float,float) r0.xyz, r0.zwzz, t0.xyzw, s0, l(0.000000) +mad r0.xyz, r0.xyzx, cb0[12].xxxx, cb0[12].yyyy +mad r1.xyz, r1.xyzx, cb0[12].xxxx, cb0[12].yyyy +dp3 r2.x, r1.xyzx, cb0[20].xyzx +dp3 r2.y, r1.xyzx, cb0[21].xyzx +dp3 r2.z, r1.xyzx, cb0[22].xyzx +mov r1.xy, vThreadID.xyxx +mov r1.zw, l(0,0,1,1) +mov r2.w, l(1.000000) +store_uav_typed u0.xyzw, r1.xyzw, r2.xyzw +dp3 r1.x, r0.xyzx, cb0[20].xyzx +dp3 r1.y, r0.xyzx, cb0[21].xyzx +dp3 r1.z, r0.xyzx, cb0[22].xyzx +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,2,2) +mov r1.w, l(1.000000) +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +imad r0.xy, vThreadID.xyxx, l(2, 2, 0, 0), l(1, 1, 0, 0) +itof r0.xy, r0.xyxx +add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) +mul r0.xy, r0.xyxx, cb0[16].zwzz +sample_l_indexable(texture2d)(float,float,float,float) r0.xyz, r0.xyxx, t0.xyzw, s0, l(0.000000) +mad r0.xyz, r0.xyzx, cb0[12].xxxx, cb0[12].yyyy +dp3 r1.x, r0.xyzx, cb0[20].xyzx +dp3 r1.y, r0.xyzx, cb0[21].xyzx +dp3 r1.z, r0.xyzx, cb0[22].xyzx +mov r0.xy, vThreadID.xyxx +mov r0.zw, l(0,0,3,3) +mov r1.w, l(1.000000) +store_uav_typed u0.xyzw, r0.xyzw, r1.xyzw +ret +// Approximately 49 instruction slots used +#endif + +const BYTE CSPrepareNativeNormalsFromInputNormalsDXIL[] = +{ + 68, 88, 66, 67, 75, 193, + 25, 27, 166, 126, 175, 237, + 218, 88, 197, 105, 104, 87, + 133, 77, 1, 0, 0, 0, + 20, 16, 0, 0, 5, 0, + 0, 0, 52, 0, 0, 0, + 188, 8, 0, 0, 204, 8, + 0, 0, 220, 8, 0, 0, + 120, 15, 0, 0, 82, 68, + 69, 70, 128, 8, 0, 0, + 1, 0, 0, 0, 40, 1, + 0, 0, 4, 0, 0, 0, + 60, 0, 0, 0, 0, 5, + 83, 67, 0, 1, 0, 0, + 88, 8, 0, 0, 82, 68, + 49, 49, 60, 0, 0, 0, + 24, 0, 0, 0, 32, 0, + 0, 0, 40, 0, 0, 0, + 36, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 208, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 13, 0, 0, 0, 241, 0, + 0, 0, 4, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 13, 0, 0, 0, + 19, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 103, 95, 80, 111, + 105, 110, 116, 67, 108, 97, + 109, 112, 83, 97, 109, 112, + 108, 101, 114, 0, 103, 95, + 80, 114, 101, 112, 97, 114, + 101, 78, 111, 114, 109, 97, + 108, 115, 70, 114, 111, 109, + 78, 111, 114, 109, 97, 108, + 115, 73, 110, 112, 117, 116, + 0, 103, 95, 80, 114, 101, + 112, 97, 114, 101, 78, 111, + 114, 109, 97, 108, 115, 70, + 114, 111, 109, 78, 111, 114, + 109, 97, 108, 115, 79, 117, + 116, 112, 117, 116, 0, 83, + 83, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 66, 117, 102, 102, 101, 114, + 0, 171, 19, 1, 0, 0, + 1, 0, 0, 0, 64, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 104, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 52, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 151, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 42, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 87, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 207, 3, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 172, 4, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 14, 6, 0, 0, + 133, 1, 0, 0, 160, 1, + 0, 0, 0, 0, 0, 0, + 196, 1, 0, 0, 160, 1, + 0, 0, 8, 0, 0, 0, + 213, 1, 0, 0, 160, 1, + 0, 0, 16, 0, 0, 0, + 226, 1, 0, 0, 160, 1, + 0, 0, 24, 0, 0, 0, + 239, 1, 0, 0, 160, 1, + 0, 0, 32, 0, 0, 0, + 6, 2, 0, 0, 160, 1, + 0, 0, 40, 0, 0, 0, + 29, 2, 0, 0, 48, 2, + 0, 0, 48, 0, 0, 0, + 84, 2, 0, 0, 48, 2, + 0, 0, 52, 0, 0, 0, + 105, 2, 0, 0, 48, 2, + 0, 0, 56, 0, 0, 0, + 121, 2, 0, 0, 48, 2, + 0, 0, 60, 0, 0, 0, + 139, 2, 0, 0, 48, 2, + 0, 0, 64, 0, 0, 0, + 156, 2, 0, 0, 48, 2, + 0, 0, 68, 0, 0, 0, + 173, 2, 0, 0, 48, 2, + 0, 0, 72, 0, 0, 0, + 201, 2, 0, 0, 48, 2, + 0, 0, 76, 0, 0, 0, + 234, 2, 0, 0, 48, 2, + 0, 0, 80, 0, 0, 0, + 2, 3, 0, 0, 48, 2, + 0, 0, 84, 0, 0, 0, + 21, 3, 0, 0, 48, 2, + 0, 0, 88, 0, 0, 0, + 39, 3, 0, 0, 48, 2, + 0, 0, 92, 0, 0, 0, + 64, 3, 0, 0, 48, 2, + 0, 0, 96, 0, 0, 0, + 77, 3, 0, 0, 92, 3, + 0, 0, 100, 0, 0, 0, + 128, 3, 0, 0, 48, 2, + 0, 0, 104, 0, 0, 0, + 150, 3, 0, 0, 48, 2, + 0, 0, 108, 0, 0, 0, + 183, 3, 0, 0, 216, 3, + 0, 0, 112, 0, 0, 0, + 252, 3, 0, 0, 48, 2, + 0, 0, 192, 0, 0, 0, + 13, 4, 0, 0, 48, 2, + 0, 0, 196, 0, 0, 0, + 30, 4, 0, 0, 48, 2, + 0, 0, 200, 0, 0, 0, + 47, 4, 0, 0, 48, 2, + 0, 0, 204, 0, 0, 0, + 54, 4, 0, 0, 160, 1, + 0, 0, 208, 0, 0, 0, + 75, 4, 0, 0, 160, 1, + 0, 0, 216, 0, 0, 0, + 103, 4, 0, 0, 160, 1, + 0, 0, 224, 0, 0, 0, + 125, 4, 0, 0, 160, 1, + 0, 0, 232, 0, 0, 0, + 154, 4, 0, 0, 180, 4, + 0, 0, 240, 0, 0, 0, + 216, 4, 0, 0, 160, 1, + 0, 0, 248, 0, 0, 0, + 239, 4, 0, 0, 160, 1, + 0, 0, 0, 1, 0, 0, + 6, 5, 0, 0, 160, 1, + 0, 0, 8, 1, 0, 0, + 36, 5, 0, 0, 160, 1, + 0, 0, 16, 1, 0, 0, + 60, 5, 0, 0, 160, 1, + 0, 0, 24, 1, 0, 0, + 91, 5, 0, 0, 160, 1, + 0, 0, 32, 1, 0, 0, + 126, 5, 0, 0, 160, 1, + 0, 0, 40, 1, 0, 0, + 168, 5, 0, 0, 160, 1, + 0, 0, 48, 1, 0, 0, + 199, 5, 0, 0, 160, 1, + 0, 0, 56, 1, 0, 0, + 240, 5, 0, 0, 24, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 60, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 118, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 78, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 78, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 148, 6, + 0, 0, 80, 0, 5, 0, + 165, 1, 0, 0, 106, 8, + 0, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 23, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 0, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 156, 64, + 0, 4, 0, 224, 17, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 3, 0, 0, 0, + 155, 0, 0, 4, 8, 0, + 0, 0, 8, 0, 0, 0, + 1, 0, 0, 0, 41, 0, + 0, 9, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 43, 0, + 0, 5, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 72, 0, 0, 141, 194, 0, + 0, 128, 67, 85, 21, 0, + 114, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 50, 0, + 0, 11, 114, 0, 16, 0, + 0, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 86, 133, 32, 0, 0, 0, + 0, 0, 12, 0, 0, 0, + 16, 0, 0, 8, 18, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 20, 0, + 0, 0, 16, 0, 0, 8, + 34, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 21, 0, 0, 0, 16, 0, + 0, 8, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 22, 0, 0, 0, + 54, 0, 0, 4, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 2, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 164, 0, 0, 7, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 4, 2, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 43, 0, 0, 5, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 10, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 63, 56, 0, 0, 8, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 230, 142, + 32, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 72, 0, + 0, 141, 194, 0, 0, 128, + 67, 85, 21, 0, 114, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 0, 0, 0, 0, 230, 10, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 86, 133, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 50, 0, 0, 11, + 114, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 16, 0, + 0, 8, 18, 0, 16, 0, + 2, 0, 0, 0, 70, 2, + 16, 0, 1, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 16, 0, 0, 8, 34, 0, + 16, 0, 2, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 21, 0, + 0, 0, 16, 0, 0, 8, + 66, 0, 16, 0, 2, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 16, 0, + 0, 8, 18, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 16, 0, 0, 8, 34, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 21, 0, + 0, 0, 16, 0, 0, 8, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 54, 0, + 0, 4, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 130, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 164, 0, 0, 7, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 35, 0, + 0, 14, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 2, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 43, 0, 0, 5, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 10, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 8, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 72, 0, 0, 141, + 194, 0, 0, 128, 67, 85, + 21, 0, 114, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 50, 0, 0, 11, 114, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 6, 128, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 86, 133, 32, 0, + 0, 0, 0, 0, 12, 0, + 0, 0, 16, 0, 0, 8, + 18, 0, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 20, 0, 0, 0, 16, 0, + 0, 8, 34, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 0, 0, 0, 0, + 70, 130, 32, 0, 0, 0, + 0, 0, 21, 0, 0, 0, + 16, 0, 0, 8, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 0, 0, + 0, 0, 70, 130, 32, 0, + 0, 0, 0, 0, 22, 0, + 0, 0, 54, 0, 0, 4, + 50, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 2, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 3, 0, + 0, 0, 54, 0, 0, 5, + 130, 0, 16, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 164, 0, + 0, 7, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 148, 0, + 0, 0, 49, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 22, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 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, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 12, 0, 0, 0, 0, 0, + 0, 0, 3, 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, 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOUpscaleBilateral5x5.h b/ffx-cacao/src/PrecompiledShaders/CACAOUpscaleBilateral5x5.h new file mode 100644 index 0000000..0fcc2ad --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOUpscaleBilateral5x5.h @@ -0,0 +1,1343 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_BilateralUpscaleInput texture float2 2darray t0 1 +// g_BilateralUpscaleDepth texture float 2d t1 1 +// g_BilateralUpscaleDownscaledDepth texture float 2darray t3 1 +// g_BilateralUpscaleOutput UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[20], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2darray (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2darray (float,float,float,float) t3 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_input vThreadID.xy +dcl_temps 14 +dcl_tgsm_structured g0, 64, 12 +dcl_thread_group 8, 4, 1 +imad r0.x, vThreadIDInGroup.y, l(8), vThreadIDInGroup.x +imul null, r0.x, r0.x, l(3) +udiv r0.x, r1.x, r0.x, l(12) +ishl r0.yz, vThreadGroupID.xxyx, l(0, 3, 2, 0) +mov r1.y, r0.x +iadd r0.yz, r0.yyzy, r1.xxyx +iadd r2.xy, r0.yzyy, l(-2, -2, 0, 0) +bfi r0.y, l(1), l(1), r2.y, l(0) +ftou r3.xy, cb0[19].xyxx +ishl r0.x, r0.x, l(3) +mov r3.z, l(0) +mov r4.w, l(0) +mov r2.z, r2.x +mov r0.z, l(0) +loop + ige r0.w, r0.z, l(3) + breakc_nz r0.w + ushr r5.xy, r2.zyzz, l(1, 1, 0, 0) + bfi r5.z, l(1), l(0), r2.z, r0.y + iadd r4.xyz, r3.xyzx, r5.xyzx + iadd r2.z, r2.z, l(1) + ld_indexable(texture2darray)(float,float,float,float) r0.w, r4.xyzw, t3.yzwx + utof r1.yz, r5.xxyx + add r1.yz, r1.yyzy, l(0.000000, 0.500000, 0.500000, 0.000000) + mul r4.xy, r1.yzyy, cb0[13].zwzz + utof r4.z, r5.z + sample_l_indexable(texture2darray)(float,float,float,float) r1.y, r4.xyzx, t0.yxzw, s0, l(0.000000) + f32tof16 r0.w, r0.w + imad r4.x, r0.w, l(0x00010000), r0.w + f32tof16 r0.w, r1.y + imad r4.y, r0.w, l(0x00010000), r0.w + iadd r0.w, r0.z, r1.x + store_structured g0.xy, r0.w, r0.x, r4.xyxx + iadd r0.z, r0.z, l(1) +endloop +sync_g_t +ishl r0.xyzw, vThreadID.xyyy, l(1, 1, 1, 1) +iadd r1.xy, r0.xwxx, cb0[15].xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.z, r1.xyzw, t1.yzxw +add r1.z, -r1.z, cb0[0].y +div r2.x, cb0[0].x, r1.z +iadd r3.xyzw, r1.xyxy, l(0, 1, 1, 0) +mov r4.xy, r3.zwzz +mov r4.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.z, r4.xyzw, t1.yzxw +add r1.z, -r1.z, cb0[0].y +div r2.y, cb0[0].x, r1.z +mov r3.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.z, r3.xyzw, t1.yzxw +add r1.z, -r1.z, cb0[0].y +div r3.x, cb0[0].x, r1.z +iadd r1.xy, r1.xyxx, l(1, 1, 0, 0) +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.x, r1.xyzw, t1.xyzw +add r1.x, -r1.x, cb0[0].y +div r3.y, cb0[0].x, r1.x +iadd r1.xy, vThreadIDInGroup.xyxx, l(2, 2, 0, 0) +div r1.zw, l(1.000000, 1.000000, 1.000000, 1.000000), cb0[6].wwwz +mov r4.xyzw {min16f}, l(0,0,0,0) {def32 as min16f} +mov r5.xyzw {min16f}, l(0,0,0,0) {def32 as min16f} +mov r6.x, l(-2) +loop + ilt r2.z, l(2), r6.x + breakc_nz r2.z + itof r7.x {min16f}, r6.x + add r7.xy {min16f}, r7.xxxx {min16f}, l(0.000000, 0.500000, 0.000000, 0.000000) {def32 as min16f} + mul r7.xy {min16f}, r7.xyxx {min16f}, r7.xyxx {min16f} + mov r7.zw {min16f}, r4.xxxy {min16f} + mov r8.xy {min16f}, r4.zwzz {min16f} + mov r8.zw {min16f}, r5.xxxy {min16f} + mov r9.xy {min16f}, r5.zwzz {min16f} + mov r6.y, l(-2) + loop + ilt r2.z, l(2), r6.y + breakc_nz r2.z + iadd r2.zw, r1.xxxy, r6.xxxy + ishl r2.w, r2.w, l(3) + ld_structured r2.zw, r2.z, r2.w, g0.xxxy + itof r9.z {min16f}, r6.y + add r9.w {min16f}, r9.z {min16f}, l(0.500000) {def32 as min16f} + mad r10.xy {min16f}, r9.zzzz {min16f}, r9.zzzz {min16f}, r7.xyxx {min16f} + mad r9.zw {min16f}, r9.wwww {min16f}, r9.wwww {min16f}, r7.xxxy {min16f} + mul r10.xy {min16f}, r1.wwww {def32 as min16f}, -r10.xyxx {min16f} + mul r10.xy {min16f}, r10.xyxx {min16f}, l(1.442695, 1.442695, 0.000000, 0.000000) {def32 as min16f} + exp r10.xy {min16f}, r10.xyxx {min16f} + mul r9.zw {min16f}, r1.wwww {def32 as min16f}, -r9.zzzw {min16f} + mul r9.zw {min16f}, r9.zzzw {min16f}, l(0.000000, 0.000000, 1.442695, 1.442695) {def32 as min16f} + exp r9.zw {min16f}, r9.zzzw {min16f} + and r3.zw, r2.zzzw, l(0, 0, 0x0000ffff, 0x0000ffff) + ushr r2.zw, r2.zzzw, l(0, 0, 16, 16) + f16tof32 r11.xz, r3.zzwz + f16tof32 r11.yw, r2.zzzw + add r10.zw {min16f}, r2.xxxy {def32 as min16f}, -r11.xxxy {def32 as min16f} + add r12.xy {min16f}, r3.xyxx {def32 as min16f}, -r11.xyxx {def32 as min16f} + mul r10.zw {min16f}, r10.zzzw {min16f}, r10.zzzw {min16f} + mul r12.xy {min16f}, r12.xyxx {min16f}, r12.xyxx {min16f} + mul r10.zw {min16f}, r1.zzzz {def32 as min16f}, -r10.zzzw {min16f} + mul r10.zw {min16f}, r10.zzzw {min16f}, l(0.000000, 0.000000, 1.442695, 1.442695) {def32 as min16f} + exp r10.zw {min16f}, r10.zzzw {min16f} + mul r12.xy {min16f}, r1.zzzz {def32 as min16f}, -r12.xyxx {min16f} + mul r12.xy {min16f}, r12.xyxx {min16f}, l(1.442695, 1.442695, 0.000000, 0.000000) {def32 as min16f} + exp r12.xy {min16f}, r12.xyxx {min16f} + mul r12.zw {min16f}, r10.zzzw {min16f}, r10.xxxy {min16f} + mul r13.xy {min16f}, r9.zwzz {min16f}, r12.xyxx {min16f} + mad r7.zw {min16f}, r11.zzzw {def32 as min16f}, r12.zzzw {min16f}, r7.zzzw {min16f} + mad r8.xy {min16f}, r11.zwzz {def32 as min16f}, r13.xyxx {min16f}, r8.xyxx {min16f} + mad r8.zw {min16f}, r10.xxxy {min16f}, r10.zzzw {min16f}, r8.zzzw {min16f} + mad r9.xy {min16f}, r9.zwzz {min16f}, r12.xyxx {min16f}, r9.xyxx {min16f} + iadd r6.y, r6.y, l(1) + endloop + mov r4.xy {min16f}, r7.zwzz {min16f} + mov r4.zw {min16f}, r8.xxxy {min16f} + mov r5.xy {min16f}, r8.zwzz {min16f} + mov r5.zw {min16f}, r9.xxxy {min16f} + iadd r6.x, r6.x, l(1) +endloop +div r1.xyzw {min16f}, r4.xyzw {min16f}, r5.xyzw {min16f} +store_uav_typed u0.xyzw, r0.xyzw, r1.xxxx {min16f} +imad r2.xyzw, vThreadID.xyxy, l(2, 2, 2, 2), l(1, 0, 0, 1) +store_uav_typed u0.xyzw, r2.xyyy, r1.yyyy {min16f} +store_uav_typed u0.xyzw, r2.zwww, r1.zzzz {min16f} +imad r2.xyzw, vThreadID.xyyy, l(2, 2, 2, 2), l(1, 1, 1, 1) +store_uav_typed u0.xyzw, r2.xyzw, r1.wwww {min16f} +ret +// Approximately 125 instruction slots used +#endif + +const BYTE CSUpscaleBilateral5x5DXIL[] = +{ + 68, 88, 66, 67, 215, 48, + 222, 89, 205, 36, 69, 13, + 151, 168, 197, 142, 245, 209, + 158, 23, 1, 0, 0, 0, + 252, 25, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 40, 9, 0, 0, 56, 9, + 0, 0, 72, 9, 0, 0, + 80, 25, 0, 0, 96, 25, + 0, 0, 82, 68, 69, 70, + 232, 8, 0, 0, 1, 0, + 0, 0, 144, 1, 0, 0, + 6, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 192, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 252, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 16, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 40, 1, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 1, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 64, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 3, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 98, 1, 0, 0, 4, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 123, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 103, 95, + 80, 111, 105, 110, 116, 67, + 108, 97, 109, 112, 83, 97, + 109, 112, 108, 101, 114, 0, + 103, 95, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 85, + 112, 115, 99, 97, 108, 101, + 73, 110, 112, 117, 116, 0, + 103, 95, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 85, + 112, 115, 99, 97, 108, 101, + 68, 101, 112, 116, 104, 0, + 103, 95, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 85, + 112, 115, 99, 97, 108, 101, + 68, 111, 119, 110, 115, 99, + 97, 108, 101, 100, 68, 101, + 112, 116, 104, 0, 103, 95, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 85, 112, 115, + 99, 97, 108, 101, 79, 117, + 116, 112, 117, 116, 0, 83, + 83, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 66, 117, 102, 102, 101, 114, + 0, 171, 123, 1, 0, 0, + 1, 0, 0, 0, 168, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 208, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 156, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 255, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 146, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 191, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 55, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 20, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 118, 6, 0, 0, + 237, 1, 0, 0, 8, 2, + 0, 0, 0, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 8, 0, 0, 0, + 61, 2, 0, 0, 8, 2, + 0, 0, 16, 0, 0, 0, + 74, 2, 0, 0, 8, 2, + 0, 0, 24, 0, 0, 0, + 87, 2, 0, 0, 8, 2, + 0, 0, 32, 0, 0, 0, + 110, 2, 0, 0, 8, 2, + 0, 0, 40, 0, 0, 0, + 133, 2, 0, 0, 152, 2, + 0, 0, 48, 0, 0, 0, + 188, 2, 0, 0, 152, 2, + 0, 0, 52, 0, 0, 0, + 209, 2, 0, 0, 152, 2, + 0, 0, 56, 0, 0, 0, + 225, 2, 0, 0, 152, 2, + 0, 0, 60, 0, 0, 0, + 243, 2, 0, 0, 152, 2, + 0, 0, 64, 0, 0, 0, + 4, 3, 0, 0, 152, 2, + 0, 0, 68, 0, 0, 0, + 21, 3, 0, 0, 152, 2, + 0, 0, 72, 0, 0, 0, + 49, 3, 0, 0, 152, 2, + 0, 0, 76, 0, 0, 0, + 82, 3, 0, 0, 152, 2, + 0, 0, 80, 0, 0, 0, + 106, 3, 0, 0, 152, 2, + 0, 0, 84, 0, 0, 0, + 125, 3, 0, 0, 152, 2, + 0, 0, 88, 0, 0, 0, + 143, 3, 0, 0, 152, 2, + 0, 0, 92, 0, 0, 0, + 168, 3, 0, 0, 152, 2, + 0, 0, 96, 0, 0, 0, + 181, 3, 0, 0, 196, 3, + 0, 0, 100, 0, 0, 0, + 232, 3, 0, 0, 152, 2, + 0, 0, 104, 0, 0, 0, + 254, 3, 0, 0, 152, 2, + 0, 0, 108, 0, 0, 0, + 31, 4, 0, 0, 64, 4, + 0, 0, 112, 0, 0, 0, + 100, 4, 0, 0, 152, 2, + 0, 0, 192, 0, 0, 0, + 117, 4, 0, 0, 152, 2, + 0, 0, 196, 0, 0, 0, + 134, 4, 0, 0, 152, 2, + 0, 0, 200, 0, 0, 0, + 151, 4, 0, 0, 152, 2, + 0, 0, 204, 0, 0, 0, + 158, 4, 0, 0, 8, 2, + 0, 0, 208, 0, 0, 0, + 179, 4, 0, 0, 8, 2, + 0, 0, 216, 0, 0, 0, + 207, 4, 0, 0, 8, 2, + 0, 0, 224, 0, 0, 0, + 229, 4, 0, 0, 8, 2, + 0, 0, 232, 0, 0, 0, + 2, 5, 0, 0, 28, 5, + 0, 0, 240, 0, 0, 0, + 64, 5, 0, 0, 8, 2, + 0, 0, 248, 0, 0, 0, + 87, 5, 0, 0, 8, 2, + 0, 0, 0, 1, 0, 0, + 110, 5, 0, 0, 8, 2, + 0, 0, 8, 1, 0, 0, + 140, 5, 0, 0, 8, 2, + 0, 0, 16, 1, 0, 0, + 164, 5, 0, 0, 8, 2, + 0, 0, 24, 1, 0, 0, + 195, 5, 0, 0, 8, 2, + 0, 0, 32, 1, 0, 0, + 230, 5, 0, 0, 8, 2, + 0, 0, 40, 1, 0, 0, + 16, 6, 0, 0, 8, 2, + 0, 0, 48, 1, 0, 0, + 47, 6, 0, 0, 8, 2, + 0, 0, 56, 1, 0, 0, + 88, 6, 0, 0, 128, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 164, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 222, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 0, 16, + 0, 0, 80, 0, 5, 0, + 0, 4, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 0, 0, 0, 0, + 88, 64, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 1, 0, 0, 0, 85, 85, + 0, 0, 88, 64, 0, 4, + 0, 112, 16, 0, 3, 0, + 0, 0, 85, 85, 0, 0, + 156, 24, 0, 4, 0, 224, + 17, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 95, 0, + 0, 2, 50, 16, 2, 0, + 95, 0, 0, 2, 50, 32, + 2, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 14, 0, 0, 0, + 160, 0, 0, 5, 0, 240, + 17, 0, 0, 0, 0, 0, + 64, 0, 0, 0, 12, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 35, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 32, 2, 0, 1, 64, + 0, 0, 8, 0, 0, 0, + 10, 32, 2, 0, 38, 0, + 0, 8, 0, 208, 0, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 78, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 18, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 12, 0, 0, 0, + 41, 0, 0, 9, 98, 0, + 16, 0, 0, 0, 0, 0, + 6, 17, 2, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 98, 0, 16, 0, 0, 0, + 0, 0, 86, 6, 16, 0, + 0, 0, 0, 0, 6, 1, + 16, 0, 1, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 2, 0, 0, 0, + 150, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 254, 255, 255, 255, 254, 255, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 140, 0, + 0, 11, 34, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 26, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 28, 0, 0, 6, 50, 0, + 16, 0, 3, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 19, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 3, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 4, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 66, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 48, 0, 0, 1, 33, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 3, 0, 4, 3, + 58, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 5, 0, + 0, 0, 102, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 140, 0, 0, 11, 66, 0, + 16, 0, 5, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 114, 0, 16, 0, 4, 0, + 0, 0, 70, 2, 16, 0, + 3, 0, 0, 0, 70, 2, + 16, 0, 5, 0, 0, 0, + 30, 0, 0, 7, 66, 0, + 16, 0, 2, 0, 0, 0, + 42, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 1, 0, 0, 0, 45, 0, + 0, 137, 2, 2, 0, 128, + 67, 85, 21, 0, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 150, 115, 16, 0, + 3, 0, 0, 0, 86, 0, + 0, 5, 98, 0, 16, 0, + 1, 0, 0, 0, 6, 1, + 16, 0, 5, 0, 0, 0, + 0, 0, 0, 10, 98, 0, + 16, 0, 1, 0, 0, 0, + 86, 6, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 56, 0, + 0, 8, 50, 0, 16, 0, + 4, 0, 0, 0, 150, 5, + 16, 0, 1, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 13, 0, 0, 0, + 86, 0, 0, 5, 66, 0, + 16, 0, 4, 0, 0, 0, + 42, 0, 16, 0, 5, 0, + 0, 0, 72, 0, 0, 141, + 2, 2, 0, 128, 67, 85, + 21, 0, 34, 0, 16, 0, + 1, 0, 0, 0, 70, 2, + 16, 0, 4, 0, 0, 0, + 22, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 130, 0, 0, 5, 130, 0, + 16, 0, 0, 0, 0, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 35, 0, 0, 9, + 18, 0, 16, 0, 4, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 1, 0, + 58, 0, 16, 0, 0, 0, + 0, 0, 130, 0, 0, 5, + 130, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 0, + 1, 0, 0, 0, 35, 0, + 0, 9, 34, 0, 16, 0, + 4, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 30, 0, + 0, 7, 130, 0, 16, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 168, 0, 0, 9, + 50, 240, 17, 0, 0, 0, + 0, 0, 58, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 4, 0, + 0, 0, 30, 0, 0, 7, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 22, 0, 0, 1, 190, 24, + 0, 1, 41, 0, 0, 9, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 5, 2, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 30, 0, 0, 8, + 50, 0, 16, 0, 1, 0, + 0, 0, 198, 0, 16, 0, + 0, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 150, 124, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 1, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 18, 0, + 16, 0, 2, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 30, 0, 0, 10, + 242, 0, 16, 0, 3, 0, + 0, 0, 70, 4, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 50, 0, + 16, 0, 4, 0, 0, 0, + 230, 10, 16, 0, 3, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 4, 0, + 0, 0, 150, 124, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 34, 0, 16, 0, + 2, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 3, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 45, 0, 0, 137, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 3, 0, 0, 0, + 150, 124, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 18, 0, 16, 0, 3, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 30, 0, + 0, 10, 50, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 194, 0, 0, 128, + 67, 85, 21, 0, 18, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 9, 18, 0, 16, 0, + 1, 0, 0, 0, 10, 0, + 16, 128, 65, 0, 0, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 34, 0, 16, 0, + 3, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 1, 0, 0, 0, + 30, 0, 0, 9, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 32, 2, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 11, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 0, 0, + 128, 63, 246, 139, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 54, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 9, + 242, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 6, 0, + 0, 0, 1, 64, 0, 0, + 254, 255, 255, 255, 48, 0, + 0, 1, 34, 0, 0, 7, + 66, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 10, 0, + 16, 0, 6, 0, 0, 0, + 3, 0, 4, 3, 42, 0, + 16, 0, 2, 0, 0, 0, + 43, 0, 0, 6, 18, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 10, 0, + 16, 0, 6, 0, 0, 0, + 0, 0, 0, 12, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 6, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 56, 0, 0, 10, 50, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 54, 0, + 0, 7, 194, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 6, 4, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 54, 0, 0, 7, + 50, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 230, 10, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 54, 0, 0, 7, 194, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 6, 4, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 230, 10, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 5, + 34, 0, 16, 0, 6, 0, + 0, 0, 1, 64, 0, 0, + 254, 255, 255, 255, 48, 0, + 0, 1, 34, 0, 0, 7, + 66, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 2, 0, 0, 0, 26, 0, + 16, 0, 6, 0, 0, 0, + 3, 0, 4, 3, 42, 0, + 16, 0, 2, 0, 0, 0, + 30, 0, 0, 7, 194, 0, + 16, 0, 2, 0, 0, 0, + 6, 4, 16, 0, 1, 0, + 0, 0, 6, 4, 16, 0, + 6, 0, 0, 0, 41, 0, + 0, 7, 130, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 167, 0, 0, 9, + 194, 0, 16, 0, 2, 0, + 0, 0, 42, 0, 16, 0, + 2, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 6, 244, 17, 0, 0, 0, + 0, 0, 43, 0, 0, 6, + 66, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 26, 0, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 9, + 130, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 42, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 63, 50, 0, 0, 13, + 50, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 10, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 166, 10, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 50, 0, 0, 13, 194, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 246, 15, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 246, 15, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 6, 4, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 56, 0, + 0, 9, 50, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 128, 65, 64, 0, 0, + 10, 0, 0, 0, 56, 0, + 0, 12, 50, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 2, 64, 0, 0, + 59, 170, 184, 63, 59, 170, + 184, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 56, 0, 0, 9, + 194, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 246, 15, 16, 0, 1, 0, + 0, 0, 166, 14, 16, 128, + 65, 64, 0, 0, 9, 0, + 0, 0, 56, 0, 0, 12, + 194, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 59, 170, 184, 63, 59, 170, + 184, 63, 25, 0, 0, 7, + 194, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 1, 0, 0, 10, 194, 0, + 16, 0, 3, 0, 0, 0, + 166, 14, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 0, 0, + 255, 255, 0, 0, 85, 0, + 0, 10, 194, 0, 16, 0, + 2, 0, 0, 0, 166, 14, + 16, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 131, 0, 0, 5, + 82, 0, 16, 0, 11, 0, + 0, 0, 166, 11, 16, 0, + 3, 0, 0, 0, 131, 0, + 0, 5, 162, 0, 16, 0, + 11, 0, 0, 0, 166, 14, + 16, 0, 2, 0, 0, 0, + 0, 0, 0, 9, 194, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 6, 4, + 16, 0, 2, 0, 0, 0, + 6, 4, 16, 128, 65, 0, + 0, 0, 11, 0, 0, 0, + 0, 0, 0, 9, 50, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 70, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 128, 65, 0, + 0, 0, 11, 0, 0, 0, + 56, 0, 0, 10, 194, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 166, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 166, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 56, 0, + 0, 10, 50, 0, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 56, 0, 0, 9, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 10, 16, 0, 1, 0, + 0, 0, 166, 14, 16, 128, + 65, 64, 0, 0, 10, 0, + 0, 0, 56, 0, 0, 12, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 59, 170, 184, 63, 59, 170, + 184, 63, 25, 0, 0, 7, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 56, 0, 0, 9, 50, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 166, 10, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 128, 65, 64, + 0, 0, 12, 0, 0, 0, + 56, 0, 0, 12, 50, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 2, 64, + 0, 0, 59, 170, 184, 63, + 59, 170, 184, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 25, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 56, 0, + 0, 10, 194, 0, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 6, 4, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 56, 0, 0, 10, + 50, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 230, 10, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 50, 0, 0, 12, 194, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 166, 14, + 16, 0, 11, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 50, 0, 0, 12, 50, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 230, 10, + 16, 0, 11, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 13, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 50, 0, 0, 13, 194, 0, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 6, 4, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 166, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 166, 14, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 50, 0, + 0, 13, 50, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 230, 10, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 30, 0, 0, 7, + 34, 0, 16, 0, 6, 0, + 0, 0, 26, 0, 16, 0, + 6, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 22, 0, 0, 1, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 230, 10, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 54, 0, 0, 7, + 194, 0, 16, 128, 1, 64, + 0, 0, 4, 0, 0, 0, + 6, 4, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 230, 10, + 16, 128, 1, 64, 0, 0, + 8, 0, 0, 0, 54, 0, + 0, 7, 194, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 6, 4, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 30, 0, 0, 7, + 18, 0, 16, 0, 6, 0, + 0, 0, 10, 0, 16, 0, + 6, 0, 0, 0, 1, 64, + 0, 0, 1, 0, 0, 0, + 22, 0, 0, 1, 14, 0, + 0, 10, 242, 0, 16, 128, + 1, 64, 0, 0, 1, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 70, 14, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 164, 0, 0, 8, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 6, 0, + 16, 128, 1, 64, 0, 0, + 1, 0, 0, 0, 35, 0, + 0, 14, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 4, + 2, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 164, 0, 0, 8, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 5, 16, 0, 2, 0, + 0, 0, 86, 5, 16, 128, + 1, 64, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 8, + 242, 224, 17, 0, 0, 0, + 0, 0, 230, 15, 16, 0, + 2, 0, 0, 0, 166, 10, + 16, 128, 1, 64, 0, 0, + 1, 0, 0, 0, 35, 0, + 0, 14, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 5, + 2, 0, 2, 64, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 164, 0, 0, 8, 242, 224, + 17, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 246, 15, 16, 128, + 1, 64, 0, 0, 1, 0, + 0, 0, 62, 0, 0, 1, + 83, 70, 73, 48, 8, 0, + 0, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 83, 84, + 65, 84, 148, 0, 0, 0, + 125, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 39, 0, + 0, 0, 26, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 3, 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, + 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 0, + 5, 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, 1, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/PrecompiledShaders/CACAOUpscaleBilateral5x5Half.h b/ffx-cacao/src/PrecompiledShaders/CACAOUpscaleBilateral5x5Half.h new file mode 100644 index 0000000..90878ee --- /dev/null +++ b/ffx-cacao/src/PrecompiledShaders/CACAOUpscaleBilateral5x5Half.h @@ -0,0 +1,1338 @@ +#if 0 +// +// Generated by Microsoft (R) HLSL Shader Compiler 10.1 +// +// +// Note: shader requires additional functionality: +// Minimum-precision data types +// +// +// Buffer Definitions: +// +// cbuffer SSAOConstantsBuffer +// { +// +// struct CACAOConstants +// { +// +// float2 DepthUnpackConsts; // Offset: 0 +// float2 CameraTanHalfFOV; // Offset: 8 +// float2 NDCToViewMul; // Offset: 16 +// float2 NDCToViewAdd; // Offset: 24 +// float2 DepthBufferUVToViewMul; // Offset: 32 +// float2 DepthBufferUVToViewAdd; // Offset: 40 +// float EffectRadius; // Offset: 48 +// float EffectShadowStrength; // Offset: 52 +// float EffectShadowPow; // Offset: 56 +// float EffectShadowClamp; // Offset: 60 +// float EffectFadeOutMul; // Offset: 64 +// float EffectFadeOutAdd; // Offset: 68 +// float EffectHorizonAngleThreshold;// Offset: 72 +// float EffectSamplingRadiusNearLimitRec;// Offset: 76 +// float DepthPrecisionOffsetMod; // Offset: 80 +// float NegRecEffectRadius; // Offset: 84 +// float LoadCounterAvgDiv; // Offset: 88 +// float AdaptiveSampleCountLimit;// Offset: 92 +// float InvSharpness; // Offset: 96 +// int PassIndex; // Offset: 100 +// float BilateralSigmaSquared; // Offset: 104 +// float BilateralSimilarityDistanceSigma;// Offset: 108 +// float4 PatternRotScaleMatrices[5];// Offset: 112 +// float NormalsUnpackMul; // Offset: 192 +// float NormalsUnpackAdd; // Offset: 196 +// float DetailAOStrength; // Offset: 200 +// float Dummy0; // Offset: 204 +// float2 SSAOBufferDimensions; // Offset: 208 +// float2 SSAOBufferInverseDimensions;// Offset: 216 +// float2 DepthBufferDimensions; // Offset: 224 +// float2 DepthBufferInverseDimensions;// Offset: 232 +// int2 DepthBufferOffset; // Offset: 240 +// float2 PerPassFullResUVOffset; // Offset: 248 +// float2 OutputBufferDimensions; // Offset: 256 +// float2 OutputBufferInverseDimensions;// Offset: 264 +// float2 ImportanceMapDimensions;// Offset: 272 +// float2 ImportanceMapInverseDimensions;// Offset: 280 +// float2 DeinterleavedDepthBufferDimensions;// Offset: 288 +// float2 DeinterleavedDepthBufferInverseDimensions;// Offset: 296 +// float2 DeinterleavedDepthBufferOffset;// Offset: 304 +// float2 DeinterleavedDepthBufferNormalisedOffset;// Offset: 312 +// float4x4 NormalsWorldToViewspaceMatrix;// Offset: 320 +// +// } g_CACAOConsts; // Offset: 0 Size: 384 +// +// } +// +// +// Resource Bindings: +// +// Name Type Format Dim HLSL Bind Count +// ------------------------------ ---------- ------- ----------- -------------- ------ +// g_PointClampSampler sampler NA NA s0 1 +// g_BilateralUpscaleInput texture float2 2darray t0 1 +// g_BilateralUpscaleDepth texture float 2d t1 1 +// g_BilateralUpscaleDownscaledDepth texture float 2darray t3 1 +// g_BilateralUpscaleOutput UAV float 2d u0 1 +// SSAOConstantsBuffer cbuffer NA NA cb0 1 +// +// +// +// Input signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Input +// +// Output signature: +// +// Name Index Mask Register SysValue Format Used +// -------------------- ----- ------ -------- -------- ------- ------ +// no Output +cs_5_0 +dcl_globalFlags refactoringAllowed | enableMinimumPrecision +dcl_constantbuffer CB0[20], immediateIndexed +dcl_sampler s0, mode_default +dcl_resource_texture2darray (float,float,float,float) t0 +dcl_resource_texture2d (float,float,float,float) t1 +dcl_resource_texture2darray (float,float,float,float) t3 +dcl_uav_typed_texture2d (float,float,float,float) u0 +dcl_input vThreadGroupID.xy +dcl_input vThreadIDInGroup.xy +dcl_input vThreadID.xy +dcl_temps 14 +dcl_tgsm_structured g0, 64, 12 +dcl_thread_group 8, 4, 1 +imad r0.x, vThreadIDInGroup.y, l(8), vThreadIDInGroup.x +imul null, r0.x, r0.x, l(3) +udiv r0.x, r1.x, r0.x, l(12) +ishl r0.yz, vThreadGroupID.xxyx, l(0, 3, 2, 0) +mov r1.y, r0.x +iadd r0.yz, r0.yyzy, r1.xxyx +iadd r2.xy, r0.yzyy, l(-2, -2, 0, 0) +and r0.y, r2.y, l(1) +imul null, r3.z, r0.y, l(3) +ftou r4.xy, cb0[19].xyxx +utof r5.z, r3.z +ishl r0.x, r0.x, l(3) +mov r4.z, l(0) +mov r6.w, l(0) +mov r2.z, r2.x +mov r0.y, l(0) +loop + ige r0.z, r0.y, l(3) + breakc_nz r0.z + ushr r3.xy, r2.zyzz, l(1, 1, 0, 0) + iadd r6.xyz, r3.xyzx, r4.xyzx + iadd r2.z, r2.z, l(1) + ld_indexable(texture2darray)(float,float,float,float) r0.z, r6.xyzw, t3.yzxw + utof r1.yz, r3.xxyx + add r1.yz, r1.yyzy, l(0.000000, 0.500000, 0.500000, 0.000000) + mul r5.xy, r1.yzyy, cb0[13].zwzz + sample_l_indexable(texture2darray)(float,float,float,float) r0.w, r5.xyzx, t0.yzwx, s0, l(0.000000) + f32tof16 r0.z, r0.z + imad r3.x, r0.z, l(0x00010000), r0.z + f32tof16 r0.z, r0.w + imad r3.y, r0.z, l(0x00010000), r0.z + iadd r0.z, r0.y, r1.x + store_structured g0.xy, r0.z, r0.x, r3.xyxx + iadd r0.y, r0.y, l(1) +endloop +sync_g_t +ishl r0.xyzw, vThreadID.xyyy, l(1, 1, 1, 1) +iadd r1.xy, r0.xwxx, cb0[15].xyxx +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.z, r1.xyzw, t1.yzxw +add r1.z, -r1.z, cb0[0].y +div r2.x, cb0[0].x, r1.z +iadd r3.xyzw, r1.xyxy, l(0, 1, 1, 0) +mov r4.xy, r3.zwzz +mov r4.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.z, r4.xyzw, t1.yzxw +add r1.z, -r1.z, cb0[0].y +div r2.y, cb0[0].x, r1.z +mov r3.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.z, r3.xyzw, t1.yzxw +add r1.z, -r1.z, cb0[0].y +div r3.x, cb0[0].x, r1.z +iadd r1.xy, r1.xyxx, l(1, 1, 0, 0) +mov r1.zw, l(0,0,0,0) +ld_indexable(texture2d)(float,float,float,float) r1.x, r1.xyzw, t1.xyzw +add r1.x, -r1.x, cb0[0].y +div r3.y, cb0[0].x, r1.x +iadd r1.xy, vThreadIDInGroup.xyxx, l(2, 2, 0, 0) +div r1.zw, l(1.000000, 1.000000, 1.000000, 1.000000), cb0[6].wwwz +mov r4.xyzw {min16f}, l(0,0,0,0) {def32 as min16f} +mov r5.xyzw {min16f}, l(0,0,0,0) {def32 as min16f} +mov r6.x, l(-2) +loop + ilt r2.z, l(2), r6.x + breakc_nz r2.z + itof r7.x {min16f}, r6.x + add r7.xy {min16f}, r7.xxxx {min16f}, l(0.000000, 0.500000, 0.000000, 0.000000) {def32 as min16f} + mul r7.xy {min16f}, r7.xyxx {min16f}, r7.xyxx {min16f} + mov r7.zw {min16f}, r4.xxxy {min16f} + mov r8.xy {min16f}, r4.zwzz {min16f} + mov r8.zw {min16f}, r5.xxxy {min16f} + mov r9.xy {min16f}, r5.zwzz {min16f} + mov r6.y, l(-2) + loop + ilt r2.z, l(2), r6.y + breakc_nz r2.z + iadd r2.zw, r1.xxxy, r6.xxxy + ishl r2.w, r2.w, l(3) + ld_structured r2.zw, r2.z, r2.w, g0.xxxy + itof r9.z {min16f}, r6.y + add r9.w {min16f}, r9.z {min16f}, l(0.500000) {def32 as min16f} + mad r10.xy {min16f}, r9.zzzz {min16f}, r9.zzzz {min16f}, r7.xyxx {min16f} + mad r9.zw {min16f}, r9.wwww {min16f}, r9.wwww {min16f}, r7.xxxy {min16f} + mul r10.xy {min16f}, r1.wwww {def32 as min16f}, -r10.xyxx {min16f} + mul r10.xy {min16f}, r10.xyxx {min16f}, l(1.442695, 1.442695, 0.000000, 0.000000) {def32 as min16f} + exp r10.xy {min16f}, r10.xyxx {min16f} + mul r9.zw {min16f}, r1.wwww {def32 as min16f}, -r9.zzzw {min16f} + mul r9.zw {min16f}, r9.zzzw {min16f}, l(0.000000, 0.000000, 1.442695, 1.442695) {def32 as min16f} + exp r9.zw {min16f}, r9.zzzw {min16f} + and r3.zw, r2.zzzw, l(0, 0, 0x0000ffff, 0x0000ffff) + ushr r2.zw, r2.zzzw, l(0, 0, 16, 16) + f16tof32 r11.xz, r3.zzwz + f16tof32 r11.yw, r2.zzzw + add r10.zw {min16f}, r2.xxxy {def32 as min16f}, -r11.xxxy {def32 as min16f} + add r12.xy {min16f}, r3.xyxx {def32 as min16f}, -r11.xyxx {def32 as min16f} + mul r10.zw {min16f}, r10.zzzw {min16f}, r10.zzzw {min16f} + mul r12.xy {min16f}, r12.xyxx {min16f}, r12.xyxx {min16f} + mul r10.zw {min16f}, r1.zzzz {def32 as min16f}, -r10.zzzw {min16f} + mul r10.zw {min16f}, r10.zzzw {min16f}, l(0.000000, 0.000000, 1.442695, 1.442695) {def32 as min16f} + exp r10.zw {min16f}, r10.zzzw {min16f} + mul r12.xy {min16f}, r1.zzzz {def32 as min16f}, -r12.xyxx {min16f} + mul r12.xy {min16f}, r12.xyxx {min16f}, l(1.442695, 1.442695, 0.000000, 0.000000) {def32 as min16f} + exp r12.xy {min16f}, r12.xyxx {min16f} + mul r12.zw {min16f}, r10.zzzw {min16f}, r10.xxxy {min16f} + mul r13.xy {min16f}, r9.zwzz {min16f}, r12.xyxx {min16f} + mad r7.zw {min16f}, r11.zzzw {def32 as min16f}, r12.zzzw {min16f}, r7.zzzw {min16f} + mad r8.xy {min16f}, r11.zwzz {def32 as min16f}, r13.xyxx {min16f}, r8.xyxx {min16f} + mad r8.zw {min16f}, r10.xxxy {min16f}, r10.zzzw {min16f}, r8.zzzw {min16f} + mad r9.xy {min16f}, r9.zwzz {min16f}, r12.xyxx {min16f}, r9.xyxx {min16f} + iadd r6.y, r6.y, l(1) + endloop + mov r4.xy {min16f}, r7.zwzz {min16f} + mov r4.zw {min16f}, r8.xxxy {min16f} + mov r5.xy {min16f}, r8.zwzz {min16f} + mov r5.zw {min16f}, r9.xxxy {min16f} + iadd r6.x, r6.x, l(1) +endloop +div r1.xyzw {min16f}, r4.xyzw {min16f}, r5.xyzw {min16f} +store_uav_typed u0.xyzw, r0.xyzw, r1.xxxx {min16f} +imad r2.xyzw, vThreadID.xyxy, l(2, 2, 2, 2), l(1, 0, 0, 1) +store_uav_typed u0.xyzw, r2.xyyy, r1.yyyy {min16f} +store_uav_typed u0.xyzw, r2.zwww, r1.zzzz {min16f} +imad r2.xyzw, vThreadID.xyyy, l(2, 2, 2, 2), l(1, 1, 1, 1) +store_uav_typed u0.xyzw, r2.xyzw, r1.wwww {min16f} +ret +// Approximately 125 instruction slots used +#endif + +const BYTE CSUpscaleBilateral5x5HalfDXIL[] = +{ + 68, 88, 66, 67, 17, 57, + 4, 167, 248, 131, 189, 14, + 135, 132, 145, 41, 184, 151, + 144, 50, 1, 0, 0, 0, + 224, 25, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 40, 9, 0, 0, 56, 9, + 0, 0, 72, 9, 0, 0, + 52, 25, 0, 0, 68, 25, + 0, 0, 82, 68, 69, 70, + 232, 8, 0, 0, 1, 0, + 0, 0, 144, 1, 0, 0, + 6, 0, 0, 0, 60, 0, + 0, 0, 0, 5, 83, 67, + 0, 1, 0, 0, 192, 8, + 0, 0, 82, 68, 49, 49, + 60, 0, 0, 0, 24, 0, + 0, 0, 32, 0, 0, 0, + 40, 0, 0, 0, 36, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 252, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 16, 1, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 5, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 5, 0, + 0, 0, 40, 1, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 1, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 64, 1, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 5, 0, + 0, 0, 255, 255, 255, 255, + 3, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 98, 1, 0, 0, 4, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 123, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 103, 95, + 80, 111, 105, 110, 116, 67, + 108, 97, 109, 112, 83, 97, + 109, 112, 108, 101, 114, 0, + 103, 95, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 85, + 112, 115, 99, 97, 108, 101, + 73, 110, 112, 117, 116, 0, + 103, 95, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 85, + 112, 115, 99, 97, 108, 101, + 68, 101, 112, 116, 104, 0, + 103, 95, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 85, + 112, 115, 99, 97, 108, 101, + 68, 111, 119, 110, 115, 99, + 97, 108, 101, 100, 68, 101, + 112, 116, 104, 0, 103, 95, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 85, 112, 115, + 99, 97, 108, 101, 79, 117, + 116, 112, 117, 116, 0, 83, + 83, 65, 79, 67, 111, 110, + 115, 116, 97, 110, 116, 115, + 66, 117, 102, 102, 101, 114, + 0, 171, 123, 1, 0, 0, + 1, 0, 0, 0, 168, 1, + 0, 0, 128, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 208, 1, 0, 0, + 0, 0, 0, 0, 128, 1, + 0, 0, 2, 0, 0, 0, + 156, 8, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 103, 95, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 115, 0, 67, 65, 67, 65, + 79, 67, 111, 110, 115, 116, + 97, 110, 116, 115, 0, 68, + 101, 112, 116, 104, 85, 110, + 112, 97, 99, 107, 67, 111, + 110, 115, 116, 115, 0, 102, + 108, 111, 97, 116, 50, 0, + 171, 171, 1, 0, 3, 0, + 1, 0, 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, 255, 1, + 0, 0, 67, 97, 109, 101, + 114, 97, 84, 97, 110, 72, + 97, 108, 102, 70, 79, 86, + 0, 78, 68, 67, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 78, 68, 67, 84, + 111, 86, 105, 101, 119, 65, + 100, 100, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 85, 86, 84, 111, + 86, 105, 101, 119, 77, 117, + 108, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 85, 86, 84, 111, 86, + 105, 101, 119, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 82, 97, 100, 105, 117, + 115, 0, 102, 108, 111, 97, + 116, 0, 0, 0, 3, 0, + 1, 0, 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, 146, 2, + 0, 0, 69, 102, 102, 101, + 99, 116, 83, 104, 97, 100, + 111, 119, 83, 116, 114, 101, + 110, 103, 116, 104, 0, 69, + 102, 102, 101, 99, 116, 83, + 104, 97, 100, 111, 119, 80, + 111, 119, 0, 69, 102, 102, + 101, 99, 116, 83, 104, 97, + 100, 111, 119, 67, 108, 97, + 109, 112, 0, 69, 102, 102, + 101, 99, 116, 70, 97, 100, + 101, 79, 117, 116, 77, 117, + 108, 0, 69, 102, 102, 101, + 99, 116, 70, 97, 100, 101, + 79, 117, 116, 65, 100, 100, + 0, 69, 102, 102, 101, 99, + 116, 72, 111, 114, 105, 122, + 111, 110, 65, 110, 103, 108, + 101, 84, 104, 114, 101, 115, + 104, 111, 108, 100, 0, 69, + 102, 102, 101, 99, 116, 83, + 97, 109, 112, 108, 105, 110, + 103, 82, 97, 100, 105, 117, + 115, 78, 101, 97, 114, 76, + 105, 109, 105, 116, 82, 101, + 99, 0, 68, 101, 112, 116, + 104, 80, 114, 101, 99, 105, + 115, 105, 111, 110, 79, 102, + 102, 115, 101, 116, 77, 111, + 100, 0, 78, 101, 103, 82, + 101, 99, 69, 102, 102, 101, + 99, 116, 82, 97, 100, 105, + 117, 115, 0, 76, 111, 97, + 100, 67, 111, 117, 110, 116, + 101, 114, 65, 118, 103, 68, + 105, 118, 0, 65, 100, 97, + 112, 116, 105, 118, 101, 83, + 97, 109, 112, 108, 101, 67, + 111, 117, 110, 116, 76, 105, + 109, 105, 116, 0, 73, 110, + 118, 83, 104, 97, 114, 112, + 110, 101, 115, 115, 0, 80, + 97, 115, 115, 73, 110, 100, + 101, 120, 0, 105, 110, 116, + 0, 171, 0, 0, 2, 0, + 1, 0, 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, 191, 3, + 0, 0, 66, 105, 108, 97, + 116, 101, 114, 97, 108, 83, + 105, 103, 109, 97, 83, 113, + 117, 97, 114, 101, 100, 0, + 66, 105, 108, 97, 116, 101, + 114, 97, 108, 83, 105, 109, + 105, 108, 97, 114, 105, 116, + 121, 68, 105, 115, 116, 97, + 110, 99, 101, 83, 105, 103, + 109, 97, 0, 80, 97, 116, + 116, 101, 114, 110, 82, 111, + 116, 83, 99, 97, 108, 101, + 77, 97, 116, 114, 105, 99, + 101, 115, 0, 102, 108, 111, + 97, 116, 52, 0, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 55, 4, 0, 0, + 78, 111, 114, 109, 97, 108, + 115, 85, 110, 112, 97, 99, + 107, 77, 117, 108, 0, 78, + 111, 114, 109, 97, 108, 115, + 85, 110, 112, 97, 99, 107, + 65, 100, 100, 0, 68, 101, + 116, 97, 105, 108, 65, 79, + 83, 116, 114, 101, 110, 103, + 116, 104, 0, 68, 117, 109, + 109, 121, 48, 0, 83, 83, + 65, 79, 66, 117, 102, 102, + 101, 114, 68, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 83, 83, 65, 79, 66, + 117, 102, 102, 101, 114, 73, + 110, 118, 101, 114, 115, 101, + 68, 105, 109, 101, 110, 115, + 105, 111, 110, 115, 0, 68, + 101, 112, 116, 104, 66, 117, + 102, 102, 101, 114, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 112, 116, + 104, 66, 117, 102, 102, 101, + 114, 79, 102, 102, 115, 101, + 116, 0, 105, 110, 116, 50, + 0, 171, 171, 171, 1, 0, + 2, 0, 1, 0, 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, + 20, 5, 0, 0, 80, 101, + 114, 80, 97, 115, 115, 70, + 117, 108, 108, 82, 101, 115, + 85, 86, 79, 102, 102, 115, + 101, 116, 0, 79, 117, 116, + 112, 117, 116, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 79, 117, 116, 112, + 117, 116, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 73, 109, 112, 111, + 114, 116, 97, 110, 99, 101, + 77, 97, 112, 73, 110, 118, + 101, 114, 115, 101, 68, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 73, 110, 118, 101, + 114, 115, 101, 68, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 68, 101, 105, 110, + 116, 101, 114, 108, 101, 97, + 118, 101, 100, 68, 101, 112, + 116, 104, 66, 117, 102, 102, + 101, 114, 79, 102, 102, 115, + 101, 116, 0, 68, 101, 105, + 110, 116, 101, 114, 108, 101, + 97, 118, 101, 100, 68, 101, + 112, 116, 104, 66, 117, 102, + 102, 101, 114, 78, 111, 114, + 109, 97, 108, 105, 115, 101, + 100, 79, 102, 102, 115, 101, + 116, 0, 78, 111, 114, 109, + 97, 108, 115, 87, 111, 114, + 108, 100, 84, 111, 86, 105, + 101, 119, 115, 112, 97, 99, + 101, 77, 97, 116, 114, 105, + 120, 0, 102, 108, 111, 97, + 116, 52, 120, 52, 0, 171, + 3, 0, 3, 0, 4, 0, + 4, 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, 118, 6, 0, 0, + 237, 1, 0, 0, 8, 2, + 0, 0, 0, 0, 0, 0, + 44, 2, 0, 0, 8, 2, + 0, 0, 8, 0, 0, 0, + 61, 2, 0, 0, 8, 2, + 0, 0, 16, 0, 0, 0, + 74, 2, 0, 0, 8, 2, + 0, 0, 24, 0, 0, 0, + 87, 2, 0, 0, 8, 2, + 0, 0, 32, 0, 0, 0, + 110, 2, 0, 0, 8, 2, + 0, 0, 40, 0, 0, 0, + 133, 2, 0, 0, 152, 2, + 0, 0, 48, 0, 0, 0, + 188, 2, 0, 0, 152, 2, + 0, 0, 52, 0, 0, 0, + 209, 2, 0, 0, 152, 2, + 0, 0, 56, 0, 0, 0, + 225, 2, 0, 0, 152, 2, + 0, 0, 60, 0, 0, 0, + 243, 2, 0, 0, 152, 2, + 0, 0, 64, 0, 0, 0, + 4, 3, 0, 0, 152, 2, + 0, 0, 68, 0, 0, 0, + 21, 3, 0, 0, 152, 2, + 0, 0, 72, 0, 0, 0, + 49, 3, 0, 0, 152, 2, + 0, 0, 76, 0, 0, 0, + 82, 3, 0, 0, 152, 2, + 0, 0, 80, 0, 0, 0, + 106, 3, 0, 0, 152, 2, + 0, 0, 84, 0, 0, 0, + 125, 3, 0, 0, 152, 2, + 0, 0, 88, 0, 0, 0, + 143, 3, 0, 0, 152, 2, + 0, 0, 92, 0, 0, 0, + 168, 3, 0, 0, 152, 2, + 0, 0, 96, 0, 0, 0, + 181, 3, 0, 0, 196, 3, + 0, 0, 100, 0, 0, 0, + 232, 3, 0, 0, 152, 2, + 0, 0, 104, 0, 0, 0, + 254, 3, 0, 0, 152, 2, + 0, 0, 108, 0, 0, 0, + 31, 4, 0, 0, 64, 4, + 0, 0, 112, 0, 0, 0, + 100, 4, 0, 0, 152, 2, + 0, 0, 192, 0, 0, 0, + 117, 4, 0, 0, 152, 2, + 0, 0, 196, 0, 0, 0, + 134, 4, 0, 0, 152, 2, + 0, 0, 200, 0, 0, 0, + 151, 4, 0, 0, 152, 2, + 0, 0, 204, 0, 0, 0, + 158, 4, 0, 0, 8, 2, + 0, 0, 208, 0, 0, 0, + 179, 4, 0, 0, 8, 2, + 0, 0, 216, 0, 0, 0, + 207, 4, 0, 0, 8, 2, + 0, 0, 224, 0, 0, 0, + 229, 4, 0, 0, 8, 2, + 0, 0, 232, 0, 0, 0, + 2, 5, 0, 0, 28, 5, + 0, 0, 240, 0, 0, 0, + 64, 5, 0, 0, 8, 2, + 0, 0, 248, 0, 0, 0, + 87, 5, 0, 0, 8, 2, + 0, 0, 0, 1, 0, 0, + 110, 5, 0, 0, 8, 2, + 0, 0, 8, 1, 0, 0, + 140, 5, 0, 0, 8, 2, + 0, 0, 16, 1, 0, 0, + 164, 5, 0, 0, 8, 2, + 0, 0, 24, 1, 0, 0, + 195, 5, 0, 0, 8, 2, + 0, 0, 32, 1, 0, 0, + 230, 5, 0, 0, 8, 2, + 0, 0, 40, 1, 0, 0, + 16, 6, 0, 0, 8, 2, + 0, 0, 48, 1, 0, 0, + 47, 6, 0, 0, 8, 2, + 0, 0, 56, 1, 0, 0, + 88, 6, 0, 0, 128, 6, + 0, 0, 64, 1, 0, 0, + 5, 0, 0, 0, 1, 0, + 96, 0, 0, 0, 42, 0, + 164, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 222, 1, 0, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 49, + 48, 46, 49, 0, 73, 83, + 71, 49, 8, 0, 0, 0, + 0, 0, 0, 0, 8, 0, + 0, 0, 79, 83, 71, 49, + 8, 0, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 83, 72, 69, 88, 228, 15, + 0, 0, 80, 0, 5, 0, + 249, 3, 0, 0, 106, 8, + 1, 1, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 20, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 0, 0, 0, 0, + 88, 64, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 1, 0, 0, 0, 85, 85, + 0, 0, 88, 64, 0, 4, + 0, 112, 16, 0, 3, 0, + 0, 0, 85, 85, 0, 0, + 156, 24, 0, 4, 0, 224, + 17, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 95, 0, + 0, 2, 50, 16, 2, 0, + 95, 0, 0, 2, 50, 32, + 2, 0, 95, 0, 0, 2, + 50, 0, 2, 0, 104, 0, + 0, 2, 14, 0, 0, 0, + 160, 0, 0, 5, 0, 240, + 17, 0, 0, 0, 0, 0, + 64, 0, 0, 0, 12, 0, + 0, 0, 155, 0, 0, 4, + 8, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 35, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 32, 2, 0, 1, 64, + 0, 0, 8, 0, 0, 0, + 10, 32, 2, 0, 38, 0, + 0, 8, 0, 208, 0, 0, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 3, 0, 0, 0, + 78, 0, 0, 9, 18, 0, + 16, 0, 0, 0, 0, 0, + 18, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 12, 0, 0, 0, + 41, 0, 0, 9, 98, 0, + 16, 0, 0, 0, 0, 0, + 6, 17, 2, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 30, 0, 0, 7, + 98, 0, 16, 0, 0, 0, + 0, 0, 86, 6, 16, 0, + 0, 0, 0, 0, 6, 1, + 16, 0, 1, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 2, 0, 0, 0, + 150, 5, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 254, 255, 255, 255, 254, 255, + 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 38, 0, 0, 8, + 0, 208, 0, 0, 66, 0, + 16, 0, 3, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 28, 0, + 0, 6, 50, 0, 16, 0, + 4, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 86, 0, + 0, 5, 66, 0, 16, 0, + 5, 0, 0, 0, 42, 0, + 16, 0, 3, 0, 0, 0, + 41, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 4, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 130, 0, + 16, 0, 6, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 66, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 34, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 0, + 48, 0, 0, 1, 33, 0, + 0, 7, 66, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 3, 0, + 0, 0, 3, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 85, 0, 0, 10, + 50, 0, 16, 0, 3, 0, + 0, 0, 102, 10, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 114, 0, + 16, 0, 6, 0, 0, 0, + 70, 2, 16, 0, 3, 0, + 0, 0, 70, 2, 16, 0, + 4, 0, 0, 0, 30, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 45, 0, 0, 137, + 2, 2, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 6, 0, 0, 0, + 150, 124, 16, 0, 3, 0, + 0, 0, 86, 0, 0, 5, + 98, 0, 16, 0, 1, 0, + 0, 0, 6, 1, 16, 0, + 3, 0, 0, 0, 0, 0, + 0, 10, 98, 0, 16, 0, + 1, 0, 0, 0, 86, 6, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 63, 0, 0, + 0, 0, 56, 0, 0, 8, + 50, 0, 16, 0, 5, 0, + 0, 0, 150, 5, 16, 0, + 1, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 72, 0, + 0, 141, 2, 2, 0, 128, + 67, 85, 21, 0, 130, 0, + 16, 0, 0, 0, 0, 0, + 70, 2, 16, 0, 5, 0, + 0, 0, 150, 115, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 5, + 66, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 35, 0, + 0, 9, 18, 0, 16, 0, + 3, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 1, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 130, 0, + 0, 5, 66, 0, 16, 0, + 0, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 35, 0, 0, 9, 34, 0, + 16, 0, 3, 0, 0, 0, + 42, 0, 16, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 1, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 30, 0, 0, 7, 66, 0, + 16, 0, 0, 0, 0, 0, + 26, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 168, 0, + 0, 9, 50, 240, 17, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 3, 0, 0, 0, 30, 0, + 0, 7, 34, 0, 16, 0, + 0, 0, 0, 0, 26, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 22, 0, 0, 1, + 190, 24, 0, 1, 41, 0, + 0, 9, 242, 0, 16, 0, + 0, 0, 0, 0, 70, 5, + 2, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 30, 0, + 0, 8, 50, 0, 16, 0, + 1, 0, 0, 0, 198, 0, + 16, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 54, 0, 0, 8, 194, 0, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 45, 0, 0, 137, + 194, 0, 0, 128, 67, 85, + 21, 0, 66, 0, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 150, 124, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 9, + 66, 0, 16, 0, 1, 0, + 0, 0, 42, 0, 16, 128, + 65, 0, 0, 0, 1, 0, + 0, 0, 26, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 8, + 18, 0, 16, 0, 2, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 1, 0, 0, 0, 30, 0, + 0, 10, 242, 0, 16, 0, + 3, 0, 0, 0, 70, 4, + 16, 0, 1, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 50, 0, 16, 0, 4, 0, + 0, 0, 230, 10, 16, 0, + 3, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 4, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 194, 0, + 0, 128, 67, 85, 21, 0, + 66, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 4, 0, 0, 0, 150, 124, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 9, 66, 0, + 16, 0, 1, 0, 0, 0, + 42, 0, 16, 128, 65, 0, + 0, 0, 1, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 34, 0, + 16, 0, 2, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 42, 0, 16, 0, 1, 0, + 0, 0, 54, 0, 0, 8, + 194, 0, 16, 0, 3, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 0, + 0, 137, 194, 0, 0, 128, + 67, 85, 21, 0, 66, 0, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 150, 124, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 9, 66, 0, 16, 0, + 1, 0, 0, 0, 42, 0, + 16, 128, 65, 0, 0, 0, + 1, 0, 0, 0, 26, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 8, 18, 0, 16, 0, + 3, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 42, 0, + 16, 0, 1, 0, 0, 0, + 30, 0, 0, 10, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 8, 194, 0, 16, 0, + 1, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 45, 0, 0, 137, 194, 0, + 0, 128, 67, 85, 21, 0, + 18, 0, 16, 0, 1, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 70, 126, + 16, 0, 1, 0, 0, 0, + 0, 0, 0, 9, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 128, 65, 0, + 0, 0, 1, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 14, 0, 0, 8, 34, 0, + 16, 0, 3, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 1, 0, + 0, 0, 30, 0, 0, 9, + 50, 0, 16, 0, 1, 0, + 0, 0, 70, 32, 2, 0, + 2, 64, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 14, 0, 0, 11, + 194, 0, 16, 0, 1, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 128, 63, 0, 0, + 128, 63, 0, 0, 128, 63, + 0, 0, 128, 63, 246, 139, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 54, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 9, 242, 0, 16, 128, + 1, 64, 0, 0, 5, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 18, 0, 16, 0, + 6, 0, 0, 0, 1, 64, + 0, 0, 254, 255, 255, 255, + 48, 0, 0, 1, 34, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 10, 0, 16, 0, 6, 0, + 0, 0, 3, 0, 4, 3, + 42, 0, 16, 0, 2, 0, + 0, 0, 43, 0, 0, 6, + 18, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 10, 0, 16, 0, 6, 0, + 0, 0, 0, 0, 0, 12, + 50, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 6, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 56, 0, 0, 10, + 50, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 54, 0, 0, 7, 194, 0, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 6, 4, + 16, 128, 1, 64, 0, 0, + 4, 0, 0, 0, 54, 0, + 0, 7, 50, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 230, 10, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 54, 0, 0, 7, + 194, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 6, 4, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 230, 10, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 54, 0, + 0, 5, 34, 0, 16, 0, + 6, 0, 0, 0, 1, 64, + 0, 0, 254, 255, 255, 255, + 48, 0, 0, 1, 34, 0, + 0, 7, 66, 0, 16, 0, + 2, 0, 0, 0, 1, 64, + 0, 0, 2, 0, 0, 0, + 26, 0, 16, 0, 6, 0, + 0, 0, 3, 0, 4, 3, + 42, 0, 16, 0, 2, 0, + 0, 0, 30, 0, 0, 7, + 194, 0, 16, 0, 2, 0, + 0, 0, 6, 4, 16, 0, + 1, 0, 0, 0, 6, 4, + 16, 0, 6, 0, 0, 0, + 41, 0, 0, 7, 130, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 1, 64, 0, 0, + 3, 0, 0, 0, 167, 0, + 0, 9, 194, 0, 16, 0, + 2, 0, 0, 0, 42, 0, + 16, 0, 2, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 6, 244, 17, 0, + 0, 0, 0, 0, 43, 0, + 0, 6, 66, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 26, 0, 16, 0, + 6, 0, 0, 0, 0, 0, + 0, 9, 130, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 42, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 0, 63, 50, 0, + 0, 13, 50, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 166, 10, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 166, 10, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 50, 0, 0, 13, + 194, 0, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 246, 15, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 246, 15, 16, 128, 1, 64, + 0, 0, 9, 0, 0, 0, + 6, 4, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 56, 0, 0, 9, 50, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 246, 15, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 128, 65, 64, + 0, 0, 10, 0, 0, 0, + 56, 0, 0, 12, 50, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 2, 64, + 0, 0, 59, 170, 184, 63, + 59, 170, 184, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 25, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 56, 0, + 0, 9, 194, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 166, 14, + 16, 128, 65, 64, 0, 0, + 9, 0, 0, 0, 56, 0, + 0, 12, 194, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 59, 170, 184, 63, + 59, 170, 184, 63, 25, 0, + 0, 7, 194, 0, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 1, 0, 0, 10, + 194, 0, 16, 0, 3, 0, + 0, 0, 166, 14, 16, 0, + 2, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, + 0, 0, 255, 255, 0, 0, + 85, 0, 0, 10, 194, 0, + 16, 0, 2, 0, 0, 0, + 166, 14, 16, 0, 2, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 16, 0, 0, 0, 131, 0, + 0, 5, 82, 0, 16, 0, + 11, 0, 0, 0, 166, 11, + 16, 0, 3, 0, 0, 0, + 131, 0, 0, 5, 162, 0, + 16, 0, 11, 0, 0, 0, + 166, 14, 16, 0, 2, 0, + 0, 0, 0, 0, 0, 9, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 6, 4, 16, 0, 2, 0, + 0, 0, 6, 4, 16, 128, + 65, 0, 0, 0, 11, 0, + 0, 0, 0, 0, 0, 9, + 50, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 70, 0, 16, 0, 3, 0, + 0, 0, 70, 0, 16, 128, + 65, 0, 0, 0, 11, 0, + 0, 0, 56, 0, 0, 10, + 194, 0, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 56, 0, 0, 10, 50, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 56, 0, + 0, 9, 194, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 166, 10, 16, 0, + 1, 0, 0, 0, 166, 14, + 16, 128, 65, 64, 0, 0, + 10, 0, 0, 0, 56, 0, + 0, 12, 194, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 59, 170, 184, 63, + 59, 170, 184, 63, 25, 0, + 0, 7, 194, 0, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 10, 0, + 0, 0, 56, 0, 0, 9, + 50, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 166, 10, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 128, + 65, 64, 0, 0, 12, 0, + 0, 0, 56, 0, 0, 12, + 50, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 2, 64, 0, 0, 59, 170, + 184, 63, 59, 170, 184, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 7, + 50, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 70, 0, 16, 128, 1, 64, + 0, 0, 12, 0, 0, 0, + 56, 0, 0, 10, 194, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 166, 14, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 6, 4, + 16, 128, 1, 64, 0, 0, + 10, 0, 0, 0, 56, 0, + 0, 10, 50, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 230, 10, 16, 128, + 1, 64, 0, 0, 9, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 50, 0, 0, 12, + 194, 0, 16, 128, 1, 64, + 0, 0, 7, 0, 0, 0, + 166, 14, 16, 0, 11, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 12, 0, + 0, 0, 166, 14, 16, 128, + 1, 64, 0, 0, 7, 0, + 0, 0, 50, 0, 0, 12, + 50, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 230, 10, 16, 0, 11, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 13, 0, + 0, 0, 70, 0, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 50, 0, 0, 13, + 194, 0, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 6, 4, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 10, 0, 0, 0, + 166, 14, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 50, 0, 0, 13, 50, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 230, 10, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 12, 0, 0, 0, 70, 0, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 30, 0, + 0, 7, 34, 0, 16, 0, + 6, 0, 0, 0, 26, 0, + 16, 0, 6, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 22, 0, 0, 1, + 54, 0, 0, 7, 50, 0, + 16, 128, 1, 64, 0, 0, + 4, 0, 0, 0, 230, 10, + 16, 128, 1, 64, 0, 0, + 7, 0, 0, 0, 54, 0, + 0, 7, 194, 0, 16, 128, + 1, 64, 0, 0, 4, 0, + 0, 0, 6, 4, 16, 128, + 1, 64, 0, 0, 8, 0, + 0, 0, 54, 0, 0, 7, + 50, 0, 16, 128, 1, 64, + 0, 0, 5, 0, 0, 0, + 230, 10, 16, 128, 1, 64, + 0, 0, 8, 0, 0, 0, + 54, 0, 0, 7, 194, 0, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 6, 4, + 16, 128, 1, 64, 0, 0, + 9, 0, 0, 0, 30, 0, + 0, 7, 18, 0, 16, 0, + 6, 0, 0, 0, 10, 0, + 16, 0, 6, 0, 0, 0, + 1, 64, 0, 0, 1, 0, + 0, 0, 22, 0, 0, 1, + 14, 0, 0, 10, 242, 0, + 16, 128, 1, 64, 0, 0, + 1, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 4, 0, 0, 0, 70, 14, + 16, 128, 1, 64, 0, 0, + 5, 0, 0, 0, 164, 0, + 0, 8, 242, 224, 17, 0, + 0, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 6, 0, 16, 128, 1, 64, + 0, 0, 1, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 4, 2, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 8, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 5, 16, 0, + 2, 0, 0, 0, 86, 5, + 16, 128, 1, 64, 0, 0, + 1, 0, 0, 0, 164, 0, + 0, 8, 242, 224, 17, 0, + 0, 0, 0, 0, 230, 15, + 16, 0, 2, 0, 0, 0, + 166, 10, 16, 128, 1, 64, + 0, 0, 1, 0, 0, 0, + 35, 0, 0, 14, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 5, 2, 0, 2, 64, + 0, 0, 2, 0, 0, 0, + 2, 0, 0, 0, 2, 0, + 0, 0, 2, 0, 0, 0, + 2, 64, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 164, 0, 0, 8, + 242, 224, 17, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 246, 15, + 16, 128, 1, 64, 0, 0, + 1, 0, 0, 0, 62, 0, + 0, 1, 83, 70, 73, 48, + 8, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 83, 84, 65, 84, 148, 0, + 0, 0, 125, 0, 0, 0, + 14, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 39, 0, 0, 0, 27, 0, + 0, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 3, 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, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 0, 0, + 0, 0, 5, 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, + 1, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0 +}; diff --git a/ffx-cacao/src/build_shaders.bat b/ffx-cacao/src/build_shaders.bat new file mode 100644 index 0000000..409429b --- /dev/null +++ b/ffx-cacao/src/build_shaders.bat @@ -0,0 +1,49 @@ +%echo off + +pushd %~dp0 + +if not exist "PrecompiledShaders" mkdir "PrecompiledShaders" + +fxc -Fh PrecompiledShaders/CACAOPrepareDownsampledDepths.h -Vn CSPrepareDownsampledDepthsDXIL -T cs_5_0 -E CSPrepareDownsampledDepths ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPrepareNativeDepths.h -Vn CSPrepareNativeDepthsDXIL -T cs_5_0 -E CSPrepareNativeDepths ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOPrepareDownsampledDepthsAndMips.h -Vn CSPrepareDownsampledDepthsAndMipsDXIL -T cs_5_0 -E CSPrepareDownsampledDepthsAndMips ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPrepareNativeDepthsAndMips.h -Vn CSPrepareNativeDepthsAndMipsDXIL -T cs_5_0 -E CSPrepareNativeDepthsAndMips ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOPrepareDownsampledNormals.h -Vn CSPrepareDownsampledNormalsDXIL -T cs_5_0 -E CSPrepareDownsampledNormals ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPrepareNativeNormals.h -Vn CSPrepareNativeNormalsDXIL -T cs_5_0 -E CSPrepareNativeNormals ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOPrepareDownsampledNormalsFromInputNormals.h -Vn CSPrepareDownsampledNormalsFromInputNormalsDXIL -T cs_5_0 -E CSPrepareDownsampledNormalsFromInputNormals ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPrepareNativeNormalsFromInputNormals.h -Vn CSPrepareNativeNormalsFromInputNormalsDXIL -T cs_5_0 -E CSPrepareNativeNormalsFromInputNormals ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOPrepareDownsampledDepthsHalf.h -Vn CSPrepareDownsampledDepthsHalfDXIL -T cs_5_0 -E CSPrepareDownsampledDepthsHalf ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPrepareNativeDepthsHalf.h -Vn CSPrepareNativeDepthsHalfDXIL -T cs_5_0 -E CSPrepareNativeDepthsHalf ffx_cacao.hlsl + + +fxc -Fh PrecompiledShaders/CACAOGenerateQ0.h -Vn CSGenerateQ0DXIL -T cs_5_0 -E CSGenerateQ0 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOGenerateQ1.h -Vn CSGenerateQ1DXIL -T cs_5_0 -E CSGenerateQ1 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOGenerateQ2.h -Vn CSGenerateQ2DXIL -T cs_5_0 -E CSGenerateQ2 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOGenerateQ3.h -Vn CSGenerateQ3DXIL -T cs_5_0 -E CSGenerateQ3 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOGenerateQ3Base.h -Vn CSGenerateQ3BaseDXIL -T cs_5_0 -E CSGenerateQ3Base ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOGenerateImportanceMap.h -Vn CSGenerateImportanceMapDXIL -T cs_5_0 -E CSGenerateImportanceMap ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPostprocessImportanceMapA.h -Vn CSPostprocessImportanceMapADXIL -T cs_5_0 -E CSPostprocessImportanceMapA ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOPostprocessImportanceMapB.h -Vn CSPostprocessImportanceMapBDXIL -T cs_5_0 -E CSPostprocessImportanceMapB ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur1.h -Vn CSEdgeSensitiveBlur1DXIL -T cs_5_0 -E CSEdgeSensitiveBlur1 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur2.h -Vn CSEdgeSensitiveBlur2DXIL -T cs_5_0 -E CSEdgeSensitiveBlur2 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur3.h -Vn CSEdgeSensitiveBlur3DXIL -T cs_5_0 -E CSEdgeSensitiveBlur3 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur4.h -Vn CSEdgeSensitiveBlur4DXIL -T cs_5_0 -E CSEdgeSensitiveBlur4 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur5.h -Vn CSEdgeSensitiveBlur5DXIL -T cs_5_0 -E CSEdgeSensitiveBlur5 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur6.h -Vn CSEdgeSensitiveBlur6DXIL -T cs_5_0 -E CSEdgeSensitiveBlur6 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur7.h -Vn CSEdgeSensitiveBlur7DXIL -T cs_5_0 -E CSEdgeSensitiveBlur7 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOEdgeSensitiveBlur8.h -Vn CSEdgeSensitiveBlur8DXIL -T cs_5_0 -E CSEdgeSensitiveBlur8 ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOApply.h -Vn CSApplyDXIL -T cs_5_0 -E CSApply ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAONonSmartApply.h -Vn CSNonSmartApplyDXIL -T cs_5_0 -E CSNonSmartApply ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAONonSmartHalfApply.h -Vn CSNonSmartHalfApplyDXIL -T cs_5_0 -E CSNonSmartHalfApply ffx_cacao.hlsl + +fxc -Fh PrecompiledShaders/CACAOUpscaleBilateral5x5.h -Vn CSUpscaleBilateral5x5DXIL -T cs_5_0 -E CSUpscaleBilateral5x5 ffx_cacao.hlsl +fxc -Fh PrecompiledShaders/CACAOUpscaleBilateral5x5Half.h -Vn CSUpscaleBilateral5x5HalfDXIL -T cs_5_0 -E CSUpscaleBilateral5x5Half ffx_cacao.hlsl + +popd diff --git a/ffx-cacao/src/ffx_cacao.cpp b/ffx-cacao/src/ffx_cacao.cpp new file mode 100644 index 0000000..806f33e --- /dev/null +++ b/ffx-cacao/src/ffx_cacao.cpp @@ -0,0 +1,2151 @@ +// Modifications Copyright © 2020. Advanced Micro Devices, Inc. All Rights Reserved. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// File changes (yyyy-mm-dd) +// 2016-09-07: filip.strugar@intel.com: first commit +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "ffx_cacao.h" +#include "ffx_cacao_defines.h" + +#include +#include + +#if FFX_CACAO_ENABLE_D3D12 +#include +#endif + +#define FFX_CACAO_ENABLE_CAULDRON_DEBUG 1 + +#define FFX_CACAO_ASSERT(exp) assert(exp) +#define FFX_CACAO_ARRAY_SIZE(xs) (sizeof(xs)/sizeof(xs[0])) +#define FFX_CACAO_COS(x) cosf(x) +#define FFX_CACAO_SIN(x) sinf(x) + +#if FFX_CACAO_ENABLE_D3D12 +#include "PrecompiledShaders/CACAOPrepareDownsampledDepthsHalf.h" +#include "PrecompiledShaders/CACAOPrepareNativeDepthsHalf.h" + +#include "PrecompiledShaders/CACAOPrepareDownsampledDepthsAndMips.h" +#include "PrecompiledShaders/CACAOPrepareNativeDepthsAndMips.h" + +#include "PrecompiledShaders/CACAOPrepareDownsampledNormals.h" +#include "PrecompiledShaders/CACAOPrepareNativeNormals.h" + +#include "PrecompiledShaders/CACAOPrepareDownsampledNormalsFromInputNormals.h" +#include "PrecompiledShaders/CACAOPrepareNativeNormalsFromInputNormals.h" + +#include "PrecompiledShaders/CACAOPrepareDownsampledDepths.h" +#include "PrecompiledShaders/CACAOPrepareNativeDepths.h" + +#include "PrecompiledShaders/CACAOGenerateQ0.h" +#include "PrecompiledShaders/CACAOGenerateQ1.h" +#include "PrecompiledShaders/CACAOGenerateQ2.h" +#include "PrecompiledShaders/CACAOGenerateQ3.h" +#include "PrecompiledShaders/CACAOGenerateQ3Base.h" + +#include "PrecompiledShaders/CACAOGenerateImportanceMap.h" +#include "PrecompiledShaders/CACAOPostprocessImportanceMapA.h" +#include "PrecompiledShaders/CACAOPostprocessImportanceMapB.h" + +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur1.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur2.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur3.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur4.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur5.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur6.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur7.h" +#include "PrecompiledShaders/CACAOEdgeSensitiveBlur8.h" + +#include "PrecompiledShaders/CACAOApply.h" +#include "PrecompiledShaders/CACAONonSmartApply.h" +#include "PrecompiledShaders/CACAONonSmartHalfApply.h" + +#include "PrecompiledShaders/CACAOUpscaleBilateral5x5.h" +#include "PrecompiledShaders/CACAOUpscaleBilateral5x5Half.h" +#endif + +#define MATRIX_ROW_MAJOR_ORDER 1 +#define MAX_BLUR_PASSES 8 + +#if FFX_CACAO_ENABLE_CAULDRON_DEBUG +#include + +#define USER_MARKER(name) CAULDRON_DX12::UserMarker __marker(commandList, name) +#else +#define USER_MARKER(name) +#endif + +#define FFX_CACAO_MIN(x, y) (((x) < (y)) ? (x) : (y)) +#define FFX_CACAO_MAX(x, y) (((x) > (y)) ? (x) : (y)) +#define FFX_CACAO_CLAMP(value, lower, upper) FFX_CACAO_MIN(FFX_CACAO_MAX(value, lower), upper) + +typedef struct FfxCacaoConstants { + float DepthUnpackConsts[2]; + float CameraTanHalfFOV[2]; + + float NDCToViewMul[2]; + float NDCToViewAdd[2]; + + float DepthBufferUVToViewMul[2]; + float DepthBufferUVToViewAdd[2]; + + float EffectRadius; // world (viewspace) maximum size of the shadow + float EffectShadowStrength; // global strength of the effect (0 - 5) + float EffectShadowPow; + float EffectShadowClamp; + + float EffectFadeOutMul; // effect fade out from distance (ex. 25) + float EffectFadeOutAdd; // effect fade out to distance (ex. 100) + float EffectHorizonAngleThreshold; // limit errors on slopes and caused by insufficient geometry tessellation (0.05 to 0.5) + float EffectSamplingRadiusNearLimitRec; // if viewspace pixel closer than this, don't enlarge shadow sampling radius anymore (makes no sense to grow beyond some distance, not enough samples to cover everything, so just limit the shadow growth; could be SSAOSettingsFadeOutFrom * 0.1 or less) + + float DepthPrecisionOffsetMod; + float NegRecEffectRadius; // -1.0 / EffectRadius + float LoadCounterAvgDiv; // 1.0 / ( halfDepthMip[SSAO_DEPTH_MIP_LEVELS-1].sizeX * halfDepthMip[SSAO_DEPTH_MIP_LEVELS-1].sizeY ) + float AdaptiveSampleCountLimit; + + float InvSharpness; + int PassIndex; + float BilateralSigmaSquared; + float BilateralSimilarityDistanceSigma; + + float PatternRotScaleMatrices[5][4]; + + float NormalsUnpackMul; + float NormalsUnpackAdd; + float DetailAOStrength; + float Dummy0; + + float SSAOBufferDimensions[2]; + float SSAOBufferInverseDimensions[2]; + + float DepthBufferDimensions[2]; + float DepthBufferInverseDimensions[2]; + + int DepthBufferOffset[2]; + float PerPassFullResUVOffset[2]; + + float InputOutputBufferDimensions[2]; + float InputOutputBufferInverseDimensions[2]; + + float ImportanceMapDimensions[2]; + float ImportanceMapInverseDimensions[2]; + + float DeinterleavedDepthBufferDimensions[2]; + float DeinterleavedDepthBufferInverseDimensions[2]; + + float DeinterleavedDepthBufferOffset[2]; + float DeinterleavedDepthBufferNormalisedOffset[2]; + + FfxCacaoMatrix4x4 NormalsWorldToViewspaceMatrix; +} FfxCacaoConstants; + +typedef struct ScreenSizeInfo { + uint32_t width; + uint32_t height; + uint32_t halfWidth; + uint32_t halfHeight; + uint32_t quarterWidth; + uint32_t quarterHeight; + uint32_t eighthWidth; + uint32_t eighthHeight; + uint32_t depthBufferWidth; + uint32_t depthBufferHeight; + uint32_t depthBufferHalfWidth; + uint32_t depthBufferHalfHeight; + uint32_t depthBufferQuarterWidth; + uint32_t depthBufferQuarterHeight; + uint32_t depthBufferOffsetX; + uint32_t depthBufferOffsetY; + uint32_t depthBufferHalfOffsetX; + uint32_t depthBufferHalfOffsetY; +} ScreenSizeInfo; + +typedef struct BufferSizeInfo { + uint32_t inputOutputBufferWidth; + uint32_t inputOutputBufferHeight; + + uint32_t ssaoBufferWidth; + uint32_t ssaoBufferHeight; + + uint32_t depthBufferXOffset; + uint32_t depthBufferYOffset; + + uint32_t depthBufferWidth; + uint32_t depthBufferHeight; + + uint32_t deinterleavedDepthBufferXOffset; + uint32_t deinterleavedDepthBufferYOffset; + + uint32_t deinterleavedDepthBufferWidth; + uint32_t deinterleavedDepthBufferHeight; + + uint32_t importanceMapWidth; + uint32_t importanceMapHeight; +}; + +static const FfxCacaoMatrix4x4 FFX_CACAO_IDENTITY_MATRIX = { + { { 1.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f } } +}; + +inline static uint32_t dispatchSize(uint32_t tileSize, uint32_t totalSize) +{ + return (totalSize + tileSize - 1) / tileSize; +} + +static void updateConstants(FfxCacaoConstants* consts, FfxCacaoSettings* settings, BufferSizeInfo* bufferSizeInfo, const FfxCacaoMatrix4x4* proj, const FfxCacaoMatrix4x4* normalsToView) +{ + consts->BilateralSigmaSquared = settings->bilateralSigmaSquared; + consts->BilateralSimilarityDistanceSigma = settings->bilateralSimilarityDistanceSigma; + + if (settings->generateNormals) + { + consts->NormalsWorldToViewspaceMatrix = FFX_CACAO_IDENTITY_MATRIX; + } + else + { + consts->NormalsWorldToViewspaceMatrix = *normalsToView; + } + + // used to get average load per pixel; 9.0 is there to compensate for only doing every 9th InterlockedAdd in PSPostprocessImportanceMapB for performance reasons + consts->LoadCounterAvgDiv = 9.0f / (float)(bufferSizeInfo->importanceMapWidth * bufferSizeInfo->importanceMapHeight * 255.0); + + float depthLinearizeMul = (MATRIX_ROW_MAJOR_ORDER) ? (-proj->elements[3][2]) : (-proj->elements[2][3]); // float depthLinearizeMul = ( clipFar * clipNear ) / ( clipFar - clipNear ); + float depthLinearizeAdd = (MATRIX_ROW_MAJOR_ORDER) ? (proj->elements[2][2]) : (proj->elements[2][2]); // float depthLinearizeAdd = clipFar / ( clipFar - clipNear ); + // correct the handedness issue. need to make sure this below is correct, but I think it is. + if (depthLinearizeMul * depthLinearizeAdd < 0) + depthLinearizeAdd = -depthLinearizeAdd; + consts->DepthUnpackConsts[0] = depthLinearizeMul; + consts->DepthUnpackConsts[1] = depthLinearizeAdd; + + float tanHalfFOVY = 1.0f / proj->elements[1][1]; // = tanf( drawContext.Camera.GetYFOV( ) * 0.5f ); + float tanHalfFOVX = 1.0F / proj->elements[0][0]; // = tanHalfFOVY * drawContext.Camera.GetAspect( ); + consts->CameraTanHalfFOV[0] = tanHalfFOVX; + consts->CameraTanHalfFOV[1] = tanHalfFOVY; + + consts->NDCToViewMul[0] = consts->CameraTanHalfFOV[0] * 2.0f; + consts->NDCToViewMul[1] = consts->CameraTanHalfFOV[1] * -2.0f; + consts->NDCToViewAdd[0] = consts->CameraTanHalfFOV[0] * -1.0f; + consts->NDCToViewAdd[1] = consts->CameraTanHalfFOV[1] * 1.0f; + + float ratio = ((float)bufferSizeInfo->inputOutputBufferWidth) / ((float)bufferSizeInfo->depthBufferWidth); + float border = (1.0f - ratio) / 2.0f; + for (int i = 0; i < 2; ++i) + { + consts->DepthBufferUVToViewMul[i] = consts->NDCToViewMul[i] / ratio; + consts->DepthBufferUVToViewAdd[i] = consts->NDCToViewAdd[i] - consts->NDCToViewMul[i] * border / ratio; + } + + consts->EffectRadius = FFX_CACAO_CLAMP(settings->radius, 0.0f, 100000.0f); + consts->EffectShadowStrength = FFX_CACAO_CLAMP(settings->shadowMultiplier * 4.3f, 0.0f, 10.0f); + consts->EffectShadowPow = FFX_CACAO_CLAMP(settings->shadowPower, 0.0f, 10.0f); + consts->EffectShadowClamp = FFX_CACAO_CLAMP(settings->shadowClamp, 0.0f, 1.0f); + consts->EffectFadeOutMul = -1.0f / (settings->fadeOutTo - settings->fadeOutFrom); + consts->EffectFadeOutAdd = settings->fadeOutFrom / (settings->fadeOutTo - settings->fadeOutFrom) + 1.0f; + consts->EffectHorizonAngleThreshold = FFX_CACAO_CLAMP(settings->horizonAngleThreshold, 0.0f, 1.0f); + + // 1.2 seems to be around the best trade off - 1.0 means on-screen radius will stop/slow growing when the camera is at 1.0 distance, so, depending on FOV, basically filling up most of the screen + // This setting is viewspace-dependent and not screen size dependent intentionally, so that when you change FOV the effect stays (relatively) similar. + float effectSamplingRadiusNearLimit = (settings->radius * 1.2f); + + // if the depth precision is switched to 32bit float, this can be set to something closer to 1 (0.9999 is fine) + consts->DepthPrecisionOffsetMod = 0.9992f; + + // consts->RadiusDistanceScalingFunctionPow = 1.0f - CLAMP( m_settings.RadiusDistanceScalingFunction, 0.0f, 1.0f ); + + + // Special settings for lowest quality level - just nerf the effect a tiny bit + if (settings->qualityLevel <= FFX_CACAO_QUALITY_LOW) + { + //consts.EffectShadowStrength *= 0.9f; + effectSamplingRadiusNearLimit *= 1.50f; + + if (settings->qualityLevel == FFX_CACAO_QUALITY_LOWEST) + consts->EffectRadius *= 0.8f; + } + + effectSamplingRadiusNearLimit /= tanHalfFOVY; // to keep the effect same regardless of FOV + + consts->EffectSamplingRadiusNearLimitRec = 1.0f / effectSamplingRadiusNearLimit; + + consts->AdaptiveSampleCountLimit = settings->adaptiveQualityLimit; + + consts->NegRecEffectRadius = -1.0f / consts->EffectRadius; + + consts->InvSharpness = FFX_CACAO_CLAMP(1.0f - settings->sharpness, 0.0f, 1.0f); + + consts->DetailAOStrength = settings->detailShadowStrength; + + // set buffer size constants. + consts->SSAOBufferDimensions[0] = (float)bufferSizeInfo->ssaoBufferWidth; + consts->SSAOBufferDimensions[1] = (float)bufferSizeInfo->ssaoBufferHeight; + consts->SSAOBufferInverseDimensions[0] = 1.0f / ((float)bufferSizeInfo->ssaoBufferWidth); + consts->SSAOBufferInverseDimensions[1] = 1.0f / ((float)bufferSizeInfo->ssaoBufferHeight); + + consts->DepthBufferDimensions[0] = (float)bufferSizeInfo->depthBufferWidth; + consts->DepthBufferDimensions[1] = (float)bufferSizeInfo->depthBufferHeight; + consts->DepthBufferInverseDimensions[0] = 1.0f / ((float)bufferSizeInfo->depthBufferWidth); + consts->DepthBufferInverseDimensions[1] = 1.0f / ((float)bufferSizeInfo->depthBufferHeight); + + consts->DepthBufferOffset[0] = bufferSizeInfo->depthBufferXOffset; + consts->DepthBufferOffset[1] = bufferSizeInfo->depthBufferYOffset; + + consts->InputOutputBufferDimensions[0] = (float)bufferSizeInfo->inputOutputBufferWidth; + consts->InputOutputBufferDimensions[1] = (float)bufferSizeInfo->inputOutputBufferHeight; + consts->InputOutputBufferInverseDimensions[0] = 1.0f / ((float)bufferSizeInfo->inputOutputBufferWidth); + consts->InputOutputBufferInverseDimensions[1] = 1.0f / ((float)bufferSizeInfo->inputOutputBufferHeight); + + consts->ImportanceMapDimensions[0] = (float)bufferSizeInfo->importanceMapWidth; + consts->ImportanceMapDimensions[1] = (float)bufferSizeInfo->importanceMapHeight; + consts->ImportanceMapInverseDimensions[0] = 1.0f / ((float)bufferSizeInfo->importanceMapWidth); + consts->ImportanceMapInverseDimensions[1] = 1.0f / ((float)bufferSizeInfo->importanceMapHeight); + + consts->DeinterleavedDepthBufferDimensions[0] = (float)bufferSizeInfo->deinterleavedDepthBufferWidth; + consts->DeinterleavedDepthBufferDimensions[1] = (float)bufferSizeInfo->deinterleavedDepthBufferHeight; + consts->DeinterleavedDepthBufferInverseDimensions[0] = 1.0f / ((float)bufferSizeInfo->deinterleavedDepthBufferWidth); + consts->DeinterleavedDepthBufferInverseDimensions[1] = 1.0f / ((float)bufferSizeInfo->deinterleavedDepthBufferHeight); + + consts->DeinterleavedDepthBufferOffset[0] = (float)bufferSizeInfo->deinterleavedDepthBufferXOffset; + consts->DeinterleavedDepthBufferOffset[1] = (float)bufferSizeInfo->deinterleavedDepthBufferYOffset; + consts->DeinterleavedDepthBufferNormalisedOffset[0] = ((float)bufferSizeInfo->deinterleavedDepthBufferXOffset) / ((float)bufferSizeInfo->deinterleavedDepthBufferWidth); + consts->DeinterleavedDepthBufferNormalisedOffset[1] = ((float)bufferSizeInfo->deinterleavedDepthBufferYOffset) / ((float)bufferSizeInfo->deinterleavedDepthBufferHeight); + + if (!settings->generateNormals) + { + consts->NormalsUnpackMul = 2.0f; // inputs->NormalsUnpackMul; + consts->NormalsUnpackAdd = -1.0f; // inputs->NormalsUnpackAdd; + } + else + { + consts->NormalsUnpackMul = 2.0f; + consts->NormalsUnpackAdd = -1.0f; + } +} + +static void updatePerPassConstants(FfxCacaoConstants* consts, FfxCacaoSettings* settings, BufferSizeInfo* bufferSizeInfo, int pass) +{ + consts->PerPassFullResUVOffset[0] = ((float)(pass % 2)) / (float)bufferSizeInfo->ssaoBufferWidth; + consts->PerPassFullResUVOffset[1] = ((float)(pass / 2)) / (float)bufferSizeInfo->ssaoBufferHeight; + + consts->PassIndex = pass; + + float additionalAngleOffset = settings->temporalSupersamplingAngleOffset; // if using temporal supersampling approach (like "Progressive Rendering Using Multi-frame Sampling" from GPU Pro 7, etc.) + float additionalRadiusScale = settings->temporalSupersamplingRadiusOffset; // if using temporal supersampling approach (like "Progressive Rendering Using Multi-frame Sampling" from GPU Pro 7, etc.) + const int subPassCount = 5; + for (int subPass = 0; subPass < subPassCount; subPass++) + { + int a = pass; + int b = subPass; + + int spmap[5]{ 0, 1, 4, 3, 2 }; + b = spmap[subPass]; + + float ca, sa; + float angle0 = ((float)a + (float)b / (float)subPassCount) * (3.1415926535897932384626433832795f) * 0.5f; + // angle0 += additionalAngleOffset; + + ca = FFX_CACAO_COS(angle0); + sa = FFX_CACAO_SIN(angle0); + + float scale = 1.0f + (a - 1.5f + (b - (subPassCount - 1.0f) * 0.5f) / (float)subPassCount) * 0.07f; + // scale *= additionalRadiusScale; + + consts->PatternRotScaleMatrices[subPass][0] = scale * ca; + consts->PatternRotScaleMatrices[subPass][1] = scale * -sa; + consts->PatternRotScaleMatrices[subPass][2] = -scale * sa; + consts->PatternRotScaleMatrices[subPass][3] = -scale * ca; + } +} + + +// ================================================================================= +// DirectX 12 +// ================================================================================= + +#if FFX_CACAO_ENABLE_D3D12 + +static inline FfxCacaoStatus hresultToFfxCacaoStatus(HRESULT hr) +{ + switch (hr) + { + case E_FAIL: return FFX_CACAO_STATUS_FAILED; + case E_INVALIDARG: return FFX_CACAO_STATUS_INVALID_ARGUMENT; + case E_OUTOFMEMORY: return FFX_CACAO_STATUS_OUT_OF_MEMORY; + case E_NOTIMPL: return FFX_CACAO_STATUS_INVALID_ARGUMENT; + case S_FALSE: return FFX_CACAO_STATUS_OK; + case S_OK: return FFX_CACAO_STATUS_OK; + default: return FFX_CACAO_STATUS_FAILED; + } +} + +static inline void SetName(ID3D12Object* obj, const char* name) +{ + if (name == NULL) + { + return; + } + + FFX_CACAO_ASSERT(obj != NULL); + wchar_t buffer[1024]; + swprintf(buffer, FFX_CACAO_ARRAY_SIZE(buffer), L"%S", name); + obj->SetName(buffer); +} + +static inline size_t AlignOffset(size_t uOffset, size_t uAlign) +{ + return ((uOffset + (uAlign - 1)) & ~(uAlign - 1)); +} + +static size_t GetPixelByteSize(DXGI_FORMAT fmt) +{ + switch (fmt) + { + case(DXGI_FORMAT_R10G10B10A2_TYPELESS): + case(DXGI_FORMAT_R10G10B10A2_UNORM): + case(DXGI_FORMAT_R10G10B10A2_UINT): + case(DXGI_FORMAT_R11G11B10_FLOAT): + case(DXGI_FORMAT_R8G8B8A8_TYPELESS): + case(DXGI_FORMAT_R8G8B8A8_UNORM): + case(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB): + case(DXGI_FORMAT_R8G8B8A8_UINT): + case(DXGI_FORMAT_R8G8B8A8_SNORM): + case(DXGI_FORMAT_R8G8B8A8_SINT): + case(DXGI_FORMAT_B8G8R8A8_UNORM): + case(DXGI_FORMAT_B8G8R8X8_UNORM): + case(DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM): + case(DXGI_FORMAT_B8G8R8A8_TYPELESS): + case(DXGI_FORMAT_B8G8R8A8_UNORM_SRGB): + case(DXGI_FORMAT_B8G8R8X8_TYPELESS): + case(DXGI_FORMAT_B8G8R8X8_UNORM_SRGB): + case(DXGI_FORMAT_R16G16_TYPELESS): + case(DXGI_FORMAT_R16G16_FLOAT): + case(DXGI_FORMAT_R16G16_UNORM): + case(DXGI_FORMAT_R16G16_UINT): + case(DXGI_FORMAT_R16G16_SNORM): + case(DXGI_FORMAT_R16G16_SINT): + case(DXGI_FORMAT_R32_TYPELESS): + case(DXGI_FORMAT_D32_FLOAT): + case(DXGI_FORMAT_R32_FLOAT): + case(DXGI_FORMAT_R32_UINT): + case(DXGI_FORMAT_R32_SINT): + return 4; + + case(DXGI_FORMAT_BC1_TYPELESS): + case(DXGI_FORMAT_BC1_UNORM): + case(DXGI_FORMAT_BC1_UNORM_SRGB): + case(DXGI_FORMAT_BC4_TYPELESS): + case(DXGI_FORMAT_BC4_UNORM): + case(DXGI_FORMAT_BC4_SNORM): + case(DXGI_FORMAT_R16G16B16A16_FLOAT): + case(DXGI_FORMAT_R16G16B16A16_TYPELESS): + return 8; + + case(DXGI_FORMAT_BC2_TYPELESS): + case(DXGI_FORMAT_BC2_UNORM): + case(DXGI_FORMAT_BC2_UNORM_SRGB): + case(DXGI_FORMAT_BC3_TYPELESS): + case(DXGI_FORMAT_BC3_UNORM): + case(DXGI_FORMAT_BC3_UNORM_SRGB): + case(DXGI_FORMAT_BC5_TYPELESS): + case(DXGI_FORMAT_BC5_UNORM): + case(DXGI_FORMAT_BC5_SNORM): + case(DXGI_FORMAT_BC6H_TYPELESS): + case(DXGI_FORMAT_BC6H_UF16): + case(DXGI_FORMAT_BC6H_SF16): + case(DXGI_FORMAT_BC7_TYPELESS): + case(DXGI_FORMAT_BC7_UNORM): + case(DXGI_FORMAT_BC7_UNORM_SRGB): + case(DXGI_FORMAT_R32G32B32A32_FLOAT): + case(DXGI_FORMAT_R32G32B32A32_TYPELESS): + return 16; + + default: + FFX_CACAO_ASSERT(0); + break; + } + return 0; +} + +// ================================================================================================= +// GpuTimer implementation +// ================================================================================================= + +#if FFX_CACAO_ENABLE_PROFILING +#define GPU_TIMER_MAX_VALUES_PER_FRAME (FFX_CACAO_ARRAY_SIZE(((FfxCacaoDetailedTiming*)0)->timestamps)) + +typedef struct GpuTimer { + ID3D12Resource *buffer; + ID3D12QueryHeap *queryHeap; + uint32_t numberOfBackBuffers; + uint32_t currentFrame; + uint32_t currentMeasurement; + const char *labels[GPU_TIMER_MAX_VALUES_PER_FRAME]; +} GpuTimer; + +static FfxCacaoStatus gpuTimerInit(GpuTimer* gpuTimer, ID3D12Device* device, uint32_t numberOfBackBuffers) +{ + gpuTimer->numberOfBackBuffers = numberOfBackBuffers; + + D3D12_QUERY_HEAP_DESC queryHeapDesc = {}; + queryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP; + queryHeapDesc.Count = GPU_TIMER_MAX_VALUES_PER_FRAME * numberOfBackBuffers; + queryHeapDesc.NodeMask = 0; + HRESULT hr = device->CreateQueryHeap(&queryHeapDesc, IID_PPV_ARGS(&gpuTimer->queryHeap)); + if (FAILED(hr)) + { + return hresultToFfxCacaoStatus(hr); + } + + hr = device->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_READBACK), + D3D12_HEAP_FLAG_NONE, + &CD3DX12_RESOURCE_DESC::Buffer(sizeof(uint64_t) * numberOfBackBuffers * GPU_TIMER_MAX_VALUES_PER_FRAME), + D3D12_RESOURCE_STATE_COPY_DEST, + nullptr, + IID_PPV_ARGS(&gpuTimer->buffer)); + if (FAILED(hr)) + { + FFX_CACAO_ASSERT(gpuTimer->queryHeap); + gpuTimer->queryHeap->Release(); + return hresultToFfxCacaoStatus(hr); + } + + SetName(gpuTimer->buffer, "CACAO::GPUTimer::buffer"); + + return FFX_CACAO_STATUS_OK; +} + +static void gpuTimerDestroy(GpuTimer* gpuTimer) +{ + FFX_CACAO_ASSERT(gpuTimer->buffer); + FFX_CACAO_ASSERT(gpuTimer->queryHeap); + gpuTimer->buffer->Release(); + gpuTimer->queryHeap->Release(); +} + +static void gpuTimerStartFrame(GpuTimer* gpuTimer) +{ + gpuTimer->currentMeasurement = 0; + gpuTimer->currentFrame = (gpuTimer->currentFrame + 1) % gpuTimer->numberOfBackBuffers; +} + +static void gpuTimerGetTimestamp(GpuTimer* gpuTimer, ID3D12GraphicsCommandList* commandList, const char* label) +{ + FFX_CACAO_ASSERT(gpuTimer->currentMeasurement < GPU_TIMER_MAX_VALUES_PER_FRAME); + commandList->EndQuery(gpuTimer->queryHeap, D3D12_QUERY_TYPE_TIMESTAMP, gpuTimer->currentFrame * GPU_TIMER_MAX_VALUES_PER_FRAME + gpuTimer->currentMeasurement); + gpuTimer->labels[gpuTimer->currentMeasurement++] = label; +} + +static void gpuTimerEndFrame(GpuTimer* gpuTimer, ID3D12GraphicsCommandList* commandList) +{ + commandList->ResolveQueryData( + gpuTimer->queryHeap, + D3D12_QUERY_TYPE_TIMESTAMP, + gpuTimer->currentFrame * GPU_TIMER_MAX_VALUES_PER_FRAME, + gpuTimer->currentMeasurement, gpuTimer->buffer, + gpuTimer->currentFrame * GPU_TIMER_MAX_VALUES_PER_FRAME * sizeof(uint64_t)); +} + +static void gpuTimerCollectTimings(GpuTimer* gpuTimer, FfxCacaoDetailedTiming* timings) +{ + uint32_t numMeasurements = gpuTimer->currentMeasurement; + uint32_t frame = gpuTimer->currentFrame; + uint32_t start = GPU_TIMER_MAX_VALUES_PER_FRAME * frame; + uint32_t end = GPU_TIMER_MAX_VALUES_PER_FRAME * (frame + 1); + + D3D12_RANGE readRange; + readRange.Begin = start * sizeof(uint64_t); + readRange.End = end * sizeof(uint64_t); + uint64_t *timingsInTicks = NULL; + gpuTimer->buffer->Map(0, &readRange, reinterpret_cast(&timingsInTicks)); + + timings->numTimestamps = numMeasurements; + + uint64_t prevTimeTicks = timingsInTicks[start]; + for (uint32_t i = 1; i < numMeasurements; i++) + { + uint64_t curTimeTicks = timingsInTicks[start + i]; + FfxCacaoTimestamp *t = &timings->timestamps[i]; + t->label = gpuTimer->labels[i]; + t->ticks = curTimeTicks - prevTimeTicks; + prevTimeTicks = curTimeTicks; + } + + timings->timestamps[0].label = "total"; + timings->timestamps[0].ticks = prevTimeTicks - timingsInTicks[start]; +} +#endif + +// ================================================================================================= +// CbvSrvUav implementation +// ================================================================================================= + +typedef struct CbvSrvUav { + uint32_t size; + uint32_t descriptorSize; + D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor; + D3D12_GPU_DESCRIPTOR_HANDLE gpuDescriptor; + D3D12_CPU_DESCRIPTOR_HANDLE cpuVisibleCpuDescriptor; +} CbvSrvUav; + +static D3D12_CPU_DESCRIPTOR_HANDLE cbvSrvUavGetCpu(CbvSrvUav* cbvSrvUav, uint32_t i) +{ + D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor = cbvSrvUav->cpuDescriptor; + cpuDescriptor.ptr += i * cbvSrvUav->descriptorSize; + return cpuDescriptor; +} + +static D3D12_CPU_DESCRIPTOR_HANDLE cbvSrvUavGetCpuVisibleCpu(CbvSrvUav* cbvSrvUav, uint32_t i) +{ + D3D12_CPU_DESCRIPTOR_HANDLE cpuDescriptor = cbvSrvUav->cpuVisibleCpuDescriptor; + cpuDescriptor.ptr += i * cbvSrvUav->descriptorSize; + return cpuDescriptor; +} + +static D3D12_GPU_DESCRIPTOR_HANDLE cbvSrvUavGetGpu(CbvSrvUav* cbvSrvUav, uint32_t i) +{ + D3D12_GPU_DESCRIPTOR_HANDLE gpuDescriptor = cbvSrvUav->gpuDescriptor; + gpuDescriptor.ptr += i * cbvSrvUav->descriptorSize; + return gpuDescriptor; +} + +// ================================================================================================= +// CbvSrvUavHeap implementation +// ================================================================================================= + +typedef struct CbvSrvUavHeap { + uint32_t index; + uint32_t descriptorCount; + uint32_t descriptorElementSize; + ID3D12DescriptorHeap *heap; + ID3D12DescriptorHeap *cpuVisibleHeap; +} ResourceViewHeap; + +static FfxCacaoStatus cbvSrvUavHeapInit(CbvSrvUavHeap* cbvSrvUavHeap, ID3D12Device* device, uint32_t descriptorCount) +{ + FFX_CACAO_ASSERT(cbvSrvUavHeap); + FFX_CACAO_ASSERT(device); + + cbvSrvUavHeap->descriptorCount = descriptorCount; + cbvSrvUavHeap->index = 0; + + cbvSrvUavHeap->descriptorElementSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + + D3D12_DESCRIPTOR_HEAP_DESC descHeap; + descHeap.NumDescriptors = descriptorCount; + descHeap.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + descHeap.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE; + descHeap.NodeMask = 0; + + HRESULT hr = device->CreateDescriptorHeap(&descHeap, IID_PPV_ARGS(&cbvSrvUavHeap->heap)); + if (FAILED(hr)) + { + return hresultToFfxCacaoStatus(hr); + } + + SetName(cbvSrvUavHeap->heap, "FfxCacaoCbvSrvUavHeap"); + + D3D12_DESCRIPTOR_HEAP_DESC cpuVisibleDescHeap; + cpuVisibleDescHeap.NumDescriptors = descriptorCount; + cpuVisibleDescHeap.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV; + cpuVisibleDescHeap.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE; + cpuVisibleDescHeap.NodeMask = 0; + + hr = device->CreateDescriptorHeap(&cpuVisibleDescHeap, IID_PPV_ARGS(&cbvSrvUavHeap->cpuVisibleHeap)); + if (FAILED(hr)) + { + FFX_CACAO_ASSERT(cbvSrvUavHeap->heap); + cbvSrvUavHeap->heap->Release(); + return hresultToFfxCacaoStatus(hr); + } + + SetName(cbvSrvUavHeap->cpuVisibleHeap, "FfxCacaoCbvSrvUavCpuVisibleHeap"); + return FFX_CACAO_STATUS_OK; +} + +static void cbvSrvUavHeapDestroy(CbvSrvUavHeap* cbvSrvUavHeap) +{ + FFX_CACAO_ASSERT(cbvSrvUavHeap); + FFX_CACAO_ASSERT(cbvSrvUavHeap->heap); + FFX_CACAO_ASSERT(cbvSrvUavHeap->cpuVisibleHeap); + cbvSrvUavHeap->heap->Release(); + cbvSrvUavHeap->cpuVisibleHeap->Release(); +} + +static void cbvSrvUavHeapAllocDescriptor(CbvSrvUavHeap* cbvSrvUavHeap, CbvSrvUav* cbvSrvUav, uint32_t size) +{ + FFX_CACAO_ASSERT(cbvSrvUavHeap); + FFX_CACAO_ASSERT(cbvSrvUav); + FFX_CACAO_ASSERT(cbvSrvUavHeap->index + size <= cbvSrvUavHeap->descriptorCount); + + D3D12_CPU_DESCRIPTOR_HANDLE cpuView = cbvSrvUavHeap->heap->GetCPUDescriptorHandleForHeapStart(); + cpuView.ptr += cbvSrvUavHeap->index * cbvSrvUavHeap->descriptorElementSize; + + D3D12_GPU_DESCRIPTOR_HANDLE gpuView = cbvSrvUavHeap->heap->GetGPUDescriptorHandleForHeapStart(); + gpuView.ptr += cbvSrvUavHeap->index * cbvSrvUavHeap->descriptorElementSize; + + D3D12_CPU_DESCRIPTOR_HANDLE cpuVisibleCpuView = cbvSrvUavHeap->cpuVisibleHeap->GetCPUDescriptorHandleForHeapStart(); + cpuVisibleCpuView.ptr += cbvSrvUavHeap->index * cbvSrvUavHeap->descriptorElementSize; + + cbvSrvUavHeap->index += size; + + cbvSrvUav->size = size; + cbvSrvUav->descriptorSize = cbvSrvUavHeap->descriptorElementSize; + cbvSrvUav->cpuDescriptor = cpuView; + cbvSrvUav->gpuDescriptor = gpuView; + cbvSrvUav->cpuVisibleCpuDescriptor = cpuVisibleCpuView; +} + +// ================================================================================================= +// ConstantBufferRing implementation +// ================================================================================================= + +typedef struct ConstantBufferRing { + size_t pageSize; + size_t totalSize; + size_t currentOffset; + uint32_t currentPage; + uint32_t numPages; + char *data; + ID3D12Resource *buffer; +} ConstantBufferRing; + +static FfxCacaoStatus constantBufferRingInit(ConstantBufferRing* constantBufferRing, ID3D12Device* device, uint32_t numPages, size_t pageSize) +{ + FFX_CACAO_ASSERT(constantBufferRing); + FFX_CACAO_ASSERT(device); + + pageSize = AlignOffset(pageSize, 256); + size_t totalSize = numPages * pageSize; + char *data = NULL; + ID3D12Resource *buffer = NULL; + + HRESULT hr = device->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), + D3D12_HEAP_FLAG_NONE, + &CD3DX12_RESOURCE_DESC::Buffer(totalSize), + D3D12_RESOURCE_STATE_GENERIC_READ, + nullptr, + IID_PPV_ARGS(&buffer)); + if (FAILED(hr)) + { + return hresultToFfxCacaoStatus(hr); + } + + SetName(buffer, "DynamicBufferRing::m_pBuffer"); + + buffer->Map(0, NULL, (void**)&data); + + constantBufferRing->pageSize = pageSize; + constantBufferRing->totalSize = totalSize; + constantBufferRing->currentOffset = 0; + constantBufferRing->currentPage = 0; + constantBufferRing->numPages = numPages; + constantBufferRing->data = data; + constantBufferRing->buffer = buffer; + + return FFX_CACAO_STATUS_OK; +} + +static void constantBufferRingDestroy(ConstantBufferRing* constantBufferRing) +{ + FFX_CACAO_ASSERT(constantBufferRing); + FFX_CACAO_ASSERT(constantBufferRing->buffer); + constantBufferRing->buffer->Release(); +} + +static void constantBufferRingStartFrame(ConstantBufferRing* constantBufferRing) +{ + FFX_CACAO_ASSERT(constantBufferRing); + constantBufferRing->currentPage = (constantBufferRing->currentPage + 1) % constantBufferRing->numPages; + constantBufferRing->currentOffset = 0; +} + +static void constantBufferRingAlloc(ConstantBufferRing* constantBufferRing, size_t size, void **data, D3D12_GPU_VIRTUAL_ADDRESS *bufferViewDesc) +{ + FFX_CACAO_ASSERT(constantBufferRing); + size = AlignOffset(size, 256); + FFX_CACAO_ASSERT(constantBufferRing->currentOffset + size <= constantBufferRing->pageSize); + + size_t memOffset = constantBufferRing->pageSize * constantBufferRing->currentPage + constantBufferRing->currentOffset; + *data = constantBufferRing->data + memOffset; + constantBufferRing->currentOffset += size; + + *bufferViewDesc = constantBufferRing->buffer->GetGPUVirtualAddress() + memOffset; +} + +// ================================================================================================= +// ComputeShader implementation +// ================================================================================================= + +typedef struct ComputeShader { + ID3D12RootSignature *rootSignature; + ID3D12PipelineState *pipelineState; +} ComputeShader; + +static FfxCacaoStatus computeShaderInit(ComputeShader* computeShader, ID3D12Device* device, const char* name, const void* bytecode, size_t bytecodeLength, uint32_t uavTableSize, uint32_t srvTableSize, D3D12_STATIC_SAMPLER_DESC* staticSamplers, uint32_t numStaticSamplers) +{ + FFX_CACAO_ASSERT(computeShader); + FFX_CACAO_ASSERT(device); + FFX_CACAO_ASSERT(name); + FFX_CACAO_ASSERT(bytecode); + FFX_CACAO_ASSERT(staticSamplers); + + D3D12_SHADER_BYTECODE shaderByteCode = {}; + shaderByteCode.pShaderBytecode = bytecode; + shaderByteCode.BytecodeLength = bytecodeLength; + + // Create root signature + { + CD3DX12_DESCRIPTOR_RANGE DescRange[4]; + CD3DX12_ROOT_PARAMETER RTSlot[4]; + + // we'll always have a constant buffer + int parameterCount = 0; + DescRange[parameterCount].Init(D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 1, 0); + RTSlot[parameterCount++].InitAsConstantBufferView(0, 0, D3D12_SHADER_VISIBILITY_ALL); + + // if we have a UAV table + if (uavTableSize > 0) + { + DescRange[parameterCount].Init(D3D12_DESCRIPTOR_RANGE_TYPE_UAV, uavTableSize, 0); + RTSlot[parameterCount].InitAsDescriptorTable(1, &DescRange[parameterCount], D3D12_SHADER_VISIBILITY_ALL); + ++parameterCount; + } + + // if we have a SRV table + if (srvTableSize > 0) + { + DescRange[parameterCount].Init(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, srvTableSize, 0); + RTSlot[parameterCount].InitAsDescriptorTable(1, &DescRange[parameterCount], D3D12_SHADER_VISIBILITY_ALL); + ++parameterCount; + } + + // the root signature contains 3 slots to be used + CD3DX12_ROOT_SIGNATURE_DESC descRootSignature = CD3DX12_ROOT_SIGNATURE_DESC(); + descRootSignature.NumParameters = parameterCount; + descRootSignature.pParameters = RTSlot; + descRootSignature.NumStaticSamplers = numStaticSamplers; + descRootSignature.pStaticSamplers = staticSamplers; + + // deny uneccessary access to certain pipeline stages + descRootSignature.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE; + + ID3DBlob *outBlob, *errorBlob = NULL; + + HRESULT hr = D3D12SerializeRootSignature(&descRootSignature, D3D_ROOT_SIGNATURE_VERSION_1, &outBlob, &errorBlob); + if (FAILED(hr)) + { + return hresultToFfxCacaoStatus(hr); + } + + if (errorBlob) + { + errorBlob->Release(); + if (outBlob) + { + outBlob->Release(); + } + return FFX_CACAO_STATUS_FAILED; + } + + hr = device->CreateRootSignature(0, outBlob->GetBufferPointer(), outBlob->GetBufferSize(), IID_PPV_ARGS(&computeShader->rootSignature)); + if (FAILED(hr)) + { + outBlob->Release(); + return hresultToFfxCacaoStatus(hr); + } + + char nameBuffer[1024] = "PostProcCS::m_pRootSignature::"; + strncat_s(nameBuffer, name, FFX_CACAO_ARRAY_SIZE(nameBuffer)); + SetName(computeShader->rootSignature, nameBuffer); + + outBlob->Release(); + } + + // Create pipeline state + { + D3D12_COMPUTE_PIPELINE_STATE_DESC descPso = {}; + descPso.CS = shaderByteCode; + descPso.Flags = D3D12_PIPELINE_STATE_FLAG_NONE; + descPso.pRootSignature = computeShader->rootSignature; + descPso.NodeMask = 0; + + HRESULT hr = device->CreateComputePipelineState(&descPso, IID_PPV_ARGS(&computeShader->pipelineState)); + if (FAILED(hr)) + { + computeShader->rootSignature->Release(); + return hresultToFfxCacaoStatus(hr); + } + + char nameBuffer[1024] = "PostProcCS::m_pPipeline::"; + strncat_s(nameBuffer, name, FFX_CACAO_ARRAY_SIZE(nameBuffer)); + SetName(computeShader->rootSignature, nameBuffer); + } + + return FFX_CACAO_STATUS_OK; +} + +static void computeShaderDestroy(ComputeShader* computeShader) +{ + FFX_CACAO_ASSERT(computeShader); + FFX_CACAO_ASSERT(computeShader->rootSignature); + FFX_CACAO_ASSERT(computeShader->pipelineState); + computeShader->rootSignature->Release(); + computeShader->pipelineState->Release(); +} + +static void computeShaderDraw(ComputeShader* computeShader, ID3D12GraphicsCommandList* commandList, D3D12_GPU_VIRTUAL_ADDRESS constantBuffer, CbvSrvUav *uavTable, CbvSrvUav *srvTable, uint32_t width, uint32_t height, uint32_t depth) +{ + FFX_CACAO_ASSERT(computeShader); + FFX_CACAO_ASSERT(commandList); + FFX_CACAO_ASSERT(uavTable); + FFX_CACAO_ASSERT(srvTable); + FFX_CACAO_ASSERT(computeShader->pipelineState); + FFX_CACAO_ASSERT(computeShader->rootSignature); + + commandList->SetComputeRootSignature(computeShader->rootSignature); + + int params = 0; + commandList->SetComputeRootConstantBufferView(params++, constantBuffer); + if (uavTable) + { + commandList->SetComputeRootDescriptorTable(params++, uavTable->gpuDescriptor); + } + if (srvTable) + { + commandList->SetComputeRootDescriptorTable(params++, srvTable->gpuDescriptor); + } + + commandList->SetPipelineState(computeShader->pipelineState); + commandList->Dispatch(width, height, depth); +} + +// ================================================================================================= +// Texture implementation +// ================================================================================================= + +typedef struct Texture { + ID3D12Resource *resource; + DXGI_FORMAT format; + uint32_t width; + uint32_t height; + uint32_t arraySize; + uint32_t mipMapCount; +} Texture; + +static FfxCacaoStatus textureInit(Texture* texture, ID3D12Device* device, const char* name, const CD3DX12_RESOURCE_DESC* desc, D3D12_RESOURCE_STATES initialState, const D3D12_CLEAR_VALUE* clearValue) +{ + FFX_CACAO_ASSERT(texture); + FFX_CACAO_ASSERT(device); + FFX_CACAO_ASSERT(name); + FFX_CACAO_ASSERT(desc); + + HRESULT hr = device->CreateCommittedResource( + &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT), + D3D12_HEAP_FLAG_NONE, + desc, + initialState, + clearValue, + IID_PPV_ARGS(&texture->resource)); + if (FAILED(hr)) + { + return hresultToFfxCacaoStatus(hr); + } + + texture->format = desc->Format; + texture->width = (uint32_t)desc->Width; + texture->height = desc->Height; + texture->arraySize = desc->DepthOrArraySize; + texture->mipMapCount = desc->MipLevels; + + SetName(texture->resource, name); + + return FFX_CACAO_STATUS_OK; +} + +static void textureDestroy(Texture* texture) +{ + FFX_CACAO_ASSERT(texture); + FFX_CACAO_ASSERT(texture->resource); + texture->resource->Release(); +} + +static void textureCreateSrvFromDesc(Texture* texture, uint32_t index, CbvSrvUav* srv, const D3D12_SHADER_RESOURCE_VIEW_DESC* srvDesc) +{ + FFX_CACAO_ASSERT(texture); + FFX_CACAO_ASSERT(srv); + FFX_CACAO_ASSERT(srvDesc); + + ID3D12Device* device; + texture->resource->GetDevice(__uuidof(*device), (void**)&device); + + device->CreateShaderResourceView(texture->resource, srvDesc, cbvSrvUavGetCpu(srv, index)); + device->CreateShaderResourceView(texture->resource, srvDesc, cbvSrvUavGetCpuVisibleCpu(srv, index)); + + device->Release(); +} + +static void textureCreateSrv(Texture* texture, uint32_t index, CbvSrvUav* srv, int mipLevel, int arraySize, int firstArraySlice) +{ + FFX_CACAO_ASSERT(texture); + FFX_CACAO_ASSERT(srv); + + D3D12_RESOURCE_DESC resourceDesc = texture->resource->GetDesc(); + + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + + srvDesc.Format = resourceDesc.Format == DXGI_FORMAT_D32_FLOAT ? DXGI_FORMAT_R32_FLOAT : resourceDesc.Format; + if (resourceDesc.SampleDesc.Count == 1) + { + if (resourceDesc.DepthOrArraySize == 1) + { + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + srvDesc.Texture2D.MostDetailedMip = (mipLevel == -1) ? 0 : mipLevel; + srvDesc.Texture2D.MipLevels = (mipLevel == -1) ? texture->mipMapCount : 1; + FFX_CACAO_ASSERT(arraySize == -1); + FFX_CACAO_ASSERT(firstArraySlice == -1); + } + else + { + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + srvDesc.Texture2DArray.MostDetailedMip = (mipLevel == -1) ? 0 : mipLevel; + srvDesc.Texture2DArray.MipLevels = (mipLevel == -1) ? texture->mipMapCount : 1; + srvDesc.Texture2DArray.FirstArraySlice = (firstArraySlice == -1) ? 0 : firstArraySlice; + srvDesc.Texture2DArray.ArraySize = (arraySize == -1) ? resourceDesc.DepthOrArraySize : arraySize; + } + } + else + { + if (resourceDesc.DepthOrArraySize == 1) + { + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + FFX_CACAO_ASSERT(mipLevel == -1); + FFX_CACAO_ASSERT(arraySize == -1); + FFX_CACAO_ASSERT(firstArraySlice == -1); + } + else + { + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY; + srvDesc.Texture2DMSArray.FirstArraySlice = (firstArraySlice == -1) ? 0 : firstArraySlice; + srvDesc.Texture2DMSArray.ArraySize = (arraySize == -1) ? resourceDesc.DepthOrArraySize : arraySize; + FFX_CACAO_ASSERT(mipLevel == -1); + } + } + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + textureCreateSrvFromDesc(texture, index, srv, &srvDesc); +} + +static void textureCreateUavFromDesc(Texture* texture, uint32_t index, CbvSrvUav* uav, const D3D12_UNORDERED_ACCESS_VIEW_DESC* uavDesc) +{ + FFX_CACAO_ASSERT(texture); + FFX_CACAO_ASSERT(uav); + FFX_CACAO_ASSERT(uavDesc); + + ID3D12Device* device; + texture->resource->GetDevice(__uuidof(*device), (void**)&device); + + device->CreateUnorderedAccessView(texture->resource, NULL, uavDesc, cbvSrvUavGetCpu(uav, index)); + device->CreateUnorderedAccessView(texture->resource, NULL, uavDesc, cbvSrvUavGetCpuVisibleCpu(uav, index)); + + device->Release(); +} + +static void textureCreateUav(Texture* texture, uint32_t index, CbvSrvUav* uav, int mipLevel, int arraySize, int firstArraySlice) +{ + FFX_CACAO_ASSERT(texture); + FFX_CACAO_ASSERT(uav); + + D3D12_RESOURCE_DESC resourceDesc = texture->resource->GetDesc(); + + D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {}; + + uavDesc.Format = resourceDesc.Format; + if (arraySize == -1) + { + FFX_CACAO_ASSERT(firstArraySlice == -1); + uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + uavDesc.Texture2D.MipSlice = (mipLevel == -1) ? 0 : mipLevel; + } + else + { + uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + uavDesc.Texture2DArray.ArraySize = arraySize; + uavDesc.Texture2DArray.FirstArraySlice = firstArraySlice; + uavDesc.Texture2DArray.MipSlice = (mipLevel == -1) ? 0 : mipLevel; + } + + textureCreateUavFromDesc(texture, index, uav, &uavDesc); +} + +// ================================================================================================= +// CACAO implementation +// ================================================================================================= + +struct FfxCacaoD3D12Context { + FfxCacaoSettings settings; + FfxCacaoBool useDownsampledSsao; + + ID3D12Device *device; + CbvSrvUavHeap cbvSrvUavHeap; + +#if FFX_CACAO_ENABLE_PROFILING + GpuTimer gpuTimer; +#endif + + ConstantBufferRing constantBufferRing; + BufferSizeInfo bufferSizeInfo; + ID3D12Resource *outputResource; + + // ========================================== + // Prepare shaders/resources + + ComputeShader prepareDownsampledDepthsAndMips; + ComputeShader prepareNativeDepthsAndMips; + + ComputeShader prepareDownsampledNormals; + ComputeShader prepareNativeNormals; + + ComputeShader prepareDownsampledNormalsFromInputNormals; + ComputeShader prepareNativeNormalsFromInputNormals; + + ComputeShader prepareDownsampledDepths; + ComputeShader prepareNativeDepths; + + ComputeShader prepareDownsampledDepthsHalf; + ComputeShader prepareNativeDepthsHalf; + + CbvSrvUav prepareDepthsNormalsAndMipsInputs; // <-- this is just the depth source + CbvSrvUav prepareDepthsAndMipsOutputs; + CbvSrvUav prepareDepthsOutputs; + CbvSrvUav prepareNormalsOutput; + CbvSrvUav prepareNormalsFromInputNormalsInput; + CbvSrvUav prepareNormalsFromInputNormalsOutput; + + // ========================================== + // Generate SSAO shaders/resources + + ComputeShader generateSSAO[5]; + + CbvSrvUav generateSSAOInputs[4]; + CbvSrvUav generateAdaptiveSSAOInputs[4]; + CbvSrvUav generateSSAOOutputsFinal[4]; + CbvSrvUav generateSSAOOutputsPing[4]; + + // ========================================== + // Importance map generate/post process shaders/resources + + ComputeShader generateImportanceMap; + ComputeShader postprocessImportanceMapA; + ComputeShader postprocessImportanceMapB; + + CbvSrvUav generateImportanceMapInputs; + CbvSrvUav generateImportanceMapOutputs; + CbvSrvUav generateImportanceMapAInputs; + CbvSrvUav generateImportanceMapAOutputs; + CbvSrvUav generateImportanceMapBInputs; + CbvSrvUav generateImportanceMapBOutputs; + + // ========================================== + // De-interleave Blur shaders/resources + + ComputeShader edgeSensitiveBlur[8]; + + CbvSrvUav pingPongHalfResultASRV[4]; + CbvSrvUav finalResultsArrayUAV[4]; + + // ========================================== + // Apply shaders/resources + + ComputeShader smartApply; + ComputeShader nonSmartApply; + ComputeShader nonSmartHalfApply; + + CbvSrvUav createOutputInputs; + CbvSrvUav createOutputOutputs; + + // ========================================== + // upscale shaders/resources + + ComputeShader upscaleBilateral5x5; + ComputeShader upscaleBilateral5x5Half; + + CbvSrvUav bilateralUpscaleInputs; + CbvSrvUav bilateralUpscaleOutputs; + + // ========================================== + // Intermediate buffers + + Texture halfDepthsArray; + Texture pingPongHalfResultA[4]; + Texture finalResults; + Texture deinterlacedNormals; + Texture importanceMap; + Texture importanceMapPong; + Texture loadCounter; + + CbvSrvUav loadCounterUav; // required for LoadCounter clear +}; + +static inline FfxCacaoD3D12Context* getAlignedD3D12ContextPointer(FfxCacaoD3D12Context* ptr) +{ + uintptr_t tmp = (uintptr_t)ptr; + tmp = (tmp + alignof(FfxCacaoD3D12Context) - 1) & (~(alignof(FfxCacaoD3D12Context) - 1)); + return (FfxCacaoD3D12Context*)tmp; +} +#endif + +// ================================================================================= +// Interface +// ================================================================================= + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if FFX_CACAO_ENABLE_D3D12 +size_t ffxCacaoD3D12GetContextSize() +{ + return sizeof(FfxCacaoD3D12Context) + alignof(FfxCacaoD3D12Context) - 1; +} + +FfxCacaoStatus ffxCacaoD3D12InitContext(FfxCacaoD3D12Context* context, ID3D12Device* device) +{ + if (context == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + if (device == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + +#define COMPUTE_SHADER_INIT(name, entryPoint, uavSize, srvSize) \ + errorStatus = computeShaderInit(&context->name, device, #entryPoint, entryPoint ## DXIL, sizeof(entryPoint ## DXIL), uavSize, srvSize, samplers, FFX_CACAO_ARRAY_SIZE(samplers)); \ + if (errorStatus) \ + { \ + goto error_create_ ## entryPoint; \ + } +#define ERROR_COMPUTE_SHADER_DESTROY(name, entryPoint) \ + computeShaderDestroy(&context->name); \ +error_create_ ## entryPoint: + + FfxCacaoStatus errorStatus = FFX_CACAO_STATUS_FAILED; + + context->device = device; + CbvSrvUavHeap *cbvSrvUavHeap = &context->cbvSrvUavHeap; + errorStatus = cbvSrvUavHeapInit(cbvSrvUavHeap, device, 256); + if (errorStatus) + { + goto error_create_cbv_srv_uav_heap; + } + errorStatus = constantBufferRingInit(&context->constantBufferRing, device, 5, 1024 * 5); + if (errorStatus) + { + goto error_create_constant_buffer_ring; + } +#if FFX_CACAO_ENABLE_PROFILING + errorStatus = gpuTimerInit(&context->gpuTimer, device, 5); + if (errorStatus) + { + goto error_create_gpu_timer; + } +#endif + + D3D12_STATIC_SAMPLER_DESC samplers[5] = { }; + + samplers[0].Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + samplers[0].AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[0].AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[0].AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[0].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; + samplers[0].BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + samplers[0].MinLOD = 0.0f; + samplers[0].MaxLOD = D3D12_FLOAT32_MAX; + samplers[0].MipLODBias = 0; + samplers[0].MaxAnisotropy = 1; + samplers[0].ShaderRegister = 0; + samplers[0].RegisterSpace = 0; + samplers[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; + + samplers[1].Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + samplers[1].AddressU = D3D12_TEXTURE_ADDRESS_MODE_MIRROR; + samplers[1].AddressV = D3D12_TEXTURE_ADDRESS_MODE_MIRROR; + samplers[1].AddressW = D3D12_TEXTURE_ADDRESS_MODE_MIRROR; + samplers[1].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; + samplers[1].BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + samplers[1].MinLOD = 0.0f; + samplers[1].MaxLOD = D3D12_FLOAT32_MAX; + samplers[1].MipLODBias = 0; + samplers[1].MaxAnisotropy = 1; + samplers[1].ShaderRegister = 1; + samplers[1].RegisterSpace = 0; + samplers[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; + + samplers[2].Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR; + samplers[2].AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[2].AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[2].AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[2].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; + samplers[2].BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + samplers[2].MinLOD = 0.0f; + samplers[2].MaxLOD = D3D12_FLOAT32_MAX; + samplers[2].MipLODBias = 0; + samplers[2].MaxAnisotropy = 1; + samplers[2].ShaderRegister = 2; + samplers[2].RegisterSpace = 0; + samplers[2].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; + + samplers[3].Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + samplers[3].AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[3].AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[3].AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + samplers[3].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; + samplers[3].BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + samplers[3].MinLOD = 0.0f; + samplers[3].MaxLOD = D3D12_FLOAT32_MAX; + samplers[3].MipLODBias = 0; + samplers[3].MaxAnisotropy = 1; + samplers[3].ShaderRegister = 3; + samplers[3].RegisterSpace = 0; + samplers[3].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; + + samplers[4].Filter = D3D12_FILTER_MIN_MAG_MIP_POINT; + samplers[4].AddressU = D3D12_TEXTURE_ADDRESS_MODE_BORDER; + samplers[4].AddressV = D3D12_TEXTURE_ADDRESS_MODE_BORDER; + samplers[4].AddressW = D3D12_TEXTURE_ADDRESS_MODE_BORDER; + samplers[4].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; + samplers[4].BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + samplers[4].MinLOD = 0.0f; + samplers[4].MaxLOD = D3D12_FLOAT32_MAX; + samplers[4].MipLODBias = 0; + samplers[4].MaxAnisotropy = 1; + samplers[4].ShaderRegister = 4; + samplers[4].RegisterSpace = 0; + samplers[4].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL; + + // ===================================== + // Prepare shaders/resources + + COMPUTE_SHADER_INIT(prepareDownsampledDepthsHalf, CSPrepareDownsampledDepthsHalf, 1, 1); + COMPUTE_SHADER_INIT(prepareNativeDepthsHalf, CSPrepareNativeDepthsHalf, 1, 1); + + COMPUTE_SHADER_INIT(prepareDownsampledDepthsAndMips, CSPrepareDownsampledDepthsAndMips, 4, 1); + COMPUTE_SHADER_INIT(prepareNativeDepthsAndMips, CSPrepareNativeDepthsAndMips, 4, 1); + + COMPUTE_SHADER_INIT(prepareDownsampledNormals, CSPrepareDownsampledNormals, 1, 1); + COMPUTE_SHADER_INIT(prepareNativeNormals, CSPrepareNativeNormals, 1, 1); + + COMPUTE_SHADER_INIT(prepareDownsampledNormalsFromInputNormals, CSPrepareDownsampledNormalsFromInputNormals, 1, 1); + COMPUTE_SHADER_INIT(prepareNativeNormalsFromInputNormals, CSPrepareNativeNormalsFromInputNormals, 1, 1); + + COMPUTE_SHADER_INIT(prepareDownsampledDepths, CSPrepareDownsampledDepths, 1, 1); + COMPUTE_SHADER_INIT(prepareNativeDepths, CSPrepareNativeDepths, 1, 1); + + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->prepareDepthsAndMipsOutputs, 4); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->prepareDepthsOutputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->prepareDepthsNormalsAndMipsInputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->prepareNormalsOutput, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->prepareNormalsFromInputNormalsInput, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->prepareNormalsFromInputNormalsOutput, 1); + + // ===================================== + // Generate SSAO shaders/resources + + COMPUTE_SHADER_INIT(generateSSAO[0], CSGenerateQ0, 1, 7); + COMPUTE_SHADER_INIT(generateSSAO[1], CSGenerateQ1, 1, 7); + COMPUTE_SHADER_INIT(generateSSAO[2], CSGenerateQ2, 1, 7); + COMPUTE_SHADER_INIT(generateSSAO[3], CSGenerateQ3, 1, 7); + COMPUTE_SHADER_INIT(generateSSAO[4], CSGenerateQ3Base, 2, 7); + + for (int i = 0; i < 4; ++i) + { + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateSSAOInputs[i], 7); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateAdaptiveSSAOInputs[i], 7); + + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateSSAOOutputsFinal[i], 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateSSAOOutputsPing[i], 1); + } + + // ===================================== + // Importance map shaders/resources + + COMPUTE_SHADER_INIT(generateImportanceMap, CSGenerateImportanceMap, 1, 1); + COMPUTE_SHADER_INIT(postprocessImportanceMapA, CSPostprocessImportanceMapA, 1, 1); + COMPUTE_SHADER_INIT(postprocessImportanceMapB, CSPostprocessImportanceMapB, 2, 1); + + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateImportanceMapInputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateImportanceMapOutputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateImportanceMapAInputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateImportanceMapAOutputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateImportanceMapBInputs, 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->generateImportanceMapBOutputs, 2); + + // ===================================== + // De-interleave Blur shaders/resources + + COMPUTE_SHADER_INIT(edgeSensitiveBlur[0], CSEdgeSensitiveBlur1, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[1], CSEdgeSensitiveBlur2, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[2], CSEdgeSensitiveBlur3, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[3], CSEdgeSensitiveBlur4, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[4], CSEdgeSensitiveBlur5, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[5], CSEdgeSensitiveBlur6, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[6], CSEdgeSensitiveBlur7, 1, 1); + COMPUTE_SHADER_INIT(edgeSensitiveBlur[7], CSEdgeSensitiveBlur8, 1, 1); + + for (int i = 0; i < 4; ++i) + { + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->finalResultsArrayUAV[i], 1); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->pingPongHalfResultASRV[i], 1); + } + + // ===================================== + // Apply shaders/resources + + COMPUTE_SHADER_INIT(smartApply, CSApply, 1, 1); + COMPUTE_SHADER_INIT(nonSmartApply, CSNonSmartApply, 1, 1); + COMPUTE_SHADER_INIT(nonSmartHalfApply, CSNonSmartHalfApply, 1, 1); + + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->createOutputInputs, 4); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->createOutputOutputs, 1); + + // ===================================== + // Upacale shaders/resources + + COMPUTE_SHADER_INIT(upscaleBilateral5x5, CSUpscaleBilateral5x5, 1, 4); + COMPUTE_SHADER_INIT(upscaleBilateral5x5Half, CSUpscaleBilateral5x5Half, 1, 4); + + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->bilateralUpscaleInputs, 4); + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->bilateralUpscaleOutputs, 1); + + // ===================================== + // Misc + + errorStatus = textureInit(&context->loadCounter, device, "CACAO::m_loadCounter", &CD3DX12_RESOURCE_DESC::Tex1D(DXGI_FORMAT_R32_UINT, 1, 1, 1, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS), D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL); + if (errorStatus) + { + goto error_create_load_counter_texture; + } + + // create uav for load counter + { + D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {}; + uavDesc.Format = DXGI_FORMAT_R32_UINT; + uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D; + uavDesc.Texture1D.MipSlice = 0; + + cbvSrvUavHeapAllocDescriptor(cbvSrvUavHeap, &context->loadCounterUav, 1); // required for clearing the load counter + textureCreateUavFromDesc(&context->loadCounter, 0, &context->loadCounterUav, &uavDesc); + } + + return FFX_CACAO_STATUS_OK; + +error_create_load_counter_texture: + + ERROR_COMPUTE_SHADER_DESTROY(upscaleBilateral5x5Half, CSUpscaleBilateral5x5Half); + ERROR_COMPUTE_SHADER_DESTROY(upscaleBilateral5x5, CSUpscaleBilateral5x5); + + ERROR_COMPUTE_SHADER_DESTROY(nonSmartHalfApply, CSNonSmartHalfApply); + ERROR_COMPUTE_SHADER_DESTROY(nonSmartApply, CSNonSmartApply); + ERROR_COMPUTE_SHADER_DESTROY(smartApply, CSApply); + + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[7], CSEdgeSensitiveBlur8); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[6], CSEdgeSensitiveBlur7); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[5], CSEdgeSensitiveBlur6); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[4], CSEdgeSensitiveBlur5); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[3], CSEdgeSensitiveBlur4); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[2], CSEdgeSensitiveBlur3); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[1], CSEdgeSensitiveBlur2); + ERROR_COMPUTE_SHADER_DESTROY(edgeSensitiveBlur[0], CSEdgeSensitiveBlur1); + + ERROR_COMPUTE_SHADER_DESTROY(postprocessImportanceMapB, CSPostprocessImportanceMapB); + ERROR_COMPUTE_SHADER_DESTROY(postprocessImportanceMapA, CSPostprocessImportanceMapA); + ERROR_COMPUTE_SHADER_DESTROY(generateImportanceMap, CSGenerateImportanceMap); + + ERROR_COMPUTE_SHADER_DESTROY(generateSSAO[4], CSGenerateQ3Base); + ERROR_COMPUTE_SHADER_DESTROY(generateSSAO[3], CSGenerateQ3); + ERROR_COMPUTE_SHADER_DESTROY(generateSSAO[2], CSGenerateQ2); + ERROR_COMPUTE_SHADER_DESTROY(generateSSAO[1], CSGenerateQ1); + ERROR_COMPUTE_SHADER_DESTROY(generateSSAO[0], CSGenerateQ0); + + ERROR_COMPUTE_SHADER_DESTROY(prepareNativeDepths, CSPrepareNativeDepths); + ERROR_COMPUTE_SHADER_DESTROY(prepareDownsampledDepths, CSPrepareDownsampledDepths); + + ERROR_COMPUTE_SHADER_DESTROY(prepareNativeNormalsFromInputNormals, CSPrepareNativeNormalsFromInputNormals); + ERROR_COMPUTE_SHADER_DESTROY(prepareDownsampledNormalsFromInputNormals, CSPrepareDownsampledNormalsFromInputNormals); + + ERROR_COMPUTE_SHADER_DESTROY(prepareNativeNormals, CSPrepareNativeNormals); + ERROR_COMPUTE_SHADER_DESTROY(prepareDownsampledNormals, CSPrepareDownsampledNormals); + + ERROR_COMPUTE_SHADER_DESTROY(prepareNativeDepthsAndMips, CSPrepareNativeDepthsAndMips); + ERROR_COMPUTE_SHADER_DESTROY(prepareDownsampledDepthsAndMips, CSPrepareDownsampledDepthsAndMips); + + ERROR_COMPUTE_SHADER_DESTROY(prepareNativeDepthsHalf, CSPrepareNativeDepthsHalf); + ERROR_COMPUTE_SHADER_DESTROY(prepareDownsampledDepthsHalf, CSPrepareDownsampledDepthsHalf); + +#if FFX_CACAO_ENABLE_PROFILING + gpuTimerDestroy(&context->gpuTimer); +error_create_gpu_timer: +#endif + constantBufferRingDestroy(&context->constantBufferRing); +error_create_constant_buffer_ring: + cbvSrvUavHeapDestroy(&context->cbvSrvUavHeap); +error_create_cbv_srv_uav_heap: + + return errorStatus; + +#undef COMPUTE_SHADER_INIT +#undef ERROR_COMPUTE_SHADER_DESTROY +} + +FfxCacaoStatus ffxCacaoD3D12DestroyContext(FfxCacaoD3D12Context* context) +{ + if (context == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + + textureDestroy(&context->loadCounter); + + computeShaderDestroy(&context->upscaleBilateral5x5Half); + computeShaderDestroy(&context->upscaleBilateral5x5); + + computeShaderDestroy(&context->nonSmartHalfApply); + computeShaderDestroy(&context->nonSmartApply); + computeShaderDestroy(&context->smartApply); + + computeShaderDestroy(&context->edgeSensitiveBlur[7]); + computeShaderDestroy(&context->edgeSensitiveBlur[6]); + computeShaderDestroy(&context->edgeSensitiveBlur[5]); + computeShaderDestroy(&context->edgeSensitiveBlur[4]); + computeShaderDestroy(&context->edgeSensitiveBlur[3]); + computeShaderDestroy(&context->edgeSensitiveBlur[2]); + computeShaderDestroy(&context->edgeSensitiveBlur[1]); + computeShaderDestroy(&context->edgeSensitiveBlur[0]); + + computeShaderDestroy(&context->postprocessImportanceMapB); + computeShaderDestroy(&context->postprocessImportanceMapA); + computeShaderDestroy(&context->generateImportanceMap); + + computeShaderDestroy(&context->generateSSAO[4]); + computeShaderDestroy(&context->generateSSAO[3]); + computeShaderDestroy(&context->generateSSAO[2]); + computeShaderDestroy(&context->generateSSAO[1]); + computeShaderDestroy(&context->generateSSAO[0]); + + computeShaderDestroy(&context->prepareNativeDepths); + computeShaderDestroy(&context->prepareDownsampledDepths); + + computeShaderDestroy(&context->prepareNativeNormalsFromInputNormals); + computeShaderDestroy(&context->prepareDownsampledNormalsFromInputNormals); + + computeShaderDestroy(&context->prepareNativeNormals); + computeShaderDestroy(&context->prepareDownsampledNormals); + + computeShaderDestroy(&context->prepareNativeDepthsAndMips); + computeShaderDestroy(&context->prepareDownsampledDepthsAndMips); + + computeShaderDestroy(&context->prepareNativeDepthsHalf); + computeShaderDestroy(&context->prepareDownsampledDepthsHalf); + +#if FFX_CACAO_ENABLE_PROFILING + gpuTimerDestroy(&context->gpuTimer); +#endif + constantBufferRingDestroy(&context->constantBufferRing); + cbvSrvUavHeapDestroy(&context->cbvSrvUavHeap); + + return FFX_CACAO_STATUS_OK; +} + +FfxCacaoStatus ffxCacaoD3D12InitScreenSizeDependentResources(FfxCacaoD3D12Context* context, const FfxCacaoD3D12ScreenSizeInfo* info, FfxCacaoBool useDownsampledSsao) +{ + if (context == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + if (info == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + + context->useDownsampledSsao = useDownsampledSsao; + FfxCacaoStatus errorStatus; + +#define TEXTURE_INIT(name, label, format, width, height, arraySize, mipLevels) \ + errorStatus = textureInit(&context->name, device, "CACAO::" #name, &CD3DX12_RESOURCE_DESC::Tex2D(format, width, height, arraySize, mipLevels, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS), D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL); \ + if (errorStatus) \ + { \ + goto error_create_texture_ ## label;\ + } +#define ERROR_TEXTURE_DESTROY(name, label) \ + textureDestroy(&context->name); \ +error_create_texture_ ## label: + + + ID3D12Device * device = context->device; + + uint32_t width = info->width; + uint32_t height = info->height; + uint32_t halfWidth = (width + 1) / 2; + uint32_t halfHeight = (height + 1) / 2; + uint32_t quarterWidth = (halfWidth + 1) / 2; + uint32_t quarterHeight = (halfHeight + 1) / 2; + uint32_t eighthWidth = (quarterWidth + 1) / 2; + uint32_t eighthHeight = (quarterHeight + 1) / 2; + +#if 1 + uint32_t depthBufferWidth = width; + uint32_t depthBufferHeight = height; + uint32_t depthBufferHalfWidth = halfWidth; + uint32_t depthBufferHalfHeight = halfHeight; + uint32_t depthBufferQuarterWidth = quarterWidth; + uint32_t depthBufferQuarterHeight = quarterHeight; + + uint32_t depthBufferXOffset = 0; + uint32_t depthBufferYOffset = 0; + uint32_t depthBufferHalfXOffset = 0; + uint32_t depthBufferHalfYOffset = 0; + uint32_t depthBufferQuarterXOffset = 0; + uint32_t depthBufferQuarterYOffset = 0; +#else + uint32_t depthBufferWidth = info->depthBufferWidth; + uint32_t depthBufferHeight = info->depthBufferHeight; + uint32_t depthBufferHalfWidth = (depthBufferWidth + 1) / 2; + uint32_t depthBufferHalfHeight = (depthBufferHeight + 1) / 2; + uint32_t depthBufferQuarterWidth = (depthBufferHalfWidth + 1) / 2; + uint32_t depthBufferQuarterHeight = (depthBufferHalfHeight + 1) / 2; + + uint32_t depthBufferXOffset = info->depthBufferXOffset; + uint32_t depthBufferYOffset = info->depthBufferYOffset; + uint32_t depthBufferHalfXOffset = (depthBufferXOffset + 1) / 2; // XXX - is this really right? + uint32_t depthBufferHalfYOffset = (depthBufferYOffset + 1) / 2; // XXX - is this really right? + uint32_t depthBufferQuarterXOffset = (depthBufferHalfXOffset + 1) / 2; // XXX - is this really right? + uint32_t depthBufferQuarterYOffset = (depthBufferHalfYOffset + 1) / 2; // XXX - is this really right? +#endif + + BufferSizeInfo bsi = {}; + bsi.inputOutputBufferWidth = width; + bsi.inputOutputBufferHeight = height; + bsi.depthBufferXOffset = depthBufferXOffset; + bsi.depthBufferYOffset = depthBufferYOffset; + bsi.depthBufferWidth = depthBufferWidth; + bsi.depthBufferHeight = depthBufferHeight; + + if (useDownsampledSsao) + { + bsi.ssaoBufferWidth = quarterWidth; + bsi.ssaoBufferHeight = quarterHeight; + bsi.deinterleavedDepthBufferXOffset = depthBufferQuarterXOffset; + bsi.deinterleavedDepthBufferYOffset = depthBufferQuarterYOffset; + bsi.deinterleavedDepthBufferWidth = depthBufferQuarterWidth; + bsi.deinterleavedDepthBufferHeight = depthBufferQuarterHeight; + bsi.importanceMapWidth = eighthWidth; + bsi.importanceMapHeight = eighthHeight; + } + else + { + bsi.ssaoBufferWidth = halfWidth; + bsi.ssaoBufferHeight = halfHeight; + bsi.deinterleavedDepthBufferXOffset = depthBufferHalfXOffset; + bsi.deinterleavedDepthBufferYOffset = depthBufferHalfYOffset; + bsi.deinterleavedDepthBufferWidth = depthBufferHalfWidth; + bsi.deinterleavedDepthBufferHeight = depthBufferHalfHeight; + bsi.importanceMapWidth = quarterWidth; + bsi.importanceMapHeight = quarterHeight; + } + + context->bufferSizeInfo = bsi; + + // ======================================= + // allocate intermediate textures + + TEXTURE_INIT(halfDepthsArray, half_depths_array, DXGI_FORMAT_R16_FLOAT, bsi.deinterleavedDepthBufferWidth, bsi.deinterleavedDepthBufferHeight, 4, 4); + TEXTURE_INIT(pingPongHalfResultA[0], ping_pong_half_result_0, DXGI_FORMAT_R8G8_UNORM, bsi.ssaoBufferWidth, bsi.ssaoBufferHeight, 1, 1); + TEXTURE_INIT(pingPongHalfResultA[1], ping_pong_half_result_1, DXGI_FORMAT_R8G8_UNORM, bsi.ssaoBufferWidth, bsi.ssaoBufferHeight, 1, 1); + TEXTURE_INIT(pingPongHalfResultA[2], ping_pong_half_result_2, DXGI_FORMAT_R8G8_UNORM, bsi.ssaoBufferWidth, bsi.ssaoBufferHeight, 1, 1); + TEXTURE_INIT(pingPongHalfResultA[3], ping_pong_half_result_3, DXGI_FORMAT_R8G8_UNORM, bsi.ssaoBufferWidth, bsi.ssaoBufferHeight, 1, 1); + TEXTURE_INIT(finalResults, final_results, DXGI_FORMAT_R8G8_UNORM, bsi.ssaoBufferWidth, bsi.ssaoBufferHeight, 4, 1); + TEXTURE_INIT(deinterlacedNormals, deinterlaced_normals, DXGI_FORMAT_R8G8B8A8_SNORM, bsi.ssaoBufferWidth, bsi.ssaoBufferHeight, 4, 1); + TEXTURE_INIT(importanceMap, importance_map, DXGI_FORMAT_R8_UNORM, bsi.importanceMapWidth, bsi.importanceMapHeight, 1, 1); + TEXTURE_INIT(importanceMapPong, importance_map_pong, DXGI_FORMAT_R8_UNORM, bsi.importanceMapWidth, bsi.importanceMapHeight, 1, 1); + + // ======================================= + // Init Prepare SRVs/UAVs + + for (int i = 0; i < 4; ++i) + { + textureCreateUav(&context->halfDepthsArray, i, &context->prepareDepthsAndMipsOutputs, i, 4, 0); + } + textureCreateUav(&context->halfDepthsArray, 0, &context->prepareDepthsOutputs, 0, 4, 0); + textureCreateUav(&context->deinterlacedNormals, 0, &context->prepareNormalsOutput, 0, 4, 0); + + device->CreateShaderResourceView(info->depthBufferResource, &info->depthBufferSrvDesc, context->prepareDepthsNormalsAndMipsInputs.cpuDescriptor); + + textureCreateUav(&context->deinterlacedNormals, 0, &context->prepareNormalsFromInputNormalsOutput, 0, 4, 0); + device->CreateShaderResourceView(info->normalBufferResource, &info->normalBufferSrvDesc, context->prepareNormalsFromInputNormalsInput.cpuDescriptor); + + // ======================================= + // Init Generate SSAO SRVs/UAVs + + for (int i = 0; i < 4; ++i) + { + D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {}; + srvDesc.Format = DXGI_FORMAT_R32_UINT; + srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + srvDesc.Texture1D.MostDetailedMip = 0; + srvDesc.Texture1D.MipLevels = 1; + + D3D12_SHADER_RESOURCE_VIEW_DESC zeroTextureSRVDesc = {}; + zeroTextureSRVDesc.Format = DXGI_FORMAT_R32_FLOAT; + zeroTextureSRVDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + zeroTextureSRVDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + zeroTextureSRVDesc.Texture1D.MostDetailedMip = 0; + zeroTextureSRVDesc.Texture1D.MipLevels = 1; + + D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {}; + uavDesc.Format = DXGI_FORMAT_R32_UINT; + uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D; + uavDesc.Texture1D.MipSlice = 0; + + textureCreateSrv(&context->halfDepthsArray, 0, &context->generateSSAOInputs[i], -1, 1, i); + textureCreateSrv(&context->deinterlacedNormals, 6, &context->generateSSAOInputs[i], 0, 4, 0); + + + textureCreateSrv(&context->halfDepthsArray, 0, &context->generateAdaptiveSSAOInputs[i], -1, 1, i); + textureCreateSrvFromDesc(&context->loadCounter, 2, &context->generateAdaptiveSSAOInputs[i], &srvDesc); + textureCreateSrv(&context->importanceMap, 3, &context->generateAdaptiveSSAOInputs[i], -1, -1, -1); + textureCreateSrv(&context->finalResults, 4, &context->generateAdaptiveSSAOInputs[i], -1, -1, -1); + textureCreateSrv(&context->deinterlacedNormals, 6, &context->generateAdaptiveSSAOInputs[i], 0, 4, 0); + + textureCreateUav(&context->finalResults, 0, &context->generateSSAOOutputsFinal[i], 0, 1, i); + + textureCreateUav(&context->pingPongHalfResultA[i], 0, &context->generateSSAOOutputsPing[i], -1, -1, -1); + + } + + // ======================================= + // Init Generate/Postprocess Importance map SRVs/UAVs + + { + D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {}; + uavDesc.Format = DXGI_FORMAT_R32_UINT; + uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D; + uavDesc.Texture1D.MipSlice = 0; + + textureCreateSrv(&context->finalResults, 0, &context->generateImportanceMapInputs, -1, -1, -1); + textureCreateUav(&context->importanceMap, 0, &context->generateImportanceMapOutputs, -1, -1, -1); + + textureCreateSrv(&context->importanceMap, 0, &context->generateImportanceMapAInputs, -1, -1, -1); + textureCreateUav(&context->importanceMapPong, 0, &context->generateImportanceMapAOutputs, -1, -1, -1); + + textureCreateSrv(&context->importanceMapPong, 0, &context->generateImportanceMapBInputs, -1, -1, -1); + textureCreateUav(&context->importanceMap, 0, &context->generateImportanceMapBOutputs, -1, -1, -1); + textureCreateUavFromDesc(&context->loadCounter, 1, &context->generateImportanceMapBOutputs, &uavDesc); + } + + // ======================================= + // Init De-interleave Blur SRVs/UAVs + + for (int i = 0; i < 4; ++i) + { + textureCreateSrv(&context->pingPongHalfResultA[i], 0, &context->pingPongHalfResultASRV[i], -1, -1, -1); + textureCreateUav(&context->finalResults, 0, &context->finalResultsArrayUAV[i], 0, 1, i); + } + + // ======================================= + // Init apply SRVs/UAVs + + textureCreateSrv(&context->finalResults, 0, &context->createOutputInputs, -1, -1, -1); + + context->device->CreateUnorderedAccessView(info->outputResource, NULL, &info->outputUavDesc, context->createOutputOutputs.cpuDescriptor); + context->device->CreateUnorderedAccessView(info->outputResource, NULL, &info->outputUavDesc, context->createOutputOutputs.cpuVisibleCpuDescriptor); + + // ======================================= + // Init upscale SRVs/UAVs + + textureCreateSrv(&context->finalResults, 0, &context->bilateralUpscaleInputs, -1, -1, -1); + context->device->CreateShaderResourceView(info->depthBufferResource, &info->depthBufferSrvDesc, cbvSrvUavGetCpu(&context->bilateralUpscaleInputs, 1)); + textureCreateSrv(&context->halfDepthsArray, 3, &context->bilateralUpscaleInputs, 0, -1, -1); + + context->device->CreateUnorderedAccessView(info->outputResource, NULL, &info->outputUavDesc, context->bilateralUpscaleOutputs.cpuDescriptor); + + // ======================================= + // Init debug SRVs/UAVs + + context->outputResource = info->outputResource; + + return FFX_CACAO_STATUS_OK; + + ERROR_TEXTURE_DESTROY(importanceMapPong, importance_map_pong); + ERROR_TEXTURE_DESTROY(importanceMap, importance_map); + ERROR_TEXTURE_DESTROY(deinterlacedNormals, deinterlaced_normals); + ERROR_TEXTURE_DESTROY(finalResults, final_results); + + ERROR_TEXTURE_DESTROY(pingPongHalfResultA[3], ping_pong_half_result_3); + ERROR_TEXTURE_DESTROY(pingPongHalfResultA[2], ping_pong_half_result_2); + ERROR_TEXTURE_DESTROY(pingPongHalfResultA[1], ping_pong_half_result_1); + ERROR_TEXTURE_DESTROY(pingPongHalfResultA[0], ping_pong_half_result_0); + + ERROR_TEXTURE_DESTROY(halfDepthsArray, half_depths_array); + + return errorStatus; + +#undef TEXTURE_INIT +#undef ERROR_TEXTURE_DESTROY +} + +FfxCacaoStatus ffxCacaoD3D12DestroyScreenSizeDependentResources(FfxCacaoD3D12Context* context) +{ + if (context == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + + textureDestroy(&context->importanceMapPong); + textureDestroy(&context->importanceMap); + textureDestroy(&context->finalResults); + textureDestroy(&context->pingPongHalfResultA[3]); + textureDestroy(&context->pingPongHalfResultA[2]); + textureDestroy(&context->pingPongHalfResultA[1]); + textureDestroy(&context->pingPongHalfResultA[0]); + textureDestroy(&context->halfDepthsArray); + + return FFX_CACAO_STATUS_OK; +} + +FfxCacaoStatus ffxCacaoD3D12UpdateSettings(FfxCacaoD3D12Context* context, const FfxCacaoSettings* settings) +{ + if (context == NULL || settings == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + + memcpy(&context->settings, settings, sizeof(*settings)); + + return FFX_CACAO_STATUS_OK; +} + +FfxCacaoStatus ffxCacaoD3D12Draw(FfxCacaoD3D12Context* context, ID3D12GraphicsCommandList* commandList, const FfxCacaoMatrix4x4* proj, const FfxCacaoMatrix4x4* normalsToView) +{ + if (context == NULL || commandList == NULL || proj == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + +#if FFX_CACAO_ENABLE_PROFILING +#define GET_TIMESTAMP(name) gpuTimerGetTimestamp(&context->gpuTimer, commandList, name) +#else +#define GET_TIMESTAMP(name) +#endif + BufferSizeInfo *bsi = &context->bufferSizeInfo; + + + USER_MARKER("CACAO"); + + constantBufferRingStartFrame(&context->constantBufferRing); + +#if FFX_CACAO_ENABLE_PROFILING + gpuTimerStartFrame(&context->gpuTimer); +#endif + + GET_TIMESTAMP("Begin CACAO"); + + // set the descriptor heaps + { + ID3D12DescriptorHeap *descriptorHeaps[] = { context->cbvSrvUavHeap.heap }; + commandList->SetDescriptorHeaps(FFX_CACAO_ARRAY_SIZE(descriptorHeaps), descriptorHeaps); + } + + // clear load counter + { + UINT clearValue[] = { 0, 0, 0, 0 }; + commandList->ClearUnorderedAccessViewUint(context->loadCounterUav.gpuDescriptor, context->loadCounterUav.cpuVisibleCpuDescriptor, context->loadCounter.resource, clearValue, 0, NULL); + } + + // move this to initialisation + D3D12_GPU_VIRTUAL_ADDRESS cbCACAOHandle; + FfxCacaoConstants *pCACAOConsts; + D3D12_GPU_VIRTUAL_ADDRESS cbCACAOPerPassHandle[4]; + FfxCacaoConstants *pPerPassConsts[4]; + + // upload constant buffers + { + USER_MARKER("Upload Constant Buffers"); + constantBufferRingAlloc(&context->constantBufferRing, sizeof(*pCACAOConsts), (void**)&pCACAOConsts, &cbCACAOHandle); + updateConstants(pCACAOConsts, &context->settings, bsi, proj, normalsToView); + + for (int i = 0; i < 4; ++i) + { + constantBufferRingAlloc(&context->constantBufferRing, sizeof(*pPerPassConsts[0]), (void**)&pPerPassConsts[i], &cbCACAOPerPassHandle[i]); + updateConstants(pPerPassConsts[i], &context->settings, bsi, proj, normalsToView); + updatePerPassConstants(pPerPassConsts[i], &context->settings, &context->bufferSizeInfo, i); + } + + GET_TIMESTAMP("Upload Constant Buffers"); + } + + // prepare depths, normals and mips + { + USER_MARKER("Prepare downsampled depths, normals and mips"); + + switch (context->settings.qualityLevel) + { + case FFX_CACAO_QUALITY_LOWEST: { + uint32_t dispatchWidth = dispatchSize(PREPARE_DEPTHS_HALF_WIDTH, bsi->deinterleavedDepthBufferWidth); + uint32_t dispatchHeight = dispatchSize(PREPARE_DEPTHS_HALF_HEIGHT, bsi->deinterleavedDepthBufferHeight); + ComputeShader *prepareDepthsHalf = context->useDownsampledSsao ? &context->prepareDownsampledDepthsHalf : &context->prepareNativeDepthsHalf; + computeShaderDraw(prepareDepthsHalf, commandList, cbCACAOHandle, &context->prepareDepthsOutputs, &context->prepareDepthsNormalsAndMipsInputs, dispatchWidth, dispatchHeight, 1); + break; + } + case FFX_CACAO_QUALITY_LOW: { + uint32_t dispatchWidth = dispatchSize(PREPARE_DEPTHS_WIDTH, bsi->deinterleavedDepthBufferWidth); + uint32_t dispatchHeight = dispatchSize(PREPARE_DEPTHS_HEIGHT, bsi->deinterleavedDepthBufferHeight); + ComputeShader *prepareDepths = context->useDownsampledSsao ? &context->prepareDownsampledDepths : &context->prepareNativeDepths; + computeShaderDraw(prepareDepths, commandList, cbCACAOHandle, &context->prepareDepthsOutputs, &context->prepareDepthsNormalsAndMipsInputs, dispatchWidth, dispatchHeight, 1); + break; + } + default: { + uint32_t dispatchWidth = dispatchSize(PREPARE_DEPTHS_AND_MIPS_WIDTH, bsi->deinterleavedDepthBufferWidth); + uint32_t dispatchHeight = dispatchSize(PREPARE_DEPTHS_AND_MIPS_HEIGHT, bsi->deinterleavedDepthBufferHeight); + ComputeShader *prepareDepthsAndMips = context->useDownsampledSsao ? &context->prepareDownsampledDepthsAndMips : &context->prepareNativeDepthsAndMips; + computeShaderDraw(prepareDepthsAndMips, commandList, cbCACAOHandle, &context->prepareDepthsAndMipsOutputs, &context->prepareDepthsNormalsAndMipsInputs, dispatchWidth, dispatchHeight, 1); + break; + } + } + + CD3DX12_RESOURCE_BARRIER barriers[2]; + UINT numBarriers = 0; + + barriers[numBarriers++] = CD3DX12_RESOURCE_BARRIER::Transition(context->deinterlacedNormals.resource, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + barriers[numBarriers++] = CD3DX12_RESOURCE_BARRIER::UAV(context->halfDepthsArray.resource); + commandList->ResourceBarrier(numBarriers, barriers); + numBarriers = 0; + + if (context->settings.generateNormals) + { + uint32_t dispatchWidth = dispatchSize(PREPARE_NORMALS_WIDTH, bsi->ssaoBufferWidth); + uint32_t dispatchHeight = dispatchSize(PREPARE_NORMALS_HEIGHT, bsi->ssaoBufferHeight); + ComputeShader *prepareNormals = context->useDownsampledSsao ? &context->prepareDownsampledNormals : &context->prepareNativeNormals; + computeShaderDraw(prepareNormals, commandList, cbCACAOHandle, &context->prepareNormalsOutput, &context->prepareDepthsNormalsAndMipsInputs, dispatchWidth, dispatchHeight, 1); + } + else + { + uint32_t dispatchWidth = dispatchSize(PREPARE_NORMALS_FROM_INPUT_NORMALS_WIDTH, bsi->ssaoBufferWidth); + uint32_t dispatchHeight = dispatchSize(PREPARE_NORMALS_FROM_INPUT_NORMALS_HEIGHT, bsi->ssaoBufferHeight); + ComputeShader *prepareNormalsFromInputNormals = context->useDownsampledSsao ? &context->prepareDownsampledNormalsFromInputNormals : &context->prepareNativeNormalsFromInputNormals; + computeShaderDraw(prepareNormalsFromInputNormals, commandList, cbCACAOHandle, &context->prepareNormalsFromInputNormalsOutput, &context->prepareNormalsFromInputNormalsInput, dispatchWidth, dispatchHeight, 1); + } + + barriers[numBarriers++] = CD3DX12_RESOURCE_BARRIER::Transition(context->deinterlacedNormals.resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + commandList->ResourceBarrier(numBarriers, barriers); + numBarriers = 0; + + GET_TIMESTAMP("Prepare downsampled depths, normals and mips"); + } + + + // base pass for highest quality setting + if (context->settings.qualityLevel == FFX_CACAO_QUALITY_HIGHEST) + { + USER_MARKER("Generate High Quality Base Pass"); + + // SSAO + { + USER_MARKER("SSAO"); + + for (int pass = 0; pass < 4; ++pass) + { + CbvSrvUav *inputs = &context->generateSSAOInputs[pass]; + uint32_t dispatchWidth = dispatchSize(GENERATE_WIDTH, bsi->ssaoBufferWidth); + uint32_t dispatchHeight = dispatchSize(GENERATE_WIDTH, bsi->ssaoBufferHeight); + computeShaderDraw(&context->generateSSAO[4], commandList, cbCACAOPerPassHandle[pass], &context->generateSSAOOutputsFinal[pass], inputs, dispatchWidth, dispatchHeight, 1); + } + commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(context->finalResults.resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE)); + GET_TIMESTAMP("High Quality Base Pass SSAO"); + } + + + // generate importance map + { + USER_MARKER("Importance Map"); + + CD3DX12_RESOURCE_BARRIER barriers[2]; + UINT barrierCount; + + uint32_t dispatchWidth = dispatchSize(IMPORTANCE_MAP_WIDTH, bsi->importanceMapWidth); + uint32_t dispatchHeight = dispatchSize(IMPORTANCE_MAP_HEIGHT, bsi->importanceMapHeight); + + computeShaderDraw(&context->generateImportanceMap, commandList, cbCACAOHandle, &context->generateImportanceMapOutputs, &context->generateImportanceMapInputs, dispatchWidth, dispatchHeight, 1); + + barrierCount = 0; + barriers[barrierCount++] = CD3DX12_RESOURCE_BARRIER::Transition(context->importanceMap.resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + commandList->ResourceBarrier(barrierCount, barriers); + + computeShaderDraw(&context->postprocessImportanceMapA, commandList, cbCACAOHandle, &context->generateImportanceMapAOutputs, &context->generateImportanceMapAInputs, dispatchWidth, dispatchHeight, 1); + + barrierCount = 0; + barriers[barrierCount++] = CD3DX12_RESOURCE_BARRIER::Transition(context->importanceMap.resource, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + barriers[barrierCount++] = CD3DX12_RESOURCE_BARRIER::Transition(context->importanceMapPong.resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + commandList->ResourceBarrier(barrierCount, barriers); + + computeShaderDraw(&context->postprocessImportanceMapB, commandList, cbCACAOHandle, &context->generateImportanceMapBOutputs, &context->generateImportanceMapBInputs, dispatchWidth, dispatchHeight, 1); + + barrierCount = 0; + barriers[barrierCount++] = CD3DX12_RESOURCE_BARRIER::Transition(context->importanceMap.resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + commandList->ResourceBarrier(barrierCount, barriers); + GET_TIMESTAMP("Generate Importance Map"); + } + } + + int blurPassCount = context->settings.blurPassCount; + blurPassCount = FFX_CACAO_CLAMP(blurPassCount, 0, MAX_BLUR_PASSES); + + // main ssao generation + { + USER_MARKER("Generate SSAO"); + + ComputeShader *generate = &context->generateSSAO[FFX_CACAO_MAX(0, context->settings.qualityLevel - 1)]; + for (int pass = 0; pass < 4; ++pass) + { + if (context->settings.qualityLevel == FFX_CACAO_QUALITY_LOWEST && (pass == 1 || pass == 2)) + { + continue; + } + + CbvSrvUav *input = context->settings.qualityLevel == FFX_CACAO_QUALITY_HIGHEST ? &context->generateAdaptiveSSAOInputs[pass] : &context->generateSSAOInputs[pass]; + CbvSrvUav *output = blurPassCount == 0 ? &context->generateSSAOOutputsFinal[pass] : &context->generateSSAOOutputsPing[pass]; + + uint32_t dispatchWidth = dispatchSize(GENERATE_WIDTH, bsi->ssaoBufferWidth); + uint32_t dispatchHeight = dispatchSize(GENERATE_WIDTH, bsi->ssaoBufferHeight); + computeShaderDraw(generate, commandList, cbCACAOPerPassHandle[pass], output, input, dispatchWidth, dispatchHeight, 1); + } + + GET_TIMESTAMP("Generate SSAO"); + } + + // de-interleaved blur + if (blurPassCount) + { + CD3DX12_RESOURCE_BARRIER barriers[5]; + UINT barrierCount = 0; + for (int pass = 0; pass < 4; ++pass) + { + if (context->settings.qualityLevel == FFX_CACAO_QUALITY_LOWEST && (pass == 1 || pass == 2)) + { + continue; + } + barriers[barrierCount++] = CD3DX12_RESOURCE_BARRIER::Transition(context->pingPongHalfResultA[pass].resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + } + barriers[barrierCount++] = CD3DX12_RESOURCE_BARRIER::Transition(context->finalResults.resource, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); + commandList->ResourceBarrier(barrierCount, barriers); + + USER_MARKER("Deinterleaved blur"); + + for (int pass = 0; pass < 4; ++pass) + { + if (context->settings.qualityLevel == FFX_CACAO_QUALITY_LOWEST && (pass == 1 || pass == 2)) + { + continue; + } + + uint32_t w = 4 * BLUR_WIDTH - 2 * blurPassCount; + uint32_t h = 3 * BLUR_HEIGHT - 2 * blurPassCount; + uint32_t blurPassIndex = blurPassCount - 1; + uint32_t dispatchWidth = dispatchSize(w, bsi->ssaoBufferWidth); + uint32_t dispatchHeight = dispatchSize(h, bsi->ssaoBufferHeight); + computeShaderDraw(&context->edgeSensitiveBlur[blurPassIndex], commandList, cbCACAOPerPassHandle[pass], &context->finalResultsArrayUAV[pass], &context->pingPongHalfResultASRV[pass], dispatchWidth, dispatchHeight, 1); + } + + GET_TIMESTAMP("Deinterleaved blur"); + } + + commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(context->finalResults.resource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE)); + + if (context->useDownsampledSsao) + { + USER_MARKER("Upscale"); + + CbvSrvUav *inputs = &context->bilateralUpscaleInputs; + ComputeShader *upscaler = context->settings.qualityLevel == FFX_CACAO_QUALITY_LOWEST ? &context->upscaleBilateral5x5Half : &context->upscaleBilateral5x5; + uint32_t dispatchWidth = dispatchSize(2 * BILATERAL_UPSCALE_WIDTH, bsi->inputOutputBufferWidth); + uint32_t dispatchHeight = dispatchSize(2 * BILATERAL_UPSCALE_HEIGHT, bsi->inputOutputBufferHeight); + computeShaderDraw(upscaler, commandList, cbCACAOHandle, &context->bilateralUpscaleOutputs, inputs, dispatchWidth, dispatchHeight, 1); + + GET_TIMESTAMP("Upscale"); + } + else + { + USER_MARKER("Create Output"); + uint32_t dispatchWidth = dispatchSize(APPLY_WIDTH, bsi->inputOutputBufferWidth); + uint32_t dispatchHeight = dispatchSize(APPLY_HEIGHT, bsi->inputOutputBufferHeight); + switch (context->settings.qualityLevel) + { + case FFX_CACAO_QUALITY_LOWEST: + computeShaderDraw(&context->nonSmartHalfApply, commandList, cbCACAOHandle, &context->createOutputOutputs, &context->createOutputInputs, dispatchWidth, dispatchHeight, 1); + break; + case FFX_CACAO_QUALITY_LOW: + computeShaderDraw(&context->nonSmartApply, commandList, cbCACAOHandle, &context->createOutputOutputs, &context->createOutputInputs, dispatchWidth, dispatchHeight, 1); + break; + default: + computeShaderDraw(&context->smartApply, commandList, cbCACAOHandle, &context->createOutputOutputs, &context->createOutputInputs, dispatchWidth, dispatchHeight, 1); + break; + } + GET_TIMESTAMP("Create Output (Reinterleave)"); + } + + commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::UAV(context->outputResource)); + +#if FFX_CACAO_ENABLE_PROFILING + gpuTimerEndFrame(&context->gpuTimer, commandList); +#endif + + return FFX_CACAO_STATUS_OK; + +#undef GET_TIMESTAMP +} + +#if FFX_CACAO_ENABLE_PROFILING +FfxCacaoStatus ffxCacaoD3D12GetDetailedTimings(FfxCacaoD3D12Context* context, FfxCacaoDetailedTiming* timings) +{ + if (context == NULL || timings == NULL) + { + return FFX_CACAO_STATUS_INVALID_POINTER; + } + context = getAlignedD3D12ContextPointer(context); + + gpuTimerCollectTimings(&context->gpuTimer, timings); + + return FFX_CACAO_STATUS_OK; +} +#endif +#endif + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/ffx-cacao/src/ffx_cacao.hlsl b/ffx-cacao/src/ffx_cacao.hlsl new file mode 100644 index 0000000..fe33396 --- /dev/null +++ b/ffx-cacao/src/ffx_cacao.hlsl @@ -0,0 +1,2055 @@ +// Modifications Copyright © 2020. Advanced Micro Devices, Inc. All Rights Reserved. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// File changes (yyyy-mm-dd) +// 2016-09-07: filip.strugar@intel.com: first commit +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +#include "ffx_cacao_defines.h" + +#define SSAO_ENABLE_NORMAL_WORLD_TO_VIEW_CONVERSION 1 + +#define INTELSSAO_MAIN_DISK_SAMPLE_COUNT (32) + +struct CACAOConstants +{ + float2 DepthUnpackConsts; + float2 CameraTanHalfFOV; + + float2 NDCToViewMul; + float2 NDCToViewAdd; + + float2 DepthBufferUVToViewMul; + float2 DepthBufferUVToViewAdd; + + float EffectRadius; // world (viewspace) maximum size of the shadow + float EffectShadowStrength; // global strength of the effect (0 - 5) + float EffectShadowPow; + float EffectShadowClamp; + + float EffectFadeOutMul; // effect fade out from distance (ex. 25) + float EffectFadeOutAdd; // effect fade out to distance (ex. 100) + float EffectHorizonAngleThreshold; // limit errors on slopes and caused by insufficient geometry tessellation (0.05 to 0.5) + float EffectSamplingRadiusNearLimitRec; // if viewspace pixel closer than this, don't enlarge shadow sampling radius anymore (makes no sense to grow beyond some distance, not enough samples to cover everything, so just limit the shadow growth; could be SSAOSettingsFadeOutFrom * 0.1 or less) + + float DepthPrecisionOffsetMod; + float NegRecEffectRadius; // -1.0 / EffectRadius + float LoadCounterAvgDiv; // 1.0 / ( halfDepthMip[SSAO_DEPTH_MIP_LEVELS-1].sizeX * halfDepthMip[SSAO_DEPTH_MIP_LEVELS-1].sizeY ) + float AdaptiveSampleCountLimit; + + float InvSharpness; + int PassIndex; + float BilateralSigmaSquared; + float BilateralSimilarityDistanceSigma; + + float4 PatternRotScaleMatrices[5]; + + float NormalsUnpackMul; + float NormalsUnpackAdd; + float DetailAOStrength; + float Dummy0; + + float2 SSAOBufferDimensions; + float2 SSAOBufferInverseDimensions; + + float2 DepthBufferDimensions; + float2 DepthBufferInverseDimensions; + + int2 DepthBufferOffset; + float2 PerPassFullResUVOffset; + + float2 OutputBufferDimensions; + float2 OutputBufferInverseDimensions; + + float2 ImportanceMapDimensions; + float2 ImportanceMapInverseDimensions; + + float2 DeinterleavedDepthBufferDimensions; + float2 DeinterleavedDepthBufferInverseDimensions; + + float2 DeinterleavedDepthBufferOffset; + float2 DeinterleavedDepthBufferNormalisedOffset; + +#if SSAO_ENABLE_NORMAL_WORLD_TO_VIEW_CONVERSION + float4x4 NormalsWorldToViewspaceMatrix; +#endif +}; + +static const float4 g_samplePatternMain[INTELSSAO_MAIN_DISK_SAMPLE_COUNT] = +{ + 0.78488064, 0.56661671, 1.500000, -0.126083, 0.26022232, -0.29575172, 1.500000, -1.064030, 0.10459357, 0.08372527, 1.110000, -2.730563, -0.68286800, 0.04963045, 1.090000, -0.498827, + -0.13570161, -0.64190155, 1.250000, -0.532765, -0.26193795, -0.08205118, 0.670000, -1.783245, -0.61177456, 0.66664219, 0.710000, -0.044234, 0.43675563, 0.25119025, 0.610000, -1.167283, + 0.07884444, 0.86618668, 0.640000, -0.459002, -0.12790935, -0.29869005, 0.600000, -1.729424, -0.04031125, 0.02413622, 0.600000, -4.792042, 0.16201244, -0.52851415, 0.790000, -1.067055, + -0.70991218, 0.47301072, 0.640000, -0.335236, 0.03277707, -0.22349690, 0.600000, -1.982384, 0.68921727, 0.36800742, 0.630000, -0.266718, 0.29251814, 0.37775412, 0.610000, -1.422520, + -0.12224089, 0.96582592, 0.600000, -0.426142, 0.11071457, -0.16131058, 0.600000, -2.165947, 0.46562141, -0.59747696, 0.600000, -0.189760, -0.51548797, 0.11804193, 0.600000, -1.246800, + 0.89141309, -0.42090443, 0.600000, 0.028192, -0.32402530, -0.01591529, 0.600000, -1.543018, 0.60771245, 0.41635221, 0.600000, -0.605411, 0.02379565, -0.08239821, 0.600000, -3.809046, + 0.48951152, -0.23657045, 0.600000, -1.189011, -0.17611565, -0.81696892, 0.600000, -0.513724, -0.33930185, -0.20732205, 0.600000, -1.698047, -0.91974425, 0.05403209, 0.600000, 0.062246, + -0.15064627, -0.14949332, 0.600000, -1.896062, 0.53180975, -0.35210401, 0.600000, -0.758838, 0.41487166, 0.81442589, 0.600000, -0.505648, -0.24106961, -0.32721516, 0.600000, -1.665244 +}; + +#define SSAO_MAX_TAPS (32) +#define SSAO_MAX_REF_TAPS (512) +#define SSAO_ADAPTIVE_TAP_BASE_COUNT (5) +#define SSAO_ADAPTIVE_TAP_FLEXIBLE_COUNT (SSAO_MAX_TAPS - SSAO_ADAPTIVE_TAP_BASE_COUNT) +#define SSAO_DEPTH_MIP_LEVELS (4) + +// these values can be changed (up to SSAO_MAX_TAPS) with no changes required elsewhere; values for 4th and 5th preset are ignored but array needed to avoid compilation errors +// the actual number of texture samples is two times this value (each "tap" has two symmetrical depth texture samples) +static const uint g_numTaps[5] = { 3, 5, 12, 0, 0 }; + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Optional parts that can be enabled for a required quality preset level and above (0 == Low, 1 == Medium, 2 == High, 3 == Highest/Adaptive, 4 == reference/unused ) +// Each has its own cost. To disable just set to 5 or above. +// +// (experimental) tilts the disk (although only half of the samples!) towards surface normal; this helps with effect uniformity between objects but reduces effect distance and has other side-effects +#define SSAO_TILT_SAMPLES_ENABLE_AT_QUALITY_PRESET (99) // to disable simply set to 99 or similar +#define SSAO_TILT_SAMPLES_AMOUNT (0.4) +// +#define SSAO_HALOING_REDUCTION_ENABLE_AT_QUALITY_PRESET (1) // to disable simply set to 99 or similar +#define SSAO_HALOING_REDUCTION_AMOUNT (0.6) // values from 0.0 - 1.0, 1.0 means max weighting (will cause artifacts, 0.8 is more reasonable) +// +#define SSAO_NORMAL_BASED_EDGES_ENABLE_AT_QUALITY_PRESET (2) //2 // to disable simply set to 99 or similar +#define SSAO_NORMAL_BASED_EDGES_DOT_THRESHOLD (0.5) // use 0-0.1 for super-sharp normal-based edges +// +#define SSAO_DETAIL_AO_ENABLE_AT_QUALITY_PRESET (1) //1 // whether to use DetailAOStrength; to disable simply set to 99 or similar +// +#define SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET (2) // !!warning!! the MIP generation on the C++ side will be enabled on quality preset 2 regardless of this value, so if changing here, change the C++ side too +#define SSAO_DEPTH_MIPS_GLOBAL_OFFSET (-4.3) // best noise/quality/performance tradeoff, found empirically +// +// !!warning!! the edge handling is hard-coded to 'disabled' on quality level 0, and enabled above, on the C++ side; while toggling it here will work for +// testing purposes, it will not yield performance gains (or correct results) +#define SSAO_DEPTH_BASED_EDGES_ENABLE_AT_QUALITY_PRESET (1) +// +#define SSAO_REDUCE_RADIUS_NEAR_SCREEN_BORDER_ENABLE_AT_QUALITY_PRESET (99) // 99 means disabled; only helpful if artifacts at the edges caused by lack of out of screen depth data are not acceptable with the depth sampler in either clamp or mirror modes +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +SamplerState g_PointClampSampler : register(s0); // corresponds to SSAO_SAMPLERS_SLOT0 +SamplerState g_PointMirrorSampler : register(s1); // corresponds to SSAO_SAMPLERS_SLOT2 +SamplerState g_LinearClampSampler : register(s2); // corresponds to SSAO_SAMPLERS_SLOT1 +SamplerState g_ViewspaceDepthTapSampler : register(s3); // corresponds to SSAO_SAMPLERS_SLOT3 +SamplerState g_ZeroTextureSampler : register(s4); + +cbuffer SSAOConstantsBuffer : register(b0) // corresponds to SSAO_CONSTANTS_BUFFERSLOT +{ + CACAOConstants g_CACAOConsts; +} + + +Texture2D g_DepthSource : register(t0); + +RWTexture2D g_out0 : register(u0); +RWTexture2D g_out1 : register(u1); +RWTexture2D g_out2 : register(u2); +RWTexture2D g_out3 : register(u3); +RWTexture2D g_NormalsOutputUAV : register(u4); + + +Texture2D g_BlurInput : register(t0); +RWTexture2D g_BlurOutput : register(u0); + + +Texture2D g_NormalmapSource : register(t1); // corresponds to SSAO_TEXTURE_SLOT1 + +Texture2D g_ViewspaceDepthSource : register(t0); +// g_NormalmapSource register(t1); +Texture1D g_LoadCounter : register(t2); +Texture2D g_ImportanceMap : register(t3); +Texture2DArray g_FinalSSAO : register(t4); +Texture1D g_ZeroTexture : register(t5); +Texture2DArray g_deinterlacedNormals : register(t6); + +RWTexture2D g_SSAOOutput : register(u0); +// RWTexture1D g_LoadCounterOutputUAV : register(u1); + +RWTexture2D g_ApplyOutput : register(u0); +Texture2DArray g_ApplyFinalSSAO : register(t0); + + +// packing/unpacking for edges; 2 bits per edge mean 4 gradient values (0, 0.33, 0.66, 1) for smoother transitions! +float PackEdges(float4 edgesLRTB) +{ + // int4 edgesLRTBi = int4( saturate( edgesLRTB ) * 3.0 + 0.5 ); + // return ( (edgesLRTBi.x << 6) + (edgesLRTBi.y << 4) + (edgesLRTBi.z << 2) + (edgesLRTBi.w << 0) ) / 255.0; + + // optimized, should be same as above + edgesLRTB = round(saturate(edgesLRTB) * 3.05); + return dot(edgesLRTB, float4(64.0 / 255.0, 16.0 / 255.0, 4.0 / 255.0, 1.0 / 255.0)); +} + +float4 UnpackEdges(float _packedVal) +{ + uint packedVal = (uint)(_packedVal * 255.5); + float4 edgesLRTB; + edgesLRTB.x = float((packedVal >> 6) & 0x03) / 3.0; // there's really no need for mask (as it's an 8 bit input) but I'll leave it in so it doesn't cause any trouble in the future + edgesLRTB.y = float((packedVal >> 4) & 0x03) / 3.0; + edgesLRTB.z = float((packedVal >> 2) & 0x03) / 3.0; + edgesLRTB.w = float((packedVal >> 0) & 0x03) / 3.0; + + return saturate(edgesLRTB + g_CACAOConsts.InvSharpness); +} + +float ScreenSpaceToViewSpaceDepth(float screenDepth) +{ + float depthLinearizeMul = g_CACAOConsts.DepthUnpackConsts.x; + float depthLinearizeAdd = g_CACAOConsts.DepthUnpackConsts.y; + + // Optimised version of "-cameraClipNear / (cameraClipFar - projDepth * (cameraClipFar - cameraClipNear)) * cameraClipFar" + + // Set your depthLinearizeMul and depthLinearizeAdd to: + // depthLinearizeMul = ( cameraClipFar * cameraClipNear) / ( cameraClipFar - cameraClipNear ); + // depthLinearizeAdd = cameraClipFar / ( cameraClipFar - cameraClipNear ); + + return depthLinearizeMul / (depthLinearizeAdd - screenDepth); +} + +float4 ScreenSpaceToViewSpaceDepth(float4 screenDepth) +{ + float depthLinearizeMul = g_CACAOConsts.DepthUnpackConsts.x; + float depthLinearizeAdd = g_CACAOConsts.DepthUnpackConsts.y; + + // Optimised version of "-cameraClipNear / (cameraClipFar - projDepth * (cameraClipFar - cameraClipNear)) * cameraClipFar" + + // Set your depthLinearizeMul and depthLinearizeAdd to: + // depthLinearizeMul = ( cameraClipFar * cameraClipNear) / ( cameraClipFar - cameraClipNear ); + // depthLinearizeAdd = cameraClipFar / ( cameraClipFar - cameraClipNear ); + + return depthLinearizeMul / (depthLinearizeAdd - screenDepth); +} + +float4 CalculateEdges(const float centerZ, const float leftZ, const float rightZ, const float topZ, const float bottomZ) +{ + // slope-sensitive depth-based edge detection + float4 edgesLRTB = float4(leftZ, rightZ, topZ, bottomZ) - centerZ; + float4 edgesLRTBSlopeAdjusted = edgesLRTB + edgesLRTB.yxwz; + edgesLRTB = min(abs(edgesLRTB), abs(edgesLRTBSlopeAdjusted)); + return saturate((1.3 - edgesLRTB / (centerZ * 0.040))); + + // cheaper version but has artifacts + // edgesLRTB = abs( float4( leftZ, rightZ, topZ, bottomZ ) - centerZ; ); + // return saturate( ( 1.3 - edgesLRTB / (pixZ * 0.06 + 0.1) ) ); +} + +float3 NDCToViewspace(float2 pos, float viewspaceDepth) +{ + float3 ret; + + ret.xy = (g_CACAOConsts.NDCToViewMul * pos.xy + g_CACAOConsts.NDCToViewAdd) * viewspaceDepth; + + ret.z = viewspaceDepth; + + return ret; +} + +float3 DepthBufferUVToViewspace(float2 pos, float viewspaceDepth) +{ + float3 ret; + ret.xy = (g_CACAOConsts.DepthBufferUVToViewMul * pos.xy + g_CACAOConsts.DepthBufferUVToViewAdd) * viewspaceDepth; + ret.z = viewspaceDepth; + return ret; +} + +float3 CalculateNormal(const float4 edgesLRTB, float3 pixCenterPos, float3 pixLPos, float3 pixRPos, float3 pixTPos, float3 pixBPos) +{ + // Get this pixel's viewspace normal + float4 acceptedNormals = float4(edgesLRTB.x*edgesLRTB.z, edgesLRTB.z*edgesLRTB.y, edgesLRTB.y*edgesLRTB.w, edgesLRTB.w*edgesLRTB.x); + + pixLPos = normalize(pixLPos - pixCenterPos); + pixRPos = normalize(pixRPos - pixCenterPos); + pixTPos = normalize(pixTPos - pixCenterPos); + pixBPos = normalize(pixBPos - pixCenterPos); + + float3 pixelNormal = float3(0, 0, -0.0005); + pixelNormal += (acceptedNormals.x) * cross(pixLPos, pixTPos); + pixelNormal += (acceptedNormals.y) * cross(pixTPos, pixRPos); + pixelNormal += (acceptedNormals.z) * cross(pixRPos, pixBPos); + pixelNormal += (acceptedNormals.w) * cross(pixBPos, pixLPos); + pixelNormal = normalize(pixelNormal); + + return pixelNormal; +} + +// Blur stuff + +void AddSample(float ssaoValue, float edgeValue, inout float sum, inout float sumWeight) +{ + float weight = edgeValue; + + sum += (weight * ssaoValue); + sumWeight += weight; +} + +float2 SampleBlurredWide(float2 inPos, float2 coord) +{ + float2 vC = g_BlurInput.SampleLevel(g_PointMirrorSampler, coord, 0.0, int2(0, 0)).xy; + float2 vL = g_BlurInput.SampleLevel(g_PointMirrorSampler, coord, 0.0, int2(-2, 0)).xy; + float2 vT = g_BlurInput.SampleLevel(g_PointMirrorSampler, coord, 0.0, int2(0, -2)).xy; + float2 vR = g_BlurInput.SampleLevel(g_PointMirrorSampler, coord, 0.0, int2(2, 0)).xy; + float2 vB = g_BlurInput.SampleLevel(g_PointMirrorSampler, coord, 0.0, int2(0, 2)).xy; + + float packedEdges = vC.y; + float4 edgesLRTB = UnpackEdges(packedEdges); + edgesLRTB.x *= UnpackEdges(vL.y).y; + edgesLRTB.z *= UnpackEdges(vT.y).w; + edgesLRTB.y *= UnpackEdges(vR.y).x; + edgesLRTB.w *= UnpackEdges(vB.y).z; + + float ssaoValue = vC.x; + float ssaoValueL = vL.x; + float ssaoValueT = vT.x; + float ssaoValueR = vR.x; + float ssaoValueB = vB.x; + + float sumWeight = 0.8f; + float sum = ssaoValue * sumWeight; + + AddSample(ssaoValueL, edgesLRTB.x, sum, sumWeight); + AddSample(ssaoValueR, edgesLRTB.y, sum, sumWeight); + AddSample(ssaoValueT, edgesLRTB.z, sum, sumWeight); + AddSample(ssaoValueB, edgesLRTB.w, sum, sumWeight); + + float ssaoAvg = sum / sumWeight; + + ssaoValue = ssaoAvg; //min( ssaoValue, ssaoAvg ) * 0.2 + ssaoAvg * 0.8; + + return float2(ssaoValue, packedEdges); +} + +uint PackFloat16(min16float2 v) +{ + uint2 p = f32tof16(float2(v)); + return p.x | (p.y << 16); +} + +min16float2 UnpackFloat16(uint a) +{ + float2 tmp = f16tof32(uint2(a & 0xFFFF, a >> 16)); + return min16float2(tmp); +} + +// all in one, SIMD in yo SIMD dawg, shader +#define TILE_WIDTH 4 +#define TILE_HEIGHT 3 +#define HALF_TILE_WIDTH (TILE_WIDTH / 2) +#define QUARTER_TILE_WIDTH (TILE_WIDTH / 4) + +#define ARRAY_WIDTH (HALF_TILE_WIDTH * BLUR_WIDTH + 2) +#define ARRAY_HEIGHT (TILE_HEIGHT * BLUR_HEIGHT + 2) + +#define ITERS 4 + +groupshared uint s_BlurF16Front_4[ARRAY_WIDTH][ARRAY_HEIGHT]; +groupshared uint s_BlurF16Back_4[ARRAY_WIDTH][ARRAY_HEIGHT]; + +struct Edges_4 +{ + min16float4 left; + min16float4 right; + min16float4 top; + min16float4 bottom; +}; + +Edges_4 UnpackEdgesFloat16_4(min16float4 _packedVal) +{ + uint4 packedVal = (uint4)(_packedVal * 255.5); + Edges_4 result; + result.left = saturate(min16float4((packedVal >> 6) & 0x03) / 3.0 + g_CACAOConsts.InvSharpness); + result.right = saturate(min16float4((packedVal >> 4) & 0x03) / 3.0 + g_CACAOConsts.InvSharpness); + result.top = saturate(min16float4((packedVal >> 2) & 0x03) / 3.0 + g_CACAOConsts.InvSharpness); + result.bottom = saturate(min16float4((packedVal >> 0) & 0x03) / 3.0 + g_CACAOConsts.InvSharpness); + + return result; +} + +min16float4 CalcBlurredSampleF16_4(min16float4 packedEdges, min16float4 centre, min16float4 left, min16float4 right, min16float4 top, min16float4 bottom) +{ + min16float4 sum = centre * 0.5f; + min16float4 weight = min16float4(0.5f, 0.5f, 0.5f, 0.5f); + Edges_4 edges = UnpackEdgesFloat16_4(packedEdges); + + sum += left * edges.left; + weight += edges.left; + sum += right * edges.right; + weight += edges.right; + sum += top * edges.top; + weight += edges.top; + sum += bottom * edges.bottom; + weight += edges.bottom; + + return sum / weight; +} + +void LDSEdgeSensitiveBlur(const uint blurPasses, const uint2 tid, const uint2 gid) +{ + int2 imageCoord = gid * (int2(TILE_WIDTH * BLUR_WIDTH, TILE_HEIGHT * BLUR_HEIGHT) - (2*blurPasses)) + int2(TILE_WIDTH, TILE_HEIGHT) * tid - blurPasses; + int2 bufferCoord = int2(HALF_TILE_WIDTH, TILE_HEIGHT) * tid + 1; + + // todo -- replace this with gathers. + min16float4 packedEdges[QUARTER_TILE_WIDTH][TILE_HEIGHT]; + { + float2 input[TILE_WIDTH][TILE_HEIGHT]; + [unroll] + for (int y = 0; y < TILE_HEIGHT; ++y) + { + [unroll] + for (int x = 0; x < TILE_WIDTH; ++x) + { + input[x][y] = g_BlurInput.SampleLevel(g_PointMirrorSampler, float2(imageCoord + int2(x, y) + 0.5f) * g_CACAOConsts.SSAOBufferInverseDimensions, 0).xy; + } + } + [unroll] + for (int y = 0; y < TILE_HEIGHT; ++y) + { + [unroll] + for (int x = 0; x < QUARTER_TILE_WIDTH; ++x) + { + min16float2 ssaoVals = min16float2(input[4 * x + 0][y].x, input[4 * x + 1][y].x); + s_BlurF16Front_4[bufferCoord.x + 2*x + 0][bufferCoord.y + y] = PackFloat16(ssaoVals); + ssaoVals = min16float2(input[4 * x + 2][y].x, input[4 * x + 3][y].x); + s_BlurF16Front_4[bufferCoord.x + 2*x + 1][bufferCoord.y + y] = PackFloat16(ssaoVals); + // min16float2 ssaoVals = min16float2(1, 1); + packedEdges[x][y] = min16float4(input[4 * x + 0][y].y, input[4 * x + 1][y].y, input[4 * x + 2][y].y, input[4 * x + 3][y].y); + } + } + } + + GroupMemoryBarrierWithGroupSync(); + + [unroll] + for (int i = 0; i < (blurPasses + 1) / 2; ++i) + { + [unroll] + for (int y = 0; y < TILE_HEIGHT; ++y) + { + [unroll] + for (int x = 0; x < QUARTER_TILE_WIDTH; ++x) + { + int2 c = bufferCoord + int2(2*x, y); + min16float4 centre = min16float4(UnpackFloat16(s_BlurF16Front_4[c.x + 0][c.y + 0]), UnpackFloat16(s_BlurF16Front_4[c.x + 1][c.y + 0])); + min16float4 top = min16float4(UnpackFloat16(s_BlurF16Front_4[c.x + 0][c.y - 1]), UnpackFloat16(s_BlurF16Front_4[c.x + 1][c.y - 1])); + min16float4 bottom = min16float4(UnpackFloat16(s_BlurF16Front_4[c.x + 0][c.y + 1]), UnpackFloat16(s_BlurF16Front_4[c.x + 1][c.y + 1])); + + min16float2 tmp = UnpackFloat16(s_BlurF16Front_4[c.x - 1][c.y + 0]); + min16float4 left = min16float4(tmp.y, centre.xyz); + tmp = UnpackFloat16(s_BlurF16Front_4[c.x + 2][c.y + 0]); + min16float4 right = min16float4(centre.yzw, tmp.x); + + min16float4 tmp_4 = CalcBlurredSampleF16_4(packedEdges[x][y], centre, left, right, top, bottom); + s_BlurF16Back_4[c.x + 0][c.y] = PackFloat16(tmp_4.xy); + s_BlurF16Back_4[c.x + 1][c.y] = PackFloat16(tmp_4.zw); + } + } + GroupMemoryBarrierWithGroupSync(); + + if (2 * i + 1 < blurPasses) + { + [unroll] + for (int y = 0; y < TILE_HEIGHT; ++y) + { + [unroll] + for (int x = 0; x < QUARTER_TILE_WIDTH; ++x) + { + int2 c = bufferCoord + int2(2 * x, y); + min16float4 centre = min16float4(UnpackFloat16(s_BlurF16Back_4[c.x + 0][c.y + 0]), UnpackFloat16(s_BlurF16Back_4[c.x + 1][c.y + 0])); + min16float4 top = min16float4(UnpackFloat16(s_BlurF16Back_4[c.x + 0][c.y - 1]), UnpackFloat16(s_BlurF16Back_4[c.x + 1][c.y - 1])); + min16float4 bottom = min16float4(UnpackFloat16(s_BlurF16Back_4[c.x + 0][c.y + 1]), UnpackFloat16(s_BlurF16Back_4[c.x + 1][c.y + 1])); + + min16float2 tmp = UnpackFloat16(s_BlurF16Back_4[c.x - 1][c.y + 0]); + min16float4 left = min16float4(tmp.y, centre.xyz); + tmp = UnpackFloat16(s_BlurF16Back_4[c.x + 2][c.y + 0]); + min16float4 right = min16float4(centre.yzw, tmp.x); + + min16float4 tmp_4 = CalcBlurredSampleF16_4(packedEdges[x][y], centre, left, right, top, bottom); + s_BlurF16Front_4[c.x + 0][c.y] = PackFloat16(tmp_4.xy); + s_BlurF16Front_4[c.x + 1][c.y] = PackFloat16(tmp_4.zw); + } + } + GroupMemoryBarrierWithGroupSync(); + } + } + + [unroll] + for (int y = 0; y < TILE_HEIGHT; ++y) + { + int outputY = TILE_HEIGHT * tid.y + y; + if (blurPasses <= outputY && outputY < TILE_HEIGHT * BLUR_HEIGHT - blurPasses) + { + [unroll] + for (int x = 0; x < QUARTER_TILE_WIDTH; ++x) + { + int outputX = TILE_WIDTH * tid.x + 4 * x; + + min16float4 ssaoVal; + if (blurPasses % 2 == 0) + { + ssaoVal = min16float4(UnpackFloat16(s_BlurF16Front_4[bufferCoord.x + x][bufferCoord.y + y]), UnpackFloat16(s_BlurF16Front_4[bufferCoord.x + x + 1][bufferCoord.y + y])); + } + else + { + ssaoVal = min16float4(UnpackFloat16(s_BlurF16Back_4[bufferCoord.x + x][bufferCoord.y + y]), UnpackFloat16(s_BlurF16Back_4[bufferCoord.x + x + 1][bufferCoord.y + y])); + } + + if (blurPasses <= outputX && outputX < TILE_WIDTH * BLUR_WIDTH - blurPasses) + { + g_BlurOutput[imageCoord + int2(4 * x, y)] = ssaoVal.x; + } + outputX += 1; + if (blurPasses <= outputX && outputX < TILE_WIDTH * BLUR_WIDTH - blurPasses) + { + g_BlurOutput[imageCoord + int2(4 * x + 1, y)] = ssaoVal.y; + } + outputX += 1; + if (blurPasses <= outputX && outputX < TILE_WIDTH * BLUR_WIDTH - blurPasses) + { + g_BlurOutput[imageCoord + int2(4 * x + 2, y)] = ssaoVal.z; + } + outputX += 1; + if (blurPasses <= outputX && outputX < TILE_WIDTH * BLUR_WIDTH - blurPasses) + { + g_BlurOutput[imageCoord + int2(4 * x + 3, y)] = ssaoVal.w; + } + } + } + } +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur1(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(1, tid, gid); +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur2(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(2, tid, gid); +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur3(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(3, tid, gid); +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur4(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(4, tid, gid); +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur5(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(5, tid, gid); +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur6(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(6, tid, gid); +} + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur7(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(7, tid, gid); +} + + +[numthreads(BLUR_WIDTH, BLUR_HEIGHT, 1)] +void CSEdgeSensitiveBlur8(uint2 tid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + LDSEdgeSensitiveBlur(8, tid, gid); +} + + +#undef TILE_WIDTH +#undef TILE_HEIGHT +#undef ARRAY_WIDTH +#undef ARRAY_HEIGHT +#undef ITERS + + + +// ======================================================================================================= +// SSAO stuff + + + + +// calculate effect radius and fit our screen sampling pattern inside it +void CalculateRadiusParameters(const float pixCenterLength, const float2 pixelDirRBViewspaceSizeAtCenterZ, out float pixLookupRadiusMod, out float effectRadius, out float falloffCalcMulSq) +{ + effectRadius = g_CACAOConsts.EffectRadius; + + // leaving this out for performance reasons: use something similar if radius needs to scale based on distance + //effectRadius *= pow( pixCenterLength, g_CACAOConsts.RadiusDistanceScalingFunctionPow); + + // when too close, on-screen sampling disk will grow beyond screen size; limit this to avoid closeup temporal artifacts + const float tooCloseLimitMod = saturate(pixCenterLength * g_CACAOConsts.EffectSamplingRadiusNearLimitRec) * 0.8 + 0.2; + + effectRadius *= tooCloseLimitMod; + + // 0.85 is to reduce the radius to allow for more samples on a slope to still stay within influence + pixLookupRadiusMod = (0.85 * effectRadius) / pixelDirRBViewspaceSizeAtCenterZ.x; + + // used to calculate falloff (both for AO samples and per-sample weights) + falloffCalcMulSq = -1.0f / (effectRadius*effectRadius); +} + + +float3 DecodeNormal(float3 encodedNormal) +{ + float3 normal = encodedNormal * g_CACAOConsts.NormalsUnpackMul.xxx + g_CACAOConsts.NormalsUnpackAdd.xxx; + +#if SSAO_ENABLE_NORMAL_WORLD_TO_VIEW_CONVERSION + normal = mul(normal, (float3x3)g_CACAOConsts.NormalsWorldToViewspaceMatrix).xyz; +#endif + + // normal = normalize( normal ); // normalize adds around 2.5% cost on High settings but makes little (PSNR 66.7) visual difference when normals are as in the sample (stored in R8G8B8A8_UNORM, + // // decoded in the shader), however it will likely be required if using different encoding/decoding or the inputs are not normalized, etc. + + return normal; +} + +float3 LoadNormal(int2 pos) +{ + // float3 encodedNormal = g_NormalmapSource.Load(int3(pos, 0)).xyz; + float3 encodedNormal = g_NormalmapSource.SampleLevel(g_PointClampSampler, (float2(pos)+0.5f) * g_CACAOConsts.OutputBufferInverseDimensions, 0).xyz; + return DecodeNormal(encodedNormal); +} + +float3 LoadNormal(int2 pos, int2 offset) +{ + float3 encodedNormal = g_NormalmapSource.Load(int3(pos, 0), offset).xyz; + return DecodeNormal(encodedNormal); +} + +// all vectors in viewspace +float CalculatePixelObscurance(float3 pixelNormal, float3 hitDelta, float falloffCalcMulSq) +{ + float lengthSq = dot(hitDelta, hitDelta); + float NdotD = dot(pixelNormal, hitDelta) / sqrt(lengthSq); + + float falloffMult = max(0.0, lengthSq * falloffCalcMulSq + 1.0); + + return max(0, NdotD - g_CACAOConsts.EffectHorizonAngleThreshold) * falloffMult; +} + +void SSAOTapInner(const int qualityLevel, inout float obscuranceSum, inout float weightSum, const float2 samplingUV, const float mipLevel, const float3 pixCenterPos, const float3 negViewspaceDir, float3 pixelNormal, const float falloffCalcMulSq, const float weightMod, const int dbgTapIndex) +{ + // get depth at sample + float viewspaceSampleZ = g_ViewspaceDepthSource.SampleLevel(g_ViewspaceDepthTapSampler, samplingUV.xy, mipLevel).x; // * g_CACAOConsts.MaxViewspaceDepth; + + // convert to viewspace + // float3 hitPos = NDCToViewspace(samplingUV.xy, viewspaceSampleZ).xyz; + float3 hitPos = DepthBufferUVToViewspace(samplingUV.xy, viewspaceSampleZ).xyz; + float3 hitDelta = hitPos - pixCenterPos; + + float obscurance = CalculatePixelObscurance(pixelNormal, hitDelta, falloffCalcMulSq); + float weight = 1.0; + + if (qualityLevel >= SSAO_HALOING_REDUCTION_ENABLE_AT_QUALITY_PRESET) + { + //float reduct = max( 0, dot( hitDelta, negViewspaceDir ) ); + float reduct = max(0, -hitDelta.z); // cheaper, less correct version + reduct = saturate(reduct * g_CACAOConsts.NegRecEffectRadius + 2.0); // saturate( 2.0 - reduct / g_CACAOConsts.EffectRadius ); + weight = SSAO_HALOING_REDUCTION_AMOUNT * reduct + (1.0 - SSAO_HALOING_REDUCTION_AMOUNT); + } + weight *= weightMod; + obscuranceSum += obscurance * weight; + weightSum += weight; +} + +void SSAOTap(const int qualityLevel, inout float obscuranceSum, inout float weightSum, const int tapIndex, const float2x2 rotScale, const float3 pixCenterPos, const float3 negViewspaceDir, float3 pixelNormal, const float2 normalizedScreenPos, const float2 depthBufferUV, const float mipOffset, const float falloffCalcMulSq, float weightMod, float2 normXY, float normXYLength) +{ + float2 sampleOffset; + float samplePow2Len; + + // patterns + { + float4 newSample = g_samplePatternMain[tapIndex]; + sampleOffset = mul(rotScale, newSample.xy); + samplePow2Len = newSample.w; // precalculated, same as: samplePow2Len = log2( length( newSample.xy ) ); + weightMod *= newSample.z; + } + + // snap to pixel center (more correct obscurance math, avoids artifacts) + sampleOffset = round(sampleOffset); + + // calculate MIP based on the sample distance from the centre, similar to as described + // in http://graphics.cs.williams.edu/papers/SAOHPG12/. + float mipLevel = (qualityLevel < SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET) ? (0) : (samplePow2Len + mipOffset); + + float2 samplingUV = sampleOffset * g_CACAOConsts.DeinterleavedDepthBufferInverseDimensions + depthBufferUV; + + SSAOTapInner(qualityLevel, obscuranceSum, weightSum, samplingUV, mipLevel, pixCenterPos, negViewspaceDir, pixelNormal, falloffCalcMulSq, weightMod, tapIndex * 2); + + // for the second tap, just use the mirrored offset + float2 sampleOffsetMirroredUV = -sampleOffset; + + // tilt the second set of samples so that the disk is effectively rotated by the normal + // effective at removing one set of artifacts, but too expensive for lower quality settings + if (qualityLevel >= SSAO_TILT_SAMPLES_ENABLE_AT_QUALITY_PRESET) + { + float dotNorm = dot(sampleOffsetMirroredUV, normXY); + sampleOffsetMirroredUV -= dotNorm * normXYLength * normXY; + sampleOffsetMirroredUV = round(sampleOffsetMirroredUV); + } + + // snap to pixel center (more correct obscurance math, avoids artifacts) + float2 samplingMirroredUV = sampleOffsetMirroredUV * g_CACAOConsts.DeinterleavedDepthBufferInverseDimensions + depthBufferUV; + + SSAOTapInner(qualityLevel, obscuranceSum, weightSum, samplingMirroredUV, mipLevel, pixCenterPos, negViewspaceDir, pixelNormal, falloffCalcMulSq, weightMod, tapIndex * 2 + 1); +} + +struct SSAOHits +{ + float3 hits[2]; + float weightMod; +}; + +SSAOHits SSAOGetHits(const int qualityLevel, const float2 depthBufferUV, const int tapIndex, const float mipOffset, const float2x2 rotScale, const float4 newSample) +{ + SSAOHits result; + + float2 sampleOffset; + float samplePow2Len; + + // patterns + { + // float4 newSample = g_samplePatternMain[tapIndex]; + sampleOffset = mul(rotScale, newSample.xy); + samplePow2Len = newSample.w; // precalculated, same as: samplePow2Len = log2( length( newSample.xy ) ); + result.weightMod = newSample.z; + } + + // snap to pixel center (more correct obscurance math, avoids artifacts) + sampleOffset = round(sampleOffset) * g_CACAOConsts.DeinterleavedDepthBufferInverseDimensions; + + float mipLevel = (qualityLevel < SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET) ? (0) : (samplePow2Len + mipOffset); + + float2 sampleUV = depthBufferUV + sampleOffset; + result.hits[0] = float3(sampleUV, g_ViewspaceDepthSource.SampleLevel(g_ViewspaceDepthTapSampler, sampleUV, mipLevel).x); + + sampleUV = depthBufferUV - sampleOffset; + result.hits[1] = float3(sampleUV, g_ViewspaceDepthSource.SampleLevel(g_ViewspaceDepthTapSampler, sampleUV, mipLevel).x); + + return result; +} + +struct SSAOSampleData +{ + float2 uvOffset; + float mipLevel; + float weightMod; +}; + +SSAOSampleData SSAOGetSampleData(const int qualityLevel, const float2x2 rotScale, const float4 newSample, const float mipOffset) +{ + float2 sampleOffset = mul(rotScale, newSample.xy); + sampleOffset = round(sampleOffset) * g_CACAOConsts.DeinterleavedDepthBufferInverseDimensions; + + float samplePow2Len = newSample.w; + float mipLevel = (qualityLevel < SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET) ? (0) : (samplePow2Len + mipOffset); + + SSAOSampleData result; + + result.uvOffset = sampleOffset; + result.mipLevel = mipLevel; + result.weightMod = newSample.z; + + return result; +} + +SSAOHits SSAOGetHits2(SSAOSampleData data, const float2 depthBufferUV) +{ + SSAOHits result; + result.weightMod = data.weightMod; + float2 sampleUV = depthBufferUV + data.uvOffset; + result.hits[0] = float3(sampleUV, g_ViewspaceDepthSource.SampleLevel(g_ViewspaceDepthTapSampler, sampleUV, data.mipLevel).x); + sampleUV = depthBufferUV - data.uvOffset; + result.hits[1] = float3(sampleUV, g_ViewspaceDepthSource.SampleLevel(g_ViewspaceDepthTapSampler, sampleUV, data.mipLevel).x); + return result; +} + +void SSAOAddHits(const int qualityLevel, const float3 pixCenterPos, const float3 pixelNormal, const float falloffCalcMulSq, inout float weightSum, inout float obscuranceSum, SSAOHits hits) +{ + float weight = hits.weightMod; + [unroll] + for (int hitIndex = 0; hitIndex < 2; ++hitIndex) + { + float3 hit = hits.hits[hitIndex]; + float3 hitPos = DepthBufferUVToViewspace(hit.xy, hit.z); + float3 hitDelta = hitPos - pixCenterPos; + + float obscurance = CalculatePixelObscurance(pixelNormal, hitDelta, falloffCalcMulSq); + + if (qualityLevel >= SSAO_HALOING_REDUCTION_ENABLE_AT_QUALITY_PRESET) + { + //float reduct = max( 0, dot( hitDelta, negViewspaceDir ) ); + float reduct = max(0, -hitDelta.z); // cheaper, less correct version + reduct = saturate(reduct * g_CACAOConsts.NegRecEffectRadius + 2.0); // saturate( 2.0 - reduct / g_CACAOConsts.EffectRadius ); + weight = SSAO_HALOING_REDUCTION_AMOUNT * reduct + (1.0 - SSAO_HALOING_REDUCTION_AMOUNT); + } + obscuranceSum += obscurance * weight; + weightSum += weight; + } +} + +void SSAOTap2(const int qualityLevel, inout float obscuranceSum, inout float weightSum, const int tapIndex, const float2x2 rotScale, const float3 pixCenterPos, const float3 negViewspaceDir, float3 pixelNormal, const float2 normalizedScreenPos, const float mipOffset, const float falloffCalcMulSq, float weightMod, float2 normXY, float normXYLength) +{ + float4 newSample = g_samplePatternMain[tapIndex]; + SSAOSampleData data = SSAOGetSampleData(qualityLevel, rotScale, newSample, mipOffset); + SSAOHits hits = SSAOGetHits2(data, normalizedScreenPos); + SSAOAddHits(qualityLevel, pixCenterPos, pixelNormal, falloffCalcMulSq, weightSum, obscuranceSum, hits); +} + + +void GenerateSSAOShadowsInternal(out float outShadowTerm, out float4 outEdges, out float outWeight, const float2 SVPos/*, const float2 normalizedScreenPos*/, uniform int qualityLevel, bool adaptiveBase) +{ + float2 SVPosRounded = trunc(SVPos); + uint2 SVPosui = uint2(SVPosRounded); //same as uint2( SVPos ) + + const int numberOfTaps = (adaptiveBase) ? (SSAO_ADAPTIVE_TAP_BASE_COUNT) : (g_numTaps[qualityLevel]); + float pixZ, pixLZ, pixTZ, pixRZ, pixBZ; + + float2 depthBufferUV = (SVPos + 0.5f) * g_CACAOConsts.DeinterleavedDepthBufferInverseDimensions + g_CACAOConsts.DeinterleavedDepthBufferNormalisedOffset; + float4 valuesUL = g_ViewspaceDepthSource.GatherRed(g_PointMirrorSampler, depthBufferUV, int2(-1, -1)); + float4 valuesBR = g_ViewspaceDepthSource.GatherRed(g_PointMirrorSampler, depthBufferUV); + + // get this pixel's viewspace depth + pixZ = valuesUL.y; //float pixZ = g_ViewspaceDepthSource.SampleLevel( g_PointMirrorSampler, normalizedScreenPos, 0.0 ).x; // * g_CACAOConsts.MaxViewspaceDepth; + + // get left right top bottom neighbouring pixels for edge detection (gets compiled out on qualityLevel == 0) + pixLZ = valuesUL.x; + pixTZ = valuesUL.z; + pixRZ = valuesBR.z; + pixBZ = valuesBR.x; + + // float2 normalizedScreenPos = SVPosRounded * g_CACAOConsts.Viewport2xPixelSize + g_CACAOConsts.Viewport2xPixelSize_x_025; + float2 normalizedScreenPos = (SVPosRounded + 0.5f) * g_CACAOConsts.SSAOBufferInverseDimensions; + float3 pixCenterPos = NDCToViewspace(normalizedScreenPos, pixZ); // g + + // Load this pixel's viewspace normal + // uint2 fullResCoord = 2 * (SVPosui * 2 + g_CACAOConsts.PerPassFullResCoordOffset.xy); + // float3 pixelNormal = LoadNormal(fullResCoord); + int3 normalCoord = int3(SVPosui, g_CACAOConsts.PassIndex); + float3 pixelNormal = g_deinterlacedNormals[normalCoord]; + + // optimized approximation of: float2 pixelDirRBViewspaceSizeAtCenterZ = NDCToViewspace( normalizedScreenPos.xy + g_CACAOConsts._ViewportPixelSize.xy, pixCenterPos.z ).xy - pixCenterPos.xy; + // const float2 pixelDirRBViewspaceSizeAtCenterZ = pixCenterPos.z * g_CACAOConsts.NDCToViewMul * g_CACAOConsts.Viewport2xPixelSize; + const float2 pixelDirRBViewspaceSizeAtCenterZ = pixCenterPos.z * g_CACAOConsts.NDCToViewMul * g_CACAOConsts.SSAOBufferInverseDimensions; + + float pixLookupRadiusMod; + float falloffCalcMulSq; + + // calculate effect radius and fit our screen sampling pattern inside it + float effectViewspaceRadius; + CalculateRadiusParameters(length(pixCenterPos), pixelDirRBViewspaceSizeAtCenterZ, pixLookupRadiusMod, effectViewspaceRadius, falloffCalcMulSq); + + // calculate samples rotation/scaling + float2x2 rotScale; + { + // reduce effect radius near the screen edges slightly; ideally, one would render a larger depth buffer (5% on each side) instead + if (!adaptiveBase && (qualityLevel >= SSAO_REDUCE_RADIUS_NEAR_SCREEN_BORDER_ENABLE_AT_QUALITY_PRESET)) + { + float nearScreenBorder = min(min(depthBufferUV.x, 1.0 - depthBufferUV.x), min(depthBufferUV.y, 1.0 - depthBufferUV.y)); + nearScreenBorder = saturate(10.0 * nearScreenBorder + 0.6); + pixLookupRadiusMod *= nearScreenBorder; + } + + // load & update pseudo-random rotation matrix + uint pseudoRandomIndex = uint(SVPosRounded.y * 2 + SVPosRounded.x) % 5; + float4 rs = g_CACAOConsts.PatternRotScaleMatrices[pseudoRandomIndex]; + rotScale = float2x2(rs.x * pixLookupRadiusMod, rs.y * pixLookupRadiusMod, rs.z * pixLookupRadiusMod, rs.w * pixLookupRadiusMod); + } + + // the main obscurance & sample weight storage + float obscuranceSum = 0.0; + float weightSum = 0.0; + + // edge mask for between this and left/right/top/bottom neighbour pixels - not used in quality level 0 so initialize to "no edge" (1 is no edge, 0 is edge) + float4 edgesLRTB = float4(1.0, 1.0, 1.0, 1.0); + + // Move center pixel slightly towards camera to avoid imprecision artifacts due to using of 16bit depth buffer; a lot smaller offsets needed when using 32bit floats + pixCenterPos *= g_CACAOConsts.DepthPrecisionOffsetMod; + + if (!adaptiveBase && (qualityLevel >= SSAO_DEPTH_BASED_EDGES_ENABLE_AT_QUALITY_PRESET)) + { + edgesLRTB = CalculateEdges(pixZ, pixLZ, pixRZ, pixTZ, pixBZ); + } + + // adds a more high definition sharp effect, which gets blurred out (reuses left/right/top/bottom samples that we used for edge detection) + if (!adaptiveBase && (qualityLevel >= SSAO_DETAIL_AO_ENABLE_AT_QUALITY_PRESET)) + { + // disable in case of quality level 4 (reference) + if (qualityLevel != 4) + { + //approximate neighbouring pixels positions (actually just deltas or "positions - pixCenterPos" ) + float3 viewspaceDirZNormalized = float3(pixCenterPos.xy / pixCenterPos.zz, 1.0); + + // very close approximation of: float3 pixLPos = NDCToViewspace( normalizedScreenPos + float2( -g_CACAOConsts.HalfViewportPixelSize.x, 0.0 ), pixLZ ).xyz - pixCenterPos.xyz; + float3 pixLDelta = float3(-pixelDirRBViewspaceSizeAtCenterZ.x, 0.0, 0.0) + viewspaceDirZNormalized * (pixLZ - pixCenterPos.z); + // very close approximation of: float3 pixRPos = NDCToViewspace( normalizedScreenPos + float2( +g_CACAOConsts.HalfViewportPixelSize.x, 0.0 ), pixRZ ).xyz - pixCenterPos.xyz; + float3 pixRDelta = float3(+pixelDirRBViewspaceSizeAtCenterZ.x, 0.0, 0.0) + viewspaceDirZNormalized * (pixRZ - pixCenterPos.z); + // very close approximation of: float3 pixTPos = NDCToViewspace( normalizedScreenPos + float2( 0.0, -g_CACAOConsts.HalfViewportPixelSize.y ), pixTZ ).xyz - pixCenterPos.xyz; + float3 pixTDelta = float3(0.0, -pixelDirRBViewspaceSizeAtCenterZ.y, 0.0) + viewspaceDirZNormalized * (pixTZ - pixCenterPos.z); + // very close approximation of: float3 pixBPos = NDCToViewspace( normalizedScreenPos + float2( 0.0, +g_CACAOConsts.HalfViewportPixelSize.y ), pixBZ ).xyz - pixCenterPos.xyz; + float3 pixBDelta = float3(0.0, +pixelDirRBViewspaceSizeAtCenterZ.y, 0.0) + viewspaceDirZNormalized * (pixBZ - pixCenterPos.z); + + const float rangeReductionConst = 4.0f; // this is to avoid various artifacts + const float modifiedFalloffCalcMulSq = rangeReductionConst * falloffCalcMulSq; + + float4 additionalObscurance; + additionalObscurance.x = CalculatePixelObscurance(pixelNormal, pixLDelta, modifiedFalloffCalcMulSq); + additionalObscurance.y = CalculatePixelObscurance(pixelNormal, pixRDelta, modifiedFalloffCalcMulSq); + additionalObscurance.z = CalculatePixelObscurance(pixelNormal, pixTDelta, modifiedFalloffCalcMulSq); + additionalObscurance.w = CalculatePixelObscurance(pixelNormal, pixBDelta, modifiedFalloffCalcMulSq); + + obscuranceSum += g_CACAOConsts.DetailAOStrength * dot(additionalObscurance, edgesLRTB); + } + } + + // Sharp normals also create edges - but this adds to the cost as well + if (!adaptiveBase && (qualityLevel >= SSAO_NORMAL_BASED_EDGES_ENABLE_AT_QUALITY_PRESET)) + { + /* + float3 neighbourNormalL = LoadNormal(fullResCoord, int2(-2, 0)); + float3 neighbourNormalR = LoadNormal(fullResCoord, int2(2, 0)); + float3 neighbourNormalT = LoadNormal(fullResCoord, int2(0, -2)); + float3 neighbourNormalB = LoadNormal(fullResCoord, int2(0, 2)); + */ + + float3 neighbourNormalL = g_deinterlacedNormals[normalCoord + int3(-1, +0, 0)]; + float3 neighbourNormalR = g_deinterlacedNormals[normalCoord + int3(+1, +0, 0)]; + float3 neighbourNormalT = g_deinterlacedNormals[normalCoord + int3(+0, -1, 0)]; + float3 neighbourNormalB = g_deinterlacedNormals[normalCoord + int3(+0, +1, 0)]; + + + const float dotThreshold = SSAO_NORMAL_BASED_EDGES_DOT_THRESHOLD; + + float4 normalEdgesLRTB; + normalEdgesLRTB.x = saturate((dot(pixelNormal, neighbourNormalL) + dotThreshold)); + normalEdgesLRTB.y = saturate((dot(pixelNormal, neighbourNormalR) + dotThreshold)); + normalEdgesLRTB.z = saturate((dot(pixelNormal, neighbourNormalT) + dotThreshold)); + normalEdgesLRTB.w = saturate((dot(pixelNormal, neighbourNormalB) + dotThreshold)); + + //#define SSAO_SMOOTHEN_NORMALS // fixes some aliasing artifacts but kills a lot of high detail and adds to the cost - not worth it probably but feel free to play with it +#ifdef SSAO_SMOOTHEN_NORMALS + //neighbourNormalL = LoadNormal( fullResCoord, int2( -1, 0 ) ); + //neighbourNormalR = LoadNormal( fullResCoord, int2( 1, 0 ) ); + //neighbourNormalT = LoadNormal( fullResCoord, int2( 0, -1 ) ); + //neighbourNormalB = LoadNormal( fullResCoord, int2( 0, 1 ) ); + pixelNormal += neighbourNormalL * edgesLRTB.x + neighbourNormalR * edgesLRTB.y + neighbourNormalT * edgesLRTB.z + neighbourNormalB * edgesLRTB.w; + pixelNormal = normalize(pixelNormal); +#endif + + edgesLRTB *= normalEdgesLRTB; + } + + + + const float globalMipOffset = SSAO_DEPTH_MIPS_GLOBAL_OFFSET; + float mipOffset = (qualityLevel < SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET) ? (0) : (log2(pixLookupRadiusMod) + globalMipOffset); + + // Used to tilt the second set of samples so that the disk is effectively rotated by the normal + // effective at removing one set of artifacts, but too expensive for lower quality settings + float2 normXY = float2(pixelNormal.x, pixelNormal.y); + float normXYLength = length(normXY); + normXY /= float2(normXYLength, -normXYLength); + normXYLength *= SSAO_TILT_SAMPLES_AMOUNT; + + const float3 negViewspaceDir = -normalize(pixCenterPos); + + // standard, non-adaptive approach + if ((qualityLevel != 3) || adaptiveBase) + { + //SSAOHits prevHits = SSAOGetHits(qualityLevel, normalizedScreenPos, 0, mipOffset); + +#if 0 + float4 newSample = g_samplePatternMain[0]; + // float zero = g_ZeroTexture.SampleLevel(g_PointClampSampler, float2(0.5f, 0.5f), 0); + SSAOSampleData data = SSAOGetSampleData(qualityLevel, rotScale, newSample, mipOffset); + SSAOHits hits = SSAOGetHits2(data, depthBufferUV); + newSample = g_samplePatternMain[1]; + // newSample.x += zero; + data = SSAOGetSampleData(qualityLevel, rotScale, newSample, mipOffset); + + [unroll] + for (int i = 0; i < numberOfTaps - 1; ++i) + { + // zero = g_ZeroTexture.SampleLevel(g_PointClampSampler, float2(0.5f + zero, 0.5f), 0); + SSAOHits nextHits = SSAOGetHits2(data, depthBufferUV); + // hits.hits[0].x += zero; + newSample = g_samplePatternMain[i + 2]; + + SSAOAddHits(qualityLevel, pixCenterPos, pixelNormal, falloffCalcMulSq, weightSum, obscuranceSum, hits); + SSAOSampleData nextData = SSAOGetSampleData(qualityLevel, rotScale, newSample, mipOffset); + hits = nextHits; + data = nextData; + } + + // last loop iteration + { + SSAOAddHits(qualityLevel, pixCenterPos, pixelNormal, falloffCalcMulSq, weightSum, obscuranceSum, hits); + } +#else + + [unroll] + for (int i = 0; i < numberOfTaps; i++) + { + SSAOTap(qualityLevel, obscuranceSum, weightSum, i, rotScale, pixCenterPos, negViewspaceDir, pixelNormal, normalizedScreenPos, depthBufferUV, mipOffset, falloffCalcMulSq, 1.0, normXY, normXYLength); + // SSAOHits hits = SSAOGetHits(qualityLevel, normalizedScreenPos, i, mipOffset, rotScale); + // SSAOAddHits(qualityLevel, pixCenterPos, pixelNormal, 1.0f, falloffCalcMulSq, weightSum, obscuranceSum, hits); + } + +#endif + } + else // if( qualityLevel == 3 ) adaptive approach + { + // add new ones if needed + float2 fullResUV = normalizedScreenPos + g_CACAOConsts.PerPassFullResUVOffset.xy; + float importance = g_ImportanceMap.SampleLevel(g_LinearClampSampler, fullResUV, 0.0).x; + + // this is to normalize SSAO_DETAIL_AO_AMOUNT across all pixel regardless of importance + obscuranceSum *= (SSAO_ADAPTIVE_TAP_BASE_COUNT / (float)SSAO_MAX_TAPS) + (importance * SSAO_ADAPTIVE_TAP_FLEXIBLE_COUNT / (float)SSAO_MAX_TAPS); + + // load existing base values + float2 baseValues = g_FinalSSAO.Load(int4(SVPosui, g_CACAOConsts.PassIndex, 0)).xy; + weightSum += baseValues.y * (float)(SSAO_ADAPTIVE_TAP_BASE_COUNT * 4.0); + obscuranceSum += (baseValues.x) * weightSum; + + // increase importance around edges + float edgeCount = dot(1.0 - edgesLRTB, float4(1.0, 1.0, 1.0, 1.0)); + + float avgTotalImportance = (float)g_LoadCounter[0] * g_CACAOConsts.LoadCounterAvgDiv; + + float importanceLimiter = saturate(g_CACAOConsts.AdaptiveSampleCountLimit / avgTotalImportance); + importance *= importanceLimiter; + + float additionalSampleCountFlt = SSAO_ADAPTIVE_TAP_FLEXIBLE_COUNT * importance; + + additionalSampleCountFlt += 1.5; + uint additionalSamples = uint(additionalSampleCountFlt); + uint additionalSamplesTo = min(SSAO_MAX_TAPS, additionalSamples + SSAO_ADAPTIVE_TAP_BASE_COUNT); + + // sample loop + { + float4 newSample = g_samplePatternMain[SSAO_ADAPTIVE_TAP_BASE_COUNT]; + SSAOSampleData data = SSAOGetSampleData(qualityLevel, rotScale, newSample, mipOffset); + SSAOHits hits = SSAOGetHits2(data, depthBufferUV); + newSample = g_samplePatternMain[SSAO_ADAPTIVE_TAP_BASE_COUNT + 1]; + + for (uint i = SSAO_ADAPTIVE_TAP_BASE_COUNT; i < additionalSamplesTo - 1; i++) + { + data = SSAOGetSampleData(qualityLevel, rotScale, newSample, mipOffset); + newSample = g_samplePatternMain[i + 2]; + SSAOHits nextHits = SSAOGetHits2(data, depthBufferUV); + + // float zero = g_ZeroTexture.SampleLevel(g_ZeroTextureSampler, (float)i, 0.0f); + // hits.weightMod += zero; + + SSAOAddHits(qualityLevel, pixCenterPos, pixelNormal, falloffCalcMulSq, weightSum, obscuranceSum, hits); + hits = nextHits; + } + + // last loop iteration + { + SSAOAddHits(qualityLevel, pixCenterPos, pixelNormal, falloffCalcMulSq, weightSum, obscuranceSum, hits); + } + } + } + + // early out for adaptive base - just output weight (used for the next pass) + if (adaptiveBase) + { + float obscurance = obscuranceSum / weightSum; + + outShadowTerm = obscurance; + outEdges = 0; + outWeight = weightSum; + return; + } + + // calculate weighted average + float obscurance = obscuranceSum / weightSum; + + // calculate fadeout (1 close, gradient, 0 far) + float fadeOut = saturate(pixCenterPos.z * g_CACAOConsts.EffectFadeOutMul + g_CACAOConsts.EffectFadeOutAdd); + + // Reduce the SSAO shadowing if we're on the edge to remove artifacts on edges (we don't care for the lower quality one) + if (!adaptiveBase && (qualityLevel >= SSAO_DEPTH_BASED_EDGES_ENABLE_AT_QUALITY_PRESET)) + { + // float edgeCount = dot( 1.0-edgesLRTB, float4( 1.0, 1.0, 1.0, 1.0 ) ); + + // when there's more than 2 opposite edges, start fading out the occlusion to reduce aliasing artifacts + float edgeFadeoutFactor = saturate((1.0 - edgesLRTB.x - edgesLRTB.y) * 0.35) + saturate((1.0 - edgesLRTB.z - edgesLRTB.w) * 0.35); + + // (experimental) if you want to reduce the effect next to any edge + // edgeFadeoutFactor += 0.1 * saturate( dot( 1 - edgesLRTB, float4( 1, 1, 1, 1 ) ) ); + + fadeOut *= saturate(1.0 - edgeFadeoutFactor); + } + + // same as a bove, but a lot more conservative version + // fadeOut *= saturate( dot( edgesLRTB, float4( 0.9, 0.9, 0.9, 0.9 ) ) - 2.6 ); + + // strength + obscurance = g_CACAOConsts.EffectShadowStrength * obscurance; + + // clamp + obscurance = min(obscurance, g_CACAOConsts.EffectShadowClamp); + + // fadeout + obscurance *= fadeOut; + + // conceptually switch to occlusion with the meaning being visibility (grows with visibility, occlusion == 1 implies full visibility), + // to be in line with what is more commonly used. + float occlusion = 1.0 - obscurance; + + // modify the gradient + // note: this cannot be moved to a later pass because of loss of precision after storing in the render target + occlusion = pow(saturate(occlusion), g_CACAOConsts.EffectShadowPow); + + // outputs! + outShadowTerm = occlusion; // Our final 'occlusion' term (0 means fully occluded, 1 means fully lit) + outEdges = edgesLRTB; // These are used to prevent blurring across edges, 1 means no edge, 0 means edge, 0.5 means half way there, etc. + outWeight = weightSum; +} + +[numthreads(GENERATE_WIDTH, GENERATE_HEIGHT, 1)] +void CSGenerateQ0(uint2 coord : SV_DispatchThreadID) +{ + float2 inPos = (float2)coord; + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy, 0, false); + float2 out0; + out0.x = outShadowTerm; + out0.y = PackEdges(float4(1, 1, 1, 1)); // no edges in low quality + g_SSAOOutput[coord] = out0; +} + +[numthreads(GENERATE_WIDTH, GENERATE_HEIGHT, 1)] +void CSGenerateQ1(uint2 coord : SV_DispatchThreadID) +{ + float2 inPos = (float2)coord; + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy, 1, false); + float2 out0; + out0.x = outShadowTerm; + out0.y = PackEdges(outEdges); + g_SSAOOutput[coord] = out0; +} + +[numthreads(GENERATE_WIDTH, GENERATE_HEIGHT, 1)] +void CSGenerateQ2(uint2 coord : SV_DispatchThreadID) +{ + float2 inPos = (float2)coord; + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy, 2, false); + float2 out0; + out0.x = outShadowTerm; + out0.y = PackEdges(outEdges); + g_SSAOOutput[coord] = out0; +} + +[numthreads(GENERATE_WIDTH, GENERATE_HEIGHT, 1)] +void CSGenerateQ3Base(uint2 coord : SV_DispatchThreadID) +{ + float2 inPos = (float2)coord; + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy, 3, true); + float2 out0; + out0.x = outShadowTerm; + out0.y = outWeight / ((float)SSAO_ADAPTIVE_TAP_BASE_COUNT * 4.0); //0.0; //frac(outWeight / 6.0);// / (float)(SSAO_MAX_TAPS * 4.0); + g_SSAOOutput[coord] = out0; +} + +[numthreads(GENERATE_WIDTH, GENERATE_HEIGHT, 1)] +void CSGenerateQ3(uint2 coord : SV_DispatchThreadID) +{ + + float2 inPos = (float2)coord; + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy, 3, false); + float2 out0; + out0.x = outShadowTerm; + out0.y = PackEdges(outEdges); + g_SSAOOutput[coord] = out0; +} + + + + +// ======================================================= +// Apply + +[numthreads(APPLY_WIDTH, APPLY_HEIGHT, 1)] +void CSApply(uint2 coord : SV_DispatchThreadID) +{ + float ao; + float2 inPos = coord; + uint2 pixPos = coord; + uint2 pixPosHalf = pixPos / uint2(2, 2); + + // calculate index in the four deinterleaved source array texture + int mx = (pixPos.x % 2); + int my = (pixPos.y % 2); + int ic = mx + my * 2; // center index + int ih = (1 - mx) + my * 2; // neighbouring, horizontal + int iv = mx + (1 - my) * 2; // neighbouring, vertical + int id = (1 - mx) + (1 - my) * 2; // diagonal + + float2 centerVal = g_ApplyFinalSSAO.Load(int4(pixPosHalf, ic, 0)).xy; + + ao = centerVal.x; + +#if 1 // change to 0 if you want to disable last pass high-res blur (for debugging purposes, etc.) + float4 edgesLRTB = UnpackEdges(centerVal.y); + + // return 1.0 - float4( edgesLRTB.x, edgesLRTB.y * 0.5 + edgesLRTB.w * 0.5, edgesLRTB.z, 0.0 ); // debug show edges + + // convert index shifts to sampling offsets + float fmx = (float)mx; + float fmy = (float)my; + + // in case of an edge, push sampling offsets away from the edge (towards pixel center) + float fmxe = (edgesLRTB.y - edgesLRTB.x); + float fmye = (edgesLRTB.w - edgesLRTB.z); + + // calculate final sampling offsets and sample using bilinear filter + float2 uvH = (inPos.xy + float2(fmx + fmxe - 0.5, 0.5 - fmy)) * 0.5 * g_CACAOConsts.SSAOBufferInverseDimensions; + float aoH = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(uvH, ih), 0).x; + float2 uvV = (inPos.xy + float2(0.5 - fmx, fmy - 0.5 + fmye)) * 0.5 * g_CACAOConsts.SSAOBufferInverseDimensions; + float aoV = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(uvV, iv), 0).x; + float2 uvD = (inPos.xy + float2(fmx - 0.5 + fmxe, fmy - 0.5 + fmye)) * 0.5 * g_CACAOConsts.SSAOBufferInverseDimensions; + float aoD = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(uvD, id), 0).x; + + // reduce weight for samples near edge - if the edge is on both sides, weight goes to 0 + float4 blendWeights; + blendWeights.x = 1.0; + blendWeights.y = (edgesLRTB.x + edgesLRTB.y) * 0.75; + blendWeights.z = (edgesLRTB.z + edgesLRTB.w) * 0.75; + blendWeights.w = (blendWeights.y + blendWeights.z) * 0.5; + + // calculate weighted average + float blendWeightsSum = dot(blendWeights, float4(1.0, 1.0, 1.0, 1.0)); + ao = dot(float4(ao, aoH, aoV, aoD), blendWeights) / blendWeightsSum; +#endif + + g_ApplyOutput[coord] = ao.x; +} + + +// edge-ignorant blur & apply (for the lowest quality level 0) +[numthreads(APPLY_WIDTH, APPLY_HEIGHT, 1)] +void CSNonSmartApply(uint2 tid : SV_DispatchThreadID) +{ + float2 inUV = float2(tid) * g_CACAOConsts.OutputBufferInverseDimensions; + float a = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(inUV.xy, 0), 0.0).x; + float b = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(inUV.xy, 1), 0.0).x; + float c = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(inUV.xy, 2), 0.0).x; + float d = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(inUV.xy, 3), 0.0).x; + float avg = (a + b + c + d) * 0.25; + g_ApplyOutput[tid] = avg; +} + +// edge-ignorant blur & apply, skipping half pixels in checkerboard pattern (for the Lowest quality level 0 and Settings::SkipHalfPixelsOnLowQualityLevel == true ) +[numthreads(APPLY_WIDTH, APPLY_HEIGHT, 1)] +void CSNonSmartHalfApply(uint2 tid : SV_DispatchThreadID) +{ + float2 inUV = float2(tid) * g_CACAOConsts.OutputBufferInverseDimensions; + float a = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(inUV.xy, 0), 0.0).x; + float d = g_ApplyFinalSSAO.SampleLevel(g_LinearClampSampler, float3(inUV.xy, 3), 0.0).x; + float avg = (a + d) * 0.5; + g_ApplyOutput[tid] = avg; +} + + +// ============================================================================= +// Prepare + +Texture2D g_DepthIn : register(t0); + +RWTexture2D g_DepthOut0 : register(u0); +RWTexture2D g_DepthOut1 : register(u1); +RWTexture2D g_DepthOut2 : register(u2); +RWTexture2D g_DepthOut3 : register(u3); +RWTexture2D g_NormalsOut : register(u4); + +groupshared uint s_PrepareMem[10][18]; + + +min16float ScreenSpaceToViewSpaceDepth(min16float screenDepth) +{ + float depthLinearizeMul = g_CACAOConsts.DepthUnpackConsts.x; + float depthLinearizeAdd = g_CACAOConsts.DepthUnpackConsts.y; + + // Optimised version of "-cameraClipNear / (cameraClipFar - projDepth * (cameraClipFar - cameraClipNear)) * cameraClipFar" + + // Set your depthLinearizeMul and depthLinearizeAdd to: + // depthLinearizeMul = ( cameraClipFar * cameraClipNear) / ( cameraClipFar - cameraClipNear ); + // depthLinearizeAdd = cameraClipFar / ( cameraClipFar - cameraClipNear ); + + return depthLinearizeMul / (depthLinearizeAdd - screenDepth); +} + +min16float4 ScreenSpaceToViewSpaceDepth4x(min16float4 screenDepths) +{ + float depthLinearizeMul = g_CACAOConsts.DepthUnpackConsts.x; + float depthLinearizeAdd = g_CACAOConsts.DepthUnpackConsts.y; + + // Optimised version of "-cameraClipNear / (cameraClipFar - projDepth * (cameraClipFar - cameraClipNear)) * cameraClipFar" + + // Set your depthLinearizeMul and depthLinearizeAdd to: + // depthLinearizeMul = ( cameraClipFar * cameraClipNear) / ( cameraClipFar - cameraClipNear ); + // depthLinearizeAdd = cameraClipFar / ( cameraClipFar - cameraClipNear ); + + return depthLinearizeMul / (depthLinearizeAdd - screenDepths); +} + +RWTexture2DArray g_PrepareDepthsAndMips_OutMip0 : register(u0); +RWTexture2DArray g_PrepareDepthsAndMips_OutMip1 : register(u1); +RWTexture2DArray g_PrepareDepthsAndMips_OutMip2 : register(u2); +RWTexture2DArray g_PrepareDepthsAndMips_OutMip3 : register(u3); + +groupshared float s_PrepareDepthsAndMipsBuffer[4][8][8]; + +min16float MipSmartAverage(min16float4 depths) +{ + min16float closest = min(min(depths.x, depths.y), min(depths.z, depths.w)); + min16float falloffCalcMulSq = -1.0f / g_CACAOConsts.EffectRadius * g_CACAOConsts.EffectRadius; + min16float4 dists = depths - closest.xxxx; + min16float4 weights = saturate(dists * dists * falloffCalcMulSq + 1.0); + return dot(weights, depths) / dot(weights, float4(1.0, 1.0, 1.0, 1.0)); +} + +void PrepareDepthsAndMips(float4 samples, int2 outputCoord, uint2 gtid) +{ + samples = ScreenSpaceToViewSpaceDepth(samples); + + s_PrepareDepthsAndMipsBuffer[0][gtid.x][gtid.y] = samples.w; + s_PrepareDepthsAndMipsBuffer[1][gtid.x][gtid.y] = samples.z; + s_PrepareDepthsAndMipsBuffer[2][gtid.x][gtid.y] = samples.x; + s_PrepareDepthsAndMipsBuffer[3][gtid.x][gtid.y] = samples.y; + + g_PrepareDepthsAndMips_OutMip0[int3(outputCoord.x, outputCoord.y, 0)] = samples.w; + g_PrepareDepthsAndMips_OutMip0[int3(outputCoord.x, outputCoord.y, 1)] = samples.z; + g_PrepareDepthsAndMips_OutMip0[int3(outputCoord.x, outputCoord.y, 2)] = samples.x; + g_PrepareDepthsAndMips_OutMip0[int3(outputCoord.x, outputCoord.y, 3)] = samples.y; + + int depthArrayIndex = 2 * (gtid.y % 2) + (gtid.x % 2); + int2 depthArrayOffset = int2(gtid.x % 2, gtid.y % 2); + int2 bufferCoord = gtid - depthArrayOffset; + + outputCoord /= 2; + + // if (stillAlive) <-- all threads alive here + { + float sample_00 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 0][bufferCoord.y + 0]; + float sample_01 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 0][bufferCoord.y + 1]; + float sample_10 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 1][bufferCoord.y + 0]; + float sample_11 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 1][bufferCoord.y + 1]; + + float avg = MipSmartAverage(float4(sample_00, sample_01, sample_10, sample_11)); + g_PrepareDepthsAndMips_OutMip1[int3(outputCoord.x, outputCoord.y, depthArrayIndex)] = avg; + s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x][bufferCoord.y] = avg; + } + + bool stillAlive = gtid.x % 4 == depthArrayOffset.x && gtid.y % 4 == depthArrayOffset.y; + + outputCoord /= 2; + GroupMemoryBarrierWithGroupSync(); + + if (stillAlive) + { + float sample_00 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 0][bufferCoord.y + 0]; + float sample_01 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 0][bufferCoord.y + 2]; + float sample_10 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 2][bufferCoord.y + 0]; + float sample_11 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 2][bufferCoord.y + 2]; + + float avg = MipSmartAverage(float4(sample_00, sample_01, sample_10, sample_11)); + g_PrepareDepthsAndMips_OutMip2[int3(outputCoord.x, outputCoord.y, depthArrayIndex)] = avg; + s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x][bufferCoord.y] = avg; + } + + stillAlive = gtid.x % 8 == depthArrayOffset.x && depthArrayOffset.y % 8 == depthArrayOffset.y; + + outputCoord /= 2; + GroupMemoryBarrierWithGroupSync(); + + if (stillAlive) + { + float sample_00 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 0][bufferCoord.y + 0]; + float sample_01 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 0][bufferCoord.y + 4]; + float sample_10 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 4][bufferCoord.y + 0]; + float sample_11 = s_PrepareDepthsAndMipsBuffer[depthArrayIndex][bufferCoord.x + 4][bufferCoord.y + 4]; + + float avg = MipSmartAverage(float4(sample_00, sample_01, sample_10, sample_11)); + g_PrepareDepthsAndMips_OutMip3[int3(outputCoord.x, outputCoord.y, depthArrayIndex)] = avg; + } +} + +[numthreads(PREPARE_DEPTHS_AND_MIPS_WIDTH, PREPARE_DEPTHS_AND_MIPS_HEIGHT, 1)] +void CSPrepareDownsampledDepthsAndMips(uint2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID) +{ + int2 depthBufferCoord = 4 * tid.xy; + int2 outputCoord = tid; + + float2 uv = (float2(depthBufferCoord)+0.5f) * g_CACAOConsts.DepthBufferInverseDimensions; + float4 samples; + samples.x = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(0, 2)); + samples.y = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(2, 2)); + samples.z = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(2, 0)); + samples.w = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(0, 0)); + + PrepareDepthsAndMips(samples, outputCoord, gtid); +} + +[numthreads(PREPARE_DEPTHS_AND_MIPS_WIDTH, PREPARE_DEPTHS_AND_MIPS_HEIGHT, 1)] +void CSPrepareNativeDepthsAndMips(uint2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID) +{ + int2 depthBufferCoord = 2 * tid.xy; + int2 outputCoord = tid; + + float2 uv = (float2(depthBufferCoord)+0.5f) * g_CACAOConsts.DepthBufferInverseDimensions; + float4 samples = g_DepthSource.GatherRed(g_PointClampSampler, uv); + + PrepareDepthsAndMips(samples, outputCoord, gtid); +} + +RWTexture2DArray g_PrepareDepthsOut : register(u0); + +void PrepareDepths(float4 samples, uint2 tid) +{ + samples = ScreenSpaceToViewSpaceDepth(samples); + g_PrepareDepthsOut[int3(tid.x, tid.y, 0)] = samples.w; + g_PrepareDepthsOut[int3(tid.x, tid.y, 1)] = samples.z; + g_PrepareDepthsOut[int3(tid.x, tid.y, 2)] = samples.x; + g_PrepareDepthsOut[int3(tid.x, tid.y, 3)] = samples.y; +} + +[numthreads(PREPARE_DEPTHS_WIDTH, PREPARE_DEPTHS_HEIGHT, 1)] +void CSPrepareDownsampledDepths(uint2 tid : SV_DispatchThreadID) +{ + int2 depthBufferCoord = 4 * tid.xy; + + float2 uv = (float2(depthBufferCoord)+0.5f) * g_CACAOConsts.DepthBufferInverseDimensions; + float4 samples; + samples.x = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(0, 2)); + samples.y = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(2, 2)); + samples.z = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(2, 0)); + samples.w = g_DepthSource.SampleLevel(g_PointClampSampler, uv, 0, int2(0, 0)); + + PrepareDepths(samples, tid); +} + +[numthreads(PREPARE_DEPTHS_WIDTH, PREPARE_DEPTHS_HEIGHT, 1)] +void CSPrepareNativeDepths(uint2 tid : SV_DispatchThreadID) +{ + int2 depthBufferCoord = 2 * tid.xy; + + float2 uv = (float2(depthBufferCoord)+0.5f) * g_CACAOConsts.DepthBufferInverseDimensions; + float4 samples = g_DepthSource.GatherRed(g_PointClampSampler, uv); + + PrepareDepths(samples, tid); +} + +[numthreads(PREPARE_DEPTHS_HALF_WIDTH, PREPARE_DEPTHS_HALF_HEIGHT, 1)] +void CSPrepareDownsampledDepthsHalf(uint2 tid : SV_DispatchThreadID) +{ + float sample_00 = g_DepthSource.Load(int3(4 * tid.x + 0, 4 * tid.y + 0, 0)); + float sample_11 = g_DepthSource.Load(int3(4 * tid.x + 2, 4 * tid.y + 2, 0)); + sample_00 = ScreenSpaceToViewSpaceDepth(sample_00); + sample_11 = ScreenSpaceToViewSpaceDepth(sample_11); + g_PrepareDepthsOut[int3(tid.x, tid.y, 0)] = sample_00; + g_PrepareDepthsOut[int3(tid.x, tid.y, 3)] = sample_11; +} + +[numthreads(PREPARE_DEPTHS_HALF_WIDTH, PREPARE_DEPTHS_HALF_HEIGHT, 1)] +void CSPrepareNativeDepthsHalf(uint2 tid : SV_DispatchThreadID) +{ + float sample_00 = g_DepthSource.Load(int3(2 * tid.x + 0, 2 * tid.y + 0, 0)); + float sample_11 = g_DepthSource.Load(int3(2 * tid.x + 1, 2 * tid.y + 1, 0)); + sample_00 = ScreenSpaceToViewSpaceDepth(sample_00); + sample_11 = ScreenSpaceToViewSpaceDepth(sample_11); + g_PrepareDepthsOut[int3(tid.x, tid.y, 0)] = sample_00; + g_PrepareDepthsOut[int3(tid.x, tid.y, 3)] = sample_11; +} + +RWTexture2DArray g_PrepareDepthsNormalsAndMips_OutMip0 : register(u0); +RWTexture2DArray g_PrepareDepthsNormalsAndMips_OutMip1 : register(u1); +RWTexture2DArray g_PrepareDepthsNormalsAndMips_OutMip2 : register(u2); +RWTexture2DArray g_PrepareDepthsNormalsAndMips_OutMip3 : register(u3); +RWTexture2D g_PrepareDepthsNormalsAndMips_OutNormal : register(u4); + +groupshared float s_PrepareDepthsNormalsAndMipsBuffer[18][18]; + +float MipSmartAverage(float4 depths) +{ + float closest = min(min(depths.x, depths.y), min(depths.z, depths.w)); + float falloffCalcMulSq = -1.0f / g_CACAOConsts.EffectRadius * g_CACAOConsts.EffectRadius; + float4 dists = depths - closest.xxxx; + float4 weights = saturate(dists * dists * falloffCalcMulSq + 1.0); + return dot(weights, depths) / dot(weights, float4(1.0, 1.0, 1.0, 1.0)); +} + +RWTexture2DArray g_PrepareNormals_NormalOut : register(u0); + +struct PrepareNormalsInputDepths +{ + float depth_10; + float depth_20; + + float depth_01; + float depth_11; + float depth_21; + float depth_31; + + float depth_02; + float depth_12; + float depth_22; + float depth_32; + + float depth_13; + float depth_23; +}; + +void PrepareNormals(PrepareNormalsInputDepths depths, float2 uv, float2 pixelSize, int2 normalCoord) +{ + float3 p_10 = NDCToViewspace(uv + float2(+0.0f, -1.0f) * pixelSize, depths.depth_10); + float3 p_20 = NDCToViewspace(uv + float2(+1.0f, -1.0f) * pixelSize, depths.depth_20); + + float3 p_01 = NDCToViewspace(uv + float2(-1.0f, +0.0f) * pixelSize, depths.depth_01); + float3 p_11 = NDCToViewspace(uv + float2(+0.0f, +0.0f) * pixelSize, depths.depth_11); + float3 p_21 = NDCToViewspace(uv + float2(+1.0f, +0.0f) * pixelSize, depths.depth_21); + float3 p_31 = NDCToViewspace(uv + float2(+2.0f, +0.0f) * pixelSize, depths.depth_31); + + float3 p_02 = NDCToViewspace(uv + float2(-1.0f, +1.0f) * pixelSize, depths.depth_02); + float3 p_12 = NDCToViewspace(uv + float2(+0.0f, +1.0f) * pixelSize, depths.depth_12); + float3 p_22 = NDCToViewspace(uv + float2(+1.0f, +1.0f) * pixelSize, depths.depth_22); + float3 p_32 = NDCToViewspace(uv + float2(+2.0f, +1.0f) * pixelSize, depths.depth_32); + + float3 p_13 = NDCToViewspace(uv + float2(+0.0f, +2.0f) * pixelSize, depths.depth_13); + float3 p_23 = NDCToViewspace(uv + float2(+1.0f, +2.0f) * pixelSize, depths.depth_23); + + float4 edges_11 = CalculateEdges(p_11.z, p_01.z, p_21.z, p_10.z, p_12.z); + float4 edges_21 = CalculateEdges(p_21.z, p_11.z, p_31.z, p_20.z, p_22.z); + float4 edges_12 = CalculateEdges(p_12.z, p_02.z, p_22.z, p_11.z, p_13.z); + float4 edges_22 = CalculateEdges(p_22.z, p_12.z, p_32.z, p_21.z, p_23.z); + + float3 norm_11 = CalculateNormal(edges_11, p_11, p_01, p_21, p_10, p_12); + float3 norm_21 = CalculateNormal(edges_21, p_21, p_11, p_31, p_20, p_22); + float3 norm_12 = CalculateNormal(edges_12, p_12, p_02, p_22, p_11, p_13); + float3 norm_22 = CalculateNormal(edges_22, p_22, p_12, p_32, p_21, p_23); + + g_PrepareNormals_NormalOut[int3(normalCoord, 0)] = float4(norm_11, 1.0f); + g_PrepareNormals_NormalOut[int3(normalCoord, 1)] = float4(norm_21, 1.0f); + g_PrepareNormals_NormalOut[int3(normalCoord, 2)] = float4(norm_12, 1.0f); + g_PrepareNormals_NormalOut[int3(normalCoord, 3)] = float4(norm_22, 1.0f); +} + +[numthreads(PREPARE_NORMALS_WIDTH, PREPARE_NORMALS_HEIGHT, 1)] +void CSPrepareDownsampledNormals(int2 tid : SV_DispatchThreadID) +{ + int2 depthCoord = 4 * tid + g_CACAOConsts.DepthBufferOffset; + + PrepareNormalsInputDepths depths; + + depths.depth_10 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+0, -2))); + depths.depth_20 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+2, -2))); + + depths.depth_01 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(-2, +0))); + depths.depth_11 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+0, +0))); + depths.depth_21 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+2, +0))); + depths.depth_31 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+4, +0))); + + depths.depth_02 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(-2, +2))); + depths.depth_12 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+0, +2))); + depths.depth_22 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+2, +2))); + depths.depth_32 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+4, +2))); + + depths.depth_13 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+0, +4))); + depths.depth_23 = ScreenSpaceToViewSpaceDepth(g_DepthIn.Load(int3(depthCoord, 0), int2(+2, +4))); + + float2 pixelSize = 2.0f * g_CACAOConsts.OutputBufferInverseDimensions; // 2.0f * g_CACAOConsts.DepthBufferInverseDimensions; + float2 uv = (float2(4 * tid) + 0.5f) * g_CACAOConsts.OutputBufferInverseDimensions; // * g_CACAOConsts.SSAOBufferInverseDimensions; + + PrepareNormals(depths, uv, pixelSize, tid); +} + +[numthreads(PREPARE_NORMALS_WIDTH, PREPARE_NORMALS_HEIGHT, 1)] +void CSPrepareNativeNormals(int2 tid : SV_DispatchThreadID) +{ + int2 depthCoord = 2 * tid + g_CACAOConsts.DepthBufferOffset; + float2 depthBufferUV = (float2(depthCoord)-0.5f) * g_CACAOConsts.DepthBufferInverseDimensions; + float4 samples_00 = g_DepthIn.GatherRed(g_PointClampSampler, depthBufferUV, int2(0, 0)); + float4 samples_10 = g_DepthIn.GatherRed(g_PointClampSampler, depthBufferUV, int2(2, 0)); + float4 samples_01 = g_DepthIn.GatherRed(g_PointClampSampler, depthBufferUV, int2(0, 2)); + float4 samples_11 = g_DepthIn.GatherRed(g_PointClampSampler, depthBufferUV, int2(2, 2)); + + PrepareNormalsInputDepths depths; + + depths.depth_10 = ScreenSpaceToViewSpaceDepth(samples_00.z); + depths.depth_20 = ScreenSpaceToViewSpaceDepth(samples_10.w); + + depths.depth_01 = ScreenSpaceToViewSpaceDepth(samples_00.x); + depths.depth_11 = ScreenSpaceToViewSpaceDepth(samples_00.y); + depths.depth_21 = ScreenSpaceToViewSpaceDepth(samples_10.x); + depths.depth_31 = ScreenSpaceToViewSpaceDepth(samples_10.y); + + depths.depth_02 = ScreenSpaceToViewSpaceDepth(samples_01.w); + depths.depth_12 = ScreenSpaceToViewSpaceDepth(samples_01.z); + depths.depth_22 = ScreenSpaceToViewSpaceDepth(samples_11.w); + depths.depth_32 = ScreenSpaceToViewSpaceDepth(samples_11.z); + + depths.depth_13 = ScreenSpaceToViewSpaceDepth(samples_01.y); + depths.depth_23 = ScreenSpaceToViewSpaceDepth(samples_11.x); + + // use unused samples to make sure compiler doesn't overlap memory and put a sync + // between loads + float epsilon = (samples_00.w + samples_10.z + samples_01.x + samples_11.y) * 1e-20f; + + float2 pixelSize = g_CACAOConsts.OutputBufferInverseDimensions; + float2 uv = (float2(2 * tid) + 0.5f + epsilon) * g_CACAOConsts.OutputBufferInverseDimensions; + + PrepareNormals(depths, uv, pixelSize, tid); +} + +Texture2D g_PrepareNormalsFromNormalsInput : register(t0); +RWTexture2DArray g_PrepareNormalsFromNormalsOutput : register(u0); + +float3 PrepareNormalsFromInputNormalsLoadNormal(int2 pos) +{ + // float3 encodedNormal = g_NormalmapSource.Load(int3(pos, 0)).xyz; + float3 encodedNormal = g_PrepareNormalsFromNormalsInput.SampleLevel(g_PointClampSampler, (float2(pos)+0.5f) * g_CACAOConsts.OutputBufferInverseDimensions, 0).xyz; + return DecodeNormal(encodedNormal); +} + +[numthreads(PREPARE_NORMALS_FROM_INPUT_NORMALS_WIDTH, PREPARE_NORMALS_FROM_INPUT_NORMALS_HEIGHT, 1)] +void CSPrepareDownsampledNormalsFromInputNormals(int2 tid : SV_DispatchThreadID) +{ + int2 baseCoord = 4 * tid; + g_PrepareNormalsFromNormalsOutput[uint3(tid, 0)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(0, 0)), 1.0f); + g_PrepareNormalsFromNormalsOutput[uint3(tid, 1)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(2, 0)), 1.0f); + g_PrepareNormalsFromNormalsOutput[uint3(tid, 2)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(0, 2)), 1.0f); + g_PrepareNormalsFromNormalsOutput[uint3(tid, 3)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(2, 2)), 1.0f); +} + +[numthreads(PREPARE_NORMALS_FROM_INPUT_NORMALS_WIDTH, PREPARE_NORMALS_FROM_INPUT_NORMALS_HEIGHT, 1)] +void CSPrepareNativeNormalsFromInputNormals(int2 tid : SV_DispatchThreadID) +{ + int2 baseCoord = 2 * tid; + g_PrepareNormalsFromNormalsOutput[uint3(tid, 0)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(0, 0)), 1.0f); + g_PrepareNormalsFromNormalsOutput[uint3(tid, 1)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(1, 0)), 1.0f); + g_PrepareNormalsFromNormalsOutput[uint3(tid, 2)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(0, 1)), 1.0f); + g_PrepareNormalsFromNormalsOutput[uint3(tid, 3)] = float4(PrepareNormalsFromInputNormalsLoadNormal(baseCoord + int2(1, 1)), 1.0f); +} + +// ====================================================================================== +// importance map stuff + +Texture2DArray g_ImportanceFinalSSAO : register(t0); +RWTexture2D g_ImportanceOut : register(u0); + +[numthreads(IMPORTANCE_MAP_WIDTH, IMPORTANCE_MAP_HEIGHT, 1)] +void CSGenerateImportanceMap(uint2 tid : SV_DispatchThreadID) +{ + uint2 basePos = tid * 2; + + float2 baseUV = (float2(basePos)+float2(0.5f, 0.5f)) * g_CACAOConsts.SSAOBufferInverseDimensions; + + float avg = 0.0; + float minV = 1.0; + float maxV = 0.0; + [unroll] + for (int i = 0; i < 4; i++) + { + float4 vals = g_ImportanceFinalSSAO.GatherRed(g_PointClampSampler, float3(baseUV, i)); + + // apply the same modifications that would have been applied in the main shader + vals = g_CACAOConsts.EffectShadowStrength * vals; + + vals = 1 - vals; + + vals = pow(saturate(vals), g_CACAOConsts.EffectShadowPow); + + avg += dot(float4(vals.x, vals.y, vals.z, vals.w), float4(1.0 / 16.0, 1.0 / 16.0, 1.0 / 16.0, 1.0 / 16.0)); + + maxV = max(maxV, max(max(vals.x, vals.y), max(vals.z, vals.w))); + minV = min(minV, min(min(vals.x, vals.y), min(vals.z, vals.w))); + } + + float minMaxDiff = maxV - minV; + + g_ImportanceOut[tid] = pow(saturate(minMaxDiff * 2.0), 0.8); +} + +Texture2D g_ImportanceAIn : register(t0); +RWTexture2D g_ImportanceAOut : register(u0); + +static const float cSmoothenImportance = 1.0; + +[numthreads(IMPORTANCE_MAP_A_WIDTH, IMPORTANCE_MAP_A_HEIGHT, 1)] +void CSPostprocessImportanceMapA(uint2 tid : SV_DispatchThreadID) +{ + float2 uv = (float2(tid)+0.5f) * g_CACAOConsts.ImportanceMapInverseDimensions; + + float centre = g_ImportanceAIn.SampleLevel(g_LinearClampSampler, uv, 0.0).x; + //return centre; + + float2 halfPixel = 0.5f * g_CACAOConsts.ImportanceMapInverseDimensions; + + float4 vals; + vals.x = g_ImportanceAIn.SampleLevel(g_LinearClampSampler, uv + float2(-halfPixel.x * 3, -halfPixel.y), 0.0).x; + vals.y = g_ImportanceAIn.SampleLevel(g_LinearClampSampler, uv + float2(+halfPixel.x, -halfPixel.y * 3), 0.0).x; + vals.z = g_ImportanceAIn.SampleLevel(g_LinearClampSampler, uv + float2(+halfPixel.x * 3, +halfPixel.y), 0.0).x; + vals.w = g_ImportanceAIn.SampleLevel(g_LinearClampSampler, uv + float2(-halfPixel.x, +halfPixel.y * 3), 0.0).x; + + float avgVal = dot(vals, float4(0.25, 0.25, 0.25, 0.25)); + vals.xy = max(vals.xy, vals.zw); + float maxVal = max(centre, max(vals.x, vals.y)); + + g_ImportanceAOut[tid] = lerp(maxVal, avgVal, cSmoothenImportance); +} + +Texture2D g_ImportanceBIn : register(t0); +RWTexture2D g_ImportanceBOut : register(u0); +RWTexture1D g_ImportanceBLoadCounter : register(u1); + +[numthreads(IMPORTANCE_MAP_B_WIDTH, IMPORTANCE_MAP_B_HEIGHT, 1)] +void CSPostprocessImportanceMapB(uint2 tid : SV_DispatchThreadID) +{ + float2 uv = (float2(tid)+0.5f) * g_CACAOConsts.ImportanceMapInverseDimensions; + + float centre = g_ImportanceBIn.SampleLevel(g_LinearClampSampler, uv, 0.0).x; + //return centre; + + float2 halfPixel = 0.5f * g_CACAOConsts.ImportanceMapInverseDimensions; + + float4 vals; + vals.x = g_ImportanceBIn.SampleLevel(g_LinearClampSampler, uv + float2(-halfPixel.x, -halfPixel.y * 3), 0.0).x; + vals.y = g_ImportanceBIn.SampleLevel(g_LinearClampSampler, uv + float2(+halfPixel.x * 3, -halfPixel.y), 0.0).x; + vals.z = g_ImportanceBIn.SampleLevel(g_LinearClampSampler, uv + float2(+halfPixel.x, +halfPixel.y * 3), 0.0).x; + vals.w = g_ImportanceBIn.SampleLevel(g_LinearClampSampler, uv + float2(-halfPixel.x * 3, +halfPixel.y), 0.0).x; + + float avgVal = dot(vals, float4(0.25, 0.25, 0.25, 0.25)); + vals.xy = max(vals.xy, vals.zw); + float maxVal = max(centre, max(vals.x, vals.y)); + + float retVal = lerp(maxVal, avgVal, cSmoothenImportance); + g_ImportanceBOut[tid] = retVal; + + // sum the average; to avoid overflowing we assume max AO resolution is not bigger than 16384x16384; so quarter res (used here) will be 4096x4096, which leaves us with 8 bits per pixel + uint sum = (uint)(saturate(retVal) * 255.0 + 0.5); + + // save every 9th to avoid InterlockedAdd congestion - since we're blurring, this is good enough; compensated by multiplying LoadCounterAvgDiv by 9 + if (((tid.x % 3) + (tid.y % 3)) == 0) + { + InterlockedAdd(g_ImportanceBLoadCounter[0], sum); + } +} + +// ============================================================================================ +// bilateral upscale + +RWTexture2D g_BilateralUpscaleOutput : register(u0); + +Texture2DArray g_BilateralUpscaleInput : register(t0); +Texture2D g_BilateralUpscaleVerticalInput : register(t0); + +Texture2D g_BilateralUpscaleDepth : register(t1); +Texture2D g_BilateralUpscaleNormals : register(t2); +Texture2DArray g_BilateralUpscaleDownscaledDepth : register(t3); + + +uint DoublePackFloat16(float v) +{ + uint2 p = f32tof16(float2(v, v)); + return p.x | (p.y << 16); +} + +#define BILATERAL_UPSCALE_BUFFER_WIDTH (BILATERAL_UPSCALE_WIDTH + 4) +#define BILATERAL_UPSCALE_BUFFER_HEIGHT (BILATERAL_UPSCALE_HEIGHT + 4) + +struct BilateralBufferVal +{ + // float depth; + // float ssaoVal; + uint packedDepths; + uint packedSsaoVals; +}; + +groupshared BilateralBufferVal s_BilateralUpscaleBuffer[BILATERAL_UPSCALE_BUFFER_WIDTH][BILATERAL_UPSCALE_BUFFER_HEIGHT]; + +void BilateralUpscaleNxN(int2 tid, uint2 gtid, uint2 gid, const int width, const int height) +{ + // fill in group shared buffer + { + uint threadNum = (gtid.y * BILATERAL_UPSCALE_WIDTH + gtid.x) * 3; + uint2 bufferCoord = uint2(threadNum % BILATERAL_UPSCALE_BUFFER_WIDTH, threadNum / BILATERAL_UPSCALE_BUFFER_WIDTH); + uint2 imageCoord = (gid * uint2(BILATERAL_UPSCALE_WIDTH, BILATERAL_UPSCALE_HEIGHT)) + bufferCoord - 2; + + for (int i = 0; i < 3; ++i) + { + // uint2 depthBufferCoord = imageCoord + 2 * g_CACAOConsts.DeinterleavedDepthBufferOffset; + // uint3 depthArrayBufferCoord = uint3(depthBufferCoord / 2, 2 * (depthBufferCoord.y % 2) + depthBufferCoord.x % 2); + uint3 ssaoArrayBufferCoord = uint3(imageCoord / 2, 2 * (imageCoord.y % 2) + imageCoord.x % 2); + uint3 depthArrayBufferCoord = ssaoArrayBufferCoord + uint3(g_CACAOConsts.DeinterleavedDepthBufferOffset, 0); + ++imageCoord.x; + + BilateralBufferVal bufferVal; + + float depth = g_BilateralUpscaleDownscaledDepth[depthArrayBufferCoord]; + float ssaoVal = g_BilateralUpscaleInput.SampleLevel(g_PointClampSampler, float3((float2(ssaoArrayBufferCoord.xy) + 0.5f) * g_CACAOConsts.SSAOBufferInverseDimensions, ssaoArrayBufferCoord.z), 0); + + bufferVal.packedDepths = DoublePackFloat16(depth); + bufferVal.packedSsaoVals = DoublePackFloat16(ssaoVal); + + s_BilateralUpscaleBuffer[bufferCoord.x + i][bufferCoord.y] = bufferVal; + } + } + + GroupMemoryBarrierWithGroupSync(); + + float depths[4]; + // load depths + { + int2 fullBufferCoord = 2 * tid; + int2 fullDepthBufferCoord = fullBufferCoord + g_CACAOConsts.DepthBufferOffset; + + depths[0] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(0, 0)]); + depths[1] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(1, 0)]); + depths[2] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(0, 1)]); + depths[3] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(1, 1)]); + } + min16float4 packedDepths = min16float4(depths[0], depths[1], depths[2], depths[3]); + + float totals[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float totalWeights[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float2 pps[] = { float2(0.0f, 0.0f), float2(0.5f, 0.0f), float2(0.0f, 0.5f), float2(0.5f, 0.5f) }; + + min16float4 packedTotals = min16float4(0.0f, 0.0f, 0.0f, 0.0f); + min16float4 packedTotalWeights = min16float4(0.0f, 0.0f, 0.0f, 0.0f); + + int2 baseBufferCoord = gtid + int2(width, height); + + float distanceSigma = g_CACAOConsts.BilateralSimilarityDistanceSigma; + min16float2 packedDistSigma = min16float2(1.0f / distanceSigma, 1.0f / distanceSigma); + float sigma = g_CACAOConsts.BilateralSigmaSquared; + min16float2 packedSigma = min16float2(1.0f / sigma, 1.0f / sigma); + + for (int x = -width; x <= width; ++x) + { + for (int y = -height; y <= height; ++y) + { + int2 bufferCoord = baseBufferCoord + int2(x, y); + + BilateralBufferVal bufferVal = s_BilateralUpscaleBuffer[bufferCoord.x][bufferCoord.y]; + + min16float2 u = min16float2(x, x) + min16float2(0.0f, 0.5f); + min16float2 v1 = min16float2(y, y) + min16float2(0.0f, 0.0f); + min16float2 v2 = min16float2(y, y) + min16float2(0.5f, 0.5f); + u = u * u; + v1 = v1 * v1; + v2 = v2 * v2; + + min16float2 dist1 = u + v1; + min16float2 dist2 = u + v2; + + min16float2 wx1 = exp(-dist1 * packedSigma); + min16float2 wx2 = exp(-dist2 * packedSigma); + + min16float2 bufferPackedDepths = UnpackFloat16(bufferVal.packedDepths); + +#if 0 + min16float2 diff1 = abs(packedDepths.xy - bufferPackedDepths); + min16float2 diff2 = abs(packedDepths.zw - bufferPackedDepths); +#else + min16float2 diff1 = packedDepths.xy - bufferPackedDepths; + min16float2 diff2 = packedDepths.zw - bufferPackedDepths; + diff1 *= diff1; + diff2 *= diff2; +#endif + + min16float2 wy1 = exp(-diff1 * packedDistSigma); + min16float2 wy2 = exp(-diff2 * packedDistSigma); + + min16float2 weight1 = wx1 * wy1; + min16float2 weight2 = wx2 * wy2; + + min16float2 packedSsaoVals = UnpackFloat16(bufferVal.packedSsaoVals); + packedTotals.xy += packedSsaoVals * weight1; + packedTotals.zw += packedSsaoVals * weight2; + packedTotalWeights.xy += weight1; + packedTotalWeights.zw += weight2; + } + } + + uint2 outputCoord = 2 * tid; + min16float4 outputValues = packedTotals / packedTotalWeights; + g_BilateralUpscaleOutput[outputCoord + int2(0, 0)] = outputValues.x; // totals[0] / totalWeights[0]; + g_BilateralUpscaleOutput[outputCoord + int2(1, 0)] = outputValues.y; // totals[1] / totalWeights[1]; + g_BilateralUpscaleOutput[outputCoord + int2(0, 1)] = outputValues.z; // totals[2] / totalWeights[2]; + g_BilateralUpscaleOutput[outputCoord + int2(1, 1)] = outputValues.w; // totals[3] / totalWeights[3]; +} + +[numthreads(BILATERAL_UPSCALE_WIDTH, BILATERAL_UPSCALE_HEIGHT, 1)] +void CSUpscaleBilateral5x5(int2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + BilateralUpscaleNxN(tid, gtid, gid, 2, 2); +} + +[numthreads(BILATERAL_UPSCALE_WIDTH, BILATERAL_UPSCALE_HEIGHT, 1)] +void CSUpscaleBilateral7x7(int2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + BilateralUpscaleNxN(tid, gtid, gid, 3, 3); +} + +[numthreads(BILATERAL_UPSCALE_WIDTH, BILATERAL_UPSCALE_HEIGHT, 1)] +void CSUpscaleBilateral5x5Half(int2 tid : SV_DispatchThreadID, uint2 gtid : SV_GroupThreadID, uint2 gid : SV_GroupID) +{ + const int width = 2, height = 2; + + // fill in group shared buffer + { + uint threadNum = (gtid.y * BILATERAL_UPSCALE_WIDTH + gtid.x) * 3; + uint2 bufferCoord = uint2(threadNum % BILATERAL_UPSCALE_BUFFER_WIDTH, threadNum / BILATERAL_UPSCALE_BUFFER_WIDTH); + uint2 imageCoord = (gid * uint2(BILATERAL_UPSCALE_WIDTH, BILATERAL_UPSCALE_HEIGHT)) + bufferCoord - 2; + + for (int i = 0; i < 3; ++i) + { + // uint2 depthBufferCoord = imageCoord + g_CACAOConsts.DeinterleavedDepthBufferOffset; + // uint3 depthArrayBufferCoord = uint3(depthBufferCoord / 2, 2 * (depthBufferCoord.y % 2) + depthBufferCoord.x % 2); + uint idx = (imageCoord.y % 2) * 3; + uint3 ssaoArrayBufferCoord = uint3(imageCoord / 2, idx); + uint3 depthArrayBufferCoord = ssaoArrayBufferCoord + uint3(g_CACAOConsts.DeinterleavedDepthBufferOffset, 0); + ++imageCoord.x; + + BilateralBufferVal bufferVal; + + float depth = g_BilateralUpscaleDownscaledDepth[depthArrayBufferCoord]; + // float ssaoVal = g_BilateralUpscaleInput.SampleLevel(g_PointClampSampler, float3((float2(ssaoArrayBufferCoord.xy) + 0.5f) * g_CACAOConsts.HalfViewportPixelSize, ssaoArrayBufferCoord.z), 0); + float ssaoVal = g_BilateralUpscaleInput.SampleLevel(g_PointClampSampler, float3((float2(ssaoArrayBufferCoord.xy) + 0.5f) * g_CACAOConsts.SSAOBufferInverseDimensions, ssaoArrayBufferCoord.z), 0); + + bufferVal.packedDepths = DoublePackFloat16(depth); + bufferVal.packedSsaoVals = DoublePackFloat16(ssaoVal); + + s_BilateralUpscaleBuffer[bufferCoord.x + i][bufferCoord.y] = bufferVal; + } + } + + GroupMemoryBarrierWithGroupSync(); + + float depths[4]; + // load depths + { + int2 fullBufferCoord = 2 * tid; + int2 fullDepthBufferCoord = fullBufferCoord + g_CACAOConsts.DepthBufferOffset; + + depths[0] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(0, 0)]); + depths[1] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(1, 0)]); + depths[2] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(0, 1)]); + depths[3] = ScreenSpaceToViewSpaceDepth(g_BilateralUpscaleDepth[fullDepthBufferCoord + int2(1, 1)]); + } + min16float4 packedDepths = min16float4(depths[0], depths[1], depths[2], depths[3]); + + float totals[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float totalWeights[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float2 pps[] = { float2(0.0f, 0.0f), float2(0.5f, 0.0f), float2(0.0f, 0.5f), float2(0.5f, 0.5f) }; + + min16float4 packedTotals = min16float4(0.0f, 0.0f, 0.0f, 0.0f); + min16float4 packedTotalWeights = min16float4(0.0f, 0.0f, 0.0f, 0.0f); + + int2 baseBufferCoord = gtid + int2(width, height); + + float distanceSigma = g_CACAOConsts.BilateralSimilarityDistanceSigma; + min16float2 packedDistSigma = min16float2(1.0f / distanceSigma, 1.0f / distanceSigma); + float sigma = g_CACAOConsts.BilateralSigmaSquared; + min16float2 packedSigma = min16float2(1.0f / sigma, 1.0f / sigma); + + for (int x = -width; x <= width; ++x) + { + for (int y = -height; y <= height; ++y) + { + int2 bufferCoord = baseBufferCoord + int2(x, y); + + BilateralBufferVal bufferVal = s_BilateralUpscaleBuffer[bufferCoord.x][bufferCoord.y]; + + min16float2 u = min16float2(x, x) + min16float2(0.0f, 0.5f); + min16float2 v1 = min16float2(y, y) + min16float2(0.0f, 0.0f); + min16float2 v2 = min16float2(y, y) + min16float2(0.5f, 0.5f); + u = u * u; + v1 = v1 * v1; + v2 = v2 * v2; + + min16float2 dist1 = u + v1; + min16float2 dist2 = u + v2; + + min16float2 wx1 = exp(-dist1 * packedSigma); + min16float2 wx2 = exp(-dist2 * packedSigma); + + min16float2 bufferPackedDepths = UnpackFloat16(bufferVal.packedDepths); + +#if 0 + min16float2 diff1 = abs(packedDepths.xy - bufferPackedDepths); + min16float2 diff2 = abs(packedDepths.zw - bufferPackedDepths); +#else + min16float2 diff1 = packedDepths.xy - bufferPackedDepths; + min16float2 diff2 = packedDepths.zw - bufferPackedDepths; + diff1 *= diff1; + diff2 *= diff2; +#endif + + min16float2 wy1 = exp(-diff1 * packedDistSigma); + min16float2 wy2 = exp(-diff2 * packedDistSigma); + + min16float2 weight1 = wx1 * wy1; + min16float2 weight2 = wx2 * wy2; + + min16float2 packedSsaoVals = UnpackFloat16(bufferVal.packedSsaoVals); + packedTotals.xy += packedSsaoVals * weight1; + packedTotals.zw += packedSsaoVals * weight2; + packedTotalWeights.xy += weight1; + packedTotalWeights.zw += weight2; + } + } + + uint2 outputCoord = 2 * tid; + min16float4 outputValues = packedTotals / packedTotalWeights; + g_BilateralUpscaleOutput[outputCoord + int2(0, 0)] = outputValues.x; // totals[0] / totalWeights[0]; + g_BilateralUpscaleOutput[outputCoord + int2(1, 0)] = outputValues.y; // totals[1] / totalWeights[1]; + g_BilateralUpscaleOutput[outputCoord + int2(0, 1)] = outputValues.z; // totals[2] / totalWeights[2]; + g_BilateralUpscaleOutput[outputCoord + int2(1, 1)] = outputValues.w; // totals[3] / totalWeights[3]; +} + + +#undef BILATERAL_UPSCALE_BUFFER_WIDTH +#undef BILATERAL_UPSCALE_BUFFER_HEIGHT diff --git a/ffx-cacao/src/ffx_cacao_defines.h b/ffx-cacao/src/ffx_cacao_defines.h new file mode 100644 index 0000000..d36514c --- /dev/null +++ b/ffx-cacao/src/ffx_cacao_defines.h @@ -0,0 +1,93 @@ +// Modifications Copyright © 2020. Advanced Micro Devices, Inc. All Rights Reserved. + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// File changes (yyyy-mm-dd) +// 2016-09-07: filip.strugar@intel.com: first commit +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Defines for constants common to both CACAO.cpp and CACAO.hlsl + +// ==================================================================== +// Prepare shader dimensions + +#define PREPARE_DEPTHS_AND_MIPS_WIDTH 8 +#define PREPARE_DEPTHS_AND_MIPS_HEIGHT 8 + +#define PREPARE_DEPTHS_WIDTH 8 +#define PREPARE_DEPTHS_HEIGHT 8 + +#define PREPARE_DEPTHS_HALF_WIDTH 8 +#define PREPARE_DEPTHS_HALF_HEIGHT 8 + +#define PREPARE_DEPTHS_NORMALS_AND_MIPS_WIDTH 8 +#define PREPARE_DEPTHS_NORMALS_AND_MIPS_HEIGHT 8 + +#define PREPARE_DEPTHS_AND_NORMALS_WIDTH 8 +#define PREPARE_DEPTHS_AND_NORMALS_HEIGHT 8 + +#define PREPARE_DEPTHS_AND_NORMALS_HALF_WIDTH 8 +#define PREPARE_DEPTHS_AND_NORMALS_HALF_HEIGHT 8 + +#define PREPARE_NORMALS_WIDTH 8 +#define PREPARE_NORMALS_HEIGHT 8 + +#define PREPARE_NORMALS_FROM_INPUT_NORMALS_WIDTH 8 +#define PREPARE_NORMALS_FROM_INPUT_NORMALS_HEIGHT 8 + +// ==================================================================== +// Generate SSAO shader dimensions + +#define GENERATE_WIDTH 8 +#define GENERATE_HEIGHT 8 + +// ==================================================================== +// Importance map shader dimensions + +#define IMPORTANCE_MAP_WIDTH 8 +#define IMPORTANCE_MAP_HEIGHT 8 + +#define IMPORTANCE_MAP_A_WIDTH 8 +#define IMPORTANCE_MAP_A_HEIGHT 8 + +#define IMPORTANCE_MAP_B_WIDTH 8 +#define IMPORTANCE_MAP_B_HEIGHT 8 + +// ==================================================================== +// Blur shader dimensions + +#define BLUR_WIDTH 16 +#define BLUR_HEIGHT 16 + +// ==================================================================== +// Apply shader dimensions + +#define APPLY_WIDTH 8 +#define APPLY_HEIGHT 8 + +// ==================================================================== +// Reinterleave shader dimensions + +#define REINTERLEAVE_WIDTH 16 +#define REINTERLEAVE_HEIGHT 8 + +// ==================================================================== +// Upscale + +#define UPSCALE_WIDTH 8 +#define UPSCALE_HEIGHT 8 + +#define BILATERAL_UPSCALE_WIDTH 8 +#define BILATERAL_UPSCALE_HEIGHT 4 \ No newline at end of file diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..6adade0 --- /dev/null +++ b/license.txt @@ -0,0 +1,19 @@ +Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..85624d5 --- /dev/null +++ b/readme.md @@ -0,0 +1,34 @@ +# FidelityFX CACAO + +Copyright (c) 2020 Advanced Micro Devices, Inc. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## Combined Adaptive Compute Ambient Occlusion (CACAO) + +Combined Adaptive Compute Ambient Occlusion (CACAO) is a highly optimized adaptive sampling ambient occlusion implementation. This directory contains the source code for CACAO as well as a sample demonstrating usage and integration of the library. The directory structure is as follows: + +- ffx-cacao contains the [CACAO library](https://github.com/GPUOpen-Effects/FidelityFX-CACAO/tree/master/ffx-cacao) +- sample contains the [CACAO sample](https://github.com/GPUOpen-Effects/FidelityFX-CACAO/tree/master/sample) + +You can find the binaries for FidelityFX CACAO in the release section on GitHub. + +# Sponza Model Issue + +In the provided Sponza model for the FFX CACAO sample, at the bottom of some curtains, +there is an issue with incorrect normals +in the mesh causing ambient occlusion to be incorrectly calculated as light in places where occlusion +should be dark. This is a known issue with the mesh, and not an issue with FFX CACAO itself. diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt new file mode 100644 index 0000000..441b0a7 --- /dev/null +++ b/sample/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.4) +set(CMAKE_GENERATOR_PLATFORM x64) + +project (FFX_CACAO_Sample_${GFX_API}) + +# ouput exe to bin directory +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin) +foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) + string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) + set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_HOME_DIRECTORY}/bin ) +endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES ) + +# reference libs used by both backends +add_subdirectory(libs/cauldron) + +set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME}) + +if(GFX_API STREQUAL DX12) + add_subdirectory(src/DX12) +elseif(GFX_API STREQUAL VK) + find_package(Vulkan REQUIRED) + add_subdirectory(src/VK) +else() + message(STATUS "----------------------------------------------------------------------------------------") + message(STATUS "") + message(STATUS "** Almost there!!") + message(STATUS "") + message(STATUS " This framework supports DX12 or VULKAN, you need to invoke cmake in one of these ways:") + message(STATUS "") + message(STATUS " Examples:") + message(STATUS " cmake -DGFX_API=DX12") + message(STATUS " cmake -DGFX_API=VK") + message(STATUS "") + message(STATUS "----------------------------------------------------------------------------------------") + message(FATAL_ERROR "") +endif() + diff --git a/sample/build/.gitignore b/sample/build/.gitignore new file mode 100644 index 0000000..f3f0395 --- /dev/null +++ b/sample/build/.gitignore @@ -0,0 +1,2 @@ +DX12 +VK diff --git a/sample/build/GenerateSolutions.bat b/sample/build/GenerateSolutions.bat new file mode 100644 index 0000000..ffddc62 --- /dev/null +++ b/sample/build/GenerateSolutions.bat @@ -0,0 +1,4 @@ +mkdir DX12 +cd DX12 +cmake ..\.. -DGFX_API=DX12 %* +cd .. diff --git a/sample/common.cmake b/sample/common.cmake new file mode 100644 index 0000000..4ea0fda --- /dev/null +++ b/sample/common.cmake @@ -0,0 +1,28 @@ +# +# enables multithreading compilation +# + +add_compile_options(/MP) + +# +# includes cauldron's helper cmakes +# +include(${CMAKE_CURRENT_SOURCE_DIR}/../../libs/cauldron/common.cmake) + +# +# Add manifest so the app uses the right DPI settings +# +function(addManifest PROJECT_NAME) + IF (MSVC) + IF (CMAKE_MAJOR_VERSION LESS 3) + MESSAGE(WARNING "CMake version 3.0 or newer is required use build variable TARGET_FILE") + ELSE() + ADD_CUSTOM_COMMAND( + TARGET ${PROJECT_NAME} + POST_BUILD + COMMAND "mt.exe" -manifest \"${CMAKE_CURRENT_SOURCE_DIR}\\dpiawarescaling.manifest\" -inputresource:\"$\"\;\#1 -outputresource:\"$\"\;\#1 + COMMENT "Adding display aware manifest..." + ) + ENDIF() + ENDIF(MSVC) +endfunction() \ No newline at end of file diff --git a/sample/libs/cauldron b/sample/libs/cauldron new file mode 160000 index 0000000..fd91cd7 --- /dev/null +++ b/sample/libs/cauldron @@ -0,0 +1 @@ +Subproject commit fd91cd744d014505daef1780dceee49fd62ce953 diff --git a/sample/media/Sponza/README.md b/sample/media/Sponza/README.md new file mode 100644 index 0000000..89e3787 --- /dev/null +++ b/sample/media/Sponza/README.md @@ -0,0 +1,68 @@ +# Sponza + +## Screenshot + +Lights are shown here, they are not part of the model. + +![screenshot](screenshot/large.jpg) + +## Model notes + +Tangents have been computed using MikkTSpace, as the original OBJ model did not have them. +I have manually inspected the normals, and it looks correct to me. +Be aware that W is -1.0 for most of the tangent signs, you will need to handle tangent W for correct results. + + +## Sources + +### http://www.crytek.com/cryengine/cryengine3/downloads +- http://www.crytek.com/download/sponza\_obj.rar +- http://www.crytek.com/download/sponza\_textures.rar + +### http://www.alexandre-pestana.com/pbr-textures-sponza/ +- http://www.alexandre-pestana.com/downloads/SponzaPBR\_Textures.rar + +I needed to resize some of the alpha mask textures to the 1024x1024 resolution used by the new texture pack, +and merge in diffuse with alpha. +I also repacked the separate metallic/roughness textures into the glTF layout (G - roughness, B - metallic). +The images are also re-encoded as PNG instead of TGA. +All the materials also had a constant diffuse factor of about 0.58. I assume it was supposed to be there, so I kept it. +I also ran the vertices and indices through a mesh optimizer. + +## Licensing notes + +Taken from copyright.txt in SponzaPBR\_Textures.rar + +``` +PBR textures for the Sponza model. +For more informations: www.alexandre-pestana.com + + +Original copyright: + +July 14, 2011 Morgan McGuire modified the model from Crytek's OBJ +export to correct some small errors. He computed bump maps from the +normal maps using normal2bump.cpp (since +MTL files expect height bumps, not normals), put the "mask" textures +into the alpha channel of the associated diffuse texture, cleaned up +noise in the masks, created the missing gi_flag.tga texture, and +removed the long untextured banner floating in the middle of the +atrium that appears in the file but in none of the published images of +the model. The banner is in banner.obj. + + + +http://www.crytek.com/cryengine/cryengine3/downloads + + +Sponza Model +August 19, 2010 +The Atrium Sponza Palace, Dubrovnik, is an elegant and improved model created by Frank Meinl. The original Sponza model was created by Marko Dabrovic in early 2002. Over the years, the Sponza Atrium scene has become one of the most popular 3D scenes for testing global illumination and radiosity due to it's specific architectural structure which is particularly complex for global illumination light. + +However, nowadays it is considered as a simple model, thus it was decided to crate a new model with highly improved appearance and scene complexity. It is donated to the public for radiosity and is represented in several different formats (3ds, Obj) for use with various commercial 3D applications and renderers. + + +Screenshot from the I3D paper +http://crytek.com/sites/default/files/20100301_lpv.pdf +``` diff --git a/sample/media/Sponza/glTF/10381718147657362067.jpg b/sample/media/Sponza/glTF/10381718147657362067.jpg new file mode 100644 index 0000000..721911a Binary files /dev/null and b/sample/media/Sponza/glTF/10381718147657362067.jpg differ diff --git a/sample/media/Sponza/glTF/10388182081421875623.jpg b/sample/media/Sponza/glTF/10388182081421875623.jpg new file mode 100644 index 0000000..22221dc Binary files /dev/null and b/sample/media/Sponza/glTF/10388182081421875623.jpg differ diff --git a/sample/media/Sponza/glTF/11474523244911310074.jpg b/sample/media/Sponza/glTF/11474523244911310074.jpg new file mode 100644 index 0000000..f2cf424 Binary files /dev/null and b/sample/media/Sponza/glTF/11474523244911310074.jpg differ diff --git a/sample/media/Sponza/glTF/11490520546946913238.jpg b/sample/media/Sponza/glTF/11490520546946913238.jpg new file mode 100644 index 0000000..4174770 Binary files /dev/null and b/sample/media/Sponza/glTF/11490520546946913238.jpg differ diff --git a/sample/media/Sponza/glTF/11872827283454512094.jpg b/sample/media/Sponza/glTF/11872827283454512094.jpg new file mode 100644 index 0000000..fd4136f Binary files /dev/null and b/sample/media/Sponza/glTF/11872827283454512094.jpg differ diff --git a/sample/media/Sponza/glTF/11968150294050148237.jpg b/sample/media/Sponza/glTF/11968150294050148237.jpg new file mode 100644 index 0000000..db25cc6 Binary files /dev/null and b/sample/media/Sponza/glTF/11968150294050148237.jpg differ diff --git a/sample/media/Sponza/glTF/1219024358953944284.jpg b/sample/media/Sponza/glTF/1219024358953944284.jpg new file mode 100644 index 0000000..4f3fe65 Binary files /dev/null and b/sample/media/Sponza/glTF/1219024358953944284.jpg differ diff --git a/sample/media/Sponza/glTF/12501374198249454378.jpg b/sample/media/Sponza/glTF/12501374198249454378.jpg new file mode 100644 index 0000000..72dcb3d Binary files /dev/null and b/sample/media/Sponza/glTF/12501374198249454378.jpg differ diff --git a/sample/media/Sponza/glTF/13196865903111448057.jpg b/sample/media/Sponza/glTF/13196865903111448057.jpg new file mode 100644 index 0000000..cdf1eae Binary files /dev/null and b/sample/media/Sponza/glTF/13196865903111448057.jpg differ diff --git a/sample/media/Sponza/glTF/13824894030729245199.jpg b/sample/media/Sponza/glTF/13824894030729245199.jpg new file mode 100644 index 0000000..8410fd7 Binary files /dev/null and b/sample/media/Sponza/glTF/13824894030729245199.jpg differ diff --git a/sample/media/Sponza/glTF/13982482287905699490.jpg b/sample/media/Sponza/glTF/13982482287905699490.jpg new file mode 100644 index 0000000..8bd992a Binary files /dev/null and b/sample/media/Sponza/glTF/13982482287905699490.jpg differ diff --git a/sample/media/Sponza/glTF/14118779221266351425.jpg b/sample/media/Sponza/glTF/14118779221266351425.jpg new file mode 100644 index 0000000..6619f87 Binary files /dev/null and b/sample/media/Sponza/glTF/14118779221266351425.jpg differ diff --git a/sample/media/Sponza/glTF/14170708867020035030.jpg b/sample/media/Sponza/glTF/14170708867020035030.jpg new file mode 100644 index 0000000..ee05cb6 Binary files /dev/null and b/sample/media/Sponza/glTF/14170708867020035030.jpg differ diff --git a/sample/media/Sponza/glTF/14267839433702832875.jpg b/sample/media/Sponza/glTF/14267839433702832875.jpg new file mode 100644 index 0000000..d667997 Binary files /dev/null and b/sample/media/Sponza/glTF/14267839433702832875.jpg differ diff --git a/sample/media/Sponza/glTF/14650633544276105767.jpg b/sample/media/Sponza/glTF/14650633544276105767.jpg new file mode 100644 index 0000000..64e58dc Binary files /dev/null and b/sample/media/Sponza/glTF/14650633544276105767.jpg differ diff --git a/sample/media/Sponza/glTF/15295713303328085182.jpg b/sample/media/Sponza/glTF/15295713303328085182.jpg new file mode 100644 index 0000000..80c8b28 Binary files /dev/null and b/sample/media/Sponza/glTF/15295713303328085182.jpg differ diff --git a/sample/media/Sponza/glTF/15722799267630235092.jpg b/sample/media/Sponza/glTF/15722799267630235092.jpg new file mode 100644 index 0000000..ea1d7a4 Binary files /dev/null and b/sample/media/Sponza/glTF/15722799267630235092.jpg differ diff --git a/sample/media/Sponza/glTF/16275776544635328252.png b/sample/media/Sponza/glTF/16275776544635328252.png new file mode 100644 index 0000000..987e8d0 Binary files /dev/null and b/sample/media/Sponza/glTF/16275776544635328252.png differ diff --git a/sample/media/Sponza/glTF/16299174074766089871.jpg b/sample/media/Sponza/glTF/16299174074766089871.jpg new file mode 100644 index 0000000..ec955d3 Binary files /dev/null and b/sample/media/Sponza/glTF/16299174074766089871.jpg differ diff --git a/sample/media/Sponza/glTF/16885566240357350108.jpg b/sample/media/Sponza/glTF/16885566240357350108.jpg new file mode 100644 index 0000000..82bd131 Binary files /dev/null and b/sample/media/Sponza/glTF/16885566240357350108.jpg differ diff --git a/sample/media/Sponza/glTF/17556969131407844942.jpg b/sample/media/Sponza/glTF/17556969131407844942.jpg new file mode 100644 index 0000000..8b7b6de Binary files /dev/null and b/sample/media/Sponza/glTF/17556969131407844942.jpg differ diff --git a/sample/media/Sponza/glTF/17876391417123941155.jpg b/sample/media/Sponza/glTF/17876391417123941155.jpg new file mode 100644 index 0000000..662ac2e Binary files /dev/null and b/sample/media/Sponza/glTF/17876391417123941155.jpg differ diff --git a/sample/media/Sponza/glTF/2051777328469649772.jpg b/sample/media/Sponza/glTF/2051777328469649772.jpg new file mode 100644 index 0000000..3088e8f Binary files /dev/null and b/sample/media/Sponza/glTF/2051777328469649772.jpg differ diff --git a/sample/media/Sponza/glTF/2185409758123873465.jpg b/sample/media/Sponza/glTF/2185409758123873465.jpg new file mode 100644 index 0000000..6740aee Binary files /dev/null and b/sample/media/Sponza/glTF/2185409758123873465.jpg differ diff --git a/sample/media/Sponza/glTF/2299742237651021498.jpg b/sample/media/Sponza/glTF/2299742237651021498.jpg new file mode 100644 index 0000000..5c2147e Binary files /dev/null and b/sample/media/Sponza/glTF/2299742237651021498.jpg differ diff --git a/sample/media/Sponza/glTF/2374361008830720677.jpg b/sample/media/Sponza/glTF/2374361008830720677.jpg new file mode 100644 index 0000000..27c8428 Binary files /dev/null and b/sample/media/Sponza/glTF/2374361008830720677.jpg differ diff --git a/sample/media/Sponza/glTF/2411100444841994089.jpg b/sample/media/Sponza/glTF/2411100444841994089.jpg new file mode 100644 index 0000000..e0fe74c Binary files /dev/null and b/sample/media/Sponza/glTF/2411100444841994089.jpg differ diff --git a/sample/media/Sponza/glTF/2775690330959970771.jpg b/sample/media/Sponza/glTF/2775690330959970771.jpg new file mode 100644 index 0000000..a715d92 Binary files /dev/null and b/sample/media/Sponza/glTF/2775690330959970771.jpg differ diff --git a/sample/media/Sponza/glTF/2969916736137545357.jpg b/sample/media/Sponza/glTF/2969916736137545357.jpg new file mode 100644 index 0000000..d4c2213 Binary files /dev/null and b/sample/media/Sponza/glTF/2969916736137545357.jpg differ diff --git a/sample/media/Sponza/glTF/332936164838540657.jpg b/sample/media/Sponza/glTF/332936164838540657.jpg new file mode 100644 index 0000000..27c8428 Binary files /dev/null and b/sample/media/Sponza/glTF/332936164838540657.jpg differ diff --git a/sample/media/Sponza/glTF/3371964815757888145.jpg b/sample/media/Sponza/glTF/3371964815757888145.jpg new file mode 100644 index 0000000..5d7e258 Binary files /dev/null and b/sample/media/Sponza/glTF/3371964815757888145.jpg differ diff --git a/sample/media/Sponza/glTF/3455394979645218238.jpg b/sample/media/Sponza/glTF/3455394979645218238.jpg new file mode 100644 index 0000000..c91c795 Binary files /dev/null and b/sample/media/Sponza/glTF/3455394979645218238.jpg differ diff --git a/sample/media/Sponza/glTF/3628158980083700836.jpg b/sample/media/Sponza/glTF/3628158980083700836.jpg new file mode 100644 index 0000000..da9bdec Binary files /dev/null and b/sample/media/Sponza/glTF/3628158980083700836.jpg differ diff --git a/sample/media/Sponza/glTF/3827035219084910048.jpg b/sample/media/Sponza/glTF/3827035219084910048.jpg new file mode 100644 index 0000000..4aa1778 Binary files /dev/null and b/sample/media/Sponza/glTF/3827035219084910048.jpg differ diff --git a/sample/media/Sponza/glTF/4477655471536070370.jpg b/sample/media/Sponza/glTF/4477655471536070370.jpg new file mode 100644 index 0000000..97906e5 Binary files /dev/null and b/sample/media/Sponza/glTF/4477655471536070370.jpg differ diff --git a/sample/media/Sponza/glTF/4601176305987539675.jpg b/sample/media/Sponza/glTF/4601176305987539675.jpg new file mode 100644 index 0000000..b610a24 Binary files /dev/null and b/sample/media/Sponza/glTF/4601176305987539675.jpg differ diff --git a/sample/media/Sponza/glTF/466164707995436622.jpg b/sample/media/Sponza/glTF/466164707995436622.jpg new file mode 100644 index 0000000..d65b8f3 Binary files /dev/null and b/sample/media/Sponza/glTF/466164707995436622.jpg differ diff --git a/sample/media/Sponza/glTF/4675343432951571524.jpg b/sample/media/Sponza/glTF/4675343432951571524.jpg new file mode 100644 index 0000000..14dd8f9 Binary files /dev/null and b/sample/media/Sponza/glTF/4675343432951571524.jpg differ diff --git a/sample/media/Sponza/glTF/4871783166746854860.jpg b/sample/media/Sponza/glTF/4871783166746854860.jpg new file mode 100644 index 0000000..dd77751 Binary files /dev/null and b/sample/media/Sponza/glTF/4871783166746854860.jpg differ diff --git a/sample/media/Sponza/glTF/4910669866631290573.jpg b/sample/media/Sponza/glTF/4910669866631290573.jpg new file mode 100644 index 0000000..b610a24 Binary files /dev/null and b/sample/media/Sponza/glTF/4910669866631290573.jpg differ diff --git a/sample/media/Sponza/glTF/4975155472559461469.jpg b/sample/media/Sponza/glTF/4975155472559461469.jpg new file mode 100644 index 0000000..43aee7b Binary files /dev/null and b/sample/media/Sponza/glTF/4975155472559461469.jpg differ diff --git a/sample/media/Sponza/glTF/5061699253647017043.png b/sample/media/Sponza/glTF/5061699253647017043.png new file mode 100644 index 0000000..8b690c3 Binary files /dev/null and b/sample/media/Sponza/glTF/5061699253647017043.png differ diff --git a/sample/media/Sponza/glTF/5792855332885324923.jpg b/sample/media/Sponza/glTF/5792855332885324923.jpg new file mode 100644 index 0000000..c965353 Binary files /dev/null and b/sample/media/Sponza/glTF/5792855332885324923.jpg differ diff --git a/sample/media/Sponza/glTF/5823059166183034438.jpg b/sample/media/Sponza/glTF/5823059166183034438.jpg new file mode 100644 index 0000000..1873401 Binary files /dev/null and b/sample/media/Sponza/glTF/5823059166183034438.jpg differ diff --git a/sample/media/Sponza/glTF/6047387724914829168.jpg b/sample/media/Sponza/glTF/6047387724914829168.jpg new file mode 100644 index 0000000..d9b3cca Binary files /dev/null and b/sample/media/Sponza/glTF/6047387724914829168.jpg differ diff --git a/sample/media/Sponza/glTF/6151467286084645207.jpg b/sample/media/Sponza/glTF/6151467286084645207.jpg new file mode 100644 index 0000000..1714a85 Binary files /dev/null and b/sample/media/Sponza/glTF/6151467286084645207.jpg differ diff --git a/sample/media/Sponza/glTF/6593109234861095314.jpg b/sample/media/Sponza/glTF/6593109234861095314.jpg new file mode 100644 index 0000000..b610a24 Binary files /dev/null and b/sample/media/Sponza/glTF/6593109234861095314.jpg differ diff --git a/sample/media/Sponza/glTF/6667038893015345571.jpg b/sample/media/Sponza/glTF/6667038893015345571.jpg new file mode 100644 index 0000000..5005a0e Binary files /dev/null and b/sample/media/Sponza/glTF/6667038893015345571.jpg differ diff --git a/sample/media/Sponza/glTF/6772804448157695701.jpg b/sample/media/Sponza/glTF/6772804448157695701.jpg new file mode 100644 index 0000000..d3619af Binary files /dev/null and b/sample/media/Sponza/glTF/6772804448157695701.jpg differ diff --git a/sample/media/Sponza/glTF/7056944414013900257.jpg b/sample/media/Sponza/glTF/7056944414013900257.jpg new file mode 100644 index 0000000..27c8428 Binary files /dev/null and b/sample/media/Sponza/glTF/7056944414013900257.jpg differ diff --git a/sample/media/Sponza/glTF/715093869573992647.jpg b/sample/media/Sponza/glTF/715093869573992647.jpg new file mode 100644 index 0000000..e56a282 Binary files /dev/null and b/sample/media/Sponza/glTF/715093869573992647.jpg differ diff --git a/sample/media/Sponza/glTF/7268504077753552595.jpg b/sample/media/Sponza/glTF/7268504077753552595.jpg new file mode 100644 index 0000000..15a6d7d Binary files /dev/null and b/sample/media/Sponza/glTF/7268504077753552595.jpg differ diff --git a/sample/media/Sponza/glTF/7441062115984513793.jpg b/sample/media/Sponza/glTF/7441062115984513793.jpg new file mode 100644 index 0000000..e571d40 Binary files /dev/null and b/sample/media/Sponza/glTF/7441062115984513793.jpg differ diff --git a/sample/media/Sponza/glTF/755318871556304029.jpg b/sample/media/Sponza/glTF/755318871556304029.jpg new file mode 100644 index 0000000..f2afed3 Binary files /dev/null and b/sample/media/Sponza/glTF/755318871556304029.jpg differ diff --git a/sample/media/Sponza/glTF/759203620573749278.jpg b/sample/media/Sponza/glTF/759203620573749278.jpg new file mode 100644 index 0000000..4d13c74 Binary files /dev/null and b/sample/media/Sponza/glTF/759203620573749278.jpg differ diff --git a/sample/media/Sponza/glTF/7645212358685992005.jpg b/sample/media/Sponza/glTF/7645212358685992005.jpg new file mode 100644 index 0000000..961cc7a Binary files /dev/null and b/sample/media/Sponza/glTF/7645212358685992005.jpg differ diff --git a/sample/media/Sponza/glTF/7815564343179553343.jpg b/sample/media/Sponza/glTF/7815564343179553343.jpg new file mode 100644 index 0000000..11948ee Binary files /dev/null and b/sample/media/Sponza/glTF/7815564343179553343.jpg differ diff --git a/sample/media/Sponza/glTF/8006627369776289000.png b/sample/media/Sponza/glTF/8006627369776289000.png new file mode 100644 index 0000000..ba5f655 Binary files /dev/null and b/sample/media/Sponza/glTF/8006627369776289000.png differ diff --git a/sample/media/Sponza/glTF/8051790464816141987.jpg b/sample/media/Sponza/glTF/8051790464816141987.jpg new file mode 100644 index 0000000..6e05015 Binary files /dev/null and b/sample/media/Sponza/glTF/8051790464816141987.jpg differ diff --git a/sample/media/Sponza/glTF/8114461559286000061.jpg b/sample/media/Sponza/glTF/8114461559286000061.jpg new file mode 100644 index 0000000..58be9bc Binary files /dev/null and b/sample/media/Sponza/glTF/8114461559286000061.jpg differ diff --git a/sample/media/Sponza/glTF/8481240838833932244.jpg b/sample/media/Sponza/glTF/8481240838833932244.jpg new file mode 100644 index 0000000..207a7a6 Binary files /dev/null and b/sample/media/Sponza/glTF/8481240838833932244.jpg differ diff --git a/sample/media/Sponza/glTF/8503262930880235456.jpg b/sample/media/Sponza/glTF/8503262930880235456.jpg new file mode 100644 index 0000000..f3423eb Binary files /dev/null and b/sample/media/Sponza/glTF/8503262930880235456.jpg differ diff --git a/sample/media/Sponza/glTF/8747919177698443163.jpg b/sample/media/Sponza/glTF/8747919177698443163.jpg new file mode 100644 index 0000000..3c3d983 Binary files /dev/null and b/sample/media/Sponza/glTF/8747919177698443163.jpg differ diff --git a/sample/media/Sponza/glTF/8750083169368950601.jpg b/sample/media/Sponza/glTF/8750083169368950601.jpg new file mode 100644 index 0000000..48a46df Binary files /dev/null and b/sample/media/Sponza/glTF/8750083169368950601.jpg differ diff --git a/sample/media/Sponza/glTF/8773302468495022225.jpg b/sample/media/Sponza/glTF/8773302468495022225.jpg new file mode 100644 index 0000000..4647a44 Binary files /dev/null and b/sample/media/Sponza/glTF/8773302468495022225.jpg differ diff --git a/sample/media/Sponza/glTF/8783994986360286082.jpg b/sample/media/Sponza/glTF/8783994986360286082.jpg new file mode 100644 index 0000000..6839be4 Binary files /dev/null and b/sample/media/Sponza/glTF/8783994986360286082.jpg differ diff --git a/sample/media/Sponza/glTF/9288698199695299068.jpg b/sample/media/Sponza/glTF/9288698199695299068.jpg new file mode 100644 index 0000000..dba904f Binary files /dev/null and b/sample/media/Sponza/glTF/9288698199695299068.jpg differ diff --git a/sample/media/Sponza/glTF/9916269861720640319.jpg b/sample/media/Sponza/glTF/9916269861720640319.jpg new file mode 100644 index 0000000..bfe9d28 Binary files /dev/null and b/sample/media/Sponza/glTF/9916269861720640319.jpg differ diff --git a/sample/media/Sponza/glTF/Sponza.bin b/sample/media/Sponza/glTF/Sponza.bin new file mode 100644 index 0000000..971accb Binary files /dev/null and b/sample/media/Sponza/glTF/Sponza.bin differ diff --git a/sample/media/Sponza/glTF/Sponza.gltf b/sample/media/Sponza/glTF/Sponza.gltf new file mode 100644 index 0000000..fa0650d --- /dev/null +++ b/sample/media/Sponza/glTF/Sponza.gltf @@ -0,0 +1,8428 @@ +{ + "asset": { + "generator": "Granite glTF 2.0 exporter", + "version": "2.0" + }, + "nodes": [ + { + "mesh": 0, + "scale": [ + 0.00800000037997961, + 0.00800000037997961, + 0.00800000037997961 + ] + } + ], + "buffers": [ + { + "byteLength": 9529440, + "uri": "Sponza.bin" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 21840, + "byteOffset": 0 + }, + { + "buffer": 0, + "byteLength": 38100, + "byteOffset": 21840 + }, + { + "buffer": 0, + "byteLength": 25400, + "byteOffset": 59952 + }, + { + "buffer": 0, + "byteLength": 38100, + "byteOffset": 85360 + }, + { + "buffer": 0, + "byteLength": 50800, + "byteOffset": 123472 + }, + { + "buffer": 0, + "byteLength": 2808, + "byteOffset": 174272 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 177088 + }, + { + "buffer": 0, + "byteLength": 4264, + "byteOffset": 183488 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 187760 + }, + { + "buffer": 0, + "byteLength": 8528, + "byteOffset": 194160 + }, + { + "buffer": 0, + "byteLength": 13266, + "byteOffset": 202688 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 215968 + }, + { + "buffer": 0, + "byteLength": 9848, + "byteOffset": 230752 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 240608 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 255392 + }, + { + "buffer": 0, + "byteLength": 8172, + "byteOffset": 275088 + }, + { + "buffer": 0, + "byteLength": 9036, + "byteOffset": 283264 + }, + { + "buffer": 0, + "byteLength": 6024, + "byteOffset": 292304 + }, + { + "buffer": 0, + "byteLength": 9036, + "byteOffset": 298336 + }, + { + "buffer": 0, + "byteLength": 12048, + "byteOffset": 307376 + }, + { + "buffer": 0, + "byteLength": 648, + "byteOffset": 319424 + }, + { + "buffer": 0, + "byteLength": 1536, + "byteOffset": 320080 + }, + { + "buffer": 0, + "byteLength": 1024, + "byteOffset": 321616 + }, + { + "buffer": 0, + "byteLength": 1536, + "byteOffset": 322640 + }, + { + "buffer": 0, + "byteLength": 2048, + "byteOffset": 324176 + }, + { + "buffer": 0, + "byteLength": 1680, + "byteOffset": 326224 + }, + { + "buffer": 0, + "byteLength": 6720, + "byteOffset": 327904 + }, + { + "buffer": 0, + "byteLength": 4480, + "byteOffset": 334624 + }, + { + "buffer": 0, + "byteLength": 6720, + "byteOffset": 339104 + }, + { + "buffer": 0, + "byteLength": 8960, + "byteOffset": 345824 + }, + { + "buffer": 0, + "byteLength": 13992, + "byteOffset": 354784 + }, + { + "buffer": 0, + "byteLength": 22368, + "byteOffset": 368784 + }, + { + "buffer": 0, + "byteLength": 14912, + "byteOffset": 391152 + }, + { + "buffer": 0, + "byteLength": 22368, + "byteOffset": 406064 + }, + { + "buffer": 0, + "byteLength": 29824, + "byteOffset": 428432 + }, + { + "buffer": 0, + "byteLength": 8736, + "byteOffset": 458256 + }, + { + "buffer": 0, + "byteLength": 20496, + "byteOffset": 466992 + }, + { + "buffer": 0, + "byteLength": 13664, + "byteOffset": 487488 + }, + { + "buffer": 0, + "byteLength": 20496, + "byteOffset": 501152 + }, + { + "buffer": 0, + "byteLength": 27328, + "byteOffset": 521648 + }, + { + "buffer": 0, + "byteLength": 17376, + "byteOffset": 548976 + }, + { + "buffer": 0, + "byteLength": 38304, + "byteOffset": 566352 + }, + { + "buffer": 0, + "byteLength": 25536, + "byteOffset": 604656 + }, + { + "buffer": 0, + "byteLength": 38304, + "byteOffset": 630192 + }, + { + "buffer": 0, + "byteLength": 51072, + "byteOffset": 668496 + }, + { + "buffer": 0, + "byteLength": 96, + "byteOffset": 719568 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 719664 + }, + { + "buffer": 0, + "byteLength": 128, + "byteOffset": 719856 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 719984 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 720176 + }, + { + "buffer": 0, + "byteLength": 22368, + "byteOffset": 720432 + }, + { + "buffer": 0, + "byteLength": 22368, + "byteOffset": 742800 + }, + { + "buffer": 0, + "byteLength": 29824, + "byteOffset": 765168 + }, + { + "buffer": 0, + "byteLength": 6576, + "byteOffset": 794992 + }, + { + "buffer": 0, + "byteLength": 14064, + "byteOffset": 801568 + }, + { + "buffer": 0, + "byteLength": 9376, + "byteOffset": 815632 + }, + { + "buffer": 0, + "byteLength": 14064, + "byteOffset": 825008 + }, + { + "buffer": 0, + "byteLength": 18752, + "byteOffset": 839072 + }, + { + "buffer": 0, + "byteLength": 22080, + "byteOffset": 857824 + }, + { + "buffer": 0, + "byteLength": 76416, + "byteOffset": 879904 + }, + { + "buffer": 0, + "byteLength": 50944, + "byteOffset": 956320 + }, + { + "buffer": 0, + "byteLength": 76416, + "byteOffset": 1007264 + }, + { + "buffer": 0, + "byteLength": 101888, + "byteOffset": 1083680 + }, + { + "buffer": 0, + "byteLength": 1224, + "byteOffset": 1185568 + }, + { + "buffer": 0, + "byteLength": 2592, + "byteOffset": 1186800 + }, + { + "buffer": 0, + "byteLength": 1728, + "byteOffset": 1189392 + }, + { + "buffer": 0, + "byteLength": 2592, + "byteOffset": 1191120 + }, + { + "buffer": 0, + "byteLength": 3456, + "byteOffset": 1193712 + }, + { + "buffer": 0, + "byteLength": 1224, + "byteOffset": 1197168 + }, + { + "buffer": 0, + "byteLength": 2544, + "byteOffset": 1198400 + }, + { + "buffer": 0, + "byteLength": 1696, + "byteOffset": 1200944 + }, + { + "buffer": 0, + "byteLength": 2544, + "byteOffset": 1202640 + }, + { + "buffer": 0, + "byteLength": 3392, + "byteOffset": 1205184 + }, + { + "buffer": 0, + "byteLength": 888, + "byteOffset": 1208576 + }, + { + "buffer": 0, + "byteLength": 1656, + "byteOffset": 1209472 + }, + { + "buffer": 0, + "byteLength": 1104, + "byteOffset": 1211136 + }, + { + "buffer": 0, + "byteLength": 1656, + "byteOffset": 1212240 + }, + { + "buffer": 0, + "byteLength": 2208, + "byteOffset": 1213904 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 1216112 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1217072 + }, + { + "buffer": 0, + "byteLength": 1008, + "byteOffset": 1218592 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1219600 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1221120 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 1223136 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1223808 + }, + { + "buffer": 0, + "byteLength": 976, + "byteOffset": 1225280 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1226256 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1227728 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1229680 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1231200 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1232720 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1234736 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1236208 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1237680 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1239632 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1241152 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1242672 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1244688 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1246160 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1247632 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1249584 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1251104 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1252624 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1254640 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1256112 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1257584 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 1259536 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1260496 + }, + { + "buffer": 0, + "byteLength": 1008, + "byteOffset": 1262016 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1263024 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1264544 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 1266560 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1267232 + }, + { + "buffer": 0, + "byteLength": 976, + "byteOffset": 1268704 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1269680 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1271152 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1273104 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1274624 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1276144 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1278160 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1279632 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1281104 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1283056 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1284576 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1286096 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1288112 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1289584 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1291056 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1293008 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1294528 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1296048 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1298064 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1299536 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1301008 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1302960 + }, + { + "buffer": 0, + "byteLength": 1512, + "byteOffset": 1304480 + }, + { + "buffer": 0, + "byteLength": 2016, + "byteOffset": 1306000 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1308016 + }, + { + "buffer": 0, + "byteLength": 1464, + "byteOffset": 1309488 + }, + { + "buffer": 0, + "byteLength": 1952, + "byteOffset": 1310960 + }, + { + "buffer": 0, + "byteLength": 2640, + "byteOffset": 1312912 + }, + { + "buffer": 0, + "byteLength": 10560, + "byteOffset": 1315552 + }, + { + "buffer": 0, + "byteLength": 7040, + "byteOffset": 1326112 + }, + { + "buffer": 0, + "byteLength": 10560, + "byteOffset": 1333152 + }, + { + "buffer": 0, + "byteLength": 14080, + "byteOffset": 1343712 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 1357792 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 1357984 + }, + { + "buffer": 0, + "byteLength": 448, + "byteOffset": 1358656 + }, + { + "buffer": 0, + "byteLength": 672, + "byteOffset": 1359104 + }, + { + "buffer": 0, + "byteLength": 896, + "byteOffset": 1359776 + }, + { + "buffer": 0, + "byteLength": 6720, + "byteOffset": 1360672 + }, + { + "buffer": 0, + "byteLength": 6720, + "byteOffset": 1367392 + }, + { + "buffer": 0, + "byteLength": 8960, + "byteOffset": 1374112 + }, + { + "buffer": 0, + "byteLength": 324, + "byteOffset": 1383072 + }, + { + "buffer": 0, + "byteLength": 792, + "byteOffset": 1383408 + }, + { + "buffer": 0, + "byteLength": 528, + "byteOffset": 1384208 + }, + { + "buffer": 0, + "byteLength": 792, + "byteOffset": 1384736 + }, + { + "buffer": 0, + "byteLength": 1056, + "byteOffset": 1385536 + }, + { + "buffer": 0, + "byteLength": 1452, + "byteOffset": 1386592 + }, + { + "buffer": 0, + "byteLength": 3768, + "byteOffset": 1388048 + }, + { + "buffer": 0, + "byteLength": 2512, + "byteOffset": 1391824 + }, + { + "buffer": 0, + "byteLength": 3768, + "byteOffset": 1394336 + }, + { + "buffer": 0, + "byteLength": 5024, + "byteOffset": 1398112 + }, + { + "buffer": 0, + "byteLength": 144, + "byteOffset": 1403136 + }, + { + "buffer": 0, + "byteLength": 576, + "byteOffset": 1403280 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 1403856 + }, + { + "buffer": 0, + "byteLength": 576, + "byteOffset": 1404240 + }, + { + "buffer": 0, + "byteLength": 768, + "byteOffset": 1404816 + }, + { + "buffer": 0, + "byteLength": 492, + "byteOffset": 1405584 + }, + { + "buffer": 0, + "byteLength": 1176, + "byteOffset": 1406080 + }, + { + "buffer": 0, + "byteLength": 784, + "byteOffset": 1407264 + }, + { + "buffer": 0, + "byteLength": 1176, + "byteOffset": 1408048 + }, + { + "buffer": 0, + "byteLength": 1568, + "byteOffset": 1409232 + }, + { + "buffer": 0, + "byteLength": 576, + "byteOffset": 1410800 + }, + { + "buffer": 0, + "byteLength": 576, + "byteOffset": 1411376 + }, + { + "buffer": 0, + "byteLength": 3336, + "byteOffset": 1411952 + }, + { + "buffer": 0, + "byteLength": 8256, + "byteOffset": 1415296 + }, + { + "buffer": 0, + "byteLength": 5504, + "byteOffset": 1423552 + }, + { + "buffer": 0, + "byteLength": 8256, + "byteOffset": 1429056 + }, + { + "buffer": 0, + "byteLength": 11008, + "byteOffset": 1437312 + }, + { + "buffer": 0, + "byteLength": 300, + "byteOffset": 1448320 + }, + { + "buffer": 0, + "byteLength": 1104, + "byteOffset": 1448624 + }, + { + "buffer": 0, + "byteLength": 736, + "byteOffset": 1449728 + }, + { + "buffer": 0, + "byteLength": 1104, + "byteOffset": 1450464 + }, + { + "buffer": 0, + "byteLength": 1472, + "byteOffset": 1451568 + }, + { + "buffer": 0, + "byteLength": 20448, + "byteOffset": 1453040 + }, + { + "buffer": 0, + "byteLength": 70848, + "byteOffset": 1473488 + }, + { + "buffer": 0, + "byteLength": 47232, + "byteOffset": 1544336 + }, + { + "buffer": 0, + "byteLength": 70848, + "byteOffset": 1591568 + }, + { + "buffer": 0, + "byteLength": 94464, + "byteOffset": 1662416 + }, + { + "buffer": 0, + "byteLength": 300, + "byteOffset": 1756880 + }, + { + "buffer": 0, + "byteLength": 1104, + "byteOffset": 1757184 + }, + { + "buffer": 0, + "byteLength": 736, + "byteOffset": 1758288 + }, + { + "buffer": 0, + "byteLength": 1104, + "byteOffset": 1759024 + }, + { + "buffer": 0, + "byteLength": 1472, + "byteOffset": 1760128 + }, + { + "buffer": 0, + "byteLength": 30, + "byteOffset": 1761600 + }, + { + "buffer": 0, + "byteLength": 84, + "byteOffset": 1761632 + }, + { + "buffer": 0, + "byteLength": 56, + "byteOffset": 1761728 + }, + { + "buffer": 0, + "byteLength": 84, + "byteOffset": 1761792 + }, + { + "buffer": 0, + "byteLength": 112, + "byteOffset": 1761888 + }, + { + "buffer": 0, + "byteLength": 8160, + "byteOffset": 1762000 + }, + { + "buffer": 0, + "byteLength": 21888, + "byteOffset": 1770160 + }, + { + "buffer": 0, + "byteLength": 14592, + "byteOffset": 1792048 + }, + { + "buffer": 0, + "byteLength": 21888, + "byteOffset": 1806640 + }, + { + "buffer": 0, + "byteLength": 29184, + "byteOffset": 1828528 + }, + { + "buffer": 0, + "byteLength": 22416, + "byteOffset": 1857712 + }, + { + "buffer": 0, + "byteLength": 45168, + "byteOffset": 1880128 + }, + { + "buffer": 0, + "byteLength": 30112, + "byteOffset": 1925296 + }, + { + "buffer": 0, + "byteLength": 45168, + "byteOffset": 1955408 + }, + { + "buffer": 0, + "byteLength": 60224, + "byteOffset": 2000576 + }, + { + "buffer": 0, + "byteLength": 139248, + "byteOffset": 2060800 + }, + { + "buffer": 0, + "byteLength": 276456, + "byteOffset": 2200048 + }, + { + "buffer": 0, + "byteLength": 184304, + "byteOffset": 2476512 + }, + { + "buffer": 0, + "byteLength": 276456, + "byteOffset": 2660816 + }, + { + "buffer": 0, + "byteLength": 368608, + "byteOffset": 2937280 + }, + { + "buffer": 0, + "byteLength": 108, + "byteOffset": 3305888 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 3306000 + }, + { + "buffer": 0, + "byteLength": 288, + "byteOffset": 3306432 + }, + { + "buffer": 0, + "byteLength": 432, + "byteOffset": 3306720 + }, + { + "buffer": 0, + "byteLength": 384, + "byteOffset": 3307152 + }, + { + "buffer": 0, + "byteLength": 1440, + "byteOffset": 3307536 + }, + { + "buffer": 0, + "byteLength": 960, + "byteOffset": 3308976 + }, + { + "buffer": 0, + "byteLength": 1440, + "byteOffset": 3309936 + }, + { + "buffer": 0, + "byteLength": 1920, + "byteOffset": 3311376 + }, + { + "buffer": 0, + "byteLength": 32736, + "byteOffset": 3313296 + }, + { + "buffer": 0, + "byteLength": 47424, + "byteOffset": 3346032 + }, + { + "buffer": 0, + "byteLength": 31616, + "byteOffset": 3393456 + }, + { + "buffer": 0, + "byteLength": 47424, + "byteOffset": 3425072 + }, + { + "buffer": 0, + "byteLength": 63232, + "byteOffset": 3472496 + }, + { + "buffer": 0, + "byteLength": 166776, + "byteOffset": 3535728 + }, + { + "buffer": 0, + "byteLength": 251844, + "byteOffset": 3702512 + }, + { + "buffer": 0, + "byteLength": 167896, + "byteOffset": 3954368 + }, + { + "buffer": 0, + "byteLength": 251844, + "byteOffset": 4122272 + }, + { + "buffer": 0, + "byteLength": 335792, + "byteOffset": 4374128 + }, + { + "buffer": 0, + "byteLength": 33024, + "byteOffset": 4709920 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 4742944 + }, + { + "buffer": 0, + "byteLength": 26080, + "byteOffset": 4782064 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 4808144 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 4847264 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 4899424 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 4938544 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 4977664 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5029824 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5068944 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 5108064 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5160224 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5199344 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 5238464 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5290624 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5329744 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 5368864 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5421024 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5460144 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 5499264 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5551424 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5590544 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 5629664 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5681824 + }, + { + "buffer": 0, + "byteLength": 39120, + "byteOffset": 5720944 + }, + { + "buffer": 0, + "byteLength": 52160, + "byteOffset": 5760064 + }, + { + "buffer": 0, + "byteLength": 66240, + "byteOffset": 5812224 + }, + { + "buffer": 0, + "byteLength": 100080, + "byteOffset": 5878464 + }, + { + "buffer": 0, + "byteLength": 66720, + "byteOffset": 5978544 + }, + { + "buffer": 0, + "byteLength": 100080, + "byteOffset": 6045264 + }, + { + "buffer": 0, + "byteLength": 133440, + "byteOffset": 6145344 + }, + { + "buffer": 0, + "byteLength": 29184, + "byteOffset": 6278784 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6307968 + }, + { + "buffer": 0, + "byteLength": 20920, + "byteOffset": 6339360 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6360288 + }, + { + "buffer": 0, + "byteLength": 41840, + "byteOffset": 6391680 + }, + { + "buffer": 0, + "byteLength": 27648, + "byteOffset": 6433520 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 6461168 + }, + { + "buffer": 0, + "byteLength": 20072, + "byteOffset": 6491280 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 6511360 + }, + { + "buffer": 0, + "byteLength": 40144, + "byteOffset": 6541472 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6581616 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6613008 + }, + { + "buffer": 0, + "byteLength": 41840, + "byteOffset": 6644400 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6686240 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6717632 + }, + { + "buffer": 0, + "byteLength": 41840, + "byteOffset": 6749024 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 6790864 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 6820976 + }, + { + "buffer": 0, + "byteLength": 40144, + "byteOffset": 6851088 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 6891232 + }, + { + "buffer": 0, + "byteLength": 41840, + "byteOffset": 6922624 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 6964464 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 6994576 + }, + { + "buffer": 0, + "byteLength": 40144, + "byteOffset": 7024688 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 7064832 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 7096224 + }, + { + "buffer": 0, + "byteLength": 41840, + "byteOffset": 7127616 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 7169456 + }, + { + "buffer": 0, + "byteLength": 30108, + "byteOffset": 7199568 + }, + { + "buffer": 0, + "byteLength": 40144, + "byteOffset": 7229680 + }, + { + "buffer": 0, + "byteLength": 31380, + "byteOffset": 7269824 + }, + { + "buffer": 0, + "byteLength": 41840, + "byteOffset": 7301216 + }, + { + "buffer": 0, + "byteLength": 48, + "byteOffset": 7343056 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7343104 + }, + { + "buffer": 0, + "byteLength": 128, + "byteOffset": 7343296 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7343424 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 7343616 + }, + { + "buffer": 0, + "byteLength": 29742, + "byteOffset": 7343872 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7373616 + }, + { + "buffer": 0, + "byteLength": 23656, + "byteOffset": 7409104 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7432768 + }, + { + "buffer": 0, + "byteLength": 47312, + "byteOffset": 7468256 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7515568 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7515760 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 7515952 + }, + { + "buffer": 0, + "byteLength": 29742, + "byteOffset": 7516208 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7545952 + }, + { + "buffer": 0, + "byteLength": 23656, + "byteOffset": 7581440 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7605104 + }, + { + "buffer": 0, + "byteLength": 47312, + "byteOffset": 7640592 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7687904 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7688096 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 7688288 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7688544 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7724032 + }, + { + "buffer": 0, + "byteLength": 47312, + "byteOffset": 7759520 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7806832 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 7807024 + }, + { + "buffer": 0, + "byteLength": 256, + "byteOffset": 7807216 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7807472 + }, + { + "buffer": 0, + "byteLength": 35484, + "byteOffset": 7842960 + }, + { + "buffer": 0, + "byteLength": 47312, + "byteOffset": 7878448 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 7925760 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 7932160 + }, + { + "buffer": 0, + "byteLength": 8528, + "byteOffset": 7938560 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 7947088 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 7961872 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 7976656 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 7996352 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 8002752 + }, + { + "buffer": 0, + "byteLength": 8528, + "byteOffset": 8009152 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8017680 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8032464 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 8047248 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 8066944 + }, + { + "buffer": 0, + "byteLength": 6396, + "byteOffset": 8073344 + }, + { + "buffer": 0, + "byteLength": 8528, + "byteOffset": 8079744 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8088272 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8103056 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 8117840 + }, + { + "buffer": 0, + "byteLength": 2400, + "byteOffset": 8137536 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8139936 + }, + { + "buffer": 0, + "byteLength": 3600, + "byteOffset": 8145344 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8148944 + }, + { + "buffer": 0, + "byteLength": 7200, + "byteOffset": 8154352 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8161552 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8176336 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 8191120 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8210816 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8216224 + }, + { + "buffer": 0, + "byteLength": 7200, + "byteOffset": 8221632 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8228832 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8243616 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 8258400 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8278096 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8283504 + }, + { + "buffer": 0, + "byteLength": 7200, + "byteOffset": 8288912 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8296112 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8310896 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 8325680 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8345376 + }, + { + "buffer": 0, + "byteLength": 5400, + "byteOffset": 8350784 + }, + { + "buffer": 0, + "byteLength": 7200, + "byteOffset": 8356192 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8363392 + }, + { + "buffer": 0, + "byteLength": 14772, + "byteOffset": 8378176 + }, + { + "buffer": 0, + "byteLength": 19696, + "byteOffset": 8392960 + }, + { + "buffer": 0, + "byteLength": 55104, + "byteOffset": 8412656 + }, + { + "buffer": 0, + "byteLength": 63696, + "byteOffset": 8467760 + }, + { + "buffer": 0, + "byteLength": 42464, + "byteOffset": 8531456 + }, + { + "buffer": 0, + "byteLength": 63696, + "byteOffset": 8573920 + }, + { + "buffer": 0, + "byteLength": 84928, + "byteOffset": 8637616 + }, + { + "buffer": 0, + "byteLength": 9126, + "byteOffset": 8722544 + }, + { + "buffer": 0, + "byteLength": 10392, + "byteOffset": 8731680 + }, + { + "buffer": 0, + "byteLength": 6928, + "byteOffset": 8742080 + }, + { + "buffer": 0, + "byteLength": 10392, + "byteOffset": 8749008 + }, + { + "buffer": 0, + "byteLength": 13856, + "byteOffset": 8759408 + }, + { + "buffer": 0, + "byteLength": 9036, + "byteOffset": 8773264 + }, + { + "buffer": 0, + "byteLength": 9036, + "byteOffset": 8782304 + }, + { + "buffer": 0, + "byteLength": 12048, + "byteOffset": 8791344 + }, + { + "buffer": 0, + "byteLength": 10392, + "byteOffset": 8803392 + }, + { + "buffer": 0, + "byteLength": 10392, + "byteOffset": 8813792 + }, + { + "buffer": 0, + "byteLength": 13856, + "byteOffset": 8824192 + }, + { + "buffer": 0, + "byteLength": 9036, + "byteOffset": 8838048 + }, + { + "buffer": 0, + "byteLength": 9036, + "byteOffset": 8847088 + }, + { + "buffer": 0, + "byteLength": 12048, + "byteOffset": 8856128 + }, + { + "buffer": 0, + "byteLength": 168, + "byteOffset": 8868176 + }, + { + "buffer": 0, + "byteLength": 600, + "byteOffset": 8868352 + }, + { + "buffer": 0, + "byteLength": 400, + "byteOffset": 8868960 + }, + { + "buffer": 0, + "byteLength": 600, + "byteOffset": 8869360 + }, + { + "buffer": 0, + "byteLength": 800, + "byteOffset": 8869968 + }, + { + "buffer": 0, + "byteLength": 86904, + "byteOffset": 8870768 + }, + { + "buffer": 0, + "byteLength": 142680, + "byteOffset": 8957680 + }, + { + "buffer": 0, + "byteLength": 95120, + "byteOffset": 9100368 + }, + { + "buffer": 0, + "byteLength": 142680, + "byteOffset": 9195488 + }, + { + "buffer": 0, + "byteLength": 190240, + "byteOffset": 9338176 + }, + { + "buffer": 0, + "byteLength": 60, + "byteOffset": 9528416 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 9528480 + }, + { + "buffer": 0, + "byteLength": 160, + "byteOffset": 9528720 + }, + { + "buffer": 0, + "byteLength": 240, + "byteOffset": 9528880 + }, + { + "buffer": 0, + "byteLength": 320, + "byteOffset": 9529120 + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5123, + "type": "SCALAR", + "count": 10920, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 3174 + ] + }, + { + "bufferView": 1, + "componentType": 5126, + "type": "VEC3", + "count": 3175, + "byteOffset": 0, + "min": [ + 449.5628967285156, + 85.37139892578125, + 152.0906982421875 + ], + "max": [ + 540.9965209960938, + 210.9434051513672, + 244.8979949951172 + ] + }, + { + "bufferView": 2, + "componentType": 5126, + "type": "VEC2", + "count": 3175, + "byteOffset": 0 + }, + { + "bufferView": 3, + "componentType": 5126, + "type": "VEC3", + "count": 3175, + "byteOffset": 0 + }, + { + "bufferView": 4, + "componentType": 5126, + "type": "VEC4", + "count": 3175, + "byteOffset": 0 + }, + { + "bufferView": 5, + "componentType": 5123, + "type": "SCALAR", + "count": 1404, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 532 + ] + }, + { + "bufferView": 6, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0, + "min": [ + -277.3555908203125, + 46.08150100708008, + -252.99859619140626 + ], + "max": [ + -209.1302032470703, + 73.12359619140625, + -189.0428009033203 + ] + }, + { + "bufferView": 7, + "componentType": 5126, + "type": "VEC2", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 8, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 9, + "componentType": 5126, + "type": "VEC4", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 10, + "componentType": 5123, + "type": "SCALAR", + "count": 6633, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 1230 + ] + }, + { + "bufferView": 11, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + -271.2546081542969, + -0.14010000228881837, + -250.77699279785157 + ], + "max": [ + -219.32369995117188, + 56.199501037597659, + -198.78799438476563 + ] + }, + { + "bufferView": 12, + "componentType": 5126, + "type": "VEC2", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 13, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 14, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 15, + "componentType": 5123, + "type": "SCALAR", + "count": 4086, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 752 + ] + }, + { + "bufferView": 16, + "componentType": 5126, + "type": "VEC3", + "count": 753, + "byteOffset": 0, + "min": [ + -1424.663818359375, + 493.0472106933594, + -163.38650512695313 + ], + "max": [ + -1401.679931640625, + 758.5531005859375, + 85.7051010131836 + ] + }, + { + "bufferView": 17, + "componentType": 5126, + "type": "VEC2", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 18, + "componentType": 5126, + "type": "VEC3", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 19, + "componentType": 5126, + "type": "VEC4", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 20, + "componentType": 5123, + "type": "SCALAR", + "count": 324, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 127 + ] + }, + { + "bufferView": 21, + "componentType": 5126, + "type": "VEC3", + "count": 128, + "byteOffset": 0, + "min": [ + -1045.740966796875, + 221.48770141601563, + -310.1346130371094 + ], + "max": [ + 914.80078125, + 495.6896057128906, + 238.67950439453126 + ] + }, + { + "bufferView": 22, + "componentType": 5126, + "type": "VEC2", + "count": 128, + "byteOffset": 0 + }, + { + "bufferView": 23, + "componentType": 5126, + "type": "VEC3", + "count": 128, + "byteOffset": 0 + }, + { + "bufferView": 24, + "componentType": 5126, + "type": "VEC4", + "count": 128, + "byteOffset": 0 + }, + { + "bufferView": 25, + "componentType": 5123, + "type": "SCALAR", + "count": 840, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 559 + ] + }, + { + "bufferView": 26, + "componentType": 5126, + "type": "VEC3", + "count": 560, + "byteOffset": 0, + "min": [ + -1048.3079833984376, + 492.9888000488281, + -318.1059875488281 + ], + "max": [ + 917.6837158203125, + 507.8031921386719, + 243.55810546875 + ] + }, + { + "bufferView": 27, + "componentType": 5126, + "type": "VEC2", + "count": 560, + "byteOffset": 0 + }, + { + "bufferView": 28, + "componentType": 5126, + "type": "VEC3", + "count": 560, + "byteOffset": 0 + }, + { + "bufferView": 29, + "componentType": 5126, + "type": "VEC4", + "count": 560, + "byteOffset": 0 + }, + { + "bufferView": 30, + "componentType": 5123, + "type": "SCALAR", + "count": 6996, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 1863 + ] + }, + { + "bufferView": 31, + "componentType": 5126, + "type": "VEC3", + "count": 1864, + "byteOffset": 0, + "min": [ + -1429.452392578125, + 215.80360412597657, + -645.1483154296875 + ], + "max": [ + 1302.20166015625, + 383.9880065917969, + 574.9027099609375 + ] + }, + { + "bufferView": 32, + "componentType": 5126, + "type": "VEC2", + "count": 1864, + "byteOffset": 0 + }, + { + "bufferView": 33, + "componentType": 5126, + "type": "VEC3", + "count": 1864, + "byteOffset": 0 + }, + { + "bufferView": 34, + "componentType": 5126, + "type": "VEC4", + "count": 1864, + "byteOffset": 0 + }, + { + "bufferView": 35, + "componentType": 5123, + "type": "SCALAR", + "count": 4368, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 1707 + ] + }, + { + "bufferView": 36, + "componentType": 5126, + "type": "VEC3", + "count": 1708, + "byteOffset": 0, + "min": [ + -658.5947875976563, + -2.460700035095215, + -316.86920166015627 + ], + "max": [ + 528.9411010742188, + 220.99710083007813, + 244.57009887695313 + ] + }, + { + "bufferView": 37, + "componentType": 5126, + "type": "VEC2", + "count": 1708, + "byteOffset": 0 + }, + { + "bufferView": 38, + "componentType": 5126, + "type": "VEC3", + "count": 1708, + "byteOffset": 0 + }, + { + "bufferView": 39, + "componentType": 5126, + "type": "VEC4", + "count": 1708, + "byteOffset": 0 + }, + { + "bufferView": 40, + "componentType": 5123, + "type": "SCALAR", + "count": 8688, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 3191 + ] + }, + { + "bufferView": 41, + "componentType": 5126, + "type": "VEC3", + "count": 3192, + "byteOffset": 0, + "min": [ + -1041.22900390625, + 211.39549255371095, + -305.53790283203127 + ], + "max": [ + 912.8480834960938, + 410.4053039550781, + 233.32640075683595 + ] + }, + { + "bufferView": 42, + "componentType": 5126, + "type": "VEC2", + "count": 3192, + "byteOffset": 0 + }, + { + "bufferView": 43, + "componentType": 5126, + "type": "VEC3", + "count": 3192, + "byteOffset": 0 + }, + { + "bufferView": 44, + "componentType": 5126, + "type": "VEC4", + "count": 3192, + "byteOffset": 0 + }, + { + "bufferView": 45, + "componentType": 5123, + "type": "SCALAR", + "count": 48, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 15 + ] + }, + { + "bufferView": 46, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0, + "min": [ + -1432.224365234375, + 415.5303039550781, + -645.4310302734375 + ], + "max": [ + 1302.220947265625, + 415.5303039550781, + 574.1851806640625 + ] + }, + { + "bufferView": 47, + "componentType": 5126, + "type": "VEC2", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 48, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 49, + "componentType": 5126, + "type": "VEC4", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 50, + "componentType": 5126, + "type": "VEC3", + "count": 1864, + "byteOffset": 0, + "min": [ + -1429.452392578125, + 694.46728515625, + -645.1483154296875 + ], + "max": [ + 1302.20166015625, + 862.651611328125, + 574.9027099609375 + ] + }, + { + "bufferView": 51, + "componentType": 5126, + "type": "VEC3", + "count": 1864, + "byteOffset": 0 + }, + { + "bufferView": 52, + "componentType": 5126, + "type": "VEC4", + "count": 1864, + "byteOffset": 0 + }, + { + "bufferView": 53, + "componentType": 5123, + "type": "SCALAR", + "count": 3288, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 1171 + ] + }, + { + "bufferView": 54, + "componentType": 5126, + "type": "VEC3", + "count": 1172, + "byteOffset": 0, + "min": [ + -1029.183349609375, + 695.7373046875, + -241.11900329589845 + ], + "max": [ + 897.2501220703125, + 820.1328125, + 171.45469665527345 + ] + }, + { + "bufferView": 55, + "componentType": 5126, + "type": "VEC2", + "count": 1172, + "byteOffset": 0 + }, + { + "bufferView": 56, + "componentType": 5126, + "type": "VEC3", + "count": 1172, + "byteOffset": 0 + }, + { + "bufferView": 57, + "componentType": 5126, + "type": "VEC4", + "count": 1172, + "byteOffset": 0 + }, + { + "bufferView": 58, + "componentType": 5123, + "type": "SCALAR", + "count": 11040, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 6367 + ] + }, + { + "bufferView": 59, + "componentType": 5126, + "type": "VEC3", + "count": 6368, + "byteOffset": 0, + "min": [ + -1046.2919921875, + 507.1398010253906, + -315.4476013183594 + ], + "max": [ + 917.5026245117188, + 695.3228149414063, + 243.35009765625 + ] + }, + { + "bufferView": 60, + "componentType": 5126, + "type": "VEC2", + "count": 6368, + "byteOffset": 0 + }, + { + "bufferView": 61, + "componentType": 5126, + "type": "VEC3", + "count": 6368, + "byteOffset": 0 + }, + { + "bufferView": 62, + "componentType": 5126, + "type": "VEC4", + "count": 6368, + "byteOffset": 0 + }, + { + "bufferView": 63, + "componentType": 5123, + "type": "SCALAR", + "count": 612, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 215 + ] + }, + { + "bufferView": 64, + "componentType": 5126, + "type": "VEC3", + "count": 216, + "byteOffset": 0, + "min": [ + -1002.363525390625, + 693.7667846679688, + -259.3258056640625 + ], + "max": [ + 868.647216796875, + 921.728515625, + 185.96730041503907 + ] + }, + { + "bufferView": 65, + "componentType": 5126, + "type": "VEC2", + "count": 216, + "byteOffset": 0 + }, + { + "bufferView": 66, + "componentType": 5126, + "type": "VEC3", + "count": 216, + "byteOffset": 0 + }, + { + "bufferView": 67, + "componentType": 5126, + "type": "VEC4", + "count": 216, + "byteOffset": 0 + }, + { + "bufferView": 68, + "componentType": 5123, + "type": "SCALAR", + "count": 612, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 211 + ] + }, + { + "bufferView": 69, + "componentType": 5126, + "type": "VEC3", + "count": 212, + "byteOffset": 0, + "min": [ + -1022.56689453125, + 693.7667846679688, + -295.4941101074219 + ], + "max": [ + 892.6567993164063, + 921.728515625, + 225.29530334472657 + ] + }, + { + "bufferView": 70, + "componentType": 5126, + "type": "VEC2", + "count": 212, + "byteOffset": 0 + }, + { + "bufferView": 71, + "componentType": 5126, + "type": "VEC3", + "count": 212, + "byteOffset": 0 + }, + { + "bufferView": 72, + "componentType": 5126, + "type": "VEC4", + "count": 212, + "byteOffset": 0 + }, + { + "bufferView": 73, + "componentType": 5123, + "type": "SCALAR", + "count": 444, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 137 + ] + }, + { + "bufferView": 74, + "componentType": 5126, + "type": "VEC3", + "count": 138, + "byteOffset": 0, + "min": [ + -1002.3765258789063, + 921.728515625, + -253.54859924316407 + ], + "max": [ + 868.5941772460938, + 1296.710693359375, + 181.2987060546875 + ] + }, + { + "bufferView": 75, + "componentType": 5126, + "type": "VEC2", + "count": 138, + "byteOffset": 0 + }, + { + "bufferView": 76, + "componentType": 5126, + "type": "VEC3", + "count": 138, + "byteOffset": 0 + }, + { + "bufferView": 77, + "componentType": 5126, + "type": "VEC4", + "count": 138, + "byteOffset": 0 + }, + { + "bufferView": 78, + "componentType": 5123, + "type": "SCALAR", + "count": 480, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 125 + ] + }, + { + "bufferView": 79, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + 478.494384765625, + 1215.901611328125, + -263.6247863769531 + ], + "max": [ + 535.96142578125, + 1273.487548828125, + -243.13319396972657 + ] + }, + { + "bufferView": 80, + "componentType": 5126, + "type": "VEC2", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 81, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 82, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 83, + "componentType": 5123, + "type": "SCALAR", + "count": 336, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 121 + ] + }, + { + "bufferView": 84, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + 489.55450439453127, + 1226.984619140625, + -271.4642028808594 + ], + "max": [ + 524.9011840820313, + 1262.404296875, + -255.96710205078126 + ] + }, + { + "bufferView": 85, + "componentType": 5126, + "type": "VEC2", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 86, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 87, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 88, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + 108.36810302734375, + 1215.901611328125, + -263.6247863769531 + ], + "max": [ + 165.83509826660157, + 1273.487548828125, + -243.13319396972657 + ] + }, + { + "bufferView": 89, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 90, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 91, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + 119.4281997680664, + 1226.984619140625, + -271.4642028808594 + ], + "max": [ + 154.77490234375, + 1262.404296875, + -255.96710205078126 + ] + }, + { + "bufferView": 92, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 93, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 94, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + -293.3323059082031, + 1215.901611328125, + -263.6247863769531 + ], + "max": [ + -235.86529541015626, + 1273.487548828125, + -243.13319396972657 + ] + }, + { + "bufferView": 95, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 96, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 97, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + -282.2721862792969, + 1226.984619140625, + -271.4642028808594 + ], + "max": [ + -246.92550659179688, + 1262.404296875, + -255.96710205078126 + ] + }, + { + "bufferView": 98, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 99, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 100, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + -663.55810546875, + 1215.901611328125, + -263.6247863769531 + ], + "max": [ + -606.0911254882813, + 1273.487548828125, + -243.13319396972657 + ] + }, + { + "bufferView": 101, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 102, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 103, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + -652.4979248046875, + 1226.984619140625, + -271.4642028808594 + ], + "max": [ + -617.1514282226563, + 1262.404296875, + -255.96710205078126 + ] + }, + { + "bufferView": 104, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 105, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 106, + "componentType": 5123, + "type": "SCALAR", + "count": 480, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 125 + ] + }, + { + "bufferView": 107, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + -1012.607177734375, + 1217.42529296875, + -63.70500183105469 + ], + "max": [ + -992.115478515625, + 1275.01123046875, + -6.238100051879883 + ] + }, + { + "bufferView": 108, + "componentType": 5126, + "type": "VEC2", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 109, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 110, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 111, + "componentType": 5123, + "type": "SCALAR", + "count": 336, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 121 + ] + }, + { + "bufferView": 112, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + -1020.4464721679688, + 1228.50830078125, + -52.64500045776367 + ], + "max": [ + -1004.9495239257813, + 1263.927978515625, + -17.29829978942871 + ] + }, + { + "bufferView": 113, + "componentType": 5126, + "type": "VEC2", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 114, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 115, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 116, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + 478.494384765625, + 1215.901611328125, + 169.43699645996095 + ], + "max": [ + 535.96142578125, + 1273.487548828125, + 189.92849731445313 + ] + }, + { + "bufferView": 117, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 118, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 119, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + 489.55450439453127, + 1226.984619140625, + 182.27090454101563 + ], + "max": [ + 524.9011840820313, + 1262.404296875, + 197.76800537109376 + ] + }, + { + "bufferView": 120, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 121, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 122, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + 108.36810302734375, + 1215.901611328125, + 169.43699645996095 + ], + "max": [ + 165.83509826660157, + 1273.487548828125, + 189.92849731445313 + ] + }, + { + "bufferView": 123, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 124, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 125, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + 119.4281997680664, + 1226.984619140625, + 182.27090454101563 + ], + "max": [ + 154.77490234375, + 1262.404296875, + 197.76800537109376 + ] + }, + { + "bufferView": 126, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 127, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 128, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + -293.3323059082031, + 1215.901611328125, + 169.43699645996095 + ], + "max": [ + -235.86529541015626, + 1273.487548828125, + 189.92849731445313 + ] + }, + { + "bufferView": 129, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 130, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 131, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + -282.2721862792969, + 1226.984619140625, + 182.27090454101563 + ], + "max": [ + -246.92550659179688, + 1262.404296875, + 197.7678985595703 + ] + }, + { + "bufferView": 132, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 133, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 134, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0, + "min": [ + -663.55810546875, + 1215.901611328125, + 169.43699645996095 + ], + "max": [ + -606.0911254882813, + 1273.487548828125, + 189.92849731445313 + ] + }, + { + "bufferView": 135, + "componentType": 5126, + "type": "VEC3", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 136, + "componentType": 5126, + "type": "VEC4", + "count": 126, + "byteOffset": 0 + }, + { + "bufferView": 137, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0, + "min": [ + -652.4979858398438, + 1226.984619140625, + 182.27090454101563 + ], + "max": [ + -617.1514282226563, + 1262.404296875, + 197.7678985595703 + ] + }, + { + "bufferView": 138, + "componentType": 5126, + "type": "VEC3", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 139, + "componentType": 5126, + "type": "VEC4", + "count": 122, + "byteOffset": 0 + }, + { + "bufferView": 140, + "componentType": 5123, + "type": "SCALAR", + "count": 1320, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 879 + ] + }, + { + "bufferView": 141, + "componentType": 5126, + "type": "VEC3", + "count": 880, + "byteOffset": 0, + "min": [ + -1030.053955078125, + 921.728515625, + -274.7777099609375 + ], + "max": [ + 721.81982421875, + 1014.4711303710938, + 202.78709411621095 + ] + }, + { + "bufferView": 142, + "componentType": 5126, + "type": "VEC2", + "count": 880, + "byteOffset": 0 + }, + { + "bufferView": 143, + "componentType": 5126, + "type": "VEC3", + "count": 880, + "byteOffset": 0 + }, + { + "bufferView": 144, + "componentType": 5126, + "type": "VEC4", + "count": 880, + "byteOffset": 0 + }, + { + "bufferView": 145, + "componentType": 5123, + "type": "SCALAR", + "count": 96, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 55 + ] + }, + { + "bufferView": 146, + "componentType": 5126, + "type": "VEC3", + "count": 56, + "byteOffset": 0, + "min": [ + -1086.4228515625, + 907.7440795898438, + -408.14678955078127 + ], + "max": [ + 997.59619140625, + 1314.490234375, + 318.9007873535156 + ] + }, + { + "bufferView": 147, + "componentType": 5126, + "type": "VEC2", + "count": 56, + "byteOffset": 0 + }, + { + "bufferView": 148, + "componentType": 5126, + "type": "VEC3", + "count": 56, + "byteOffset": 0 + }, + { + "bufferView": 149, + "componentType": 5126, + "type": "VEC4", + "count": 56, + "byteOffset": 0 + }, + { + "bufferView": 150, + "componentType": 5126, + "type": "VEC3", + "count": 560, + "byteOffset": 0, + "min": [ + -1048.3079833984376, + 915.451416015625, + -318.1059875488281 + ], + "max": [ + 917.6837158203125, + 930.2659301757813, + 243.55810546875 + ] + }, + { + "bufferView": 151, + "componentType": 5126, + "type": "VEC3", + "count": 560, + "byteOffset": 0 + }, + { + "bufferView": 152, + "componentType": 5126, + "type": "VEC4", + "count": 560, + "byteOffset": 0 + }, + { + "bufferView": 153, + "componentType": 5123, + "type": "SCALAR", + "count": 162, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 65 + ] + }, + { + "bufferView": 154, + "componentType": 5126, + "type": "VEC3", + "count": 66, + "byteOffset": 0, + "min": [ + -1431.199951171875, + -2.6201000213623049, + -644.3114013671875 + ], + "max": [ + 1302.2208251953126, + 867.3870849609375, + 574.7061767578125 + ] + }, + { + "bufferView": 155, + "componentType": 5126, + "type": "VEC2", + "count": 66, + "byteOffset": 0 + }, + { + "bufferView": 156, + "componentType": 5126, + "type": "VEC3", + "count": 66, + "byteOffset": 0 + }, + { + "bufferView": 157, + "componentType": 5126, + "type": "VEC4", + "count": 66, + "byteOffset": 0 + }, + { + "bufferView": 158, + "componentType": 5123, + "type": "SCALAR", + "count": 726, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 313 + ] + }, + { + "bufferView": 159, + "componentType": 5126, + "type": "VEC3", + "count": 314, + "byteOffset": 0, + "min": [ + -509.68328857421877, + -2.1349000930786135, + 554.269775390625 + ], + "max": [ + 41.11109924316406, + 289.3175048828125, + 605.0136108398438 + ] + }, + { + "bufferView": 160, + "componentType": 5126, + "type": "VEC2", + "count": 314, + "byteOffset": 0 + }, + { + "bufferView": 161, + "componentType": 5126, + "type": "VEC3", + "count": 314, + "byteOffset": 0 + }, + { + "bufferView": 162, + "componentType": 5126, + "type": "VEC4", + "count": 314, + "byteOffset": 0 + }, + { + "bufferView": 163, + "componentType": 5123, + "type": "SCALAR", + "count": 72, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 47 + ] + }, + { + "bufferView": 164, + "componentType": 5126, + "type": "VEC3", + "count": 48, + "byteOffset": 0, + "min": [ + -509.6835021972656, + 119.80509948730469, + 573.1038818359375 + ], + "max": [ + -357.1275939941406, + 289.3175048828125, + 583.672119140625 + ] + }, + { + "bufferView": 165, + "componentType": 5126, + "type": "VEC2", + "count": 48, + "byteOffset": 0 + }, + { + "bufferView": 166, + "componentType": 5126, + "type": "VEC3", + "count": 48, + "byteOffset": 0 + }, + { + "bufferView": 167, + "componentType": 5126, + "type": "VEC4", + "count": 48, + "byteOffset": 0 + }, + { + "bufferView": 168, + "componentType": 5123, + "type": "SCALAR", + "count": 246, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 97 + ] + }, + { + "bufferView": 169, + "componentType": 5126, + "type": "VEC3", + "count": 98, + "byteOffset": 0, + "min": [ + 231.56539916992188, + 119.80509948730469, + 573.10400390625 + ], + "max": [ + 384.1211853027344, + 289.3175964355469, + 589.7529296875 + ] + }, + { + "bufferView": 170, + "componentType": 5126, + "type": "VEC2", + "count": 98, + "byteOffset": 0 + }, + { + "bufferView": 171, + "componentType": 5126, + "type": "VEC3", + "count": 98, + "byteOffset": 0 + }, + { + "bufferView": 172, + "componentType": 5126, + "type": "VEC4", + "count": 98, + "byteOffset": 0 + }, + { + "bufferView": 173, + "componentType": 5126, + "type": "VEC3", + "count": 48, + "byteOffset": 0, + "min": [ + 231.56539916992188, + 119.80509948730469, + 573.10400390625 + ], + "max": [ + 384.1213073730469, + 289.3175964355469, + 583.6721801757813 + ] + }, + { + "bufferView": 174, + "componentType": 5126, + "type": "VEC3", + "count": 48, + "byteOffset": 0 + }, + { + "bufferView": 175, + "componentType": 5123, + "type": "SCALAR", + "count": 1668, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 687 + ] + }, + { + "bufferView": 176, + "componentType": 5126, + "type": "VEC3", + "count": 688, + "byteOffset": 0, + "min": [ + -140.4468994140625, + -2.2155001163482668, + -651.5385131835938 + ], + "max": [ + 1315.5244140625, + 716.8505859375, + 42.59199905395508 + ] + }, + { + "bufferView": 177, + "componentType": 5126, + "type": "VEC2", + "count": 688, + "byteOffset": 0 + }, + { + "bufferView": 178, + "componentType": 5126, + "type": "VEC3", + "count": 688, + "byteOffset": 0 + }, + { + "bufferView": 179, + "componentType": 5126, + "type": "VEC4", + "count": 688, + "byteOffset": 0 + }, + { + "bufferView": 180, + "componentType": 5123, + "type": "SCALAR", + "count": 150, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 91 + ] + }, + { + "bufferView": 181, + "componentType": 5126, + "type": "VEC3", + "count": 92, + "byteOffset": 0, + "min": [ + -1431.898681640625, + 415.4613952636719, + -641.6024169921875 + ], + "max": [ + 1302.190673828125, + 424.4659118652344, + 575.3004150390625 + ] + }, + { + "bufferView": 182, + "componentType": 5126, + "type": "VEC2", + "count": 92, + "byteOffset": 0 + }, + { + "bufferView": 183, + "componentType": 5126, + "type": "VEC3", + "count": 92, + "byteOffset": 0 + }, + { + "bufferView": 184, + "componentType": 5126, + "type": "VEC4", + "count": 92, + "byteOffset": 0 + }, + { + "bufferView": 185, + "componentType": 5123, + "type": "SCALAR", + "count": 10224, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 5903 + ] + }, + { + "bufferView": 186, + "componentType": 5126, + "type": "VEC3", + "count": 5904, + "byteOffset": 0, + "min": [ + -1430.30517578125, + 182.6522979736328, + -646.9678955078125 + ], + "max": [ + 1303.27197265625, + 695.3226928710938, + 575.7255249023438 + ] + }, + { + "bufferView": 187, + "componentType": 5126, + "type": "VEC2", + "count": 5904, + "byteOffset": 0 + }, + { + "bufferView": 188, + "componentType": 5126, + "type": "VEC3", + "count": 5904, + "byteOffset": 0 + }, + { + "bufferView": 189, + "componentType": 5126, + "type": "VEC4", + "count": 5904, + "byteOffset": 0 + }, + { + "bufferView": 190, + "componentType": 5123, + "type": "SCALAR", + "count": 150, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 91 + ] + }, + { + "bufferView": 191, + "componentType": 5126, + "type": "VEC3", + "count": 92, + "byteOffset": 0, + "min": [ + -1428.519775390625, + -3.3794000148773195, + -644.3114013671875 + ], + "max": [ + 1302.1905517578126, + 5.625100135803223, + 574.0297241210938 + ] + }, + { + "bufferView": 192, + "componentType": 5126, + "type": "VEC2", + "count": 92, + "byteOffset": 0 + }, + { + "bufferView": 193, + "componentType": 5126, + "type": "VEC3", + "count": 92, + "byteOffset": 0 + }, + { + "bufferView": 194, + "componentType": 5126, + "type": "VEC4", + "count": 92, + "byteOffset": 0 + }, + { + "bufferView": 195, + "componentType": 5123, + "type": "SCALAR", + "count": 15, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 6 + ] + }, + { + "bufferView": 196, + "componentType": 5126, + "type": "VEC3", + "count": 7, + "byteOffset": 0, + "min": [ + -1428.519775390625, + -2.506200075149536, + -644.3114013671875 + ], + "max": [ + 1302.1905517578126, + -2.506200075149536, + 574.0297241210938 + ] + }, + { + "bufferView": 197, + "componentType": 5126, + "type": "VEC2", + "count": 7, + "byteOffset": 0 + }, + { + "bufferView": 198, + "componentType": 5126, + "type": "VEC3", + "count": 7, + "byteOffset": 0 + }, + { + "bufferView": 199, + "componentType": 5126, + "type": "VEC4", + "count": 7, + "byteOffset": 0 + }, + { + "bufferView": 200, + "componentType": 5123, + "type": "SCALAR", + "count": 4080, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 1823 + ] + }, + { + "bufferView": 201, + "componentType": 5126, + "type": "VEC3", + "count": 1824, + "byteOffset": 0, + "min": [ + -1057.22021484375, + -2.460700035095215, + -316.86920166015627 + ], + "max": [ + 925.6038208007813, + 220.99710083007813, + 246.61489868164063 + ] + }, + { + "bufferView": 202, + "componentType": 5126, + "type": "VEC2", + "count": 1824, + "byteOffset": 0 + }, + { + "bufferView": 203, + "componentType": 5126, + "type": "VEC3", + "count": 1824, + "byteOffset": 0 + }, + { + "bufferView": 204, + "componentType": 5126, + "type": "VEC4", + "count": 1824, + "byteOffset": 0 + }, + { + "bufferView": 205, + "componentType": 5123, + "type": "SCALAR", + "count": 11208, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 3763 + ] + }, + { + "bufferView": 206, + "componentType": 5126, + "type": "VEC3", + "count": 3764, + "byteOffset": 0, + "min": [ + -1052.875732421875, + 413.9111022949219, + -317.269287109375 + ], + "max": [ + 921.9354858398438, + 823.3441772460938, + 245.81419372558595 + ] + }, + { + "bufferView": 207, + "componentType": 5126, + "type": "VEC2", + "count": 3764, + "byteOffset": 0 + }, + { + "bufferView": 208, + "componentType": 5126, + "type": "VEC3", + "count": 3764, + "byteOffset": 0 + }, + { + "bufferView": 209, + "componentType": 5126, + "type": "VEC4", + "count": 3764, + "byteOffset": 0 + }, + { + "bufferView": 210, + "componentType": 5123, + "type": "SCALAR", + "count": 69624, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 23037 + ] + }, + { + "bufferView": 211, + "componentType": 5126, + "type": "VEC3", + "count": 23038, + "byteOffset": 0, + "min": [ + -1037.651611328125, + 506.6332092285156, + -309.70550537109377 + ], + "max": [ + 907.4069213867188, + 699.61181640625, + 234.77340698242188 + ] + }, + { + "bufferView": 212, + "componentType": 5126, + "type": "VEC2", + "count": 23038, + "byteOffset": 0 + }, + { + "bufferView": 213, + "componentType": 5126, + "type": "VEC3", + "count": 23038, + "byteOffset": 0 + }, + { + "bufferView": 214, + "componentType": 5126, + "type": "VEC4", + "count": 23038, + "byteOffset": 0 + }, + { + "bufferView": 215, + "componentType": 5123, + "type": "SCALAR", + "count": 54, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 35 + ] + }, + { + "bufferView": 216, + "componentType": 5126, + "type": "VEC3", + "count": 36, + "byteOffset": 0, + "min": [ + -119.40730285644531, + 256.7309875488281, + 568.6583862304688 + ], + "max": [ + -8.262900352478028, + 348.1973876953125, + 575.5051879882813 + ] + }, + { + "bufferView": 217, + "componentType": 5126, + "type": "VEC2", + "count": 36, + "byteOffset": 0 + }, + { + "bufferView": 218, + "componentType": 5126, + "type": "VEC3", + "count": 36, + "byteOffset": 0 + }, + { + "bufferView": 219, + "componentType": 5123, + "type": "SCALAR", + "count": 192, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 119 + ] + }, + { + "bufferView": 220, + "componentType": 5126, + "type": "VEC3", + "count": 120, + "byteOffset": 0, + "min": [ + -1086.4228515625, + 907.7440795898438, + -408.14678955078127 + ], + "max": [ + 997.59619140625, + 1330.769287109375, + 318.9007873535156 + ] + }, + { + "bufferView": 221, + "componentType": 5126, + "type": "VEC2", + "count": 120, + "byteOffset": 0 + }, + { + "bufferView": 222, + "componentType": 5126, + "type": "VEC3", + "count": 120, + "byteOffset": 0 + }, + { + "bufferView": 223, + "componentType": 5126, + "type": "VEC4", + "count": 120, + "byteOffset": 0 + }, + { + "bufferView": 224, + "componentType": 5123, + "type": "SCALAR", + "count": 16368, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 3951 + ] + }, + { + "bufferView": 225, + "componentType": 5126, + "type": "VEC3", + "count": 3952, + "byteOffset": 0, + "min": [ + -628.6536254882813, + 828.8109130859375, + -270.8304138183594 + ], + "max": [ + 503.1986083984375, + 886.1389770507813, + 199.3907012939453 + ] + }, + { + "bufferView": 226, + "componentType": 5126, + "type": "VEC2", + "count": 3952, + "byteOffset": 0 + }, + { + "bufferView": 227, + "componentType": 5126, + "type": "VEC3", + "count": 3952, + "byteOffset": 0 + }, + { + "bufferView": 228, + "componentType": 5126, + "type": "VEC4", + "count": 3952, + "byteOffset": 0 + }, + { + "bufferView": 229, + "componentType": 5123, + "type": "SCALAR", + "count": 83388, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 20986 + ] + }, + { + "bufferView": 230, + "componentType": 5126, + "type": "VEC3", + "count": 20987, + "byteOffset": 0, + "min": [ + -680.2642211914063, + -28.04960060119629, + -341.1361999511719 + ], + "max": [ + 551.2263793945313, + 225.1020965576172, + 266.4422912597656 + ] + }, + { + "bufferView": 231, + "componentType": 5126, + "type": "VEC2", + "count": 20987, + "byteOffset": 0 + }, + { + "bufferView": 232, + "componentType": 5126, + "type": "VEC3", + "count": 20987, + "byteOffset": 0 + }, + { + "bufferView": 233, + "componentType": 5126, + "type": "VEC4", + "count": 20987, + "byteOffset": 0 + }, + { + "bufferView": 234, + "componentType": 5123, + "type": "SCALAR", + "count": 16512, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 3259 + ] + }, + { + "bufferView": 235, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + -783.794189453125, + 339.4429931640625, + 157.164306640625 + ], + "max": [ + -453.8620910644531, + 520.5938720703125, + 252.28579711914063 + ] + }, + { + "bufferView": 236, + "componentType": 5126, + "type": "VEC2", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 237, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 238, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 239, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + -415.18798828125, + 339.4429931640625, + 157.16419982910157 + ], + "max": [ + -85.25599670410156, + 520.5938720703125, + 252.28570556640626 + ] + }, + { + "bufferView": 240, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 241, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 242, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + -46.58190155029297, + 339.4429931640625, + 157.16419982910157 + ], + "max": [ + 283.3501892089844, + 520.5938720703125, + 252.2855987548828 + ] + }, + { + "bufferView": 243, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 244, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 245, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + 322.0242004394531, + 339.4429931640625, + 157.16409301757813 + ], + "max": [ + 651.9561767578125, + 520.5938720703125, + 252.2855987548828 + ] + }, + { + "bufferView": 246, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 247, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 248, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + 318.9197082519531, + 339.4429931640625, + -324.5262145996094 + ], + "max": [ + 648.8516845703125, + 520.5938720703125, + -229.40480041503907 + ] + }, + { + "bufferView": 249, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 250, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 251, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + -49.6864013671875, + 339.4429931640625, + -324.5262145996094 + ], + "max": [ + 280.24560546875, + 520.5938720703125, + -229.40480041503907 + ] + }, + { + "bufferView": 252, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 253, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 254, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + -418.2926025390625, + 339.4429931640625, + -324.5262145996094 + ], + "max": [ + -88.3604965209961, + 520.5938720703125, + -229.40480041503907 + ] + }, + { + "bufferView": 255, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 256, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 257, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0, + "min": [ + -786.898681640625, + 339.4429931640625, + -324.5262145996094 + ], + "max": [ + -456.96661376953127, + 520.5938720703125, + -229.40480041503907 + ] + }, + { + "bufferView": 258, + "componentType": 5126, + "type": "VEC3", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 259, + "componentType": 5126, + "type": "VEC4", + "count": 3260, + "byteOffset": 0 + }, + { + "bufferView": 260, + "componentType": 5123, + "type": "SCALAR", + "count": 33120, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 8339 + ] + }, + { + "bufferView": 261, + "componentType": 5126, + "type": "VEC3", + "count": 8340, + "byteOffset": 0, + "min": [ + -958.6978149414063, + 274.9595947265625, + -289.70361328125 + ], + "max": [ + 830.2938842773438, + 294.114013671875, + 209.11500549316407 + ] + }, + { + "bufferView": 262, + "componentType": 5126, + "type": "VEC2", + "count": 8340, + "byteOffset": 0 + }, + { + "bufferView": 263, + "componentType": 5126, + "type": "VEC3", + "count": 8340, + "byteOffset": 0 + }, + { + "bufferView": 264, + "componentType": 5126, + "type": "VEC4", + "count": 8340, + "byteOffset": 0 + }, + { + "bufferView": 265, + "componentType": 5123, + "type": "SCALAR", + "count": 14592, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 2614 + ] + }, + { + "bufferView": 266, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0, + "min": [ + -204.93739318847657, + 0.13050000369548798, + 188.90179443359376 + ], + "max": [ + 82.35980224609375, + 283.0152893066406, + 213.4824981689453 + ] + }, + { + "bufferView": 267, + "componentType": 5126, + "type": "VEC2", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 268, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 269, + "componentType": 5126, + "type": "VEC4", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 270, + "componentType": 5123, + "type": "SCALAR", + "count": 13824, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 2508 + ] + }, + { + "bufferView": 271, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0, + "min": [ + -577.6201782226563, + -0.30889999866485598, + 182.904296875 + ], + "max": [ + -290.5769958496094, + 283.6809997558594, + 208.21240234375 + ] + }, + { + "bufferView": 272, + "componentType": 5126, + "type": "VEC2", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 273, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 274, + "componentType": 5126, + "type": "VEC4", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 275, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0, + "min": [ + -946.2379150390625, + 0.13050000369548798, + 188.90179443359376 + ], + "max": [ + -658.940673828125, + 283.0152893066406, + 213.4824981689453 + ] + }, + { + "bufferView": 276, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 277, + "componentType": 5126, + "type": "VEC4", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 278, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0, + "min": [ + -946.2379150390625, + 0.13050000369548798, + -289.25689697265627 + ], + "max": [ + -658.940673828125, + 283.0152893066406, + -264.67620849609377 + ] + }, + { + "bufferView": 279, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 280, + "componentType": 5126, + "type": "VEC4", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 281, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0, + "min": [ + 160.99049377441407, + -0.30889999866485598, + 182.904296875 + ], + "max": [ + 448.0338134765625, + 283.6809997558594, + 208.21240234375 + ] + }, + { + "bufferView": 282, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 283, + "componentType": 5126, + "type": "VEC4", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 284, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0, + "min": [ + 532.8767700195313, + 0.13050000369548798, + 188.90179443359376 + ], + "max": [ + 820.1740112304688, + 283.0152893066406, + 213.4824981689453 + ] + }, + { + "bufferView": 285, + "componentType": 5126, + "type": "VEC4", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 286, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0, + "min": [ + -577.6201782226563, + -0.30889999866485598, + -295.25439453125 + ], + "max": [ + -290.5769958496094, + 283.6809997558594, + -269.9462890625 + ] + }, + { + "bufferView": 287, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 288, + "componentType": 5126, + "type": "VEC4", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 289, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0, + "min": [ + -204.93739318847657, + 0.13050000369548798, + -289.25689697265627 + ], + "max": [ + 82.35980224609375, + 283.0152893066406, + -264.67620849609377 + ] + }, + { + "bufferView": 290, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 291, + "componentType": 5126, + "type": "VEC4", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 292, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0, + "min": [ + 160.99049377441407, + -0.30889999866485598, + -295.25439453125 + ], + "max": [ + 448.0338134765625, + 283.6809997558594, + -269.9462890625 + ] + }, + { + "bufferView": 293, + "componentType": 5126, + "type": "VEC3", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 294, + "componentType": 5126, + "type": "VEC4", + "count": 2509, + "byteOffset": 0 + }, + { + "bufferView": 295, + "componentType": 5126, + "type": "VEC3", + "count": 2615, + "byteOffset": 0, + "min": [ + 532.8767700195313, + 0.13050000369548798, + -289.25689697265627 + ], + "max": [ + 820.1740112304688, + 283.0152893066406, + -264.67620849609377 + ] + }, + { + "bufferView": 296, + "componentType": 5126, + "type": "VEC4", + "count": 2615, + "byteOffset": 0 + }, + { + "bufferView": 297, + "componentType": 5123, + "type": "SCALAR", + "count": 24, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 15 + ] + }, + { + "bufferView": 298, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0, + "min": [ + 461.90301513671877, + 133.72129821777345, + -221.48719787597657 + ], + "max": [ + 513.3057250976563, + 214.3549041748047, + -217.91380310058595 + ] + }, + { + "bufferView": 299, + "componentType": 5126, + "type": "VEC2", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 300, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 301, + "componentType": 5126, + "type": "VEC4", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 302, + "componentType": 5123, + "type": "SCALAR", + "count": 14871, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 2956 + ] + }, + { + "bufferView": 303, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0, + "min": [ + 452.6521911621094, + 98.67289733886719, + -246.83450317382813 + ], + "max": [ + 522.6115112304688, + 216.9512939453125, + -194.3249969482422 + ] + }, + { + "bufferView": 304, + "componentType": 5126, + "type": "VEC2", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 305, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 306, + "componentType": 5126, + "type": "VEC4", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 307, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0, + "min": [ + -644.93310546875, + 133.72129821777345, + -221.48719787597657 + ], + "max": [ + -593.5302734375, + 214.3549041748047, + -217.91380310058595 + ] + }, + { + "bufferView": 308, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 309, + "componentType": 5126, + "type": "VEC4", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 310, + "componentType": 5123, + "type": "SCALAR", + "count": 14871, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 2956 + ] + }, + { + "bufferView": 311, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0, + "min": [ + -654.1837768554688, + 98.67289733886719, + -246.83450317382813 + ], + "max": [ + -584.224609375, + 216.9512939453125, + -194.3249969482422 + ] + }, + { + "bufferView": 312, + "componentType": 5126, + "type": "VEC2", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 313, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 314, + "componentType": 5126, + "type": "VEC4", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 315, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0, + "min": [ + -644.8781127929688, + 133.72129821777345, + 141.55499267578126 + ], + "max": [ + -593.4752807617188, + 214.3549041748047, + 145.12840270996095 + ] + }, + { + "bufferView": 316, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 317, + "componentType": 5126, + "type": "VEC4", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 318, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0, + "min": [ + -654.1837768554688, + 98.67289733886719, + 117.96620178222656 + ], + "max": [ + -584.2244262695313, + 216.9512939453125, + 170.47579956054688 + ] + }, + { + "bufferView": 319, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 320, + "componentType": 5126, + "type": "VEC4", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 321, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0, + "min": [ + 461.9580078125, + 133.72129821777345, + 141.55479431152345 + ], + "max": [ + 513.3607788085938, + 214.3549041748047, + 145.1282958984375 + ] + }, + { + "bufferView": 322, + "componentType": 5126, + "type": "VEC3", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 323, + "componentType": 5126, + "type": "VEC4", + "count": 16, + "byteOffset": 0 + }, + { + "bufferView": 324, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0, + "min": [ + 452.6523132324219, + 98.67289733886719, + 117.96600341796875 + ], + "max": [ + 522.611572265625, + 216.9512939453125, + 170.47560119628907 + ] + }, + { + "bufferView": 325, + "componentType": 5126, + "type": "VEC3", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 326, + "componentType": 5126, + "type": "VEC4", + "count": 2957, + "byteOffset": 0 + }, + { + "bufferView": 327, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0, + "min": [ + -992.9603881835938, + 46.08150100708008, + -261.83648681640627 + ], + "max": [ + -929.0048217773438, + 73.12359619140625, + -193.6112060546875 + ] + }, + { + "bufferView": 328, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 329, + "componentType": 5126, + "type": "VEC4", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 330, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + -990.7388916015625, + -0.14010000228881837, + -251.64309692382813 + ], + "max": [ + -938.7498779296875, + 56.199501037597659, + -199.7122039794922 + ] + }, + { + "bufferView": 331, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 332, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 333, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0, + "min": [ + -992.9603881835938, + 42.31909942626953, + 115.05789947509766 + ], + "max": [ + -929.0048217773438, + 69.36119842529297, + 183.283203125 + ] + }, + { + "bufferView": 334, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 335, + "componentType": 5126, + "type": "VEC4", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 336, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + -990.7388916015625, + -3.9024999141693117, + 125.25129699707031 + ], + "max": [ + -938.7498779296875, + 52.43709945678711, + 177.1822052001953 + ] + }, + { + "bufferView": 337, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 338, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 339, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0, + "min": [ + -277.3555908203125, + 42.31909942626953, + 123.89579772949219 + ], + "max": [ + -209.1302032470703, + 69.36119842529297, + 187.85159301757813 + ] + }, + { + "bufferView": 340, + "componentType": 5126, + "type": "VEC3", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 341, + "componentType": 5126, + "type": "VEC4", + "count": 533, + "byteOffset": 0 + }, + { + "bufferView": 342, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + -271.2546081542969, + -3.9024999141693117, + 126.11740112304688 + ], + "max": [ + -219.32369995117188, + 52.43709945678711, + 178.1063995361328 + ] + }, + { + "bufferView": 343, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 344, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 345, + "componentType": 5123, + "type": "SCALAR", + "count": 1200, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 449 + ] + }, + { + "bufferView": 346, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0, + "min": [ + 91.80699920654297, + 43.87229919433594, + 126.15380096435547 + ], + "max": [ + 147.3343963623047, + 67.06770324707031, + 183.33749389648438 + ] + }, + { + "bufferView": 347, + "componentType": 5126, + "type": "VEC2", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 348, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 349, + "componentType": 5126, + "type": "VEC4", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 350, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + 92.75509643554688, + -4.030700206756592, + 127.37989807128906 + ], + "max": [ + 144.7440948486328, + 52.30889892578125, + 179.31080627441407 + ] + }, + { + "bufferView": 351, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 352, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 353, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0, + "min": [ + 806.3583984375, + 44.42399978637695, + 126.15380096435547 + ], + "max": [ + 861.8858032226563, + 67.61940002441406, + 183.33749389648438 + ] + }, + { + "bufferView": 354, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 355, + "componentType": 5126, + "type": "VEC4", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 356, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + 807.3065185546875, + -3.4790000915527345, + 127.37989807128906 + ], + "max": [ + 859.2954711914063, + 52.860599517822269, + 179.31080627441407 + ] + }, + { + "bufferView": 357, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 358, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 359, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0, + "min": [ + 806.3583984375, + 47.762901306152347, + -250.7406005859375 + ], + "max": [ + 861.8858032226563, + 70.95819854736328, + -193.55690002441407 + ] + }, + { + "bufferView": 360, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 361, + "componentType": 5126, + "type": "VEC4", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 362, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + 807.3065185546875, + -0.14010000228881837, + -249.51449584960938 + ], + "max": [ + 859.2954711914063, + 56.199501037597659, + -197.58360290527345 + ] + }, + { + "bufferView": 363, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 364, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 365, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0, + "min": [ + 91.80699920654297, + 47.762901306152347, + -250.7406005859375 + ], + "max": [ + 147.3343963623047, + 70.95819854736328, + -193.55690002441407 + ] + }, + { + "bufferView": 366, + "componentType": 5126, + "type": "VEC3", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 367, + "componentType": 5126, + "type": "VEC4", + "count": 450, + "byteOffset": 0 + }, + { + "bufferView": 368, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0, + "min": [ + 92.75509643554688, + -0.14010000228881837, + -249.51449584960938 + ], + "max": [ + 144.7440948486328, + 56.199501037597659, + -197.58360290527345 + ] + }, + { + "bufferView": 369, + "componentType": 5126, + "type": "VEC3", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 370, + "componentType": 5126, + "type": "VEC4", + "count": 1231, + "byteOffset": 0 + }, + { + "bufferView": 371, + "componentType": 5123, + "type": "SCALAR", + "count": 27552, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 5307 + ] + }, + { + "bufferView": 372, + "componentType": 5126, + "type": "VEC3", + "count": 5308, + "byteOffset": 0, + "min": [ + -1276.67333984375, + -0.6934000253677368, + -523.4995727539063 + ], + "max": [ + 1194.1705322265626, + 133.0167999267578, + 478.2618103027344 + ] + }, + { + "bufferView": 373, + "componentType": 5126, + "type": "VEC2", + "count": 5308, + "byteOffset": 0 + }, + { + "bufferView": 374, + "componentType": 5126, + "type": "VEC3", + "count": 5308, + "byteOffset": 0 + }, + { + "bufferView": 375, + "componentType": 5126, + "type": "VEC4", + "count": 5308, + "byteOffset": 0 + }, + { + "bufferView": 376, + "componentType": 5123, + "type": "SCALAR", + "count": 4563, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 865 + ] + }, + { + "bufferView": 377, + "componentType": 5126, + "type": "VEC3", + "count": 866, + "byteOffset": 0, + "min": [ + 1224.04833984375, + 79.90480041503906, + -114.69149780273438 + ], + "max": [ + 1299.0263671875, + 264.7611999511719, + 41.46760177612305 + ] + }, + { + "bufferView": 378, + "componentType": 5126, + "type": "VEC2", + "count": 866, + "byteOffset": 0 + }, + { + "bufferView": 379, + "componentType": 5126, + "type": "VEC3", + "count": 866, + "byteOffset": 0 + }, + { + "bufferView": 380, + "componentType": 5126, + "type": "VEC4", + "count": 866, + "byteOffset": 0 + }, + { + "bufferView": 381, + "componentType": 5126, + "type": "VEC3", + "count": 753, + "byteOffset": 0, + "min": [ + 1277.022705078125, + 40.818599700927737, + -160.46499633789063 + ], + "max": [ + 1299.8668212890626, + 306.3245849609375, + 88.62660217285156 + ] + }, + { + "bufferView": 382, + "componentType": 5126, + "type": "VEC3", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 383, + "componentType": 5126, + "type": "VEC4", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 384, + "componentType": 5126, + "type": "VEC3", + "count": 866, + "byteOffset": 0, + "min": [ + -1427.434326171875, + 79.90480041503906, + -113.30570220947266 + ], + "max": [ + -1352.456298828125, + 264.7611999511719, + 42.85340118408203 + ] + }, + { + "bufferView": 385, + "componentType": 5126, + "type": "VEC3", + "count": 866, + "byteOffset": 0 + }, + { + "bufferView": 386, + "componentType": 5126, + "type": "VEC4", + "count": 866, + "byteOffset": 0 + }, + { + "bufferView": 387, + "componentType": 5126, + "type": "VEC3", + "count": 753, + "byteOffset": 0, + "min": [ + -1428.27490234375, + 40.818599700927737, + -160.464599609375 + ], + "max": [ + -1405.4306640625, + 306.3245849609375, + 88.62689971923828 + ] + }, + { + "bufferView": 388, + "componentType": 5126, + "type": "VEC3", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 389, + "componentType": 5126, + "type": "VEC4", + "count": 753, + "byteOffset": 0 + }, + { + "bufferView": 390, + "componentType": 5123, + "type": "SCALAR", + "count": 84, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 49 + ] + }, + { + "bufferView": 391, + "componentType": 5126, + "type": "VEC3", + "count": 50, + "byteOffset": 0, + "min": [ + -1866.98291015625, + -126.44249725341797, + -1139.030517578125 + ], + "max": [ + 1746.69287109375, + 1347.19580078125, + 1039.711181640625 + ] + }, + { + "bufferView": 392, + "componentType": 5126, + "type": "VEC2", + "count": 50, + "byteOffset": 0 + }, + { + "bufferView": 393, + "componentType": 5126, + "type": "VEC3", + "count": 50, + "byteOffset": 0 + }, + { + "bufferView": 394, + "componentType": 5126, + "type": "VEC4", + "count": 50, + "byteOffset": 0 + }, + { + "bufferView": 395, + "componentType": 5123, + "type": "SCALAR", + "count": 43452, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 11889 + ] + }, + { + "bufferView": 396, + "componentType": 5126, + "type": "VEC3", + "count": 11890, + "byteOffset": 0, + "min": [ + -1920.9459228515626, + 1280.513427734375, + -1182.80712890625 + ], + "max": [ + 1799.9080810546876, + 1429.4332275390626, + 1105.426025390625 + ] + }, + { + "bufferView": 397, + "componentType": 5126, + "type": "VEC2", + "count": 11890, + "byteOffset": 0 + }, + { + "bufferView": 398, + "componentType": 5126, + "type": "VEC3", + "count": 11890, + "byteOffset": 0 + }, + { + "bufferView": 399, + "componentType": 5126, + "type": "VEC4", + "count": 11890, + "byteOffset": 0 + }, + { + "bufferView": 400, + "componentType": 5123, + "type": "SCALAR", + "count": 30, + "byteOffset": 0, + "min": [ + 0 + ], + "max": [ + 19 + ] + }, + { + "bufferView": 401, + "componentType": 5126, + "type": "VEC3", + "count": 20, + "byteOffset": 0, + "min": [ + -1504.46826171875, + -115.9791030883789, + -782.5203247070313 + ], + "max": [ + 1380.6033935546876, + 1271.037109375, + 674.7567749023438 + ] + }, + { + "bufferView": 402, + "componentType": 5126, + "type": "VEC2", + "count": 20, + "byteOffset": 0 + }, + { + "bufferView": 403, + "componentType": 5126, + "type": "VEC3", + "count": 20, + "byteOffset": 0 + }, + { + "bufferView": 404, + "componentType": 5126, + "type": "VEC4", + "count": 20, + "byteOffset": 0 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "images": [ + { + "uri": "8773302468495022225.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "5061699253647017043.png", + "mimeType": "image/png" + }, + { + "uri": "11872827283454512094.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "12501374198249454378.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8006627369776289000.png", + "mimeType": "image/png" + }, + { + "uri": "715093869573992647.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "4477655471536070370.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "7268504077753552595.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8503262930880235456.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "13982482287905699490.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8750083169368950601.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "16885566240357350108.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "16299174074766089871.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "5792855332885324923.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "11968150294050148237.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2051777328469649772.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "14650633544276105767.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "4871783166746854860.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "10388182081421875623.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "15295713303328085182.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "9916269861720640319.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "15722799267630235092.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "6047387724914829168.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8051790464816141987.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "14267839433702832875.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "5823059166183034438.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "13824894030729245199.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "6667038893015345571.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "7441062115984513793.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8114461559286000061.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "3628158980083700836.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "11490520546946913238.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "3455394979645218238.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "7645212358685992005.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "6151467286084645207.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8783994986360286082.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2299742237651021498.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "4975155472559461469.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "3371964815757888145.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "7056944414013900257.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "4675343432951571524.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "7815564343179553343.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2374361008830720677.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2775690330959970771.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "332936164838540657.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2185409758123873465.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "6593109234861095314.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "17876391417123941155.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "466164707995436622.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "4601176305987539675.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "11474523244911310074.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "4910669866631290573.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "9288698199695299068.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "14170708867020035030.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "16275776544635328252.png", + "mimeType": "image/png" + }, + { + "uri": "1219024358953944284.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "3827035219084910048.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "755318871556304029.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2411100444841994089.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "10381718147657362067.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8481240838833932244.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "17556969131407844942.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "759203620573749278.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "6772804448157695701.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "13196865903111448057.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "14118779221266351425.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "2969916736137545357.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "8747919177698443163.jpg", + "mimeType": "image/jpeg" + }, + { + "uri": "white.png", + "mimeType": "image/png" + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + }, + { + "sampler": 0, + "source": 1 + }, + { + "sampler": 0, + "source": 2 + }, + { + "sampler": 0, + "source": 3 + }, + { + "sampler": 0, + "source": 4 + }, + { + "sampler": 0, + "source": 5 + }, + { + "sampler": 0, + "source": 6 + }, + { + "sampler": 0, + "source": 7 + }, + { + "sampler": 0, + "source": 8 + }, + { + "sampler": 0, + "source": 9 + }, + { + "sampler": 0, + "source": 10 + }, + { + "sampler": 0, + "source": 11 + }, + { + "sampler": 0, + "source": 12 + }, + { + "sampler": 0, + "source": 13 + }, + { + "sampler": 0, + "source": 14 + }, + { + "sampler": 0, + "source": 15 + }, + { + "sampler": 0, + "source": 16 + }, + { + "sampler": 0, + "source": 17 + }, + { + "sampler": 0, + "source": 18 + }, + { + "sampler": 0, + "source": 19 + }, + { + "sampler": 0, + "source": 20 + }, + { + "sampler": 0, + "source": 21 + }, + { + "sampler": 0, + "source": 22 + }, + { + "sampler": 0, + "source": 23 + }, + { + "sampler": 0, + "source": 24 + }, + { + "sampler": 0, + "source": 25 + }, + { + "sampler": 0, + "source": 26 + }, + { + "sampler": 0, + "source": 27 + }, + { + "sampler": 0, + "source": 28 + }, + { + "sampler": 0, + "source": 29 + }, + { + "sampler": 0, + "source": 30 + }, + { + "sampler": 0, + "source": 31 + }, + { + "sampler": 0, + "source": 32 + }, + { + "sampler": 0, + "source": 33 + }, + { + "sampler": 0, + "source": 34 + }, + { + "sampler": 0, + "source": 35 + }, + { + "sampler": 0, + "source": 36 + }, + { + "sampler": 0, + "source": 37 + }, + { + "sampler": 0, + "source": 38 + }, + { + "sampler": 0, + "source": 39 + }, + { + "sampler": 0, + "source": 40 + }, + { + "sampler": 0, + "source": 41 + }, + { + "sampler": 0, + "source": 42 + }, + { + "sampler": 0, + "source": 43 + }, + { + "sampler": 0, + "source": 44 + }, + { + "sampler": 0, + "source": 45 + }, + { + "sampler": 0, + "source": 46 + }, + { + "sampler": 0, + "source": 47 + }, + { + "sampler": 0, + "source": 48 + }, + { + "sampler": 0, + "source": 49 + }, + { + "sampler": 0, + "source": 50 + }, + { + "sampler": 0, + "source": 51 + }, + { + "sampler": 0, + "source": 52 + }, + { + "sampler": 0, + "source": 53 + }, + { + "sampler": 0, + "source": 54 + }, + { + "sampler": 0, + "source": 55 + }, + { + "sampler": 0, + "source": 56 + }, + { + "sampler": 0, + "source": 57 + }, + { + "sampler": 0, + "source": 58 + }, + { + "sampler": 0, + "source": 59 + }, + { + "sampler": 0, + "source": 60 + }, + { + "sampler": 0, + "source": 61 + }, + { + "sampler": 0, + "source": 62 + }, + { + "sampler": 0, + "source": 63 + }, + { + "sampler": 0, + "source": 64 + }, + { + "sampler": 0, + "source": 65 + }, + { + "sampler": 0, + "source": 66 + }, + { + "sampler": 0, + "source": 67 + }, + { + "sampler": 0, + "source": 68 + } + ], + "materials": [ + { + "alphaMode": "MASK", + "doubleSided": true, + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 1 + }, + "metallicRoughnessTexture": { + "index": 2 + } + }, + "normalTexture": { + "index": 0, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 7 + }, + "metallicRoughnessTexture": { + "index": 8 + } + }, + "normalTexture": { + "index": 6, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "metallicFactor": 0.0, + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 68 + } + } + }, + { + "alphaMode": "MASK", + "doubleSided": true, + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 4 + }, + "metallicRoughnessTexture": { + "index": 5 + } + }, + "normalTexture": { + "index": 3, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 10 + }, + "metallicRoughnessTexture": { + "index": 11 + } + }, + "normalTexture": { + "index": 9, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 13 + }, + "metallicRoughnessTexture": { + "index": 14 + } + }, + "normalTexture": { + "index": 12, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 16 + }, + "metallicRoughnessTexture": { + "index": 17 + } + }, + "normalTexture": { + "index": 15, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 19 + }, + "metallicRoughnessTexture": { + "index": 20 + } + }, + "normalTexture": { + "index": 18, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 22 + }, + "metallicRoughnessTexture": { + "index": 23 + } + }, + "normalTexture": { + "index": 21, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 25 + }, + "metallicRoughnessTexture": { + "index": 26 + } + }, + "normalTexture": { + "index": 24, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 28 + }, + "metallicRoughnessTexture": { + "index": 29 + } + }, + "normalTexture": { + "index": 27, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 31 + }, + "metallicRoughnessTexture": { + "index": 32 + } + }, + "normalTexture": { + "index": 30, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 34 + }, + "metallicRoughnessTexture": { + "index": 35 + } + }, + "normalTexture": { + "index": 33, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 37 + }, + "metallicRoughnessTexture": { + "index": 38 + } + }, + "normalTexture": { + "index": 36, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 40 + }, + "metallicRoughnessTexture": { + "index": 41 + } + }, + "normalTexture": { + "index": 39, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 43 + }, + "metallicRoughnessTexture": { + "index": 41 + } + }, + "normalTexture": { + "index": 42, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 45 + }, + "metallicRoughnessTexture": { + "index": 41 + } + }, + "normalTexture": { + "index": 44, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 47 + }, + "metallicRoughnessTexture": { + "index": 48 + } + }, + "normalTexture": { + "index": 46, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 50 + }, + "metallicRoughnessTexture": { + "index": 48 + } + }, + "normalTexture": { + "index": 49, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 52 + }, + "metallicRoughnessTexture": { + "index": 48 + } + }, + "normalTexture": { + "index": 51, + "scale": 1.0 + } + }, + { + "alphaMode": "MASK", + "doubleSided": true, + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 54 + }, + "metallicRoughnessTexture": { + "index": 55 + } + }, + "normalTexture": { + "index": 53, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 57 + }, + "metallicRoughnessTexture": { + "index": 58 + } + }, + "normalTexture": { + "index": 56, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 60 + }, + "metallicRoughnessTexture": { + "index": 61 + } + }, + "normalTexture": { + "index": 59, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 63 + }, + "metallicRoughnessTexture": { + "index": 64 + } + }, + "normalTexture": { + "index": 62, + "scale": 1.0 + } + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.5879999995231628, + 0.5879999995231628, + 0.5879999995231628, + 1.0 + ], + "baseColorTexture": { + "index": 66 + }, + "metallicRoughnessTexture": { + "index": 67 + } + }, + "normalTexture": { + "index": 65, + "scale": 1.0 + } + } + ], + "meshes": [ + { + "primitives": [ + { + "indices": 0, + "material": 0, + "mode": 4, + "attributes": { + "POSITION": 1, + "TEXCOORD_0": 2, + "NORMAL": 3, + "TANGENT": 4 + } + }, + { + "indices": 5, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 6, + "TEXCOORD_0": 7, + "NORMAL": 8, + "TANGENT": 9 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 11, + "TEXCOORD_0": 12, + "NORMAL": 13, + "TANGENT": 14 + } + }, + { + "indices": 15, + "material": 4, + "mode": 4, + "attributes": { + "POSITION": 16, + "TEXCOORD_0": 17, + "NORMAL": 18, + "TANGENT": 19 + } + }, + { + "indices": 20, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 21, + "TEXCOORD_0": 22, + "NORMAL": 23, + "TANGENT": 24 + } + }, + { + "indices": 25, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 26, + "TEXCOORD_0": 27, + "NORMAL": 28, + "TANGENT": 29 + } + }, + { + "indices": 30, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 31, + "TEXCOORD_0": 32, + "NORMAL": 33, + "TANGENT": 34 + } + }, + { + "indices": 35, + "material": 8, + "mode": 4, + "attributes": { + "POSITION": 36, + "TEXCOORD_0": 37, + "NORMAL": 38, + "TANGENT": 39 + } + }, + { + "indices": 40, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 41, + "TEXCOORD_0": 42, + "NORMAL": 43, + "TANGENT": 44 + } + }, + { + "indices": 45, + "material": 9, + "mode": 4, + "attributes": { + "POSITION": 46, + "TEXCOORD_0": 47, + "NORMAL": 48, + "TANGENT": 49 + } + }, + { + "indices": 30, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 50, + "TEXCOORD_0": 32, + "NORMAL": 51, + "TANGENT": 52 + } + }, + { + "indices": 53, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 54, + "TEXCOORD_0": 55, + "NORMAL": 56, + "TANGENT": 57 + } + }, + { + "indices": 58, + "material": 10, + "mode": 4, + "attributes": { + "POSITION": 59, + "TEXCOORD_0": 60, + "NORMAL": 61, + "TANGENT": 62 + } + }, + { + "indices": 63, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 64, + "TEXCOORD_0": 65, + "NORMAL": 66, + "TANGENT": 67 + } + }, + { + "indices": 68, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 69, + "TEXCOORD_0": 70, + "NORMAL": 71, + "TANGENT": 72 + } + }, + { + "indices": 73, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 74, + "TEXCOORD_0": 75, + "NORMAL": 76, + "TANGENT": 77 + } + }, + { + "indices": 78, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 79, + "TEXCOORD_0": 80, + "NORMAL": 81, + "TANGENT": 82 + } + }, + { + "indices": 83, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 84, + "TEXCOORD_0": 85, + "NORMAL": 86, + "TANGENT": 87 + } + }, + { + "indices": 78, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 88, + "TEXCOORD_0": 80, + "NORMAL": 89, + "TANGENT": 90 + } + }, + { + "indices": 83, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 91, + "TEXCOORD_0": 85, + "NORMAL": 92, + "TANGENT": 93 + } + }, + { + "indices": 78, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 94, + "TEXCOORD_0": 80, + "NORMAL": 95, + "TANGENT": 96 + } + }, + { + "indices": 83, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 97, + "TEXCOORD_0": 85, + "NORMAL": 98, + "TANGENT": 99 + } + }, + { + "indices": 78, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 100, + "TEXCOORD_0": 80, + "NORMAL": 101, + "TANGENT": 102 + } + }, + { + "indices": 83, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 103, + "TEXCOORD_0": 85, + "NORMAL": 104, + "TANGENT": 105 + } + }, + { + "indices": 106, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 107, + "TEXCOORD_0": 108, + "NORMAL": 109, + "TANGENT": 110 + } + }, + { + "indices": 111, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 112, + "TEXCOORD_0": 113, + "NORMAL": 114, + "TANGENT": 115 + } + }, + { + "indices": 106, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 116, + "TEXCOORD_0": 108, + "NORMAL": 117, + "TANGENT": 118 + } + }, + { + "indices": 111, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 119, + "TEXCOORD_0": 113, + "NORMAL": 120, + "TANGENT": 121 + } + }, + { + "indices": 106, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 122, + "TEXCOORD_0": 108, + "NORMAL": 123, + "TANGENT": 124 + } + }, + { + "indices": 111, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 125, + "TEXCOORD_0": 113, + "NORMAL": 126, + "TANGENT": 127 + } + }, + { + "indices": 106, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 128, + "TEXCOORD_0": 108, + "NORMAL": 129, + "TANGENT": 130 + } + }, + { + "indices": 111, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 131, + "TEXCOORD_0": 113, + "NORMAL": 132, + "TANGENT": 133 + } + }, + { + "indices": 106, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 134, + "TEXCOORD_0": 108, + "NORMAL": 135, + "TANGENT": 136 + } + }, + { + "indices": 111, + "material": 7, + "mode": 4, + "attributes": { + "POSITION": 137, + "TEXCOORD_0": 113, + "NORMAL": 138, + "TANGENT": 139 + } + }, + { + "indices": 140, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 141, + "TEXCOORD_0": 142, + "NORMAL": 143, + "TANGENT": 144 + } + }, + { + "indices": 145, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 146, + "TEXCOORD_0": 147, + "NORMAL": 148, + "TANGENT": 149 + } + }, + { + "indices": 25, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 150, + "TEXCOORD_0": 27, + "NORMAL": 151, + "TANGENT": 152 + } + }, + { + "indices": 153, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 154, + "TEXCOORD_0": 155, + "NORMAL": 156, + "TANGENT": 157 + } + }, + { + "indices": 158, + "material": 11, + "mode": 4, + "attributes": { + "POSITION": 159, + "TEXCOORD_0": 160, + "NORMAL": 161, + "TANGENT": 162 + } + }, + { + "indices": 163, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 164, + "TEXCOORD_0": 165, + "NORMAL": 166, + "TANGENT": 167 + } + }, + { + "indices": 168, + "material": 11, + "mode": 4, + "attributes": { + "POSITION": 169, + "TEXCOORD_0": 170, + "NORMAL": 171, + "TANGENT": 172 + } + }, + { + "indices": 163, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 173, + "TEXCOORD_0": 165, + "NORMAL": 174, + "TANGENT": 167 + } + }, + { + "indices": 175, + "material": 11, + "mode": 4, + "attributes": { + "POSITION": 176, + "TEXCOORD_0": 177, + "NORMAL": 178, + "TANGENT": 179 + } + }, + { + "indices": 180, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 181, + "TEXCOORD_0": 182, + "NORMAL": 183, + "TANGENT": 184 + } + }, + { + "indices": 185, + "material": 10, + "mode": 4, + "attributes": { + "POSITION": 186, + "TEXCOORD_0": 187, + "NORMAL": 188, + "TANGENT": 189 + } + }, + { + "indices": 190, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 191, + "TEXCOORD_0": 192, + "NORMAL": 193, + "TANGENT": 194 + } + }, + { + "indices": 195, + "material": 9, + "mode": 4, + "attributes": { + "POSITION": 196, + "TEXCOORD_0": 197, + "NORMAL": 198, + "TANGENT": 199 + } + }, + { + "indices": 200, + "material": 8, + "mode": 4, + "attributes": { + "POSITION": 201, + "TEXCOORD_0": 202, + "NORMAL": 203, + "TANGENT": 204 + } + }, + { + "indices": 205, + "material": 6, + "mode": 4, + "attributes": { + "POSITION": 206, + "TEXCOORD_0": 207, + "NORMAL": 208, + "TANGENT": 209 + } + }, + { + "indices": 210, + "material": 12, + "mode": 4, + "attributes": { + "POSITION": 211, + "TEXCOORD_0": 212, + "NORMAL": 213, + "TANGENT": 214 + } + }, + { + "indices": 215, + "material": 2, + "mode": 4, + "attributes": { + "POSITION": 216, + "TEXCOORD_0": 217, + "NORMAL": 218 + } + }, + { + "indices": 219, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 220, + "TEXCOORD_0": 221, + "NORMAL": 222, + "TANGENT": 223 + } + }, + { + "indices": 224, + "material": 13, + "mode": 4, + "attributes": { + "POSITION": 225, + "TEXCOORD_0": 226, + "NORMAL": 227, + "TANGENT": 228 + } + }, + { + "indices": 229, + "material": 0, + "mode": 4, + "attributes": { + "POSITION": 230, + "TEXCOORD_0": 231, + "NORMAL": 232, + "TANGENT": 233 + } + }, + { + "indices": 234, + "material": 14, + "mode": 4, + "attributes": { + "POSITION": 235, + "TEXCOORD_0": 236, + "NORMAL": 237, + "TANGENT": 238 + } + }, + { + "indices": 234, + "material": 15, + "mode": 4, + "attributes": { + "POSITION": 239, + "TEXCOORD_0": 236, + "NORMAL": 240, + "TANGENT": 241 + } + }, + { + "indices": 234, + "material": 16, + "mode": 4, + "attributes": { + "POSITION": 242, + "TEXCOORD_0": 236, + "NORMAL": 243, + "TANGENT": 244 + } + }, + { + "indices": 234, + "material": 14, + "mode": 4, + "attributes": { + "POSITION": 245, + "TEXCOORD_0": 236, + "NORMAL": 246, + "TANGENT": 247 + } + }, + { + "indices": 234, + "material": 15, + "mode": 4, + "attributes": { + "POSITION": 248, + "TEXCOORD_0": 236, + "NORMAL": 249, + "TANGENT": 250 + } + }, + { + "indices": 234, + "material": 14, + "mode": 4, + "attributes": { + "POSITION": 251, + "TEXCOORD_0": 236, + "NORMAL": 252, + "TANGENT": 253 + } + }, + { + "indices": 234, + "material": 16, + "mode": 4, + "attributes": { + "POSITION": 254, + "TEXCOORD_0": 236, + "NORMAL": 255, + "TANGENT": 256 + } + }, + { + "indices": 234, + "material": 15, + "mode": 4, + "attributes": { + "POSITION": 257, + "TEXCOORD_0": 236, + "NORMAL": 258, + "TANGENT": 259 + } + }, + { + "indices": 260, + "material": 13, + "mode": 4, + "attributes": { + "POSITION": 261, + "TEXCOORD_0": 262, + "NORMAL": 263, + "TANGENT": 264 + } + }, + { + "indices": 265, + "material": 17, + "mode": 4, + "attributes": { + "POSITION": 266, + "TEXCOORD_0": 267, + "NORMAL": 268, + "TANGENT": 269 + } + }, + { + "indices": 270, + "material": 18, + "mode": 4, + "attributes": { + "POSITION": 271, + "TEXCOORD_0": 272, + "NORMAL": 273, + "TANGENT": 274 + } + }, + { + "indices": 265, + "material": 19, + "mode": 4, + "attributes": { + "POSITION": 275, + "TEXCOORD_0": 267, + "NORMAL": 276, + "TANGENT": 277 + } + }, + { + "indices": 265, + "material": 18, + "mode": 4, + "attributes": { + "POSITION": 278, + "TEXCOORD_0": 267, + "NORMAL": 279, + "TANGENT": 280 + } + }, + { + "indices": 270, + "material": 19, + "mode": 4, + "attributes": { + "POSITION": 281, + "TEXCOORD_0": 272, + "NORMAL": 282, + "TANGENT": 283 + } + }, + { + "indices": 265, + "material": 18, + "mode": 4, + "attributes": { + "POSITION": 284, + "TEXCOORD_0": 267, + "NORMAL": 276, + "TANGENT": 285 + } + }, + { + "indices": 270, + "material": 17, + "mode": 4, + "attributes": { + "POSITION": 286, + "TEXCOORD_0": 272, + "NORMAL": 287, + "TANGENT": 288 + } + }, + { + "indices": 265, + "material": 19, + "mode": 4, + "attributes": { + "POSITION": 289, + "TEXCOORD_0": 267, + "NORMAL": 290, + "TANGENT": 291 + } + }, + { + "indices": 270, + "material": 18, + "mode": 4, + "attributes": { + "POSITION": 292, + "TEXCOORD_0": 272, + "NORMAL": 293, + "TANGENT": 294 + } + }, + { + "indices": 265, + "material": 17, + "mode": 4, + "attributes": { + "POSITION": 295, + "TEXCOORD_0": 267, + "NORMAL": 279, + "TANGENT": 296 + } + }, + { + "indices": 297, + "material": 20, + "mode": 4, + "attributes": { + "POSITION": 298, + "TEXCOORD_0": 299, + "NORMAL": 300, + "TANGENT": 301 + } + }, + { + "indices": 302, + "material": 21, + "mode": 4, + "attributes": { + "POSITION": 303, + "TEXCOORD_0": 304, + "NORMAL": 305, + "TANGENT": 306 + } + }, + { + "indices": 297, + "material": 20, + "mode": 4, + "attributes": { + "POSITION": 307, + "TEXCOORD_0": 299, + "NORMAL": 308, + "TANGENT": 309 + } + }, + { + "indices": 310, + "material": 21, + "mode": 4, + "attributes": { + "POSITION": 311, + "TEXCOORD_0": 312, + "NORMAL": 313, + "TANGENT": 314 + } + }, + { + "indices": 297, + "material": 20, + "mode": 4, + "attributes": { + "POSITION": 315, + "TEXCOORD_0": 299, + "NORMAL": 316, + "TANGENT": 317 + } + }, + { + "indices": 302, + "material": 21, + "mode": 4, + "attributes": { + "POSITION": 318, + "TEXCOORD_0": 304, + "NORMAL": 319, + "TANGENT": 320 + } + }, + { + "indices": 297, + "material": 20, + "mode": 4, + "attributes": { + "POSITION": 321, + "TEXCOORD_0": 299, + "NORMAL": 322, + "TANGENT": 323 + } + }, + { + "indices": 310, + "material": 21, + "mode": 4, + "attributes": { + "POSITION": 324, + "TEXCOORD_0": 312, + "NORMAL": 325, + "TANGENT": 326 + } + }, + { + "indices": 5, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 327, + "TEXCOORD_0": 7, + "NORMAL": 328, + "TANGENT": 329 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 330, + "TEXCOORD_0": 12, + "NORMAL": 331, + "TANGENT": 332 + } + }, + { + "indices": 5, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 333, + "TEXCOORD_0": 7, + "NORMAL": 334, + "TANGENT": 335 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 336, + "TEXCOORD_0": 12, + "NORMAL": 337, + "TANGENT": 338 + } + }, + { + "indices": 5, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 339, + "TEXCOORD_0": 7, + "NORMAL": 340, + "TANGENT": 341 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 342, + "TEXCOORD_0": 12, + "NORMAL": 343, + "TANGENT": 344 + } + }, + { + "indices": 345, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 346, + "TEXCOORD_0": 347, + "NORMAL": 348, + "TANGENT": 349 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 350, + "TEXCOORD_0": 12, + "NORMAL": 351, + "TANGENT": 352 + } + }, + { + "indices": 345, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 353, + "TEXCOORD_0": 347, + "NORMAL": 354, + "TANGENT": 355 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 356, + "TEXCOORD_0": 12, + "NORMAL": 357, + "TANGENT": 358 + } + }, + { + "indices": 345, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 359, + "TEXCOORD_0": 347, + "NORMAL": 360, + "TANGENT": 361 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 362, + "TEXCOORD_0": 12, + "NORMAL": 363, + "TANGENT": 364 + } + }, + { + "indices": 345, + "material": 3, + "mode": 4, + "attributes": { + "POSITION": 365, + "TEXCOORD_0": 347, + "NORMAL": 366, + "TANGENT": 367 + } + }, + { + "indices": 10, + "material": 1, + "mode": 4, + "attributes": { + "POSITION": 368, + "TEXCOORD_0": 12, + "NORMAL": 369, + "TANGENT": 370 + } + }, + { + "indices": 371, + "material": 22, + "mode": 4, + "attributes": { + "POSITION": 372, + "TEXCOORD_0": 373, + "NORMAL": 374, + "TANGENT": 375 + } + }, + { + "indices": 376, + "material": 23, + "mode": 4, + "attributes": { + "POSITION": 377, + "TEXCOORD_0": 378, + "NORMAL": 379, + "TANGENT": 380 + } + }, + { + "indices": 15, + "material": 4, + "mode": 4, + "attributes": { + "POSITION": 381, + "TEXCOORD_0": 17, + "NORMAL": 382, + "TANGENT": 383 + } + }, + { + "indices": 376, + "material": 23, + "mode": 4, + "attributes": { + "POSITION": 384, + "TEXCOORD_0": 378, + "NORMAL": 385, + "TANGENT": 386 + } + }, + { + "indices": 15, + "material": 4, + "mode": 4, + "attributes": { + "POSITION": 387, + "TEXCOORD_0": 17, + "NORMAL": 388, + "TANGENT": 389 + } + }, + { + "indices": 390, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 391, + "TEXCOORD_0": 392, + "NORMAL": 393, + "TANGENT": 394 + } + }, + { + "indices": 395, + "material": 24, + "mode": 4, + "attributes": { + "POSITION": 396, + "TEXCOORD_0": 397, + "NORMAL": 398, + "TANGENT": 399 + } + }, + { + "indices": 400, + "material": 5, + "mode": 4, + "attributes": { + "POSITION": 401, + "TEXCOORD_0": 402, + "NORMAL": 403, + "TANGENT": 404 + } + } + ] + } + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ] +} diff --git a/sample/media/Sponza/glTF/white.png b/sample/media/Sponza/glTF/white.png new file mode 100644 index 0000000..0851a35 Binary files /dev/null and b/sample/media/Sponza/glTF/white.png differ diff --git a/sample/media/Sponza/screenshot/large.jpg b/sample/media/Sponza/screenshot/large.jpg new file mode 100644 index 0000000..6e1a627 Binary files /dev/null and b/sample/media/Sponza/screenshot/large.jpg differ diff --git a/sample/media/Sponza/screenshot/screenshot.jpg b/sample/media/Sponza/screenshot/screenshot.jpg new file mode 100644 index 0000000..03a0ea8 Binary files /dev/null and b/sample/media/Sponza/screenshot/screenshot.jpg differ diff --git a/sample/media/envmaps/papermill/README.md b/sample/media/envmaps/papermill/README.md new file mode 100644 index 0000000..b585ca4 --- /dev/null +++ b/sample/media/envmaps/papermill/README.md @@ -0,0 +1,8 @@ +# PaperMill Ruins E + + +## License Information + +Free set "Papermill Ruins E" by Blochi from www.hdrlabs.com SiBL archive + +Licensed under Creative Commons Attribution Share Alike 3.0 license diff --git a/sample/media/envmaps/papermill/diffuse.dds b/sample/media/envmaps/papermill/diffuse.dds new file mode 100644 index 0000000..a29fa3b Binary files /dev/null and b/sample/media/envmaps/papermill/diffuse.dds differ diff --git a/sample/media/envmaps/papermill/specular.dds b/sample/media/envmaps/papermill/specular.dds new file mode 100644 index 0000000..752e099 Binary files /dev/null and b/sample/media/envmaps/papermill/specular.dds differ diff --git a/sample/readme.md b/sample/readme.md new file mode 100644 index 0000000..f76cddc --- /dev/null +++ b/sample/readme.md @@ -0,0 +1,36 @@ +# FidelityFX CACAO Sample + +A small demo to show integration and usage of the [FidelityFX CACAO library](https://github.com/GPUOpen-Effects/FidelityFX-CACAO/tree/master/ffx-cacao). + +![Screenshot](screenshot.png) + +# Sponza Model Issue + +In the provided Sponza model, at the bottom of some curtains, there is an issue with incorrect normals +in the mesh causing ambient occlusion to be incorrectly calculated as light in places where occlusion +should be dark. This is a known issue with the mesh, and not an issue with FFX CACAO itself. + +# Build Instructions + +### Prerequisites + +To build this sample, the following tools are required: + +- [CMake 3.4](https://cmake.org/download/) +- [Visual Studio 2017](https://visualstudio.microsoft.com/downloads/) +- [Windows 10 SDK 10.0.17763.0](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) + +Then follow these steps: + +1) Clone the repository with its submodules: + ``` + > git clone https://github.com/GPUOpen-Effects/FidelityFX-CACAO.git --recurse-submodules + ``` + +2) Generate the solutions: + ``` + > cd FidelityFX-CACAO\sample\build + > GenerateSolutions.bat + ``` + +3) Open the solution in the DX12 directory, compile and run. diff --git a/sample/screenshot.png b/sample/screenshot.png new file mode 100644 index 0000000..b8dc903 Binary files /dev/null and b/sample/screenshot.png differ diff --git a/sample/src/DX12/Apply_CACAO.hlsl b/sample/src/DX12/Apply_CACAO.hlsl new file mode 100644 index 0000000..4e7a43b --- /dev/null +++ b/sample/src/DX12/Apply_CACAO.hlsl @@ -0,0 +1,40 @@ +#ifndef WIDTH +#define WIDTH 8 +#endif + +#ifndef HEIGHT +#define HEIGHT 8 +#endif + +#ifndef DEPTH +#define DEPTH 1 +#endif + +SamplerState g_LinearSampler : register(s0); + +Texture2D g_SSAO : register(t0); +RWTexture2D g_HDR : register(u0); + +[numthreads(WIDTH, HEIGHT, DEPTH)] +void CSApplyCACAO(uint2 tid : SV_DispatchThreadID) +{ + float4 color = g_HDR[tid]; + float ssao = g_SSAO[tid]; + color.xyz *= ssao; + g_HDR[tid] = color; +} + +// pass through +Texture2D g_Input : register(t0); +SamplerState g_Bilinear : register(s0); + +struct VERTEX_OUT +{ + float2 vTexture : TEXCOORD; + float4 vPosition : SV_POSITION; +}; + +float4 mainPS(VERTEX_OUT Input) : SV_Target +{ + return float4(pow(g_Input.Sample(g_Bilinear, Input.vTexture).xxx, 2.2), 1.0f); +} \ No newline at end of file diff --git a/sample/src/DX12/CMakeLists.txt b/sample/src/DX12/CMakeLists.txt new file mode 100644 index 0000000..01cd39f --- /dev/null +++ b/sample/src/DX12/CMakeLists.txt @@ -0,0 +1,42 @@ +project(FFX_CACAO_Sample_DX12) + +include(${CMAKE_CURRENT_SOURCE_DIR}/../../common.cmake) + +add_compile_options(/MP) + +set(sources + FFX_CACAO_Sample.cpp + FFX_CACAO_Sample.h + SampleRenderer.cpp + SampleRenderer.h + ../../../ffx-cacao/src/ffx_cacao_defines.h + ../../../ffx-cacao/src/ffx_cacao.cpp + ../../../ffx-cacao/inc/ffx_cacao.h + stdafx.cpp + stdafx.h) + +set(shaders + ${CMAKE_CURRENT_SOURCE_DIR}/../../../ffx-cacao/src/ffx_cacao.hlsl + ${CMAKE_CURRENT_SOURCE_DIR}/../../../ffx-cacao/src/ffx_cacao_defines.h + ${CMAKE_CURRENT_SOURCE_DIR}/Apply_CACAO.hlsl) + +source_group("Sources" FILES ${sources}) +source_group("Shaders" FILES ${shaders}) + +copyCommand("${shaders}" ${CMAKE_HOME_DIRECTORY}/bin/ShaderLibDX) + +add_executable(${PROJECT_NAME} WIN32 ${sources} ${shaders}) + +add_custom_command( + TARGET ${PROJECT_NAME} + PRE_BUILD + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../../../ffx-cacao/src/build_shaders.bat) + +target_link_libraries(${PROJECT_NAME} LINK_PUBLIC Cauldron_DX12 ImGUI amd_ags DXC d3dcompiler D3D12) +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../ffx-cacao/inc) +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../ffx-cacao/src) + +set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin") +set_source_files_properties(${shaders} PROPERTIES VS_TOOL_OVERRIDE "Text") + +addManifest(${PROJECT_NAME}) diff --git a/sample/src/DX12/FFX_CACAO_Sample.cpp b/sample/src/DX12/FFX_CACAO_Sample.cpp new file mode 100644 index 0000000..c9c257a --- /dev/null +++ b/sample/src/DX12/FFX_CACAO_Sample.cpp @@ -0,0 +1,1629 @@ +// AMD SampleDX12 sample code +// +// Copyright(c) 2018 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "stdafx.h" + +#include "FFX_CACAO_Sample.h" + +// ======================================================================================= +// stuff ripped from intel ASSAO +// ======================================================================================= + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// File changes (yyyy-mm-dd) +// 2016-09-07: filip.strugar@intel.com: first commit +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class vaMath +{ +public: + + static inline float TimeIndependentLerpF(float deltaTime, float lerpRate); + + template + static inline T Min(T const & a, T const & b); + + template + static inline T Max(T const & a, T const & b); + + template + static inline T Clamp(T const & v, T const & min, T const & max); + + template + static inline T Saturate(T const & a); + + template + static inline T Lerp(T const & a, T const & b, const float f); + + // why not just use std::swap? + //template + //static inline void Swap(T & a, T & b); + + static inline float Abs(float a); + static inline double Abs(double a); + + static inline double Frac(double a); + static inline float Frac(float a); + static inline int FloorLog2(unsigned int n); + + static inline float AngleWrap(float angle); + static inline float AngleSmallestDiff(float a, float b); + + static inline float DegreeToRadian(float degree) { return degree * 3.1415926535f / 180.0f; } + static inline float RadianToDegree(float radian) { return radian * 180.0f / 3.1415926535f; } + + static inline bool IsPowOf2(int val); + static inline int PowOf2Ceil(int val); + static inline int Log2(int val); + + template + static inline T Sq(const T & a); + + static inline float Sqrt(float a) { return ::sqrtf(a); } + static inline double Sqrt(double a) { return ::sqrt(a); } + + static inline float Pow(float a, float p) { return powf(a, p); } + static inline double Pow(double a, double p) { return pow(a, p); } + + static inline float Exp(float p) { return expf(p); } + static inline double Exp(double p) { return exp(p); } + + static inline float Sin(float a) { return sinf(a); } + static inline double Sin(double a) { return sin(a); } + + static inline float Cos(float a) { return cosf(a); } + static inline double Cos(double a) { return cos(a); } + + static inline float ASin(float a) { return asinf(a); } + static inline double ASin(double a) { return asin(a); } + + static inline float ACos(float a) { return acosf(a); } + static inline double ACos(double a) { return acos(a); } + + static inline float ATan2(float y, float x) { return atan2f(y, x); } + + static inline float Round(float x) { return ::roundf(x); } + static inline double Round(double x) { return ::round(x); } + + static inline float Ceil(float x) { return ::ceilf(x); } + static inline double Ceil(double x) { return ::ceil(x); } + + static inline float Floor(float x) { return ::floorf(x); } + static inline double Floor(double x) { return ::floor(x); } + + template + static inline T Sign(const T & a); + + static float Randf(); + + static inline bool NearEqual(float a, float b, float epsilon = 1e-5f) { return vaMath::Abs(a - b) < epsilon; } + + static inline float Smoothstep(const float t); // gives something similar to "sin( (x-0.5) * PI)*0.5 + 0.5 )" for [0, 1] + +private: + friend class vaCore; + static void Initialize(); + static void Deinitialize(); +}; + +// Time independent lerp function. The bigger the lerpRate, the faster the lerp! +inline float vaMath::TimeIndependentLerpF(float deltaTime, float lerpRate) +{ + return 1.0f - expf(-fabsf(deltaTime*lerpRate)); +} + +template +inline T vaMath::Min(T const & a, T const & b) +{ + return (a < b) ? (a) : (b); +} + +template +inline T vaMath::Max(T const & a, T const & b) +{ + return (a > b) ? (a) : (b); +} + +template +inline T vaMath::Clamp(T const & v, T const & min, T const & max) +{ + if (v < min) return min; + if (v > max) return max; + return v; +} + +// short for clamp( a, 0, 1 ) +template +inline T vaMath::Saturate(T const & a) +{ + return Clamp(a, (T)0.0, (T)1.0); +} + +template +inline T vaMath::Lerp(T const & a, T const & b, const float f) +{ + return a + (b - a)*f; +} + +// why not just use std::swap? +//template +//inline void vaMath::Swap(T & a, T & b) +//{ +// assert( &a != &b ); // swapping with itself? +// T temp = b; +// b = a; +// a = temp; +//} + +template +inline T vaMath::Sq(const T & a) +{ + return a * a; +} + +inline double vaMath::Frac(double a) +{ + return fmod(a, 1.0); +} + +inline float vaMath::Frac(float a) +{ + return fmodf(a, 1.0); +} + +inline int vaMath::FloorLog2(unsigned int n) +{ + int pos = 0; + if (n >= 1 << 16) { n >>= 16; pos += 16; } + if (n >= 1 << 8) { n >>= 8; pos += 8; } + if (n >= 1 << 4) { n >>= 4; pos += 4; } + if (n >= 1 << 2) { n >>= 2; pos += 2; } + if (n >= 1 << 1) { pos += 1; } + return ((n == 0) ? (-1) : pos); +} + +inline float vaMath::AngleWrap(float angle) +{ + return (angle > 0) ? (fmodf(angle + 3.1415926535f, 3.1415926535f * 2.0f) - 3.1415926535f) : (fmodf(angle - 3.1415926535f, 3.1415926535f * 2.0f) + 3.1415926535f); +} + +inline float vaMath::AngleSmallestDiff(float a, float b) +{ + a = AngleWrap(a); + b = AngleWrap(b); + float v = AngleWrap(a - b); + if (v > 3.1415926535f) + v -= 3.1415926535f * 2.0f; + return v; +} + +inline bool vaMath::IsPowOf2(int val) +{ + if (val < 1) return false; + return (val & (val - 1)) == 0; +} + +inline int vaMath::PowOf2Ceil(int val) +{ + int l2 = Log2(Max(0, val - 1)) + 1; + return 1 << l2; +} + +inline int vaMath::Log2(int val) +{ + unsigned r = 0; + + while (val >>= 1) + { + r++; + } + + return r; +} + +inline float vaMath::Abs(float a) +{ + return fabsf(a); +} + +inline double vaMath::Abs(double a) +{ + return fabs(a); +} + +template +inline T vaMath::Sign(const T & a) +{ + if (a > 0) return 1; + if (a < 0) return -1; + return 0; +} + +// "fat" version: +// float smoothstep(float edge0, float edge1, float x) +// { +// // Scale, bias and saturate x to 0..1 range +// x = clamp((x - edge0)/(edge1 - edge0), 0.0, 1.0); +// // Evaluate polynomial +// return x*x*(3 - 2*x); +//} + +inline float vaMath::Smoothstep(const float t) +{ + return t * t * (3 - 2 * t); +} + + +inline vaVector3 & vaVector3::operator += (const vaVector3 & v) +{ + x += v.x; + y += v.y; + z += v.z; + return *this; +} + +inline vaVector3 & vaVector3::operator -= (const vaVector3 & v) +{ + x -= v.x; + y -= v.y; + z -= v.z; + return *this; +} + +inline vaVector3 & vaVector3::operator *= (float f) +{ + x *= f; + y *= f; + z *= f; + return *this; +} + +inline vaVector3 & vaVector3::operator /= (float f) +{ + float oneOverF = 1.0f / f; + x *= oneOverF; + y *= oneOverF; + z *= oneOverF; + return *this; +} + +// unary +inline vaVector3 vaVector3::operator + () const +{ + return *this; +} + +inline vaVector3 vaVector3::operator - () const +{ + return vaVector3(-x, -y, -z); +} + +// binary operators +inline vaVector3 vaVector3::operator + (const vaVector3 & v) const +{ + return vaVector3(x + v.x, y + v.y, z + v.z); +} + +inline vaVector3 vaVector3::operator - (const vaVector3 & v) const +{ + return vaVector3(x - v.x, y - v.y, z - v.z); +} + +inline vaVector3 vaVector3::operator * (const vaVector3 & v) const +{ + return vaVector3(x * v.x, y * v.y, z * v.z); +} + +inline vaVector3 vaVector3::operator / (const vaVector3 & v) const +{ + return vaVector3(x / v.x, y / v.y, z / v.z); +} + +inline vaVector3 vaVector3::operator + (float f) const +{ + return vaVector3(x + f, y + f, z + f); +} + +inline vaVector3 vaVector3::operator - (float f) const +{ + return vaVector3(x - f, y - f, z - f); +} + +inline vaVector3 vaVector3::operator * (float f) const +{ + return vaVector3(x * f, y * f, z * f); +} + +inline vaVector3 vaVector3::operator / (float f) const +{ + float oneOverF = 1.0f / f; + return vaVector3(x * oneOverF, y * oneOverF, z * oneOverF); +} + +// friend +inline vaVector3 operator * (float f, const class vaVector3 & v) +{ + return vaVector3(f * v.x, f * v.y, f * v.z); +} + +inline bool vaVector3::operator == (const vaVector3 & v) const +{ + return x == v.x && y == v.y && z == v.z; +} + +inline bool vaVector3::operator != (const vaVector3 & v) const +{ + return x != v.x || y != v.y || z != v.z; +} + +// other +inline float vaVector3::Length() const +{ + return vaMath::Sqrt(x * x + y * y + z * z); +} +inline float vaVector3::LengthSq() const +{ + return x * x + y * y + z * z; +} +inline vaVector3 vaVector3::Normalize() const +{ + vaVector3 ret; + float length = Length(); + + if (length < 1e-6f) + { + ret.x = 0.0f; + ret.y = 0.0f; + ret.z = 0.0f; + } + else + { + ret.x = this->x / length; + ret.y = this->y / length; + ret.z = this->z / length; + } + + return ret; +} + +inline bool vaVector3::IsNormal(float epsilon) +{ + return vaMath::Abs(Length() - 1.0f) <= epsilon; +} + +inline vaVector3 vaVector3::ComponentAbs() const +{ + return vaVector3(vaMath::Abs(x), vaMath::Abs(y), vaMath::Abs(z)); +} + +// static + +inline float vaVector3::Dot(const vaVector3 & a, const vaVector3 & b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z; +} + +inline vaVector3 vaVector3::Cross(const vaVector3 & a, const vaVector3 & b) +{ + vaVector3 ret; + ret.x = a.y * b.z - a.z * b.y; + ret.y = a.z * b.x - a.x * b.z; + ret.z = a.x * b.y - a.y * b.x; + return ret; +} + +inline bool vaVector3::CloseEnough(const vaVector3 & a, const vaVector3 & b, float epsilon) +{ + vaVector3 r = (a - b).ComponentAbs(); + return (r.x < epsilon) && (r.y < epsilon) && (r.z < epsilon); +} + +inline vaVector3 vaVector3::ComponentMul(const vaVector3 & a, const vaVector3 & b) +{ + return vaVector3(a.x * b.x, a.y * b.y, a.z * b.z); +} + +inline vaVector3 vaVector3::ComponentDiv(const vaVector3 & a, const vaVector3 & b) +{ + return vaVector3(a.x / b.x, a.y / b.y, a.z / b.z); +} + +inline vaVector3 vaVector3::ComponentMin(const vaVector3 & a, const vaVector3 & b) +{ + return vaVector3(vaMath::Min(a.x, b.x), vaMath::Min(a.y, b.y), vaMath::Min(a.z, b.z)); +} + +inline vaVector3 vaVector3::ComponentMax(const vaVector3 & a, const vaVector3 & b) +{ + return vaVector3(vaMath::Max(a.x, b.x), vaMath::Max(a.y, b.y), vaMath::Max(a.z, b.z)); +} + +inline vaVector3 vaVector3::BaryCentric(const vaVector3 & v1, const vaVector3 & v2, const vaVector3 & v3, float f, float g) +{ + return v1 + f * (v2 - v1) + g * (v3 - v1); +} + +inline vaVector3 vaVector3::Hermite(const vaVector3 & v1, const vaVector3 & t1, const vaVector3 & v2, const vaVector3 &t2, float s) +{ + float h1, h2, h3, h4; + + h1 = 2.0f * s * s * s - 3.0f * s * s + 1.0f; + h2 = s * s * s - 2.0f * s * s + s; + h3 = -2.0f * s * s * s + 3.0f * s * s; + h4 = s * s * s - s * s; + + vaVector3 ret; + ret.x = h1 * v1.x + h2 * t1.x + h3 * v2.x + h4 * t2.x; + ret.y = h1 * v1.y + h2 * t1.y + h3 * v2.y + h4 * t2.y; + ret.z = h1 * v1.z + h2 * t1.z + h3 * v2.z + h4 * t2.z; + return ret; +} + +inline vaVector3 vaVector3::CatmullRom(const vaVector3 &v0, const vaVector3 &v1, const vaVector3 & v2, const vaVector3 & v3, float s) +{ + vaVector3 ret; + ret.x = 0.5f * (2.0f * v1.x + (v2.x - v0.x) *s + (2.0f * v0.x - 5.0f * v1.x + 4.0f * v2.x - v3.x) * s * s + (v3.x - 3.0f * v2.x + 3.0f * v1.x - v0.x) * s * s * s); + ret.y = 0.5f * (2.0f * v1.y + (v2.y - v0.y) *s + (2.0f * v0.y - 5.0f * v1.y + 4.0f * v2.y - v3.y) * s * s + (v3.y - 3.0f * v2.y + 3.0f * v1.y - v0.y) * s * s * s); + ret.z = 0.5f * (2.0f * v1.z + (v2.z - v0.z) *s + (2.0f * v0.z - 5.0f * v1.z + 4.0f * v2.z - v3.z) * s * s + (v3.z - 3.0f * v2.z + 3.0f * v1.z - v0.z) * s * s * s); + return ret; +} + +inline float vaVector3::AngleBetweenVectors(const vaVector3 & a, const vaVector3 & b) +{ + return vaMath::ACos(vaVector3::Dot(a, b) / (a.Length() * b.Length())); +} + + + +inline vaQuaternion & vaQuaternion::operator += (const vaQuaternion & q) +{ + x += q.x; + y += q.y; + z += q.z; + w += q.w; + return *this; +} + +inline vaQuaternion & vaQuaternion::operator -= (const vaQuaternion& q) +{ + x -= q.x; + y -= q.y; + z -= q.z; + w -= q.w; + return *this; +} + +inline vaQuaternion & vaQuaternion::operator *= (const vaQuaternion& q) +{ + *this = vaQuaternion::Multiply(*this, q); + return *this; +} + +inline vaQuaternion & vaQuaternion::operator *= (float f) +{ + x *= f; + y *= f; + z *= f; + w *= f; + return *this; +} + +inline vaQuaternion & vaQuaternion::operator /= (float f) +{ + float oneOverF = 1.0f / f; + x *= oneOverF; + y *= oneOverF; + z *= oneOverF; + w *= oneOverF; + return *this; +} + +// unary +inline vaQuaternion vaQuaternion::operator + () const +{ + return *this; +} + +inline vaQuaternion vaQuaternion::operator - () const +{ + return vaQuaternion(-x, -y, -z, -w); +} + +// binary +inline vaQuaternion vaQuaternion::operator + (const vaQuaternion & q) const +{ + return vaQuaternion(x + q.x, y + q.y, z + q.z, w + q.w); +} + +inline vaQuaternion vaQuaternion::operator - (const vaQuaternion & q) const +{ + return vaQuaternion(x - q.x, y - q.y, z - q.z, w - q.w); +} + +inline vaQuaternion vaQuaternion::operator * (const vaQuaternion & q) const +{ + return vaQuaternion::Multiply(*this, q); +} + +inline vaQuaternion vaQuaternion::operator * (float f) const +{ + return vaQuaternion(x * f, y * f, z * f, w * f); +} + +inline vaQuaternion vaQuaternion::operator / (float f) const +{ + float oneOverF = 1.0f / f; + return vaQuaternion(x * oneOverF, y * oneOverF, z * oneOverF, w * oneOverF); +} + +inline vaQuaternion operator * (float f, const vaQuaternion & q) +{ + return vaQuaternion(f * q.x, f * q.y, f * q.z, f * q.w); +} + +inline bool vaQuaternion::operator == (const vaQuaternion & q) const +{ + return x == q.x && y == q.y && z == q.z && w == q.w; +} + +inline bool vaQuaternion::operator != (const vaQuaternion & q) const +{ + return x != q.x || y != q.y || z != q.z || w != q.w; +} + +// static +inline vaQuaternion vaQuaternion::Multiply(const vaQuaternion & a, const vaQuaternion & b) +{ + vaQuaternion ret; + ret.x = b.w * a.x + b.x * a.w + b.y * a.z - b.z * a.y; + ret.y = b.w * a.y - b.x * a.z + b.y * a.w + b.z * a.x; + ret.z = b.w * a.z + b.x * a.y - b.y * a.x + b.z * a.w; + ret.w = b.w * a.w - b.x * a.x - b.y * a.y - b.z * a.z; + return ret; +} + +inline vaQuaternion vaQuaternion::Normalize() const +{ + return (*this) / Length(); +} + +inline vaQuaternion vaQuaternion::Inverse() const +{ + vaQuaternion ret; + + float norm = LengthSq(); + + ret.x = -this->x / norm; + ret.y = -this->y / norm; + ret.z = -this->z / norm; + ret.w = this->w / norm; + + return ret; +} + +inline float vaQuaternion::Length() const +{ + return vaMath::Sqrt(x * x + y * y + z * z + w * w); +} + +inline float vaQuaternion::LengthSq() const +{ + return x * x + y * y + z * z + w * w; +} + +inline vaQuaternion vaQuaternion::Conjugate() const +{ + return vaQuaternion(-x, -y, -z, w); +} + +inline void vaQuaternion::ToAxisAngle(vaVector3 & outAxis, float & outAngle) const +{ + outAxis.x = this->x; + outAxis.y = this->y; + outAxis.z = this->z; + outAngle = 2.0f * vaMath::ACos(this->w); +} + +inline vaQuaternion vaQuaternion::Ln() const +{ + vaQuaternion ret; + + float norm, normvec, theta; + + norm = LengthSq(); + + if (norm > 1.0001f) + { + ret.x = this->x; + ret.y = this->y; + ret.z = this->z; + ret.w = 0.0f; + } + else if (norm > 0.99999f) + { + normvec = sqrt(this->x * this->x + this->y * this->y + this->z * this->z); + theta = vaMath::ATan2(normvec, this->w) / normvec; + ret.x = theta * this->x; + ret.y = theta * this->y; + ret.z = theta * this->z; + ret.w = 0.0f; + } + else + { + assert(false); + // FIXME("The quaternion (%f, %f, %f, %f) has a norm <1. This should not happen. Windows returns a result anyway. This case is not implemented yet.\n", pq->x, pq->y, pq->z, pq->w); + } + + return ret; +} + +inline vaQuaternion vaQuaternion::Exp() const +{ + vaQuaternion ret; + float norm; + + norm = vaMath::Sqrt(this->x * this->x + this->y * this->y + this->z * this->z); + if (norm) + { + ret.x = sin(norm) * this->x / norm; + ret.y = sin(norm) * this->y / norm; + ret.z = sin(norm) * this->z / norm; + ret.w = cos(norm); + } + else + { + ret.x = 0.0f; + ret.y = 0.0f; + ret.z = 0.0f; + ret.w = 1.0f; + } + return ret; +} + +inline vaVector3 vaQuaternion::GetAxisX() const +{ + vaVector3 ret; + + ret[0] = 1.0f - 2.0f * (this->y * this->y + this->z * this->z); + ret[1] = 2.0f * (this->x *this->y + this->z * this->w); + ret[2] = 2.0f * (this->x * this->z - this->y * this->w); + + return ret; +} + +inline vaVector3 vaQuaternion::GetAxisY() const +{ + vaVector3 ret; + + ret[0] = 2.0f * (this->x * this->y - this->z * this->w); + ret[1] = 1.0f - 2.0f * (this->x * this->x + this->z * this->z); + ret[2] = 2.0f * (this->y *this->z + this->x *this->w); + + return ret; +} + +inline vaVector3 vaQuaternion::GetAxisZ() const +{ + vaVector3 ret; + + ret[0] = 2.0f * (this->x * this->z + this->y * this->w); + ret[1] = 2.0f * (this->y *this->z - this->x *this->w); + ret[2] = 1.0f - 2.0f * (this->x * this->x + this->y * this->y); + + return ret; +} + +vaQuaternion vaQuaternion::RotationAxis(const vaVector3 & v, float angle) +{ + vaVector3 temp = v.Normalize(); + + vaQuaternion ret; + float hsin = vaMath::Sin(angle / 2.0f); + ret.x = hsin * temp.x; + ret.y = hsin * temp.y; + ret.z = hsin * temp.z; + ret.w = vaMath::Cos(angle / 2.0f); + return ret; +} + +vaQuaternion vaQuaternion::RotationYawPitchRoll(float yaw, float pitch, float roll) +{ + vaQuaternion ret; + ret.x = vaMath::Cos(yaw / 2.0f) * vaMath::Cos(pitch / 2.0f) * vaMath::Sin(roll / 2.0f) - vaMath::Sin(yaw / 2.0f) * vaMath::Sin(pitch / 2.0f) * vaMath::Cos(roll / 2.0f); + ret.y = vaMath::Sin(yaw / 2.0f) * vaMath::Cos(pitch / 2.0f) * vaMath::Sin(roll / 2.0f) + vaMath::Cos(yaw / 2.0f) * vaMath::Sin(pitch / 2.0f) * vaMath::Cos(roll / 2.0f); + ret.z = vaMath::Sin(yaw / 2.0f) * vaMath::Cos(pitch / 2.0f) * vaMath::Cos(roll / 2.0f) - vaMath::Cos(yaw / 2.0f) * vaMath::Sin(pitch / 2.0f) * vaMath::Sin(roll / 2.0f); + ret.w = vaMath::Cos(yaw / 2.0f) * vaMath::Cos(pitch / 2.0f) * vaMath::Cos(roll / 2.0f) + vaMath::Sin(yaw / 2.0f) * vaMath::Sin(pitch / 2.0f) * vaMath::Sin(roll / 2.0f); + return ret; +} + +inline float vaQuaternion::Dot(const vaQuaternion & a, const vaQuaternion & b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; +} + +inline vaQuaternion vaQuaternion::BaryCentric(const vaQuaternion & q1, const vaQuaternion & q2, const vaQuaternion & q3, float f, float g) +{ + vaQuaternion temp1 = vaQuaternion::Slerp(q1, q2, f + g); + vaQuaternion temp2 = vaQuaternion::Slerp(q1, q3, f + g); + return vaQuaternion::Slerp(temp1, temp2, g / (f + g)); +} + +vaQuaternion vaQuaternion::Slerp(const vaQuaternion & q1, const vaQuaternion & q2, float t) +{ + vaQuaternion ret; + + float dot, epsilon, temp, theta, u; + + epsilon = 1.0f; + temp = 1.0f - t; + u = t; + dot = vaQuaternion::Dot(q1, q2); + if (dot < 0.0f) + { + epsilon = -1.0f; + dot = -dot; + } + if (1.0f - dot > 0.001f) + { + theta = acos(dot); + temp = sin(theta * temp) / sin(theta); + u = sin(theta * u) / sin(theta); + } + ret.x = temp * q1.x + epsilon * u * q2.x; + ret.y = temp * q1.y + epsilon * u * q2.y; + ret.z = temp * q1.z + epsilon * u * q2.z; + ret.w = temp * q1.w + epsilon * u * q2.w; + return ret; +} + +vaQuaternion vaQuaternion::Squad(const vaQuaternion & q1, const vaQuaternion & q2, const vaQuaternion & q3, const vaQuaternion & q4, float t) +{ + vaQuaternion temp1 = vaQuaternion::Slerp(q1, q4, t); + vaQuaternion temp2 = vaQuaternion::Slerp(q2, q3, t); + + return vaQuaternion::Slerp(temp1, temp2, 2.0f * t * (1.0f - t)); +} + + +void vaCameraControllerFocusLocationsFlythrough::CameraTick(float deltaTime, Camera *camera, bool hasFocus) +{ + // TODO -- replace camera with cauldron camera + if (m_keys.size() == 0) + return; + + m_currentKeyTimeRemaining -= deltaTime; + + while (m_currentKeyTimeRemaining < 0) + { + m_currentKeyIndex = (m_currentKeyIndex + 1) % m_keys.size(); + m_currentKeyTimeRemaining += m_keys[m_currentKeyIndex].ShowTime; + } + + Keyframe & currentKey = m_keys[m_currentKeyIndex]; + Keyframe & nextKey = m_keys[(m_currentKeyIndex + 1) % m_keys.size()]; + + float lerpK = vaMath::Smoothstep(1.0f - m_currentKeyTimeRemaining / currentKey.ShowTime); + + vaVector3 pos = currentKey.Position * (1.0f - lerpK) + nextKey.Position * lerpK; + m_userParam0 = currentKey.UserParam0 * (1.0f - lerpK) + nextKey.UserParam0 * lerpK; + m_userParam1 = currentKey.UserParam1 * (1.0f - lerpK) + nextKey.UserParam1 * lerpK; + vaQuaternion rot = vaQuaternion::Slerp(currentKey.Orientation, nextKey.Orientation, lerpK); + + if (m_fixedUp) + { + vaVector3 currentUp = rot.GetAxisY(); + + vaVector3 rotAxis = vaVector3::Cross(currentUp, m_fixedUpVec); + float rotAngle = vaVector3::AngleBetweenVectors(currentUp, m_fixedUpVec); + + rot *= vaQuaternion::RotationAxis(rotAxis, rotAngle); + } + + float lf = vaMath::TimeIndependentLerpF(deltaTime, 5.0f / (currentKey.ShowTime + 2.0f)); + + /* + XMVECTOR cameraPosXMVec = camera->GetPosition(); + vaVector3 cameraPos = vaVector3(cameraPosXMVec.m128_f32[0], cameraPosXMVec.m128_f32[1], cameraPosXMVec.m128_f32[2]); + vaQuaternion cameraOrientation = vaQuaternion::RotationYawPitchRoll(camera->GetYaw(), camera->GetPitch(), 0.0f); + pos = vaMath::Lerp(cameraPos, pos, lf); + rot = vaQuaternion::Slerp(cameraOrientation, rot, lf); + */ + + pos *= 5.0f / 7.0f; + vaVector3 lookAtPos = pos + camera->GetDistance() * rot.GetAxisX(); + XMVECTOR cameraEyePos = XMVectorSet(pos.x, pos.z, pos.y, 0.0f); + XMVECTOR cameraLookAtPos = XMVectorSet(lookAtPos.x, lookAtPos.z, lookAtPos.y, 0.0f); + camera->LookAt(cameraEyePos, cameraLookAtPos); +} + +// ======================================================================================= +// end of stuff ripped from intel ASSAO +// ======================================================================================= + +static const FfxCacaoPreset FFX_CACAO_PRESETS[] = { + // Native - High Quality + { + /* useDownsampledSsao */ false, + { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 20.0f, + /* fadeOutTo */ 40.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_HIGHEST, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 2, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 5.0f, + /* bilateralSimilarityDistanceSigma */ 0.01f, + } + }, + // Native - Medium Quality + { + /* useDownsampledSsao */ false, + { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 20.0f, + /* fadeOutTo */ 40.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_MEDIUM, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 2, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 5.0f, + /* bilateralSimilarityDistanceSigma */ 0.01f, + } + }, + // Native - Low Quality + { + /* useDownsampledSsao */ false, + { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 20.0f, + /* fadeOutTo */ 40.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_LOW, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 4, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 5.0f, + /* bilateralSimilarityDistanceSigma */ 0.01f, + } + }, + // Downsampled - High Quality + { + /* useDownsampledSsao */ true, + { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 20.0f, + /* fadeOutTo */ 40.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_HIGHEST, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 2, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 5.0f, + /* bilateralSimilarityDistanceSigma */ 0.01f, + } + }, + // Downsampled - Medium Quality + { + /* useDownsampledSsao */ true, + { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 20.0f, + /* fadeOutTo */ 40.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_MEDIUM, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 3, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 5.0f, + /* bilateralSimilarityDistanceSigma */ 0.2f, + } + }, + // Downsampled - Low Quality + { + /* useDownsampledSsao */ true, + { + /* radius */ 1.2f, + /* shadowMultiplier */ 1.0f, + /* shadowPower */ 1.50f, + /* shadowClamp */ 0.98f, + /* horizonAngleThreshold */ 0.06f, + /* fadeOutFrom */ 20.0f, + /* fadeOutTo */ 40.0f, + /* qualityLevel */ FFX_CACAO_QUALITY_LOWEST, + /* adaptiveQualityLimit */ 0.45f, + /* blurPassCount */ 6, + /* sharpness */ 0.98f, + /* temporalSupersamplingAngleOffset */ 0.0f, + /* temporalSupersamplingRadiusOffset */ 0.0f, + /* detailShadowStrength */ 0.5f, + /* generateNormals */ FFX_CACAO_FALSE, + /* bilateralSigmaSquared */ 8.0f, + /* bilateralSimilarityDistanceSigma */ 0.8f, + } + } +}; + + +static inline void SetWindowClientSize(HWND hWnd, LONG width, LONG height) +{ + RECT rect; + rect.left = 0; + rect.top = 0; + rect.right = width; + rect.bottom = height; + DWORD style = GetWindowLong(hWnd, GWL_STYLE); + AdjustWindowRect(&rect, style, FALSE); + width = rect.right - rect.left; + height = rect.bottom - rect.top; + SetWindowPos(hWnd, NULL, -1, -1, width, height, SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER); +} + + +const bool VALIDATION_ENABLED = false; + +FfxCacaoSample::FfxCacaoSample(LPCSTR name) : FrameworkWindows(name) +{ + m_lastFrameTime = MillisecondsNow(); + m_time = 0; + m_bPlay = true; + + m_pGltfLoader = NULL; +} + +//-------------------------------------------------------------------------------------- +// +// OnCreate +// +//-------------------------------------------------------------------------------------- +void FfxCacaoSample::OnCreate(HWND hWnd) +{ + m_hWnd = hWnd; + m_selectedResolution = 0; + m_filenameBuffer[0] = 0; + GetCurrentDirectory(_countof(m_filenameBuffer), m_filenameBuffer); + strncat(m_filenameBuffer, "\\output", _countof(m_filenameBuffer)); + + m_displayGUI = true; + m_cameraControlSelected = 1; + m_flythroughCameraController.SetFixedUp(true); // so that we can seamlessly switch between flythrough and manual camera + + m_presetIndex = 0; + m_currentSettings = FFX_CACAO_PRESETS[m_presetIndex]; + // Camera fly path taken from Intel ASSAO + const float keyTime = 10.0f; + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(9.142f, -0.315f, 3.539f), vaQuaternion(0.555f, 0.552f, 0.439f, 0.441f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(11.782f, -0.078f, 1.812f), vaQuaternion(0.463f, -0.433f, -0.528f, 0.565f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(5.727f, -1.077f, 2.716f), vaQuaternion(-0.336f, 0.619f, 0.624f, -0.339f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-2.873f, 1.043f, 2.808f), vaQuaternion(0.610f, -0.378f, -0.367f, 0.592f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-7.287f, 1.254f, 2.598f), vaQuaternion(0.757f, 0.004f, 0.003f, 0.654f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-12.750f, 0.051f, 2.281f), vaQuaternion(0.543f, 0.448f, 0.452f, 0.548f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-14.431f, -3.854f, 2.411f), vaQuaternion(0.556f, 0.513f, 0.443f, 0.481f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-14.471f, -6.127f, 1.534f), vaQuaternion(0.422f, 0.520f, 0.577f, 0.467f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-8.438f, -5.876f, 4.094f), vaQuaternion(0.391f, 0.784f, 0.432f, 0.215f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-2.776f, -4.915f, 1.890f), vaQuaternion(0.567f, 0.646f, 0.384f, 0.337f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-1.885f, -4.796f, 2.499f), vaQuaternion(0.465f, 0.536f, 0.532f, 0.462f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(1.569f, -4.599f, 3.303f), vaQuaternion(0.700f, 0.706f, 0.079f, 0.078f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(4.799f, -5.682f, 3.353f), vaQuaternion(0.037f, 0.900f, 0.434f, 0.018f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(7.943f, -5.405f, 3.416f), vaQuaternion(-0.107f, 0.670f, 0.725f, -0.115f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(11.445f, -3.276f, 3.319f), vaQuaternion(-0.455f, 0.589f, 0.529f, -0.409f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(12.942f, 2.277f, 3.367f), vaQuaternion(0.576f, -0.523f, -0.423f, 0.465f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(12.662f, 3.895f, 4.186f), vaQuaternion(0.569f, -0.533f, -0.428f, 0.457f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(8.688f, 4.170f, 4.107f), vaQuaternion(0.635f, -0.367f, -0.340f, 0.588f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(6.975f, 1.525f, 4.299f), vaQuaternion(0.552f, -0.298f, -0.369f, 0.685f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(5.497f, -0.418f, 7.013f), vaQuaternion(0.870f, -0.124f, -0.067f, 0.473f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(9.520f, -2.108f, 6.619f), vaQuaternion(0.342f, 0.599f, 0.629f, 0.359f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(11.174f, 3.226f, 6.969f), vaQuaternion(-0.439f, 0.536f, 0.558f, -0.457f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-2.807f, 5.621f, 7.026f), vaQuaternion(0.694f, 0.013f, 0.014f, 0.720f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-11.914f, 5.271f, 7.026f), vaQuaternion(0.694f, 0.013f, 0.014f, 0.720f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-12.168f, 1.401f, 7.235f), vaQuaternion(0.692f, -0.010f, -0.011f, 0.722f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-6.541f, 0.038f, 7.491f), vaQuaternion(0.250f, -0.287f, -0.697f, 0.608f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-6.741f, 0.257f, 2.224f), vaQuaternion(0.511f, -0.465f, -0.487f, 0.535f), keyTime)); + m_flythroughCameraController.AddKey(vaCameraControllerFocusLocationsFlythrough::Keyframe(vaVector3(-10.913f, -0.020f, 2.766f), vaQuaternion(0.511f, -0.471f, -0.487f, 0.529f), keyTime)); + + + DWORD dwAttrib = GetFileAttributes("..\\media\\"); + if ((dwAttrib == INVALID_FILE_ATTRIBUTES) || ((dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) == 0) + { + MessageBox(NULL, "Media files not found!\n\nPlease check the readme on how to get the media files.", "Cauldron Panic!", MB_ICONERROR); + exit(0); + } + + m_fullscreen = false; + + // Create Device + // + m_device.OnCreate("myapp", "myEngine", VALIDATION_ENABLED, hWnd); + m_device.CreatePipelineCache(); + + //init the shader compiler + CreateShaderCache(); + + // Create Swapchain + // + + // Init FS2 and choose format + fs2Init(m_device.GetAGSContext(), m_device.GetAGSGPUInfo(), hWnd); + + uint32_t dwNumberOfBackBuffers = 2; + m_swapChain.OnCreate(&m_device, dwNumberOfBackBuffers, hWnd); + + // Create a instance of the renderer and initialize it, we need to do that for each GPU + // + m_Node = new SampleRenderer(); + m_Node->OnCreate(&m_device, &m_swapChain); + + // init GUI (non gfx stuff) + // + ImGUI_Init((void *)hWnd); + + // Init Camera, looking at the origin + // + m_roll = 0.0f; + m_pitch = 0.0f; + m_distance = 3.5f; + + // init GUI state + m_state.toneMapper = 0; + m_state.skyDomeType = 0; + m_state.exposure = 1.0f; + m_state.iblFactor = 2.0f; + m_state.emmisiveFactor = 1.0f; + m_state.bDrawLightFrustum = false; + m_state.bDrawBoundingBoxes = false; + m_state.camera.LookAt(m_roll, m_pitch, m_distance, XMVectorSet(0, 0, 0, 0)); + + m_state.spotlightCount = 1; + + m_state.spotlight[0].intensity = 50.0f; + m_state.spotlight[0].color = XMVectorSet(1.0f, 1.0f, 1.0f, 0.0f); + m_state.spotlight[0].light.SetFov(XM_PI / 2.0f, 1024, 1024, 0.1f, 100.0f); + m_state.spotlight[0].light.LookAt(XM_PI / 2.0f, 0.58f, 3.5f, XMVectorSet(0, 0, 0, 0)); + + m_state.bUseCACAO = true; +} + +//-------------------------------------------------------------------------------------- +// +// OnDestroy +// +//-------------------------------------------------------------------------------------- +void FfxCacaoSample::OnDestroy() +{ + ImGUI_Shutdown(); + + m_device.GPUFlush(); + + // Fullscreen state should always be false before exiting the app. + m_swapChain.SetFullScreen(false); + + m_Node->UnloadScene(); + m_Node->OnDestroyWindowSizeDependentResources(); + m_Node->OnDestroy(); + + delete m_Node; + + m_swapChain.OnDestroyWindowSizeDependentResources(); + m_swapChain.OnDestroy(); + + //shut down the shader compiler + DestroyShaderCache(&m_device); + + if (m_pGltfLoader) + { + delete m_pGltfLoader; + m_pGltfLoader = NULL; + } + + m_device.OnDestroy(); +} + +//-------------------------------------------------------------------------------------- +// +// OnEvent +// +//-------------------------------------------------------------------------------------- +bool FfxCacaoSample::OnEvent(MSG msg) +{ + if (ImGUI_WndProcHandler(msg.hwnd, msg.message, msg.wParam, msg.lParam)) + return true; + + if (msg.message == WM_KEYDOWN) + { + switch (msg.wParam) + { + case VK_TAB: + m_displayGUI = !m_displayGUI; + break; + case '1': + m_cacaoOutputDirectly = true; + m_state.bUseCACAO = true; + break; + case '2': + m_cacaoOutputDirectly = false; + m_state.bUseCACAO = true; + break; + case '3': + m_cacaoOutputDirectly = false; + m_state.bUseCACAO = false; + break; + default: + break; + } + } + + return true; +} + +//-------------------------------------------------------------------------------------- +// +// SetFullScreen +// +//-------------------------------------------------------------------------------------- +void FfxCacaoSample::SetFullScreen(bool fullscreen) +{ + m_device.GPUFlush(); + + m_swapChain.SetFullScreen(fullscreen); +} + +//-------------------------------------------------------------------------------------- +// +// OnResize +// +//-------------------------------------------------------------------------------------- +void FfxCacaoSample::OnResize(uint32_t width, uint32_t height, bool force) +{ + if (m_Width != width || m_Height != height || force) + { + // Flush GPU + // + m_device.GPUFlush(); + + // If resizing but no minimizing + // + if (m_Width > 0 && m_Height > 0) + { + if (m_Node!=NULL) + { + m_Node->OnDestroyWindowSizeDependentResources(); + } + m_swapChain.OnDestroyWindowSizeDependentResources(); + } + + m_Width = width; + m_Height = height; + + // if resizing but not minimizing the recreate it with the new size + // + if (m_Width > 0 && m_Height > 0) + { + m_swapChain.OnCreateWindowSizeDependentResources(m_Width, m_Height, m_vsyncEnabled, DISPLAYMODE_SDR); + if (m_Node != NULL) + { + m_Node->OnCreateWindowSizeDependentResources(&m_swapChain, m_Width, m_Height); + } + } + } + m_state.camera.SetFov(XM_PI / 4, m_Width, m_Height, 0.1f, 1000.0f); +} + +//-------------------------------------------------------------------------------------- +// +// OnRender, updates the state from the UI, animates, transforms and renders the scene +// +//-------------------------------------------------------------------------------------- +void FfxCacaoSample::OnRender() +{ + // Build UI and set the scene state. Note that the rendering of the UI happens later. + // + ImGUI_UpdateIO(); + ImGui::NewFrame(); + + bool toggleVsync = false; + + if (m_requiresLoad) + { + m_requiresLoad = false; + m_pGltfLoader = new GLTFCommon(); + bool res = false; + m_state.iblFactor = 0.36f; + m_state.emmisiveFactor = 1.0f; + m_state.spotlight[0].intensity = 10.0f; + m_pitch = 0.182035938f; m_roll = 1.92130506f; m_distance = 4.83333349f; + m_state.camera.LookAt(m_roll, m_pitch, m_distance, XMVectorSet(0.703276634f, 1.02280307f, 0.218072295f, 0)); + res = m_pGltfLoader->Load("..\\media\\sponza\\gltf\\", "sponza.gltf"); + + if (res == false) + { + MessageBox(NULL, "The selected model couldn't be found, please check the documentation", "Cauldron Panic!", MB_ICONERROR); + exit(0); + } + else + { + m_loadingStage = m_Node->LoadScene(m_pGltfLoader, 0); + } + } + + + // Get timings + // + double timeNow = MillisecondsNow(); + m_deltaTime = timeNow - m_lastFrameTime; + m_lastFrameTime = timeNow; + + if (m_loadingStage == 0) + { + ImGuiStyle& style = ImGui::GetStyle(); + style.FrameBorderSize = 1.0f; + + bool opened = true; + if (m_displayGUI) + { + ImGui::Begin("CACAO Sample", &opened); + +#if FFX_CACAO_PROFILE_SAMPLE + if (!m_isCapturing) + { +#endif + if (ImGui::CollapsingHeader("Sample Settings", ImGuiTreeNodeFlags_DefaultOpen)) + { + ImGui::Text("Resolution : %ix%i", m_Width, m_Height); + +#if FFX_CACAO_PROFILE_SAMPLE + if (ImGui::Button("Toggle Fullscreen")) + { + m_fullscreen = !m_fullscreen; + SetFullScreen(m_fullscreen); + } + if (ImGui::Button("Set Resolution 3840x2160")) + { + SetWindowClientSize(m_hWnd, 3840, 2160); + } + if (ImGui::Button("Set Resolution 2560x1440")); + { + SetWindowClientSize(m_hWnd, 2560, 1440); + } + if (ImGui::Button("Set Resolution 1920x1080")) + { + SetWindowClientSize(m_hWnd, 1920, 1080); + } +#endif + + const char *cameraControl[] = { "WASD", "Orbit", "Auto fly" }; + // static int cameraControlSelected = 1; + if (ImGui::Combo("Camera", &m_cameraControlSelected, cameraControl, _countof(cameraControl))) + { + if (m_cameraControlSelected == 2) + { + m_flythroughCameraController.ResetTime(); + } + } + + if (ImGui::Checkbox("VSync", &m_vsyncEnabled)) + { + OnResize(m_Width, m_Height, true); + } + } + + if (ImGui::CollapsingHeader("CACAO Settings", ImGuiTreeNodeFlags_DefaultOpen)) + { + const char *presets[] = { "Native - High Quality", "Native - Medium Quality", "Native - Low Quality", "Downsampled - High Quality", "Downsampled - Medium Quality", "Downsampled - Low Quality", "Custom" }; + if (ImGui::Combo("Preset", &m_presetIndex, presets, _countof(presets)) && m_presetIndex < 6) + { + m_currentSettings = FFX_CACAO_PRESETS[m_presetIndex]; + } + + FfxCacaoSettings *settings = &m_currentSettings.settings; + ImGui::SliderFloat("Radius", &settings->radius, 0.0f, 10.0f); + ImGui::SliderFloat("Shadow Multiplier", &settings->shadowMultiplier, 0.0f, 5.0f); + ImGui::SliderFloat("Shadow Power", &settings->shadowPower, 0.5f, 5.0f); + ImGui::SliderFloat("Shadow Clamp", &settings->shadowClamp, 0.0f, 1.0f); + ImGui::SliderFloat("Horizon Angle Threshold", &settings->horizonAngleThreshold, 0.0f, 0.2f); + ImGui::SliderFloat("Fade Out From", &settings->fadeOutFrom, 1.0f, 20.0f); + ImGui::SliderFloat("Fade Out To", &settings->fadeOutTo, 1.0f, 40.0f); + ImGui::SliderFloat("Adaptive Quality Limit", &settings->adaptiveQualityLimit, 0.0f, 1.0f); + const char *qualityLevels[] = { "Lowest", "Low", "Medium", "High", "Highest" }; + int idx = (int)settings->qualityLevel; + ImGui::Combo("Quality Level", &idx, qualityLevels, _countof(qualityLevels)); + settings->qualityLevel = (FfxCacaoQuality)idx; + ImGui::SliderInt("Blur Pass Count", (int*)&settings->blurPassCount, 0, 8); + ImGui::SliderFloat("Sharpness", &settings->sharpness, 0.0f, 1.0f); + ImGui::SliderFloat("Detail Shadow Strength", &settings->detailShadowStrength, 0.0f, 5.0f); + if (m_currentSettings.useDownsampledSsao) + { + ImGui::SliderFloat("Bilateral Sigma Squared", &settings->bilateralSigmaSquared, 0.0f, 10.0f); + ImGui::SliderFloat("Bilateral Similarity Distance Sigma", &settings->bilateralSimilarityDistanceSigma, 0.0f, 1.0f); + } + + bool generateNormals = settings->generateNormals ? true : false; + ImGui::Checkbox("Generate Normal Buffer From Depth Buffer", &generateNormals); + settings->generateNormals = generateNormals ? FFX_CACAO_TRUE : FFX_CACAO_FALSE; + ImGui::Checkbox("Display CACAO Output Directly", &m_cacaoOutputDirectly); + ImGui::Checkbox("Generate SSAO downsampled", &m_currentSettings.useDownsampledSsao); + + + if (!m_cacaoOutputDirectly) + { + ImGui::Checkbox("Use CACAO", &m_state.bUseCACAO); + } + m_state.bUseCACAO |= m_cacaoOutputDirectly; + + if (m_presetIndex < 6 && memcmp(&m_currentSettings, &FFX_CACAO_PRESETS[m_presetIndex], sizeof(m_currentSettings))) + { + m_presetIndex = 6; + } + } +#if FFX_CACAO_PROFILE_SAMPLE + } +#endif + +#if FFX_CACAO_ENABLE_PROFILING + if (m_vsyncEnabled || !m_state.bUseCACAO) + { + // ImGui::Text("Profiling Disabled (turn off vsync)"); + ImGui::CollapsingHeader("Profiler Disabled (enable CACAO and turn off vsync)"); + } + else + { + bool displayProfiling = ImGui::CollapsingHeader("Profiler", ImGuiTreeNodeFlags_DefaultOpen); + + FfxCacaoDetailedTiming timings; + uint64_t gpuTicksPerMicrosecond; + m_Node->GetCacaoTimings(&timings, &gpuTicksPerMicrosecond); + gpuTicksPerMicrosecond /= 1000000; + + for (uint32_t i = 0; i < timings.numTimestamps; ++i) + { + FfxCacaoTimestamp *t = &timings.timestamps[i]; + if (displayProfiling) + { + ImGui::Text("%-50s: %7.1f us", t->label, ((double)t->ticks) / ((double)gpuTicksPerMicrosecond)); + } + } + +#if FFX_CACAO_PROFILE_SAMPLE + if (m_isCapturing) + { + m_captureTimings[m_curTiming++] = timings; + if (m_curTiming == NUM_CAPTURE_SAMPLES) + { + WriteCaptureFile(gpuTicksPerMicrosecond); + m_isCapturing = false; + } + } + + if (displayProfiling) + { + + if (!m_isCapturing) + { + ImGui::InputText("Output Filename", m_filenameBuffer, _countof(m_filenameBuffer)); + + if (ImGui::Button("Make Capture")) + { + m_isCapturing = true; + m_cameraControlSelected = 2; + m_curTiming = 0; + m_flythroughCameraController.ResetTime(); + snprintf(m_captureFilename, _countof(m_captureFilename), "%s_Q%d_%dx%d.txt", m_filenameBuffer, (int)m_cacaoSettings.qualityLevel, m_Width, m_Height); + } + } + else + { + ImGui::Text("Capturing..."); + ImGui::Text("Filename: \"%s\"", m_captureFilename); + + if (ImGui::Button("Cancel Capture")) + { + m_isCapturing = false; + } + } + } +#endif + } +#endif + ImGui::End(); + } + + + + // If the mouse was not used by the GUI then it's for the camera + // + ImGuiIO& io = ImGui::GetIO(); + + if (m_cameraControlSelected == 2) + { + m_flythroughCameraController.CameraTick(io.DeltaTime, &m_state.camera, true); + m_roll = m_state.camera.GetYaw(); + m_pitch = m_state.camera.GetPitch(); + } + + if (io.WantCaptureMouse == false) + { + if ((io.KeyCtrl == false) && (io.MouseDown[0] == true)) + { + m_roll -= io.MouseDelta.x / 100.f; + m_pitch += io.MouseDelta.y / 100.f; + } + + // Choose camera movement depending on setting + // + + if (m_cameraControlSelected == 0) + { + // WASD + // + m_state.camera.UpdateCameraWASD(m_roll, m_pitch, io.KeysDown, io.DeltaTime); + } + else if (m_cameraControlSelected == 1) + { + // Orbiting + // + m_distance -= (float)io.MouseWheel / 3.0f; + m_distance = std::max(m_distance, 0.1f); + + bool panning = (io.KeyCtrl == true) && (io.MouseDown[0] == true); + + m_state.camera.UpdateCameraPolar(m_roll, m_pitch, panning ? -io.MouseDelta.x / 100.0f : 0.0f, panning ? io.MouseDelta.y / 100.0f : 0.0f, m_distance); + } + } + } + else + { + // LoadScene needs to be called a number of times, the scene is not fully loaded until it returns 0 + // This is done so we can display a progress bar when the scene is loading + m_loadingStage = m_Node->LoadScene(m_pGltfLoader, m_loadingStage); + } + + // Set animation time + // + if (m_bPlay) + { + m_time += (float)m_deltaTime / 1000.0f; + } + + // Animate and transform the scene + // + if (m_pGltfLoader) + { + m_pGltfLoader->SetAnimationTime(0, m_time); + m_pGltfLoader->TransformScene(0, XMMatrixIdentity()); + } + + m_state.time = m_time; + + // Do Render frame using AFR + // + m_Node->OnRender(&m_state, &m_currentSettings.settings, &m_swapChain, m_cacaoOutputDirectly, m_currentSettings.useDownsampledSsao); + + m_swapChain.Present(); +} + +#if FFX_CACAO_PROFILE_SAMPLE +void FfxCacaoSample::WriteCaptureFile(uint64_t gpuTicksPerMicrosecond) +{ + FILE *fp = fopen(m_captureFilename, "w"); + + fprintf(fp, "{\n"); + fprintf(fp, "\t\"settings\" : {\n"); + fprintf(fp, "\t\t\"width\" : %d,\n", m_Width); + fprintf(fp, "\t\t\"height\" : %d,\n", m_Height); + fprintf(fp, "\t\t\"quality\" : %d\n", (int)m_cacaoSettings.qualityLevel); + fprintf(fp, "\t},\n"); + fprintf(fp, "\t\"timings\" : {\n"); + + const uint32_t numTimingTypes = m_captureTimings[0].numTimestamps; + for (uint32_t i = 0; i < numTimingTypes; ++i) + { + float average = (double)m_captureTimings[0].timestamps[i].ticks / (double)gpuTicksPerMicrosecond; + + fprintf(fp, "\t\t\"%s\" : {\n\t\t\t\"samples\" : [%.2f", m_captureTimings[0].timestamps[i].label, average); + + for (int j = 1; j < NUM_CAPTURE_SAMPLES; ++j) + { + float sample = (double)m_captureTimings[j].timestamps[i].ticks / (double)gpuTicksPerMicrosecond; + fprintf(fp, ", %.2f", sample); + average += sample; + } + average /= (float)NUM_CAPTURE_SAMPLES; + fprintf(fp, "],\n\t\t\t\"average\" : %.2f\n\t\t}", average); + + if (i != numTimingTypes - 1) + { + fprintf(fp, ","); + } + + fprintf(fp, "\n"); + } + fprintf(fp, "\t}\n"); + fprintf(fp, "}\n"); + + fclose(fp); +} +#endif + + +//-------------------------------------------------------------------------------------- +// +// WinMain +// +//-------------------------------------------------------------------------------------- +int WINAPI WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + LPCSTR Name = "FFX CACAO Sample v1.0"; + uint32_t Width = 1280; + uint32_t Height = 720; + + // create new DX sample + return RunFramework(hInstance, lpCmdLine, nCmdShow, Width, Height, new FfxCacaoSample(Name)); +} diff --git a/sample/src/DX12/FFX_CACAO_Sample.h b/sample/src/DX12/FFX_CACAO_Sample.h new file mode 100644 index 0000000..c88d544 --- /dev/null +++ b/sample/src/DX12/FFX_CACAO_Sample.h @@ -0,0 +1,301 @@ +// AMD SampleDX12 sample code +// +// Copyright(c) 2017 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +#pragma once + +#include "SampleRenderer.h" + +#include "ffx_cacao.h" + +#define FFX_CACAO_PROFILE_SAMPLE (0 && FFX_CACAO_ENABLE_PROFILING) + +// ======================================================================================= +// stuff ripped from intel ASSAO +// ======================================================================================= + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// File changes (yyyy-mm-dd) +// 2016-09-07: filip.strugar@intel.com: first commit +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class vaVector3 +{ +public: + float x, y, z; + +public: + vaVector3() { }; + vaVector3(const float * p) { assert(p != NULL); x = p[0]; y = p[1]; z = p[2]; } + vaVector3(float x, float y, float z) : x(x), y(y), z(z) { } + + const float & operator [] (int i) const { assert(i >= 0 && i < 3); return (&x)[i]; } + float & operator [] (int i) { assert(i >= 0 && i < 3); return (&x)[i]; } + + // assignment operators + vaVector3& operator += (const vaVector3 &); + vaVector3& operator -= (const vaVector3 &); + vaVector3& operator *= (float); + vaVector3& operator /= (float); + + // unary operators + vaVector3 operator + () const; + vaVector3 operator - () const; + + // binary operators + vaVector3 operator + (const vaVector3 &) const; + vaVector3 operator - (const vaVector3 &) const; + vaVector3 operator * (const vaVector3 &) const; + vaVector3 operator / (const vaVector3 &) const; + + vaVector3 operator * (float) const; + vaVector3 operator / (float) const; + vaVector3 operator + (float) const; + vaVector3 operator - (float) const; + + friend vaVector3 operator * (float, const class vaVector3 &); + + bool operator == (const vaVector3 &) const; + bool operator != (const vaVector3 &) const; + + float Length() const; + float LengthSq() const; + vaVector3 Normalize() const; // this should be called NormalizeD or something similar to indicate it returning value + vaVector3 ComponentAbs() const; + bool IsNormal(float epsilon = 1e-6f); + +public: + static float Dot(const vaVector3 & a, const vaVector3 & b); + static vaVector3 Cross(const vaVector3 & a, const vaVector3 & b); + static bool CloseEnough(const vaVector3 & a, const vaVector3 & b, float epsilon = 1e-6f); + + static vaVector3 ComponentMul(const vaVector3 & a, const vaVector3 & b); + static vaVector3 ComponentDiv(const vaVector3 & a, const vaVector3 & b); + static vaVector3 ComponentMin(const vaVector3 & a, const vaVector3 & b); + static vaVector3 ComponentMax(const vaVector3 & a, const vaVector3 & b); + + static vaVector3 BaryCentric(const vaVector3 & v1, const vaVector3 & v2, const vaVector3 & v3, float f, float g); + + // Hermite interpolation between position v1, tangent t1 (when s == 0) and position v2, tangent t2 (when s == 1). + static vaVector3 Hermite(const vaVector3 & v1, const vaVector3 & t1, const vaVector3 & v2, const vaVector3 &t2, float s); + + // CatmullRom interpolation between v1 (when s == 0) and v2 (when s == 1) + static vaVector3 CatmullRom(const vaVector3 &v0, const vaVector3 &v1, const vaVector3 & v2, const vaVector3 & v3, float s); + + static float AngleBetweenVectors(const vaVector3 & a, const vaVector3 & b); +}; + +class vaQuaternion +{ +public: + float x, y, z, w; + +public: + static vaQuaternion Identity; + +public: + vaQuaternion() { } + explicit vaQuaternion(const float * p) { assert(p != NULL); x = p[0]; y = p[1]; z = p[2]; w = p[3]; } + vaQuaternion(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) { } + + // assignment + vaQuaternion & operator += (const vaQuaternion &); + vaQuaternion & operator -= (const vaQuaternion &); + vaQuaternion & operator *= (const vaQuaternion &); + vaQuaternion & operator *= (float); + vaQuaternion & operator /= (float); + + // unary + vaQuaternion operator + () const; + vaQuaternion operator - () const; + + // binary + vaQuaternion operator + (const vaQuaternion &) const; + vaQuaternion operator - (const vaQuaternion &) const; + vaQuaternion operator * (const vaQuaternion &) const; + vaQuaternion operator * (float) const; + vaQuaternion operator / (float) const; + + friend vaQuaternion operator * (float, const vaQuaternion &); + + bool operator == (const vaQuaternion &) const; + bool operator != (const vaQuaternion &) const; + + + float Length() const; + float LengthSq() const; + vaQuaternion Conjugate() const; + void ToAxisAngle(vaVector3 & outAxis, float & outAngle) const; + vaQuaternion Normalize() const; // this should be called NormalizeD or something similar to indicate it returning value + vaQuaternion Inverse() const; + + // Expects unit quaternions. + vaQuaternion Ln() const; + + // Expects pure quaternions. (w == 0) w is ignored in calculation. + vaQuaternion Exp() const; + + // VA convention: X is forward + vaVector3 GetAxisX() const; + + // VA convention: Y is right + vaVector3 GetAxisY() const; + + // VA convention: Z is up + vaVector3 GetAxisZ() const; + +public: + static float Dot(const vaQuaternion & a, const vaQuaternion & b); + + // Quaternion multiplication. The result represents the rotation b followed by the rotation a. + static vaQuaternion Multiply(const vaQuaternion & a, const vaQuaternion & b); + + // Build quaternion from axis and angle. + static vaQuaternion RotationAxis(const vaVector3 & v, float angle); + + // Yaw around the +Z (up) axis, a pitch around the +Y (right) axis, and a roll around the +X (forward) axis. + static vaQuaternion RotationYawPitchRoll(float yaw, float pitch, float roll); + + // Spherical linear interpolation between Q1 (t == 0) and Q2 (t == 1). + // Expects unit quaternions. + static vaQuaternion Slerp(const vaQuaternion & q1, const vaQuaternion & q2, float t); + + // Spherical quadrangle interpolation. + static vaQuaternion Squad(const vaQuaternion & q1, const vaQuaternion & q2, const vaQuaternion & q3, const vaQuaternion & q4, float t); + + // Barycentric interpolation. + // Slerp(Slerp(Q1, Q2, f+g), Slerp(Q1, Q3, f+g), g/(f+g)) + static vaQuaternion BaryCentric(const vaQuaternion & q1, const vaQuaternion & q2, const vaQuaternion & q3, float f, float g); +}; + +class vaCameraControllerFocusLocationsFlythrough +{ + +public: + struct Keyframe + { + vaVector3 Position; + vaQuaternion Orientation; + float ShowTime; + float UserParam0; + float UserParam1; + + Keyframe(const vaVector3 & position, const vaQuaternion & orientation, float showTime, float userParam0 = 0.0f, float userParam1 = 0.0f) : Position(position), Orientation(orientation), ShowTime(showTime), UserParam0(userParam0), UserParam1(userParam1) { } + }; + +private: + std::vector m_keys; + int m_currentKeyIndex; + float m_currentKeyTimeRemaining; + + float m_userParam0; + float m_userParam1; + + bool m_fixedUp; + vaVector3 m_fixedUpVec; + +public: + void AddKey(const Keyframe & key) { m_keys.push_back(key); } + void ResetTime() { m_currentKeyIndex = -1; m_currentKeyTimeRemaining = 0.0f; } + + void SetFixedUp(bool enabled, vaVector3 & upVec = vaVector3(0.0f, 0.0f, 1.0f)) { m_fixedUp = enabled; m_fixedUpVec = upVec; } + + void CameraTick(float deltaTime, Camera *camera, bool hasFocus); +}; + +// ======================================================================================= +// end of stuff ripped from intel ASSAO +// ======================================================================================= + +struct FfxCacaoPreset +{ + bool useDownsampledSsao; + FfxCacaoSettings settings; +}; + +class FfxCacaoSample : public FrameworkWindows +{ +public: + FfxCacaoSample(LPCSTR name); + void OnCreate(HWND hWnd); + void OnDestroy(); + void OnRender(); + bool OnEvent(MSG msg); + void OnResize(uint32_t width, uint32_t height) { OnResize(width, height, false); } + void OnResize(uint32_t Width, uint32_t Height, bool force); + void SetFullScreen(bool fullscreen); + +private: +#if FFX_CACAO_PROFILE_SAMPLE + void WriteCaptureFile(uint64_t gpuTicksPerMicrosecond); + + static const uint32_t NUM_CAPTURE_SAMPLES = 5000; + FfxCacaoDetailedTiming m_captureTimings[NUM_CAPTURE_SAMPLES]; + uint32_t m_curTiming; + char m_captureFilename[1024]; +#endif + + HWND m_hWnd; + + Device m_device; + SwapChain m_swapChain; + + GLTFCommon *m_pGltfLoader = NULL; + + SampleRenderer *m_Node = NULL; + SampleRenderer::State m_state; + + int m_loadingStage; + bool m_requiresLoad = true; + int m_preset; + + bool m_cacaoOutputDirectly = true; + + int m_presetIndex = 0; + FfxCacaoPreset m_currentSettings; + + float m_distance; + float m_roll; + float m_pitch; + + float m_time; // WallClock in seconds. + double m_deltaTime; // The elapsed time in milliseconds since the previous frame. + double m_lastFrameTime; + + bool m_isCapturing = false; + bool m_vsyncEnabled = true; + int m_cameraControlSelected = 0; + bool m_bPlay; + bool m_displayGUI; + bool m_fullscreen; + int m_selectedResolution; + char m_filenameBuffer[1024]; + vaCameraControllerFocusLocationsFlythrough m_flythroughCameraController; +}; diff --git a/sample/src/DX12/SampleRenderer.cpp b/sample/src/DX12/SampleRenderer.cpp new file mode 100644 index 0000000..432a016 --- /dev/null +++ b/sample/src/DX12/SampleRenderer.cpp @@ -0,0 +1,1229 @@ +// AMD SampleDX12 sample code +// +// Copyright(c) 2018 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include "stdafx.h" + +#include "SampleRenderer.h" + +#define USE_SHADOWMASK false + +//-------------------------------------------------------------------------------------- +// +// OnCreate +// +//-------------------------------------------------------------------------------------- +void SampleRenderer::OnCreate(Device* pDevice, SwapChain *pSwapChain) +{ + m_pDevice = pDevice; + + // Initialize helpers + + // Create all the heaps for the resources views + const uint32_t cbvDescriptorCount = 3000; + const uint32_t srvDescriptorCount = 3000; + const uint32_t uavDescriptorCount = 100; + const uint32_t dsvDescriptorCount = 100; + const uint32_t rtvDescriptorCount = 1000; + const uint32_t samplerDescriptorCount = 50; + m_resourceViewHeaps.OnCreate(pDevice, cbvDescriptorCount, srvDescriptorCount, uavDescriptorCount, dsvDescriptorCount, rtvDescriptorCount, samplerDescriptorCount); + + // Create a commandlist ring for the Direct queue + // We are queuing (backBufferCount + 0.5) frames, so we need to triple buffer the command lists + uint32_t commandListsPerBackBuffer = 8; + m_CommandListRing.OnCreate(pDevice, backBufferCount + 1, commandListsPerBackBuffer, pDevice->GetGraphicsQueue()->GetDesc()); + + // Create a 'dynamic' constant buffer + const uint32_t constantBuffersMemSize = 20 * 1024 * 1024; + m_ConstantBufferRing.OnCreate(pDevice, backBufferCount, constantBuffersMemSize, &m_resourceViewHeaps); + + // Create a 'static' pool for vertices, indices and constant buffers + const uint32_t staticGeometryMemSize = 128 * 1024 * 1024; + m_VidMemBufferPool.OnCreate(pDevice, staticGeometryMemSize, USE_VID_MEM, "StaticGeom"); + + // initialize the GPU time stamps module + m_GPUTimer.OnCreate(pDevice, backBufferCount); + + // Quick helper to upload resources, it has it's own commandList and uses suballocation. + // for 4K textures we'll need 100Megs + const uint32_t uploadHeapMemSize = 1000 * 1024 * 1024; + m_UploadHeap.OnCreate(pDevice, uploadHeapMemSize); // initialize an upload heap (uses suballocation for faster results) + + // Create the depth buffer views + m_resourceViewHeaps.AllocDSVDescriptor(1, &m_depthBufferDSV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_depthBufferSRV); + +#if USE_SHADOWMASK + m_shadowResolve.OnCreate(m_pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing); + + // Create the shadow mask descriptors + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_ShadowMaskUAV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_ShadowMaskSRV); +#endif + + // Create a Shadowmap atlas to hold 4 cascades/spotlights + // m_ShadowMap.InitDepthStencil(pDevice, "m_pShadowMap", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_D32_FLOAT, 2 * 1024, 2 * 1024, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_ShadowMap.InitDepthStencil(pDevice, "m_pShadowMap", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, 2 * 1024, 2 * 1024, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_resourceViewHeaps.AllocDSVDescriptor(1, &m_ShadowMapDSV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_ShadowMapSRV); + m_ShadowMap.CreateDSV(0, &m_ShadowMapDSV); + m_ShadowMap.CreateSRV(0, &m_ShadowMapSRV); + + m_skyDome.OnCreate(pDevice, &m_UploadHeap, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool, "..\\media\\envmaps\\papermill\\diffuse.dds", "..\\media\\envmaps\\papermill\\specular.dds", DXGI_FORMAT_R16G16B16A16_FLOAT, 4); + m_skyDomeProc.OnCreate(pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool, DXGI_FORMAT_R16G16B16A16_FLOAT, 4); + m_wireframe.OnCreate(pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool, DXGI_FORMAT_R16G16B16A16_FLOAT, 4); + m_wireframeBox.OnCreate(pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool); + m_downSample.OnCreate(pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool, DXGI_FORMAT_R16G16B16A16_FLOAT); + m_bloom.OnCreate(pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool, DXGI_FORMAT_R16G16B16A16_FLOAT); + // m_sharpen.OnCreate(pDevice, &m_resourceViewHeaps, &m_VidMemBufferPool, DXGI_FORMAT_R16G16B16A16_FLOAT); + // m_taa.OnCreate(pDevice, &m_resourceViewHeaps); + m_motionBlur.OnCreate(pDevice, &m_resourceViewHeaps, "motionBlur.hlsl", "main", 1, 2, 8, 8, 1); + +#if USE_CACAO +#define APPLY_CACAO_WIDTH 8 +#define APPLY_CACAO_HEIGHT 8 + size_t cacaoSize = ffxCacaoD3D12GetContextSize(); + FfxCacaoStatus status; + +#if USE_EXPANDED_DEPTH_BUFFER + m_pCacaoContextNativeExpanded = (FfxCacaoD3D12Context*)malloc(cacaoSize); + status = ffxCacaoD3D12InitContext(m_pCacaoContextNativeExpanded, pDevice->GetDevice()); + assert(status == FFX_CACAO_STATUS_OK); + + m_pCacaoContextDownsampledExpanded = (FfxCacaoD3D12Context*)malloc(cacaoSize); + status = ffxCacaoD3D12InitContext(m_pCacaoContextDownsampledExpanded, pDevice->GetDevice()); + assert(status == FFX_CACAO_STATUS_OK); +#endif + + m_pCacaoContextNativeNonExpanded = (FfxCacaoD3D12Context*)malloc(cacaoSize); + status = ffxCacaoD3D12InitContext(m_pCacaoContextNativeNonExpanded, pDevice->GetDevice()); + assert(status == FFX_CACAO_STATUS_OK); + + m_pCacaoContextDownsampledNonExpanded = (FfxCacaoD3D12Context*)malloc(cacaoSize); + status = ffxCacaoD3D12InitContext(m_pCacaoContextDownsampledNonExpanded, pDevice->GetDevice()); + assert(status == FFX_CACAO_STATUS_OK); + + m_applyCACAO.OnCreate(pDevice, &m_resourceViewHeaps, "Apply_CACAO.hlsl", "CSApplyCACAO", 1, 1, APPLY_CACAO_WIDTH, APPLY_CACAO_HEIGHT, 1); + + D3D12_STATIC_SAMPLER_DESC SamplerDesc = {}; + SamplerDesc.Filter = D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT; + SamplerDesc.AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + SamplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS; + SamplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK; + SamplerDesc.MinLOD = 0.0f; + SamplerDesc.MaxLOD = D3D12_FLOAT32_MAX; + SamplerDesc.MipLODBias = 0; + SamplerDesc.MaxAnisotropy = 1; + SamplerDesc.ShaderRegister = 0; + SamplerDesc.RegisterSpace = 0; + SamplerDesc.ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL; + + + m_applyDirect.OnCreate(pDevice, "Apply_CACAO.hlsl", &m_resourceViewHeaps, &m_VidMemBufferPool, 1, 1, &SamplerDesc, pSwapChain->GetFormat()); // DXGI_FORMAT_R16G16B16A16_FLOAT); +#endif + + // Create tonemapping pass + m_toneMapping.OnCreate(pDevice, &m_resourceViewHeaps, &m_ConstantBufferRing, &m_VidMemBufferPool, pSwapChain->GetFormat()); + + // Initialize UI rendering resources + m_ImGUI.OnCreate(pDevice, &m_UploadHeap, &m_resourceViewHeaps, &m_ConstantBufferRing, pSwapChain->GetFormat()); + + m_resourceViewHeaps.AllocRTVDescriptor(1, &m_HDRRTV); + m_resourceViewHeaps.AllocRTVDescriptor(1, &m_HDRRTVMSAA); + + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_HDRSRV); + + // motion vectors views + m_resourceViewHeaps.AllocDSVDescriptor(1, &m_MotionVectorsDepthMapDSV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_MotionVectorsDepthMapSRV); + + m_resourceViewHeaps.AllocRTVDescriptor(1, &m_MotionVectorsRTV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_MotionVectorsSRV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(2, &m_MotionVectorsInputsSRV); + m_resourceViewHeaps.AllocRTVDescriptor(1, &m_NormalBufferRTV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_NormalBufferSRV); + + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_MotionBlurOutputSRV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_MotionBlurOutputUAV); + + // TAA views + /* m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_TAABufferSRV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_TAABufferUAV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(4, &m_TAAInputsSRV); + + m_resourceViewHeaps.AllocRTVDescriptor(1, &m_HistoryBufferRTV); */ + m_resourceViewHeaps.AllocDSVDescriptor(1, &m_MotionVectorsDepthMapDSV); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_MotionVectorsDepthMapSRV); + +#if USE_CACAO + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_applyCACAOInputs); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_applyCACAOOutputs); + m_resourceViewHeaps.AllocCBV_SRV_UAVDescriptor(1, &m_applyDirectInput); + + m_resourceViewHeaps.AllocDSVDescriptor(1, &m_cacaoDepthBufferDSV); +#if USE_EXPANDED_DEPTH_BUFFER + m_resourceViewHeaps.AllocDSVDescriptor(1, &m_expandedDepthBufferDSV); +#endif +#endif + + // Make sure upload heap has finished uploading before continuing +#if (USE_VID_MEM==true) + m_VidMemBufferPool.UploadData(m_UploadHeap.GetCommandList()); + m_UploadHeap.FlushAndFinish(); +#endif +} + +//-------------------------------------------------------------------------------------- +// +// OnDestroy +// +//-------------------------------------------------------------------------------------- +void SampleRenderer::OnDestroy() +{ + m_ImGUI.OnDestroy(); + m_toneMapping.OnDestroy(); + m_taa.OnDestroy(); + m_motionBlur.OnDestroy(); + m_sharpen.OnDestroy(); + m_bloom.OnDestroy(); + +#if USE_CACAO +#if USE_EXPANDED_DEPTH_BUFFER + ffxCacaoD3D12DestroyContext(m_pCacaoContextNativeExpanded); + free(m_pCacaoContextNativeExpanded); + ffxCacaoD3D12DestroyContext(m_pCacaoContextDownsampledExpanded); + free(m_pCacaoContextDownsampledExpanded); +#endif + + ffxCacaoD3D12DestroyContext(m_pCacaoContextNativeNonExpanded); + free(m_pCacaoContextNativeNonExpanded); + ffxCacaoD3D12DestroyContext(m_pCacaoContextDownsampledNonExpanded); + free(m_pCacaoContextDownsampledNonExpanded); + m_applyCACAO.OnDestroy(); + m_applyDirect.OnDestroy(); +#endif + m_downSample.OnDestroy(); + m_wireframeBox.OnDestroy(); + m_wireframe.OnDestroy(); + m_skyDomeProc.OnDestroy(); + m_skyDome.OnDestroy(); + m_ShadowMap.OnDestroy(); +#if USE_SHADOWMASK + m_shadowResolve.OnDestroy(); +#endif + + m_UploadHeap.OnDestroy(); + m_GPUTimer.OnDestroy(); + m_VidMemBufferPool.OnDestroy(); + m_ConstantBufferRing.OnDestroy(); + m_CommandListRing.OnDestroy(); + m_resourceViewHeaps.OnDestroy(); +} + +//-------------------------------------------------------------------------------------- +// +// OnCreateWindowSizeDependentResources +// +//-------------------------------------------------------------------------------------- +void SampleRenderer::OnCreateWindowSizeDependentResources(SwapChain *pSwapChain, uint32_t Width, uint32_t Height) +{ + m_Width = Width; + m_Height = Height; + + // Set the viewport + // + m_viewPort = { 0.0f, 0.0f, static_cast(Width), static_cast(Height), 0.0f, 1.0f }; + + // Create scissor rectangle + // + m_RectScissor = { 0, 0, (LONG)Width, (LONG)Height }; + + // Create depth buffer + // + // m_depthBuffer.InitDepthStencil(m_pDevice, "depthbuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_D32_FLOAT, Width, Height, 1, 1, 4, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_depthBuffer.InitDepthStencil(m_pDevice, "depthbuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, Width, Height, 1, 1, 4, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_depthBuffer.CreateDSV(0, &m_depthBufferDSV); + m_depthBuffer.CreateSRV(0, &m_depthBufferSRV); + +#if USE_SHADOWMASK + // Create shadow mask + // + m_ShadowMask.Init(m_pDevice, "shadowbuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R8G8B8A8_UNORM, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, NULL); + m_ShadowMask.CreateUAV(0, &m_ShadowMaskUAV); + m_ShadowMask.CreateSRV(0, &m_ShadowMaskSRV); +#endif + + // Create Texture + RTV with x4 MSAA + // + CD3DX12_RESOURCE_DESC RDescMSAA = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R16G16B16A16_FLOAT, Width, Height, 1, 1, 4, 0, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET); + m_HDRMSAA.InitRenderTarget(m_pDevice, "HDRMSAA", &RDescMSAA, D3D12_RESOURCE_STATE_RENDER_TARGET); + m_HDRMSAA.CreateRTV(0, &m_HDRRTVMSAA); + + // Create Texture + RTV, to hold the resolved scene + // + CD3DX12_RESOURCE_DESC RDesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R16G16B16A16_FLOAT, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS); + m_HDR.InitRenderTarget(m_pDevice, "HDR", &RDesc, D3D12_RESOURCE_STATE_RENDER_TARGET); + m_HDR.CreateSRV(0, &m_HDRSRV); + m_HDR.CreateRTV(0, &m_HDRRTV); + + + // TAA output + // + /* CD3DX12_RESOURCE_DESC TAADesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R16G16B16A16_FLOAT, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS); + m_TAABuffer.Init(m_pDevice, "m_TAABuffer", &TAADesc, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, NULL); + m_TAABuffer.CreateSRV(0, &m_TAABufferSRV); + m_TAABuffer.CreateUAV(0, &m_TAABufferUAV); + + CD3DX12_RESOURCE_DESC HistoryDesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R16G16B16A16_FLOAT, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET); + m_HistoryBuffer.InitRenderTarget(m_pDevice, "m_HistoryBuffer", &HistoryDesc, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); + m_HistoryBuffer.CreateRTV(0, &m_HistoryBufferRTV); + + m_HDR.CreateSRV(0, &m_TAAInputsSRV); + m_MotionVectorsDepthMap.CreateSRV(1, &m_TAAInputsSRV); + m_HistoryBuffer.CreateSRV(2, &m_TAAInputsSRV); + m_MotionVectors.CreateSRV(3, &m_TAAInputsSRV); */ + + // depth and normal + // m_depthBuffer.CreateSRV(0, &m_DepthAndNormalInputsSRV); + // m_NormalBuffer.CreateSRV(1, &m_DepthAndNormalInputsSRV); + +#if USE_CACAO + m_HalfWidth = (Width + 1) / 2; + m_HalfHeight = (Height + 1) / 2; + + // motion vector resources + // + m_MotionVectorsDepthMap.InitDepthStencil(m_pDevice, "m_MotionVectorDepthMap", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_MotionVectorsDepthMap.CreateDSV(0, &m_MotionVectorsDepthMapDSV); + m_MotionVectorsDepthMap.CreateSRV(0, &m_MotionVectorsDepthMapSRV); + + m_NormalBuffer.InitRenderTarget(m_pDevice, "m_NormalBuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R8G8B8A8_UNORM, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)); + m_NormalBuffer.CreateRTV(0, &m_NormalBufferRTV); + m_MotionVectors.InitRenderTarget(m_pDevice, "m_MotionVector", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R16G16_FLOAT, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)); + m_MotionVectors.CreateRTV(0, &m_MotionVectorsRTV); + + m_HDR.CreateSRV(0, &m_MotionVectorsInputsSRV); + m_MotionVectors.CreateSRV(1, &m_MotionVectorsInputsSRV); + + m_MotionVectors.CreateSRV(0, &m_MotionVectorsSRV); + m_NormalBuffer.CreateSRV(0, &m_NormalBufferSRV); + + // motion blur output + // + CD3DX12_RESOURCE_DESC MBDesc = CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R16G16B16A16_FLOAT, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS); + m_MotionBlurOutput.Init(m_pDevice, "m_MotionBlurOutput", &MBDesc, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, NULL); + m_MotionBlurOutput.CreateSRV(0, &m_MotionBlurOutputSRV); + m_MotionBlurOutput.CreateUAV(0, &m_MotionBlurOutputUAV); + + + m_cacaoDepthBuffer.InitDepthStencil(m_pDevice, "cacaoDepthBuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_cacaoDepthBuffer.CreateDSV(0, &m_cacaoDepthBufferDSV); + + m_CacaoOutput.Init(m_pDevice, "cacaoOutput", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R8_UNORM, Width, Height, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS), D3D12_RESOURCE_STATE_UNORDERED_ACCESS, NULL); + +#if USE_EXPANDED_DEPTH_BUFFER + m_expandedDepthWidth = Width + (Width / 5); + m_expandedDepthHeight = Height + (Height / 5); + uint32_t bufferOffsetX = (m_expandedDepthWidth - Width) / 2; + uint32_t bufferOffsetY = (m_expandedDepthHeight - Height) / 2; + // m_expandedDepthBuffer.InitDepthStencil(m_pDevice, "m_expandedDepthBuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_D32_FLOAT, m_expandedDepthWidth, m_expandedDepthHeight, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_expandedDepthBuffer.InitDepthStencil(m_pDevice, "m_expandedDepthBuffer", &CD3DX12_RESOURCE_DESC::Tex2D(DXGI_FORMAT_R32_TYPELESS, m_expandedDepthWidth, m_expandedDepthHeight, 1, 1, 1, 0, D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL)); + m_expandedDepthBuffer.CreateDSV(0, &m_expandedDepthBufferDSV); + + m_expandedDepthCamera.SetFov(0.922579714, m_expandedDepthWidth, m_expandedDepthHeight, 0.1f, 1000.0f); +#endif + + + FfxCacaoD3D12ScreenSizeInfo cacaoScreenSizeDependentInfo; + + cacaoScreenSizeDependentInfo.width = Width; + cacaoScreenSizeDependentInfo.height = Height; +#if USE_EXPANDED_DEPTH_BUFFER + cacaoScreenSizeDependentInfo.depthBufferWidth = m_expandedDepthWidth; + cacaoScreenSizeDependentInfo.depthBufferHeight = m_expandedDepthHeight; + cacaoScreenSizeDependentInfo.depthBufferXOffset = bufferOffsetX; + cacaoScreenSizeDependentInfo.depthBufferYOffset = bufferOffsetY; + + cacaoScreenSizeDependentInfo.depthBufferResource = m_expandedDepthBuffer.GetResource(); + cacaoScreenSizeDependentInfo.depthBufferSrvDesc.Format = DXGI_FORMAT_R32_FLOAT; + cacaoScreenSizeDependentInfo.depthBufferSrvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + cacaoScreenSizeDependentInfo.depthBufferSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; +#endif + + cacaoScreenSizeDependentInfo.normalBufferResource = m_NormalBuffer.GetResource(); + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.Format = m_NormalBuffer.GetFormat(); + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.Texture2D.MostDetailedMip = 0; + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.Texture2D.MipLevels = 1; + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.Texture2D.PlaneSlice = 0; + cacaoScreenSizeDependentInfo.normalBufferSrvDesc.Texture2D.ResourceMinLODClamp = 0.0f; + + // cacaoScreenSizeDependentInfo.outputBufferWidth = Width; + // cacaoScreenSizeDependentInfo.outputBufferHeight = Height; + cacaoScreenSizeDependentInfo.outputResource = m_CacaoOutput.GetResource(); + cacaoScreenSizeDependentInfo.outputUavDesc.Format = m_CacaoOutput.GetFormat(); + cacaoScreenSizeDependentInfo.outputUavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + cacaoScreenSizeDependentInfo.outputUavDesc.Texture2D.MipSlice = 0; + cacaoScreenSizeDependentInfo.outputUavDesc.Texture2D.PlaneSlice = 0; + +#if USE_EXPANDED_DEPTH_BUFFER + ffxCacaoD3D12InitScreenSizeDependentResources(m_pCacaoContextNativeExpanded, &cacaoScreenSizeDependentInfo, FFX_CACAO_FALSE); + ffxCacaoD3D12InitScreenSizeDependentResources(m_pCacaoContextDownsampledExpanded, &cacaoScreenSizeDependentInfo, FFX_CACAO_TRUE); + + cacaoScreenSizeDependentInfo.depthBufferWidth = Width; + cacaoScreenSizeDependentInfo.depthBufferHeight = Height; + cacaoScreenSizeDependentInfo.depthBufferXOffset = 0; + cacaoScreenSizeDependentInfo.depthBufferYOffset = 0; +#endif + + cacaoScreenSizeDependentInfo.depthBufferResource = m_cacaoDepthBuffer.GetResource(); + cacaoScreenSizeDependentInfo.depthBufferSrvDesc.Format = DXGI_FORMAT_R32_FLOAT; + cacaoScreenSizeDependentInfo.depthBufferSrvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + cacaoScreenSizeDependentInfo.depthBufferSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + + ffxCacaoD3D12InitScreenSizeDependentResources(m_pCacaoContextNativeNonExpanded, &cacaoScreenSizeDependentInfo, FFX_CACAO_FALSE); + ffxCacaoD3D12InitScreenSizeDependentResources(m_pCacaoContextDownsampledNonExpanded, &cacaoScreenSizeDependentInfo, FFX_CACAO_TRUE); + + m_CacaoOutput.CreateSRV(0, &m_applyCACAOInputs); + m_CacaoOutput.CreateSRV(0, &m_applyDirectInput); + + m_HDR.CreateUAV(0, &m_applyCACAOOutputs); + + m_applyDirect.UpdatePipeline(pSwapChain->GetFormat()); +#endif + + + + // update bloom and downscaling effect + // + m_downSample.OnCreateWindowSizeDependentResources(m_Width, m_Height, &m_HDR, 5); //downsample the HDR texture 5 times + m_bloom.OnCreateWindowSizeDependentResources(m_Width / 2, m_Height / 2, m_downSample.GetTexture(), 5, &m_HDR); + m_toneMapping.UpdatePipelines(pSwapChain->GetFormat()); + m_ImGUI.UpdatePipeline(pSwapChain->GetFormat()); +} + +//-------------------------------------------------------------------------------------- +// +// OnDestroyWindowSizeDependentResources +// +//-------------------------------------------------------------------------------------- +void SampleRenderer::OnDestroyWindowSizeDependentResources() +{ + m_bloom.OnDestroyWindowSizeDependentResources(); + m_downSample.OnDestroyWindowSizeDependentResources(); + +#if USE_CACAO +#if USE_EXPANDED_DEPTH_BUFFER + ffxCacaoD3D12DestroyScreenSizeDependentResources(m_pCacaoContextNativeExpanded); + ffxCacaoD3D12DestroyScreenSizeDependentResources(m_pCacaoContextDownsampledExpanded); + m_expandedDepthBuffer.OnDestroy(); +#endif + + ffxCacaoD3D12DestroyScreenSizeDependentResources(m_pCacaoContextNativeNonExpanded); + ffxCacaoD3D12DestroyScreenSizeDependentResources(m_pCacaoContextDownsampledNonExpanded); + m_CacaoOutput.OnDestroy(); +#endif + + m_MotionBlurOutput.OnDestroy(); + m_MotionVectors.OnDestroy(); + m_NormalBuffer.OnDestroy(); + m_MotionVectorsDepthMap.OnDestroy(); + + m_HDR.OnDestroy(); + m_HDRMSAA.OnDestroy(); + m_HistoryBuffer.OnDestroy(); + m_TAABuffer.OnDestroy(); +#if USE_SHADOWMASK + m_ShadowMask.OnDestroy(); +#endif + +#if USE_CACAO + m_cacaoDepthBuffer.OnDestroy(); +#endif + m_depthBuffer.OnDestroy(); +} + + +//-------------------------------------------------------------------------------------- +// +// LoadScene +// +//-------------------------------------------------------------------------------------- +int SampleRenderer::LoadScene(GLTFCommon *pGLTFCommon, int stage) +{ + // show loading progress + // + ImGui::OpenPopup("Loading"); + if (ImGui::BeginPopupModal("Loading", NULL, ImGuiWindowFlags_AlwaysAutoResize)) + { + float progress = (float)stage / 13.0f; + ImGui::ProgressBar(progress, ImVec2(0.f, 0.f), NULL); + ImGui::EndPopup(); + } + + // Loading stages + // + if (stage == 0) + { + } + else if (stage == 5) + { + Profile p("m_pGltfLoader->Load"); + + m_pGLTFTexturesAndBuffers = new GLTFTexturesAndBuffers(); + m_pGLTFTexturesAndBuffers->OnCreate(m_pDevice, pGLTFCommon, &m_UploadHeap, &m_VidMemBufferPool, &m_ConstantBufferRing); + } + else if (stage == 6) + { + Profile p("LoadTextures"); + + // here we are loading onto the GPU all the textures and the inverse matrices + // this data will be used to create the PBR and Depth passes + m_pGLTFTexturesAndBuffers->LoadTextures(); + } + else if (stage == 7) + { + { + Profile p("m_gltfDepth->OnCreate"); + + //create the glTF's textures, VBs, IBs, shaders and descriptors for this particular pass + m_gltfDepth = new GltfDepthPass(); + m_gltfDepth->OnCreate( + m_pDevice, + &m_UploadHeap, + &m_resourceViewHeaps, + &m_ConstantBufferRing, + &m_VidMemBufferPool, + m_pGLTFTexturesAndBuffers + ); + } + } + else if (stage == 8) + { + Profile p("m_gltfMotionVectors->OnCreate"); + + m_gltfMotionVectors = new GltfMotionVectorsPass(); + m_gltfMotionVectors->OnCreate( + m_pDevice, + &m_UploadHeap, + &m_resourceViewHeaps, + &m_ConstantBufferRing, + &m_VidMemBufferPool, + m_pGLTFTexturesAndBuffers, + m_MotionVectors.GetFormat(), + m_NormalBuffer.GetFormat() + ); + } + else if (stage == 9) + { + Profile p("m_gltfPBR->OnCreate"); + + // same thing as above but for the PBR pass + m_gltfPBR = new GltfPbrPass(); + m_gltfPBR->OnCreate( + m_pDevice, + &m_UploadHeap, + &m_resourceViewHeaps, + &m_ConstantBufferRing, + &m_VidMemBufferPool, + m_pGLTFTexturesAndBuffers, + &m_skyDome, + USE_SHADOWMASK, + DXGI_FORMAT_R16G16B16A16_FLOAT, + DXGI_FORMAT_UNKNOWN, + DXGI_FORMAT_UNKNOWN, + 4 + ); + } + else if (stage == 10) + { + Profile p("m_gltfBBox->OnCreate"); + + // just a bounding box pass that will draw boundingboxes instead of the geometry itself + m_gltfBBox = new GltfBBoxPass(); + m_gltfBBox->OnCreate( + m_pDevice, + &m_UploadHeap, + &m_resourceViewHeaps, + &m_ConstantBufferRing, + &m_VidMemBufferPool, + m_pGLTFTexturesAndBuffers, + &m_wireframe + ); +#if (USE_VID_MEM==true) + // we are borrowing the upload heap command list for uploading to the GPU the IBs and VBs + m_VidMemBufferPool.UploadData(m_UploadHeap.GetCommandList()); +#endif + } + else if (stage == 11) + { + Profile p("Flush"); + + m_UploadHeap.FlushAndFinish(); + +#if (USE_VID_MEM==true) + //once everything is uploaded we dont need he upload heaps anymore + m_VidMemBufferPool.FreeUploadHeap(); +#endif + + // tell caller that we are done loading the map + return 0; + } + + stage++; + return stage; +} + +//-------------------------------------------------------------------------------------- +// +// UnloadScene +// +//-------------------------------------------------------------------------------------- +void SampleRenderer::UnloadScene() +{ + if (m_gltfPBR) + { + m_gltfPBR->OnDestroy(); + delete m_gltfPBR; + m_gltfPBR = NULL; + } + + if (m_gltfMotionVectors) + { + m_gltfMotionVectors->OnDestroy(); + delete m_gltfMotionVectors; + m_gltfMotionVectors = NULL; + } + + if (m_gltfDepth) + { + m_gltfDepth->OnDestroy(); + delete m_gltfDepth; + m_gltfDepth = NULL; + } + + if (m_gltfBBox) + { + m_gltfBBox->OnDestroy(); + delete m_gltfBBox; + m_gltfBBox = NULL; + } + + if (m_pGLTFTexturesAndBuffers) + { + m_pGLTFTexturesAndBuffers->OnDestroy(); + delete m_pGLTFTexturesAndBuffers; + m_pGLTFTexturesAndBuffers = NULL; + } + +} + +//-------------------------------------------------------------------------------------- +// +// OnRender +// +//-------------------------------------------------------------------------------------- +void SampleRenderer::OnRender(State *pState, FfxCacaoSettings *cacaoSettings, SwapChain *pSwapChain, bool displayCacaoDirectly, bool useDownsampledSsao) +{ + m_useDownsampledSsao = useDownsampledSsao; + + // Timing values + // + UINT64 gpuTicksPerSecond; + m_pDevice->GetGraphicsQueue()->GetTimestampFrequency(&gpuTicksPerSecond); + + // Let our resource managers do some house keeping + // + m_ConstantBufferRing.OnBeginFrame(); + m_GPUTimer.OnBeginFrame(gpuTicksPerSecond, &m_TimeStamps); + + // Sets the perFrame data (Camera and lights data), override as necessary and set them as constant buffers -------------- + // + per_frame *pPerFrame = NULL; + if (m_pGLTFTexturesAndBuffers) + { + pPerFrame = m_pGLTFTexturesAndBuffers->m_pGLTFCommon->SetPerFrameData(pState->camera); + + //apply jittering to the camera + if (m_HasTAA) + { + static uint32_t sampleIndex=0; + + static const auto CalculateHaltonNumber = [](uint32_t index, uint32_t base) + { + float f = 1.0f, result = 0.0f; + + for (uint32_t i = index; i > 0;) + { + f /= static_cast(base); + result = result + f * static_cast(i % base); + i = static_cast(floorf(static_cast(i) / static_cast(base))); + } + + return result; + }; + + sampleIndex = (sampleIndex + 1) % 16; // 16x TAA + + /* float jitterX = 2.0f * CalculateHaltonNumber(sampleIndex + 1, 2) - 1.0f; + float jitterY = 2.0f * CalculateHaltonNumber(sampleIndex + 1, 3) - 1.0f; + + jitterX /= static_cast(m_Width); + jitterY /= static_cast(m_Height); + + pState->camera.SetProjectionJitter(jitterX, jitterY); */ + } + + //override gltf camera with ours + pPerFrame->mCameraViewProj = pState->camera.GetView() * pState->camera.GetProjection(); + pPerFrame->mInverseCameraViewProj = XMMatrixInverse(NULL, pPerFrame->mCameraViewProj); + pPerFrame->cameraPos = pState->camera.GetPosition(); + pPerFrame->iblFactor = pState->iblFactor; + pPerFrame->emmisiveFactor = pState->emmisiveFactor; + + //if the gltf doesn't have any lights set some spotlights + if (pPerFrame->lightCount == 0) + { + pPerFrame->lightCount = pState->spotlightCount; + for (uint32_t i = 0; i < pState->spotlightCount; i++) + { + GetXYZ(pPerFrame->lights[i].color, pState->spotlight[i].color); + GetXYZ(pPerFrame->lights[i].position, pState->spotlight[i].light.GetPosition()); + GetXYZ(pPerFrame->lights[i].direction, pState->spotlight[i].light.GetDirection()); + + pPerFrame->lights[i].range = 15.0f; // in meters + pPerFrame->lights[i].type = LightType_Spot; + pPerFrame->lights[i].intensity = pState->spotlight[i].intensity; + pPerFrame->lights[i].innerConeCos = cosf(pState->spotlight[i].light.GetFovV() * 0.9f / 2.0f); + pPerFrame->lights[i].outerConeCos = cosf(pState->spotlight[i].light.GetFovV() / 2.0f); + pPerFrame->lights[i].mLightViewProj = pState->spotlight[i].light.GetView() * pState->spotlight[i].light.GetProjection(); + } + } + + // Up to 4 spotlights can have shadowmaps. Each spot the light has a shadowMap index which is used to find the shadowmap in the atlas + // Additionally, directional lights shadows can be raytraced. + uint32_t shadowMapIndex = 0; + for (uint32_t i = 0; i < pPerFrame->lightCount; i++) + { + if ((shadowMapIndex < 4) && (pPerFrame->lights[i].type == LightType_Spot)) + { + pPerFrame->lights[i].shadowMapIndex = shadowMapIndex++; // set the shadowmap index so the color pass knows which shadow map to use + pPerFrame->lights[i].depthBias = 70.0f / 100000.0f; + } + else + { + pPerFrame->lights[i].shadowMapIndex = -1; // no shadow for this light + } + } + + m_pGLTFTexturesAndBuffers->SetPerFrameConstants(); + + m_pGLTFTexturesAndBuffers->SetSkinningMatricesForSkeletons(); + } + + // command buffer calls + // + ID3D12GraphicsCommandList* pCmdLst1 = m_CommandListRing.GetNewCommandList(); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Begin Frame"); + + // Clear GBuffer and depth stencil + // + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(pSwapChain->GetCurrentBackBufferResource(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET)); + + // Clears ----------------------------------------------------------------------- + // + pCmdLst1->ClearDepthStencilView(m_ShadowMapDSV.GetCPU(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Clear shadow map"); + +#ifdef USE_CACAO +#if USE_EXPANDED_DEPTH_BUFFER + pCmdLst1->ClearDepthStencilView(m_expandedDepthBufferDSV.GetCPU(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr); +#endif + pCmdLst1->ClearDepthStencilView(m_cacaoDepthBufferDSV.GetCPU(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr); +#endif + + float clearColor[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + pCmdLst1->ClearRenderTargetView(m_HDRRTVMSAA.GetCPU(), clearColor, 0, nullptr); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Clear HDR"); + + pCmdLst1->ClearDepthStencilView(m_depthBufferDSV.GetCPU(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Clear depth"); + + // Render to shadow map atlas for spot lights ------------------------------------------ + // + if (m_gltfDepth && pPerFrame != NULL) + { + uint32_t shadowMapIndex = 0; + for (uint32_t i = 0; i < pPerFrame->lightCount; i++) + { + if (pPerFrame->lights[i].type != LightType_Spot) + continue; + + // Set the RT's quadrant where to render the shadomap (these viewport offsets need to match the ones in shadowFiltering.h) + uint32_t viewportOffsetsX[4] = { 0, 1, 0, 1 }; + uint32_t viewportOffsetsY[4] = { 0, 0, 1, 1 }; + uint32_t viewportWidth = m_ShadowMap.GetWidth() / 2; + uint32_t viewportHeight = m_ShadowMap.GetHeight() / 2; + SetViewportAndScissor(pCmdLst1, viewportOffsetsX[i] * viewportWidth, viewportOffsetsY[i] * viewportHeight, viewportWidth, viewportHeight); + pCmdLst1->OMSetRenderTargets(0, NULL, true, &m_ShadowMapDSV.GetCPU()); + + GltfDepthPass::per_frame *cbDepthPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbDepthPerFrame->mViewProj = pPerFrame->lights[i].mLightViewProj; + + m_gltfDepth->Draw(pCmdLst1); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Shadow map"); + shadowMapIndex++; + } + +#if USE_CACAO + // draw full depth buffer + { + SetViewportAndScissor(pCmdLst1, 0, 0, m_cacaoDepthBuffer.GetWidth(), m_cacaoDepthBuffer.GetHeight()); + pCmdLst1->OMSetRenderTargets(0, NULL, true, &m_cacaoDepthBufferDSV.GetCPU()); + + GltfDepthPass::per_frame *cbDepthPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbDepthPerFrame->mViewProj = pPerFrame->mCameraViewProj; + + m_gltfDepth->Draw(pCmdLst1); + + // TODO: this + XMVECTOR cameraPos = pState->camera.GetPosition(); + // pState->camera.GetNearPlane(); + // pState->camera.GetFarPlane(); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Expanded Depth Buffer"); + } + + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_cacaoDepthBuffer.GetResource(), D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_DEPTH_READ)); + + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_cacaoDepthBuffer.GetResource(), D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_DEPTH_READ)); + + // draw expanded depth buffer +#if USE_EXPANDED_DEPTH_BUFFER + { + XMMATRIX viewProj = pState->camera.GetView() * m_expandedDepthCamera.GetProjection(); + + SetViewportAndScissor(pCmdLst1, 0, 0, m_expandedDepthBuffer.GetWidth(), m_expandedDepthBuffer.GetHeight()); + pCmdLst1->OMSetRenderTargets(0, NULL, true, &m_expandedDepthBufferDSV.GetCPU()); + + GltfDepthPass::per_frame *cbDepthPerFrame = m_gltfDepth->SetPerFrameConstants(); + cbDepthPerFrame->mViewProj = viewProj; + + m_gltfDepth->Draw(pCmdLst1); + + // TODO: this + XMVECTOR cameraPos = pState->camera.GetPosition(); + // pState->camera.GetNearPlane(); + // pState->camera.GetFarPlane(); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Expanded Depth Buffer"); + } +#endif +#endif + } + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_ShadowMap.GetResource(), D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE)); + + // Motion vectors --------------------------------------------------------------------------- + // + if (pPerFrame != NULL && m_gltfMotionVectors != NULL) + { + // Compute motion vectors + // pCmdLst1->RSSetViewports(1, &m_viewPort); + // pCmdLst1->RSSetScissorRects(1, &m_RectScissor); + + SetViewportAndScissor(pCmdLst1, 0, 0, m_Width, m_Height); + + D3D12_CPU_DESCRIPTOR_HANDLE rts[] = { m_MotionVectorsRTV.GetCPU(), m_NormalBufferRTV.GetCPU() }; + pCmdLst1->OMSetRenderTargets(2, rts, false, &m_MotionVectorsDepthMapDSV.GetCPU()); + + float clearColor[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + pCmdLst1->ClearRenderTargetView(m_MotionVectorsRTV.GetCPU(), clearColor, 0, nullptr); + pCmdLst1->ClearRenderTargetView(m_NormalBufferRTV.GetCPU(), clearColor, 0, nullptr); + + pCmdLst1->ClearDepthStencilView(m_MotionVectorsDepthMapDSV.GetCPU(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr); + + GltfMotionVectorsPass::per_frame *cbDepthPerFrame = m_gltfMotionVectors->SetPerFrameConstants(); + cbDepthPerFrame->mCurrViewProj = pPerFrame->mCameraViewProj; + cbDepthPerFrame->mPrevViewProj = pPerFrame->mCameraViewProj; // pState->camera.GetPrevView() * pState->camera.GetProjection(); + + m_gltfMotionVectors->Draw(pCmdLst1); + } + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Motion vectors"); + + // Shadow resolve --------------------------------------------------------------------------- + // +#if USE_SHADOWMASK + if (pPerFrame != NULL) + { + const D3D12_RESOURCE_BARRIER preShadowResolve[] = + { + CD3DX12_RESOURCE_BARRIER::Transition(m_ShadowMask.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS), + CD3DX12_RESOURCE_BARRIER::Transition(m_MotionVectorsDepthMap.GetResource(), D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE) + }; + pCmdLst1->ResourceBarrier(ARRAYSIZE(preShadowResolve), preShadowResolve); + + ShadowResolveFrame shadowResolveFrame; + shadowResolveFrame.m_Width = m_Width; + shadowResolveFrame.m_Height = m_Height; + shadowResolveFrame.m_ShadowMapSRV = m_ShadowMapSRV; + shadowResolveFrame.m_DepthBufferSRV = m_MotionVectorsDepthMapSRV; + shadowResolveFrame.m_ShadowBufferUAV = m_ShadowMaskUAV; + + m_shadowResolve.Draw(pCmdLst1, m_pGLTFTexturesAndBuffers, &shadowResolveFrame); + + const D3D12_RESOURCE_BARRIER postShadowResolve[] = + { + CD3DX12_RESOURCE_BARRIER::Transition(m_ShadowMask.GetResource(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE), + CD3DX12_RESOURCE_BARRIER::Transition(m_MotionVectorsDepthMap.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_DEPTH_WRITE) + }; + pCmdLst1->ResourceBarrier(ARRAYSIZE(postShadowResolve), postShadowResolve); + } + m_GPUTimer.GetTimeStamp(pCmdLst1, "Shadow resolve"); +#endif + + // Render Scene to the MSAA HDR RT ------------------------------------------------ + // + pCmdLst1->RSSetViewports(1, &m_viewPort); + pCmdLst1->RSSetScissorRects(1, &m_RectScissor); + pCmdLst1->OMSetRenderTargets(1, &m_HDRRTVMSAA.GetCPU(), true, &m_depthBufferDSV.GetCPU()); + + if (pPerFrame != NULL) + { + // Render skydome + // + if (pState->skyDomeType == 1) + { + XMMATRIX clipToView = XMMatrixInverse(NULL, pPerFrame->mCameraViewProj); + m_skyDome.Draw(pCmdLst1, clipToView); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Skydome"); + } + else if (pState->skyDomeType == 0) + { + SkyDomeProc::Constants skyDomeConstants; + skyDomeConstants.invViewProj = XMMatrixInverse(NULL, pPerFrame->mCameraViewProj); + skyDomeConstants.vSunDirection = XMVectorSet(1.0f, 0.05f, 0.0f, 0.0f); + skyDomeConstants.turbidity = 10.0f; + skyDomeConstants.rayleigh = 2.0f; + skyDomeConstants.mieCoefficient = 0.005f; + skyDomeConstants.mieDirectionalG = 0.8f; + skyDomeConstants.luminance = 1.0f; + skyDomeConstants.sun = false; + m_skyDomeProc.Draw(pCmdLst1, skyDomeConstants); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Skydome proc"); + } + + // Render scene to color buffer + // + if (m_gltfPBR && pPerFrame != NULL) + { + //set per frame constant buffer values +#if USE_SHADOWMASK + m_gltfPBR->Draw(pCmdLst1, &m_ShadowMaskSRV); +#else + m_gltfPBR->Draw(pCmdLst1, &m_ShadowMapSRV); +#endif + } + + // draw object's bounding boxes + // + if (m_gltfBBox && pPerFrame != NULL) + { + if (pState->bDrawBoundingBoxes) + { + m_gltfBBox->Draw(pCmdLst1, pPerFrame->mCameraViewProj); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Bounding Box"); + } + } + + // draw light's frustums + // + if (pState->bDrawLightFrustum && pPerFrame != NULL) + { + UserMarker marker(pCmdLst1, "light frustrums"); + + XMVECTOR vCenter = XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f); + XMVECTOR vRadius = XMVectorSet(1.0f, 1.0f, 1.0f, 0.0f); + XMVECTOR vColor = XMVectorSet(1.0f, 1.0f, 1.0f, 1.0f); + for (uint32_t i = 0; i < pPerFrame->lightCount; i++) + { + XMMATRIX spotlightMatrix = XMMatrixInverse(NULL, pPerFrame->lights[i].mLightViewProj); + XMMATRIX worldMatrix = spotlightMatrix * pPerFrame->mCameraViewProj; + m_wireframeBox.Draw(pCmdLst1, &m_wireframe, worldMatrix, vCenter, vRadius, vColor); + } + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Light's frustum"); + } + } + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_ShadowMap.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_DEPTH_WRITE)); + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_depthBuffer.GetResource(), D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE)); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Rendering scene"); + + // Resolve MSAA ------------------------------------------------------------------------ + // + { + UserMarker marker(pCmdLst1, "Resolving MSAA"); + + D3D12_RESOURCE_BARRIER preResolve[2] = { + CD3DX12_RESOURCE_BARRIER::Transition(m_HDR.GetResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_RESOLVE_DEST), + CD3DX12_RESOURCE_BARRIER::Transition(m_HDRMSAA.GetResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_RESOLVE_SOURCE) + }; + pCmdLst1->ResourceBarrier(2, preResolve); + + pCmdLst1->ResolveSubresource(m_HDR.GetResource(), 0, m_HDRMSAA.GetResource(), 0, DXGI_FORMAT_R16G16B16A16_FLOAT); + + D3D12_RESOURCE_BARRIER postResolve[2] = { + CD3DX12_RESOURCE_BARRIER::Transition(m_HDR.GetResource(), D3D12_RESOURCE_STATE_RESOLVE_DEST, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE), + CD3DX12_RESOURCE_BARRIER::Transition(m_HDRMSAA.GetResource(), D3D12_RESOURCE_STATE_RESOLVE_SOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET) + }; + pCmdLst1->ResourceBarrier(2, postResolve); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Resolve MSAA"); + } + + // Post proc--------------------------------------------------------------------------- + // + { + // TAA + Sharpen + // + /* if (m_HasTAA) + { + D3D12_RESOURCE_BARRIER preTAA[] = { + CD3DX12_RESOURCE_BARRIER::Transition(m_TAABuffer.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS) + }; + pCmdLst1->ResourceBarrier(ARRAYSIZE(preTAA), preTAA); + + // break down of the descriptor tables: + // m_TAABufferUAV = { m_TAABuffer } + // m_TAAInputsSRV = { m_HDR, m_MotionVectorsDepthMap, m_HistoryBuffer, m_MotionVectors } + m_taa.Draw(pCmdLst1, &m_TAABufferUAV, &m_TAAInputsSRV, m_Width, m_Height); + m_GPUTimer.GetTimeStamp(pCmdLst1, "TAA"); + + D3D12_RESOURCE_BARRIER postTAA[] = { + CD3DX12_RESOURCE_BARRIER::Transition(m_HDR.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET), + CD3DX12_RESOURCE_BARRIER::Transition(m_TAABuffer.GetResource(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE), + CD3DX12_RESOURCE_BARRIER::Transition(m_HistoryBuffer.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET) + }; + pCmdLst1->ResourceBarrier(ARRAYSIZE(postTAA), postTAA); + + D3D12_CPU_DESCRIPTOR_HANDLE renderTargets[] = { + m_HDRRTV.GetCPU(), + m_HistoryBufferRTV.GetCPU() + }; + pCmdLst1->OMSetRenderTargets(ARRAYSIZE(renderTargets), renderTargets, false, NULL); + + // m_TAABufferSRV = { m_TAABuffer } + m_sharpen.Draw(pCmdLst1, &m_TAABufferSRV); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Sharpen"); + + D3D12_RESOURCE_BARRIER postSharpen[] = { + CD3DX12_RESOURCE_BARRIER::Transition(m_HDR.GetResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE), + CD3DX12_RESOURCE_BARRIER::Transition(m_HistoryBuffer.GetResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE) + }; + pCmdLst1->ResourceBarrier(ARRAYSIZE(postSharpen), postSharpen); + } */ + + // Motion blur, this is still WIP + // + /* + { + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_MotionVectors.GetResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE)); + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_MotionBlurOutput.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS)); + + // break down of the descriptor tables: + // m_MotionVectorsInputsSRV = { m_HDR, m_MotionVectors } + // m_MotionBlurOutputUAV = { m_MotionBlurOutput } + m_motionBlur.Draw(pCmdLst1, NULL, &m_MotionBlurOutputUAV, &m_MotionVectorsInputsSRV, m_Width/8, m_Height/8, 1); + + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_MotionBlurOutput.GetResource(), D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE)); + pCmdLst1->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_MotionVectors.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET)); + + m_GPUTimer.GetTimeStamp(pCmdLst1, "Motion Blur"); + + } + */ + + // Bloom, takes HDR as input and applies bloom to it. + // + { + D3D12_CPU_DESCRIPTOR_HANDLE renderTargets[] = { m_HDRRTV.GetCPU() }; + pCmdLst1->OMSetRenderTargets(ARRAYSIZE(renderTargets), renderTargets, false, NULL); + + m_downSample.Draw(pCmdLst1); + //m_downSample.Gui(); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Downsample"); + + m_bloom.Draw(pCmdLst1, &m_HDR); + //m_bloom.Gui(); + m_GPUTimer.GetTimeStamp(pCmdLst1, "Bloom"); + } + } + +#if USE_CACAO + static bool outputCACAODirectly = true; + + if (pState->bUseCACAO) + { + FfxCacaoMatrix4x4 proj, normalsWorldToView; + { + XMFLOAT4X4 p; + XMMATRIX xProj = pState->camera.GetProjection(); + XMStoreFloat4x4(&p, xProj); + proj.elements[0][0] = p._11; proj.elements[0][1] = p._12; proj.elements[0][2] = p._13; proj.elements[0][3] = p._14; + proj.elements[1][0] = p._21; proj.elements[1][1] = p._22; proj.elements[1][2] = p._23; proj.elements[1][3] = p._24; + proj.elements[2][0] = p._31; proj.elements[2][1] = p._32; proj.elements[2][2] = p._33; proj.elements[2][3] = p._34; + proj.elements[3][0] = p._41; proj.elements[3][1] = p._42; proj.elements[3][2] = p._43; proj.elements[3][3] = p._44; + XMMATRIX xView = pState->camera.GetView(); + XMMATRIX xNormalsWorldToView = XMMATRIX(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1) * XMMatrixInverse(NULL, xView); // should be transpose(inverse(view)), but XMM is row-major and HLSL is column-major + XMStoreFloat4x4(&p, xNormalsWorldToView); + normalsWorldToView.elements[0][0] = p._11; normalsWorldToView.elements[0][1] = p._12; normalsWorldToView.elements[0][2] = p._13; normalsWorldToView.elements[0][3] = p._14; + normalsWorldToView.elements[1][0] = p._21; normalsWorldToView.elements[1][1] = p._22; normalsWorldToView.elements[1][2] = p._23; normalsWorldToView.elements[1][3] = p._24; + normalsWorldToView.elements[2][0] = p._31; normalsWorldToView.elements[2][1] = p._32; normalsWorldToView.elements[2][2] = p._33; normalsWorldToView.elements[2][3] = p._34; + normalsWorldToView.elements[3][0] = p._41; normalsWorldToView.elements[3][1] = p._42; normalsWorldToView.elements[3][2] = p._43; normalsWorldToView.elements[3][3] = p._44; + } + + FfxCacaoD3D12Context *context = NULL; +#if USE_EXPANDED_DEPTH_BUFFER + if (useExpandedDepthBuffer) + { + context = useDownsampledSsao ? m_pCacaoContextDownsampledExpanded : m_pCacaoContextNativeExpanded; + } + else + { + context = useDownsampledSsao ? m_pCacaoContextDownsampledNonExpanded : m_pCacaoContextNativeNonExpanded; + } +#else + context = useDownsampledSsao ? m_pCacaoContextDownsampledNonExpanded : m_pCacaoContextNativeNonExpanded; +#endif + + ffxCacaoD3D12UpdateSettings(context, cacaoSettings); + ffxCacaoD3D12Draw(context, pCmdLst1, &proj, &normalsWorldToView); + + m_applyCACAO.Draw(pCmdLst1, NULL, &m_applyCACAOOutputs, &m_applyCACAOInputs, (m_Width + APPLY_CACAO_WIDTH - 1) / APPLY_CACAO_WIDTH, (m_Height + APPLY_CACAO_HEIGHT - 1) / APPLY_CACAO_HEIGHT, 1); + } +#endif + + // submit command buffer + + ThrowIfFailed(pCmdLst1->Close()); + ID3D12CommandList* CmdListList1[] = { pCmdLst1 }; + m_pDevice->GetGraphicsQueue()->ExecuteCommandLists(1, CmdListList1); + + // Wait for swapchain (we are going to render to it) ----------------------------------- + // + pSwapChain->WaitForSwapChain(); + + m_CommandListRing.OnBeginFrame(); + + ID3D12GraphicsCommandList* pCmdLst2 = m_CommandListRing.GetNewCommandList(); + + // Tonemapping ------------------------------------------------------------------------ + // +#if USE_CACAO + if (displayCacaoDirectly) + { + pCmdLst2->RSSetViewports(1, &m_viewPort); + pCmdLst2->RSSetScissorRects(1, &m_RectScissor); + pCmdLst2->OMSetRenderTargets(1, pSwapChain->GetCurrentBackBufferRTV(), true, NULL); + + m_applyDirect.Draw(pCmdLst2, 1, &m_applyDirectInput, NULL); + } + else +#endif + { + pCmdLst2->RSSetViewports(1, &m_viewPort); + pCmdLst2->RSSetScissorRects(1, &m_RectScissor); + pCmdLst2->OMSetRenderTargets(1, pSwapChain->GetCurrentBackBufferRTV(), true, NULL); + + m_toneMapping.Draw(pCmdLst2, &m_HDRSRV, pState->exposure, pState->toneMapper); + m_GPUTimer.GetTimeStamp(pCmdLst2, "Tone mapping"); + + pCmdLst2->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_HDR.GetResource(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_RENDER_TARGET)); + } + + // debug output + if (false) + { + bool opened = true; + ImGui::Begin("Normal Buffer", &opened); + ImGui::Image((ImTextureID)&m_NormalBufferSRV, ImVec2(320 * 4, 180 * 4)); + ImGui::End(); + } + + + // Render HUD ------------------------------------------------------------------------ + // + { + pCmdLst2->RSSetViewports(1, &m_viewPort); + pCmdLst2->RSSetScissorRects(1, &m_RectScissor); + pCmdLst2->OMSetRenderTargets(1, pSwapChain->GetCurrentBackBufferRTV(), true, NULL); + + m_ImGUI.Draw(pCmdLst2); + + m_GPUTimer.GetTimeStamp(pCmdLst2, "ImGUI rendering"); + } + + // Transition swapchain into present mode + + pCmdLst2->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(pSwapChain->GetCurrentBackBufferResource(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT)); + + m_GPUTimer.OnEndFrame(); + + m_GPUTimer.CollectTimings(pCmdLst2); + + // Close & Submit the command list ---------------------------------------------------- + // + ThrowIfFailed(pCmdLst2->Close()); + + ID3D12CommandList* CmdListList2[] = { pCmdLst2 }; + m_pDevice->GetGraphicsQueue()->ExecuteCommandLists(1, CmdListList2); + + // Update previous camera matrices + // + // pState->camera.UpdatePreviousMatrices(); +} + +#if USE_CACAO +#if FFX_CACAO_ENABLE_PROFILING +void SampleRenderer::GetCacaoTimings(FfxCacaoDetailedTiming* timings, uint64_t* gpuTicksPerSecond) +{ + FfxCacaoD3D12Context *context = NULL; +#if USE_EXPANDED_DEPTH_BUFFER + if (m_useExpandedDepthBuffer) + { + context = m_useDownsampledSsao ? m_pCacaoContextDownsampledExpanded : m_pCacaoContextNativeExpanded; + } + else + { + context = m_useDownsampledSsao ? m_pCacaoContextDownsampledNonExpanded : m_pCacaoContextNativeNonExpanded; + } +#else + context = m_useDownsampledSsao ? m_pCacaoContextDownsampledNonExpanded : m_pCacaoContextNativeNonExpanded; +#endif + + ffxCacaoD3D12GetDetailedTimings(context, timings); + m_pDevice->GetGraphicsQueue()->GetTimestampFrequency(gpuTicksPerSecond); +} +#endif +#endif diff --git a/sample/src/DX12/SampleRenderer.h b/sample/src/DX12/SampleRenderer.h new file mode 100644 index 0000000..3316172 --- /dev/null +++ b/sample/src/DX12/SampleRenderer.h @@ -0,0 +1,219 @@ +// AMD SampleDX12 sample code +// +// Copyright(c) 2018 Advanced Micro Devices, Inc.All rights reserved. +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +#pragma once + +#include "ffx_cacao.h" + +static const int backBufferCount = 2; + +#define USE_CACAO true +#define USE_VID_MEM true +#define USE_SHADOWMASK false +#define USE_EXPANDED_DEPTH_BUFFER false + +using namespace CAULDRON_DX12; + +// +// This class deals with the GPU side of the sample. +// +class SampleRenderer +{ +public: + struct Spotlight + { + Camera light; + XMVECTOR color; + float intensity; + }; + + struct State + { + float time; + Camera camera; + + float exposure; + float iblFactor; + float emmisiveFactor; + + int toneMapper; + int skyDomeType; + bool bDrawBoundingBoxes; + + uint32_t spotlightCount; + Spotlight spotlight[4]; + bool bDrawLightFrustum; + + bool bUseCACAO; + }; + + void OnCreate(Device* pDevice, SwapChain *pSwapChain); + void OnDestroy(); + + void OnCreateWindowSizeDependentResources(SwapChain *pSwapChain, uint32_t Width, uint32_t Height); + void OnDestroyWindowSizeDependentResources(); + + int LoadScene(GLTFCommon *pGLTFCommon, int stage = 0); + void UnloadScene(); + + /* bool GetHasTAA() const { return m_HasTAA; } + void SetHasTAA(bool hasTAA) { m_HasTAA = hasTAA; } */ + + const std::vector &GetTimingValues() { return m_TimeStamps; } + + void OnRender(State *pState, FfxCacaoSettings *cacaoSettings, SwapChain *pSwapChain, bool displayCacaoDirectly, bool useDownsampledSsao); + +#if USE_CACAO +#if FFX_CACAO_ENABLE_PROFILING + void GetCacaoTimings(FfxCacaoDetailedTiming* timings, uint64_t* gpuTicksPerSecong); +#endif +#endif + +private: + Device *m_pDevice; + + uint32_t m_Width; + uint32_t m_Height; + uint32_t m_HalfWidth; + uint32_t m_HalfHeight; + D3D12_VIEWPORT m_viewPort; + D3D12_RECT m_RectScissor; + bool m_HasTAA = false; + + // Initialize helper classes + ResourceViewHeaps m_resourceViewHeaps; + UploadHeap m_UploadHeap; + DynamicBufferRing m_ConstantBufferRing; + StaticBufferPool m_VidMemBufferPool; + CommandListRing m_CommandListRing; + GPUTimestamps m_GPUTimer; + + //gltf passes + GltfPbrPass *m_gltfPBR; + GltfBBoxPass *m_gltfBBox; + GltfDepthPass *m_gltfDepth; + GltfMotionVectorsPass *m_gltfMotionVectors; + GLTFTexturesAndBuffers *m_pGLTFTexturesAndBuffers; + + // effects + Bloom m_bloom; + SkyDome m_skyDome; + DownSamplePS m_downSample; + SkyDomeProc m_skyDomeProc; + ToneMapping m_toneMapping; + PostProcCS m_motionBlur; + Sharpen m_sharpen; + TAA m_taa; +#if USE_CACAO + CBV_SRV_UAV m_applyCACAOInputs; + CBV_SRV_UAV m_applyCACAOOutputs; + PostProcCS m_applyCACAO; + CBV_SRV_UAV m_applyDirectInput; + PostProcPS m_applyDirect; + +#if USE_EXPANDED_DEPTH_BUFFER + bool m_useExpandedDepthBuffer; + + int m_expandedDepthWidth; + int m_expandedDepthHeight; + DSV m_expandedDepthBufferDSV; + Texture m_expandedDepthBuffer; + + Camera m_expandedDepthCamera; + + FfxCacaoD3D12Context *m_pCacaoContextNativeExpanded; + FfxCacaoD3D12Context *m_pCacaoContextDownsampledExpanded; +#endif + + bool m_useDownsampledSsao; + + Texture m_CacaoOutput; + + FfxCacaoD3D12Context *m_pCacaoContextNativeNonExpanded; + FfxCacaoD3D12Context *m_pCacaoContextDownsampledNonExpanded; +#endif + + // GUI + ImGUI m_ImGUI; + + // Temporary render targets + + // depth buffer + Texture m_depthBuffer; + DSV m_depthBufferDSV; + CBV_SRV_UAV m_depthBufferSRV; + + Texture m_cacaoDepthBuffer; + DSV m_cacaoDepthBufferDSV; + CBV_SRV_UAV m_cacaoDepthBufferSRV; + + // Motion Vectors resources + Texture m_MotionVectorsDepthMap; + DSV m_MotionVectorsDepthMapDSV; + CBV_SRV_UAV m_MotionVectorsDepthMapSRV; + Texture m_MotionVectors; + RTV m_MotionVectorsRTV; + CBV_SRV_UAV m_MotionVectorsSRV; + CBV_SRV_UAV m_MotionVectorsInputsSRV; + + // TAA buffer + Texture m_TAABuffer; + CBV_SRV_UAV m_TAABufferSRV; + CBV_SRV_UAV m_TAABufferUAV; + CBV_SRV_UAV m_TAAInputsSRV; + Texture m_HistoryBuffer; + RTV m_HistoryBufferRTV; + + // Normal buffer + Texture m_NormalBuffer; + RTV m_NormalBufferRTV; + CBV_SRV_UAV m_NormalBufferSRV; + +#if USE_SHADOWMASK + // shadow buffer + Texture m_ShadowMask; + CBV_SRV_UAV m_ShadowMaskUAV; + CBV_SRV_UAV m_ShadowMaskSRV; + ShadowResolvePass m_shadowResolve; +#endif + + // shadowmaps + Texture m_ShadowMap; + DSV m_ShadowMapDSV; + CBV_SRV_UAV m_ShadowMapSRV; + + // MSAA RT + Texture m_HDRMSAA; + RTV m_HDRRTVMSAA; + + // Resolved RT + Texture m_HDR; + CBV_SRV_UAV m_HDRSRV; + RTV m_HDRRTV; + + // motion blur + Texture m_MotionBlurOutput; + CBV_SRV_UAV m_MotionBlurOutputSRV; + CBV_SRV_UAV m_MotionBlurOutputUAV; + + // widgets + Wireframe m_wireframe; + WireframeBox m_wireframeBox; + + std::vector m_TimeStamps; +}; diff --git a/sample/src/DX12/dpiawarescaling.manifest b/sample/src/DX12/dpiawarescaling.manifest new file mode 100644 index 0000000..8dd8cd9 --- /dev/null +++ b/sample/src/DX12/dpiawarescaling.manifest @@ -0,0 +1,8 @@ + + + + + true/PM + + + \ No newline at end of file diff --git a/sample/src/DX12/stdafx.cpp b/sample/src/DX12/stdafx.cpp new file mode 100644 index 0000000..965fbb6 --- /dev/null +++ b/sample/src/DX12/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// SampleD3D12.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/sample/src/DX12/stdafx.h b/sample/src/DX12/stdafx.h new file mode 100644 index 0000000..3c4526c --- /dev/null +++ b/sample/src/DX12/stdafx.h @@ -0,0 +1,68 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// +#pragma once + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +// Windows Header Files: +#include +#include + +// C RunTime Header Files +#include +#include +#include +#include +#include + +#include "../../libs/d3d12x/d3dx12.h" + +// we are using DirectXMath +#include +using namespace DirectX; + +// TODO: reference additional headers your program requires here +#include "Base/Imgui.h" +#include "Base/ImguiHelper.h" +#include "Base/Fence.h" +#include "Base/Helper.h" +#include "Base/Device.h" +#include "Base/Texture.h" +#include "Base/FreeSync2.h" +#include "Base/SwapChain.h" +#include "Base/UploadHeap.h" +#include "Base/UserMarkers.h" +#include "Base/GPUTimestamps.h" +#include "Base/CommandListRing.h" +#include "Base/StaticBufferPool.h" +#include "Base/DynamicBufferRing.h" +#include "Base/ResourceViewHeaps.h" +#include "Base/ShaderCompilerHelper.h" +#include "Base/StaticConstantBufferPool.h" + +#include "Misc/Misc.h" +#include "Misc/Error.h" +#include "Misc/Camera.h" +#include "Misc/FrameworkWindows.h" + +#include "GLTF/GltfPbrPass.h" +#include "GLTF/GltfBBoxPass.h" +#include "GLTF/GltfDepthPass.h" +#include "GLTF/GltfMotionVectorsPass.h" + +#include "PostProc/TAA.h" +#include "PostProc/Bloom.h" +#include "PostProc/BlurPS.h" +#include "PostProc/Sharpen.h" +#include "PostProc/SkyDome.h" +#include "PostProc/SkyDomeProc.h" +#include "PostProc/PostProcCS.h" +#include "PostProc/PostProcPS.h" +#include "PostProc/ToneMapping.h" +#include "PostProc/DownSamplePS.h" +#include "PostProc/ShadowResolvePass.h" + +#include "Widgets/wireframe.h" + +using namespace CAULDRON_DX12;