1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

Added several new features: support for AudioUnit v3, new simplified JUCE module format, deleted the Introjucer and replaced it by the Projucer, various improvements for exporting of iOS and Android projects.

This commit is contained in:
Timur Doumler 2016-04-06 18:31:24 +01:00
parent 9eb54629f2
commit 70949aa0c6
1979 changed files with 130149 additions and 129257 deletions

1
.gitignore vendored
View file

@ -16,6 +16,7 @@
*.d
*.sdf
*.opensdf
*.VC.opendb
xcuserdata
*.xccheckout
contents.xcworkspacedata

View file

@ -1,9 +1,23 @@
== Major JUCE features and updates ==
This file just lists the more notable headline features. For more detailed info about minor changes and bugfixes, please see the git log.
This file just lists the more notable headline features. For more detailed info
about minor changes and bugfixes, please see the git log!
Version 4.1
Version 4.2
- Added support for AudioUnit v3 on OS X and iOS
- Simplified the JUCE module format. Removed the json module definition files, and made
it easier to manually add modules to projects. The format is fully described in the
document juce/modules/JUCE Module Format.txt
- iOS project support: added custom resource folders, custom xcassets, app capabilities,
and screen orientation settings.
- Deleted the Introjucer.. But don't panic! All of its functionality is now supplied by a
more open-source version of the Projucer. By refactoring the closed-source LLVM compilation
code into a DLL, we've been able to unify the Introjucer and Projucer into a single
open-source project. This will allow everyone to compile the Projucer's IDE themselves, and
having just one app instead of two will make things a lot less confusing!
Version 4.1
- Added multi-bus support for audio plug-in clients
- Added support for MIDI effect plug-ins (AU and AAX).
- Added new example: Network Graphics Demo
@ -23,18 +37,18 @@ Version 4.0.1
- Android Studio exporting from the Introjucer
- Android-M pro-audio low-latency i/o support
- Bluetooth MIDI device support on iOS and Android
- AudioSampleBuffer refactored into a templated class AudioBuffer, to allow 32 or 64 bit float support
- AudioSampleBuffer refactored into a templated class AudioBuffer, to allow
32 or 64 bit float support
- Audio plugin and hosting now supports 64-bit data
- Support for force-touch and pen pressure on iOS and Windows
- Added easy sound-file playing methods to AudioDeviceManager
- Many updates to Introjucer
- Many new tutorials and examples
Version 3.3.0
- New functions for Base64 conversion
- New command-line options in the introjucer for trimming whitespace and replacing tabs in source files
- New command-line options in the introjucer for trimming whitespace and
replacing tabs in source files
Version 3.2.0
- Major OpenGL performance/stability improvements

View file

@ -1,17 +1,17 @@
# The JUCE Library
JUCE (Jules' Utility Class Extensions) is an all-encompassing
C++ framework for developing cross-platform software.
It contains pretty much everything you're likely to need to create
most applications, and is particularly well-suited for building
highly-customised GUIs, and for handling graphics and sound.
Most JUCE modules are shared under the GNU Public Licence
(GPLv2, v3, and the AGPLv3). This means that the code can
be freely copied and distributed, and costs nothing to use
in other GPL applications. One module (the juce_core module)
is permissively licensed under the ISC.
For more information, visit the website:
# The JUCE Library
JUCE (Jules' Utility Class Extensions) is an all-encompassing
C++ framework for developing cross-platform software.
It contains pretty much everything you're likely to need to create
most applications, and is particularly well-suited for building
highly-customised GUIs, and for handling graphics and sound.
Most JUCE modules are shared under the GNU Public Licence
(GPLv2, v3, and the AGPLv3). This means that the code can
be freely copied and distributed, and costs nothing to use
in other GPL applications. One module (the juce_core module)
is permissively licensed under the ISC.
For more information, visit the website:
http://www.juce.com

View file

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<JUCERPROJECT id="NaPIav" name="AUv3Synth" projectType="audioplug" version="1.0.0"
bundleIdentifier="com.roli.development.AUv3Synth" includeBinaryInAppConfig="1"
buildVST="1" buildVST3="1" buildAU="0" buildAUv3="1" buildRTAS="0"
buildAAX="0" pluginName="AUv3 Synth" pluginDesc="AUv3 Synth"
pluginManufacturer="ROLI Ltd." pluginManufacturerCode="ROLI"
pluginCode="AUv3" pluginChannelConfigs="{0,2}" pluginIsSynth="1"
pluginWantsMidiIn="1" pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0"
pluginEditorRequiresKeys="0" pluginAUExportPrefix="AUv3SynthAU"
pluginRTASCategory="" aaxIdentifier="com.roli.development.AUv3Synth"
pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.0"
buildStandalone="1">
<MAINGROUP id="h0gx6L" name="AUv3Synth">
<GROUP id="{9DC59668-E6DF-876C-EB58-DDA88D152162}" name="Source">
<GROUP id="{CDDEC2D7-B8D6-2849-AC85-2363EAD0449C}" name="BinaryData">
<FILE id="IIURe2" name="power.png" compile="0" resource="0" file="Source/BinaryData/power.png"
xcodeResource="1"/>
<FILE id="fCMFhA" name="proaudio.path" compile="0" resource="1" file="Source/BinaryData/proaudio.path"/>
<FILE id="X8KTzd" name="singing.ogg" compile="0" resource="1" file="Source/BinaryData/singing.ogg"/>
</GROUP>
<FILE id="SfLsx7" name="MaterialLookAndFeel.h" compile="0" resource="0"
file="Source/MaterialLookAndFeel.h"/>
<FILE id="iw5EFr" name="AUv3SynthEditor.h" compile="0" resource="0"
file="Source/AUv3SynthEditor.h"/>
<FILE id="WdW8gj" name="AUv3SynthProcessor.cpp" compile="1" resource="0"
file="Source/AUv3SynthProcessor.cpp"/>
</GROUP>
</MAINGROUP>
<EXPORTFORMATS>
<XCODE_IPHONE targetFolder="Builds/iOS" vstFolder="" vst3Folder="" iosScreenOrientation="portraitlandscape"
iosDevelopmentTeamID="">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" iosCompatibility="default" isDebug="1" optimisation="1"
targetName="AUv3Synth" codeSigningIdentity=""/>
<CONFIGURATION name="Release" iosCompatibility="default" isDebug="0" optimisation="3"
targetName="AUv3Synth" codeSigningIdentity=""/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_core" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
<MODULEPATH id="juce_audio_plugin_client" path="../../modules"/>
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
</MODULEPATHS>
</XCODE_IPHONE>
<XCODE_MAC targetFolder="Builds/MacOSX" iosDevelopmentTeamID="" vstFolder=""
vst3Folder="">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" osxSDK="default" osxCompatibility="default" osxArchitecture="default"
isDebug="1" optimisation="1" targetName="AUv3Synth"/>
<CONFIGURATION name="Release" osxSDK="default" osxCompatibility="default" osxArchitecture="default"
isDebug="0" optimisation="3" targetName="AUv3Synth"/>
</CONFIGURATIONS>
<MODULEPATHS>
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
<MODULEPATH id="juce_graphics" path="../../modules"/>
<MODULEPATH id="juce_events" path="../../modules"/>
<MODULEPATH id="juce_data_structures" path="../../modules"/>
<MODULEPATH id="juce_core" path="../../modules"/>
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
<MODULEPATH id="juce_audio_plugin_client" path="../../modules"/>
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
</MODULEPATHS>
</XCODE_MAC>
</EXPORTFORMATS>
<MODULES>
<MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_audio_plugin_client" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_audio_processors" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_core" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_data_structures" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_events" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0"/>
<MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0"/>
</MODULES>
<JUCEOPTIONS JUCE_QUICKTIME="disabled"/>
</JUCERPROJECT>

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>com.apple.security.app-sandbox</key> <true/></dict></plist>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSExtension</key>
<dict>
<key>NSExtensionPrincipalClass</key>
<string>AUv3SynthAUFactoryAUv3</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.AudioUnit-UI</string>
<key>NSExtensionAttributes</key>
<dict>
<key>AudioComponents</key>
<array>
<dict>
<key>name</key>
<string>ROLI Ltd.: AUv3 Synth</string>
<key>description</key>
<string>AUv3 Synth</string>
<key>factoryFunction</key>
<string>AUv3SynthAUFactoryAUv3</string>
<key>manufacturer</key>
<string>ROLI</string>
<key>type</key>
<string>aumu</string>
<key>subtype</key>
<string>AUv3</string>
<key>version</key>
<integer>65536</integer>
<key>sandboxSafe</key>
<true/>
<key>tags</key>
<array>
<string>Synth</string>
</array>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,128 @@
{
"images": [
{
"idiom": "iphone",
"size": "29x29",
"filename": "Icon-29.png",
"scale": "1x"
},
{
"idiom": "iphone",
"size": "29x29",
"filename": "Icon-29@2x.png",
"scale": "2x"
},
{
"idiom": "iphone",
"size": "29x29",
"filename": "Icon-29@3x.png",
"scale": "3x"
},
{
"idiom": "iphone",
"size": "40x40",
"filename": "Icon-Spotlight-40@2x.png",
"scale": "2x"
},
{
"idiom": "iphone",
"size": "40x40",
"filename": "Icon-Spotlight-40@3x.png",
"scale": "3x"
},
{
"idiom": "iphone",
"size": "57x57",
"filename": "Icon.png",
"scale": "1x"
},
{
"idiom": "iphone",
"size": "57x57",
"filename": "Icon@2x.png",
"scale": "2x"
},
{
"idiom": "iphone",
"size": "60x60",
"filename": "Icon-60@2x.png",
"scale": "2x"
},
{
"idiom": "iphone",
"size": "60x60",
"filename": "Icon-@3x.png",
"scale": "3x"
},
{
"idiom": "ipad",
"size": "29x29",
"filename": "Icon-Small-1.png",
"scale": "1x"
},
{
"idiom": "ipad",
"size": "29x29",
"filename": "Icon-Small@2x-1.png",
"scale": "2x"
},
{
"idiom": "ipad",
"size": "40x40",
"filename": "Icon-Spotlight-40.png",
"scale": "1x"
},
{
"idiom": "ipad",
"size": "40x40",
"filename": "Icon-Spotlight-40@2x-1.png",
"scale": "2x"
},
{
"idiom": "ipad",
"size": "50x50",
"filename": "Icon-Small-50.png",
"scale": "1x"
},
{
"idiom": "ipad",
"size": "50x50",
"filename": "Icon-Small-50@2x.png",
"scale": "2x"
},
{
"idiom": "ipad",
"size": "72x72",
"filename": "Icon-72.png",
"scale": "1x"
},
{
"idiom": "ipad",
"size": "72x72",
"filename": "Icon-72@2x.png",
"scale": "2x"
},
{
"idiom": "ipad",
"size": "76x76",
"filename": "Icon-76.png",
"scale": "1x"
},
{
"idiom": "ipad",
"size": "76x76",
"filename": "Icon-76@2x.png",
"scale": "2x"
},
{
"idiom": "ipad",
"size": "83.5x83.5",
"filename": "Icon-83.5@2x.png",
"scale": "2x"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

View file

@ -0,0 +1,57 @@
{
"images": [
{
"orientation": "portrait",
"idiom": "iphone",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"filename": "LaunchImage-iphone-2x.png"
},
{
"orientation": "portrait",
"idiom": "iphone",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"filename": "LaunchImage-iphone-retina4.png",
"subtype": "retina4"
},
{
"orientation": "portrait",
"idiom": "ipad",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "1x",
"filename": "LaunchImage-ipad-portrait-1x.png"
},
{
"orientation": "landscape",
"idiom": "ipad",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "1x",
"filename": "LaunchImage-ipad-landscape-1x.png"
},
{
"orientation": "portrait",
"idiom": "ipad",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"filename": "LaunchImage-ipad-portrait-2x.png"
},
{
"orientation": "landscape",
"idiom": "ipad",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"filename": "LaunchImage-ipad-landscape-2x.png"
}
],
"info": {
"version": 1,
"author": "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>XPC!</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSExtension</key>
<dict>
<key>NSExtensionPrincipalClass</key>
<string>AUv3SynthAUFactoryAUv3</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.AudioUnit-UI</string>
<key>NSExtensionAttributes</key>
<dict>
<key>AudioComponents</key>
<array>
<dict>
<key>name</key>
<string>ROLI Ltd.: AUv3 Synth</string>
<key>description</key>
<string>AUv3 Synth</string>
<key>factoryFunction</key>
<string>AUv3SynthAUFactoryAUv3</string>
<key>manufacturer</key>
<string>ROLI</string>
<key>type</key>
<string>aumu</string>
<key>subtype</key>
<string>AUv3</string>
<key>version</key>
<integer>65536</integer>
<key>sandboxSafe</key>
<true/>
<key>tags</key>
<array>
<string>Synth</string>
</array>
</dict>
</array>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
<key>UIRequiresFullScreen</key>
<true/>
<key>UIStatusBarHidden</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIBackgroundModes</key>
<array/>
</dict>
</plist>

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist>
<dict>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AUv3Synth</string>
<key>CFBundleDisplayName</key>
<string>AUv3Synth</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>CFBundleVersion</key>
<string>1.0.0</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<true/>
<key>UIRequiresFullScreen</key>
<true/>
<key>UIStatusBarHidden</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIBackgroundModes</key>
<array/>
</dict>
</plist>

View file

@ -4,20 +4,20 @@
project - if you alter its contents, your changes may be overwritten!
There's a section below where you can add your own custom code safely, and the
Introjucer will preserve the contents of that block, but the best way to change
any of these definitions is by using the Introjucer's project settings.
Projucer will preserve the contents of that block, but the best way to change
any of these definitions is by using the Projucer's project settings.
Any commented-out settings will assume their default values.
*/
#ifndef __JUCE_APPCONFIG_AX3KPE__
#define __JUCE_APPCONFIG_AX3KPE__
#ifndef __JUCE_APPCONFIG_NAPIAV__
#define __JUCE_APPCONFIG_NAPIAV__
//==============================================================================
// [BEGIN_USER_CODE_SECTION]
// (You can add your own code in this section, and the Introjucer will not overwrite it)
// (You can add your own code in this section, and the Projucer will not overwrite it)
// [END_USER_CODE_SECTION]
@ -27,21 +27,25 @@
#define JUCE_MODULE_AVAILABLE_juce_audio_formats 1
#define JUCE_MODULE_AVAILABLE_juce_audio_plugin_client 1
#define JUCE_MODULE_AVAILABLE_juce_audio_processors 1
#define JUCE_MODULE_AVAILABLE_juce_audio_utils 1
#define JUCE_MODULE_AVAILABLE_juce_core 1
#define JUCE_MODULE_AVAILABLE_juce_cryptography 1
#define JUCE_MODULE_AVAILABLE_juce_data_structures 1
#define JUCE_MODULE_AVAILABLE_juce_events 1
#define JUCE_MODULE_AVAILABLE_juce_graphics 1
#define JUCE_MODULE_AVAILABLE_juce_gui_basics 1
#define JUCE_MODULE_AVAILABLE_juce_gui_extra 1
#define JUCE_MODULE_AVAILABLE_juce_opengl 1
#define JUCE_MODULE_AVAILABLE_juce_video 1
//==============================================================================
#ifndef JUCE_STANDALONE_APPLICATION
#define JUCE_STANDALONE_APPLICATION 0
#ifdef JucePlugin_Build_Standalone
#define JUCE_STANDALONE_APPLICATION JucePlugin_Build_Standalone
#else
#define JUCE_STANDALONE_APPLICATION 0
#endif
#endif
#define JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED 1
//==============================================================================
// juce_audio_devices flags:
@ -187,70 +191,57 @@
//#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR
#endif
//==============================================================================
// juce_video flags:
#ifndef JUCE_DIRECTSHOW
//#define JUCE_DIRECTSHOW
#endif
#ifndef JUCE_MEDIAFOUNDATION
//#define JUCE_MEDIAFOUNDATION
#endif
#ifndef JUCE_QUICKTIME
#define JUCE_QUICKTIME 0
#endif
#ifndef JUCE_USE_CAMERA
//#define JUCE_USE_CAMERA
#endif
//==============================================================================
// Audio plugin settings..
#ifndef JucePlugin_Build_VST
#define JucePlugin_Build_VST 0
#define JucePlugin_Build_VST 1
#endif
#ifndef JucePlugin_Build_VST3
#define JucePlugin_Build_VST3 1
#endif
#ifndef JucePlugin_Build_AU
#define JucePlugin_Build_AU 1
#define JucePlugin_Build_AU 0
#endif
#ifndef JucePlugin_Build_AUv3
#define JucePlugin_Build_AUv3 1
#endif
#ifndef JucePlugin_Build_RTAS
#define JucePlugin_Build_RTAS 0
#endif
#ifndef JucePlugin_Build_AAX
#define JucePlugin_Build_AAX 1
#define JucePlugin_Build_AAX 0
#endif
#ifndef JucePlugin_Build_STANDALONE
#define JucePlugin_Build_STANDALONE 1
#endif
#ifndef JucePlugin_Name
#define JucePlugin_Name "Spatializer"
#define JucePlugin_Name "AUv3 Synth"
#endif
#ifndef JucePlugin_Desc
#define JucePlugin_Desc "Spatializer"
#define JucePlugin_Desc "AUv3 Synth"
#endif
#ifndef JucePlugin_Manufacturer
#define JucePlugin_Manufacturer "ROLI Ltd."
#endif
#ifndef JucePlugin_ManufacturerWebsite
#define JucePlugin_ManufacturerWebsite "www.juce.com"
#define JucePlugin_ManufacturerWebsite ""
#endif
#ifndef JucePlugin_ManufacturerEmail
#define JucePlugin_ManufacturerEmail "info@juce.com"
#define JucePlugin_ManufacturerEmail ""
#endif
#ifndef JucePlugin_ManufacturerCode
#define JucePlugin_ManufacturerCode 'ROLI'
#endif
#ifndef JucePlugin_PluginCode
#define JucePlugin_PluginCode 'Spce'
#define JucePlugin_PluginCode 'AUv3'
#endif
#ifndef JucePlugin_IsSynth
#define JucePlugin_IsSynth 0
#define JucePlugin_IsSynth 1
#endif
#ifndef JucePlugin_WantsMidiInput
#define JucePlugin_WantsMidiInput 0
#define JucePlugin_WantsMidiInput 1
#endif
#ifndef JucePlugin_ProducesMidiOutput
#define JucePlugin_ProducesMidiOutput 0
@ -274,28 +265,28 @@
#define JucePlugin_VSTUniqueID JucePlugin_PluginCode
#endif
#ifndef JucePlugin_VSTCategory
#define JucePlugin_VSTCategory kPlugCategEffect
#define JucePlugin_VSTCategory kPlugCategSynth
#endif
#ifndef JucePlugin_AUMainType
#define JucePlugin_AUMainType kAudioUnitType_Effect
#define JucePlugin_AUMainType kAudioUnitType_MusicDevice
#endif
#ifndef JucePlugin_AUSubType
#define JucePlugin_AUSubType JucePlugin_PluginCode
#endif
#ifndef JucePlugin_AUExportPrefix
#define JucePlugin_AUExportPrefix SpatializerAU
#define JucePlugin_AUExportPrefix AUv3SynthAU
#endif
#ifndef JucePlugin_AUExportPrefixQuoted
#define JucePlugin_AUExportPrefixQuoted "SpatializerAU"
#define JucePlugin_AUExportPrefixQuoted "AUv3SynthAU"
#endif
#ifndef JucePlugin_AUManufacturerCode
#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode
#endif
#ifndef JucePlugin_CFBundleIdentifier
#define JucePlugin_CFBundleIdentifier com.ROLI.Spatializer
#define JucePlugin_CFBundleIdentifier com.roli.development.AUv3Synth
#endif
#ifndef JucePlugin_RTASCategory
#define JucePlugin_RTASCategory ePlugInCategory_None
#define JucePlugin_RTASCategory ePlugInCategory_SWGenerators
#endif
#ifndef JucePlugin_RTASManufacturerCode
#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode
@ -310,7 +301,7 @@
#define JucePlugin_RTASDisableMultiMono 0
#endif
#ifndef JucePlugin_AAXIdentifier
#define JucePlugin_AAXIdentifier com.ROLI.Spatializer
#define JucePlugin_AAXIdentifier com.roli.development.AUv3Synth
#endif
#ifndef JucePlugin_AAXManufacturerCode
#define JucePlugin_AAXManufacturerCode JucePlugin_ManufacturerCode
@ -319,7 +310,7 @@
#define JucePlugin_AAXProductId JucePlugin_PluginCode
#endif
#ifndef JucePlugin_AAXCategory
#define JucePlugin_AAXCategory AAX_ePlugInCategory_SoundField
#define JucePlugin_AAXCategory AAX_ePlugInCategory_Dynamics
#endif
#ifndef JucePlugin_AAXDisableBypass
#define JucePlugin_AAXDisableBypass 0
@ -327,5 +318,14 @@
#ifndef JucePlugin_AAXDisableMultiMono
#define JucePlugin_AAXDisableMultiMono 0
#endif
#ifndef JucePlugin_MaxNumInputChannels
#define JucePlugin_MaxNumInputChannels 0
#endif
#ifndef JucePlugin_MaxNumOutputChannels
#define JucePlugin_MaxNumOutputChannels 2
#endif
#ifndef JucePlugin_PreferredChannelConfigurations
#define JucePlugin_PreferredChannelConfigurations {0,2}
#endif
#endif // __JUCE_APPCONFIG_AX3KPE__
#endif // __JUCE_APPCONFIG_NAPIAV__

View file

@ -0,0 +1,315 @@
/* ==================================== JUCER_BINARY_RESOURCE ====================================
This is an auto-generated file: Any edits you make may be overwritten!
*/
namespace BinaryData
{
//================== proaudio.path ==================
static const unsigned char temp_binary_data_0[] =
{ 110,109,94,122,189,65,86,174,63,67,108,152,230,10,67,178,93,132,66,108,242,130,195,66,178,93,132,66,108,152,230,10,67,0,0,0,0,108,22,94,178,66,0,0,0,0,108,210,215,29,66,68,75,189,66,108,172,33,146,66,68,75,189,66,99,109,0,64,144,66,137,57,121,65,98,65,
235,252,65,200,166,160,65,0,0,0,0,30,34,90,66,0,0,0,0,49,117,192,66,98,0,0,0,0,164,28,244,66,146,92,66,65,123,22,17,67,0,24,248,65,24,246,31,67,108,0,20,19,66,152,165,20,67,98,144,78,175,65,77,16,8,67,0,216,71,65,181,140,234,66,0,216,71,65,49,117,192,
66,98,0,216,71,65,217,128,127,66,69,240,10,66,47,102,19,66,0,150,129,66,196,64,236,65,108,0,64,144,66,137,57,121,65,99,109,0,10,1,67,196,28,246,65,108,0,237,244,66,98,92,37,66,98,112,181,0,67,130,44,56,66,101,29,6,67,18,42,79,66,128,112,10,67,98,76,105,
66,108,128,225,24,67,98,76,105,66,98,8,26,19,67,116,188,61,66,81,235,10,67,112,11,24,66,0,10,1,67,197,28,246,65,99,109,128,72,26,67,98,60,116,66,108,0,18,17,67,49,49,142,66,98,122,31,20,67,138,193,157,66,0,209,21,67,138,178,174,66,0,209,21,67,49,117,
192,66,98,0,209,21,67,193,55,6,67,176,74,238,66,152,227,36,67,255,76,162,66,152,227,36,67,98,152,174,148,66,152,227,36,67,199,139,135,66,181,227,35,67,254,69,118,66,152,13,34,67,108,254,113,81,66,24,21,44,67,98,230,66,117,66,56,126,47,67,144,7,142,66,
24,97,49,67,255,76,162,66,24,97,49,67,98,54,203,251,66,24,97,49,67,0,79,34,67,81,248,12,67,0,79,34,67,48,117,192,66,98,0,79,34,67,4,70,167,66,172,108,31,67,253,104,143,66,128,72,26,67,96,60,116,66,99,101,0,0,0,0 };
const char* proaudio_path = (const char*) temp_binary_data_0;
//================== singing.ogg ==================
static const unsigned char temp_binary_data_1[] =
{ 79,103,103,83,0,2,0,0,0,0,0,0,0,0,153,3,97,43,0,0,0,0,80,169,198,253,1,30,1,118,111,114,98,105,115,0,0,0,0,1,68,172,0,0,0,0,0,0,0,119,1,0,0,0,0,0,184,1,79,103,103,83,0,0,0,0,0,0,0,0,0,0,153,3,97,43,1,0,0,0,7,4,119,201,16,63,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,201,3,118,111,114,98,105,115,47,0,0,0,88,105,112,104,46,79,114,103,32,108,105,98,86,111,114,98,105,115,32,73,32,50,48,49,52,48,49,50,50,32,40,84,117,114,112,97,107,195,164,114,195,164,106,105,105,110,41,0,0,0,0,1,5,118,111,
114,98,105,115,41,66,67,86,1,0,8,0,0,0,49,76,32,197,128,208,144,85,0,0,16,0,0,96,36,41,14,147,102,73,41,165,148,161,40,121,152,148,72,73,41,165,148,197,48,137,152,148,137,197,24,99,140,49,198,24,99,140,49,198,24,99,140,32,52,100,21,0,0,4,0,128,40,9,142,
163,230,73,106,206,57,103,24,39,142,114,160,57,105,78,56,167,32,7,138,81,224,57,9,194,245,38,99,110,166,180,166,107,110,206,41,37,8,13,89,5,0,0,2,0,64,72,33,133,20,82,72,33,133,20,98,136,33,134,24,98,136,33,135,28,114,200,33,167,156,114,10,42,168,160,
130,10,50,200,32,131,76,50,233,164,147,78,58,233,168,163,142,58,234,40,180,208,66,11,45,180,210,74,76,49,213,86,99,174,189,6,93,124,115,206,57,231,156,115,206,57,231,156,115,206,9,66,67,86,1,0,32,0,0,4,66,6,25,100,16,66,8,33,133,20,82,136,41,166,152,
114,10,50,200,128,208,144,85,0,0,32,0,128,0,0,0,0,71,145,20,73,177,20,203,177,28,205,209,36,79,242,44,81,19,53,209,51,69,83,84,77,85,85,85,85,117,93,87,118,101,215,118,117,215,118,125,89,152,133,91,184,125,89,184,133,91,216,133,93,247,133,97,24,134,97,
24,134,97,24,134,97,248,125,223,247,125,223,247,125,32,52,100,21,0,32,1,0,160,35,57,150,227,41,162,34,26,162,226,57,162,3,132,134,172,2,0,100,0,0,4,0,32,9,146,34,41,146,163,73,166,102,106,174,105,155,182,104,171,182,109,203,178,44,203,178,12,132,134,
172,2,0,0,1,0,4,0,0,0,0,0,160,105,154,166,105,154,166,105,154,166,105,154,166,105,154,166,105,154,166,105,154,102,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,89,64,
104,200,42,0,64,2,0,64,199,113,28,199,113,36,69,82,36,199,114,44,7,8,13,89,5,0,200,0,0,8,0,64,82,44,197,114,52,71,115,52,199,115,60,199,115,60,71,116,68,201,148,76,205,244,76,15,8,13,89,5,0,0,2,0,8,0,0,0,0,0,64,49,28,197,113,28,201,209,36,79,82,45,211,
114,53,87,115,61,215,115,77,215,117,93,87,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,129,208,144,85,0,0,4,0,0,33,157,102,150,106,128,8,51,144,97,32,52,100,21,0,128,0,0,0,24,161,8,67,12,8,13,89,
5,0,0,4,0,0,136,161,228,32,154,208,154,243,205,57,14,154,229,160,169,20,155,211,193,137,84,155,39,185,169,152,155,115,206,57,231,156,108,206,25,227,156,115,206,41,202,153,197,160,153,208,154,115,206,73,12,154,165,160,153,208,154,115,206,121,18,155,7,
173,169,210,154,115,206,25,231,156,14,198,25,97,156,115,206,105,210,154,7,169,217,88,155,115,206,89,208,154,230,168,185,20,155,115,206,137,148,155,39,181,185,84,155,115,206,57,231,156,115,206,57,231,156,115,206,169,94,156,206,193,57,225,156,115,206,137,
218,155,107,185,9,93,156,115,206,249,100,156,238,205,9,225,156,115,206,57,231,156,115,206,57,231,156,115,206,9,66,67,86,1,0,64,0,0,4,97,216,24,198,157,130,32,125,142,6,98,20,33,166,33,147,30,116,143,14,147,160,49,200,41,164,30,141,142,70,74,169,131,80,
82,25,39,165,116,130,208,144,85,0,0,32,0,0,132,16,82,72,33,133,20,82,72,33,133,20,82,72,33,134,24,98,136,33,167,156,114,10,42,168,164,146,138,42,202,40,179,204,50,203,44,179,204,50,203,172,195,206,58,235,176,195,16,67,12,49,180,210,74,44,53,213,86,99,
141,181,230,158,115,174,57,72,107,165,181,214,90,43,165,148,82,74,41,165,32,52,100,21,0,0,2,0,64,32,100,144,65,6,25,133,20,82,72,33,134,152,114,202,41,167,160,130,10,8,13,89,5,0,0,2,0,8,0,0,0,240,36,207,17,29,209,17,29,209,17,29,209,17,29,209,17,29,207,
241,28,81,18,37,81,18,37,209,50,45,83,51,61,85,84,85,87,118,109,89,151,117,219,183,133,93,216,117,223,215,125,223,215,141,95,23,134,101,89,150,101,89,150,101,89,150,101,89,150,101,89,150,101,9,66,67,86,1,0,32,0,0,0,66,8,33,132,20,82,72,33,133,148,98,
140,49,199,156,131,78,66,9,129,208,144,85,0,0,32,0,128,0,0,0,0,71,113,20,199,145,28,201,145,36,75,178,36,77,210,44,205,242,52,79,243,52,209,19,69,81,52,77,83,21,93,209,21,117,211,22,101,83,54,93,211,53,101,211,85,101,213,118,101,217,182,101,91,183,125,
89,182,125,223,247,125,223,247,125,223,247,125,223,247,125,223,215,117,32,52,100,21,0,32,1,0,160,35,57,146,34,41,146,34,57,142,227,72,146,4,132,134,172,2,0,100,0,0,4,0,160,40,142,226,56,142,35,73,146,36,89,146,38,121,150,103,137,154,169,153,158,233,169,
162,10,132,134,172,2,0,0,1,0,4,0,0,0,0,0,160,104,138,167,152,138,167,136,138,231,136,142,40,137,150,105,137,154,170,185,162,108,202,174,235,186,174,235,186,174,235,186,174,235,186,174,235,186,174,235,186,174,235,186,174,235,186,174,235,186,174,235,186,
174,235,186,174,235,186,64,104,200,42,0,64,2,0,64,71,114,36,71,114,36,69,82,36,69,114,36,7,8,13,89,5,0,200,0,0,8,0,192,49,28,67,82,36,199,178,44,77,243,52,79,243,52,209,19,61,209,51,61,85,116,69,23,8,13,89,5,0,0,2,0,8,0,0,0,0,0,192,144,12,75,177,28,205,
209,36,81,82,45,213,82,53,213,82,45,85,84,61,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,213,52,77,211,52,129,208,144,149,0,0,25,0,0,35,65,6,25,132,16,138,114,144,66,110,61,88,8,49,230,36,5,161,57,
6,161,196,24,132,167,16,51,12,57,13,34,116,144,65,39,61,184,146,57,195,12,243,224,82,40,21,68,76,131,141,37,55,142,32,13,194,166,92,73,229,56,8,66,67,86,4,0,81,0,0,128,49,200,49,196,24,114,206,73,201,160,68,206,49,9,157,148,200,57,39,165,147,210,73,41,
45,150,24,51,41,37,166,18,99,227,156,163,210,73,201,164,148,24,75,138,157,164,18,99,137,173,0,0,128,0,7,0,128,0,11,161,208,144,21,1,64,20,0,0,98,12,82,10,41,133,148,82,206,41,230,144,82,202,49,229,28,82,74,57,167,156,83,206,57,8,29,132,202,49,6,157,131,
16,41,165,28,83,206,41,199,28,132,204,65,229,156,131,208,65,40,0,0,32,192,1,0,32,192,66,40,52,100,69,0,16,39,0,224,112,36,207,147,52,75,20,37,75,19,69,207,20,101,215,19,77,215,149,52,205,52,53,81,84,85,203,19,85,213,84,85,219,22,77,85,182,37,77,19,77,
77,244,84,85,19,69,85,21,85,211,150,77,85,181,109,207,52,101,217,84,85,221,22,85,213,182,101,219,22,126,87,150,117,223,51,77,89,22,85,213,214,77,85,181,117,215,150,125,95,214,109,93,152,52,205,52,53,81,84,85,77,20,85,213,84,85,219,54,85,215,182,53,81,
116,85,81,85,101,89,84,85,89,118,101,89,247,85,87,214,125,75,20,85,213,83,77,217,21,85,85,182,85,217,245,109,85,150,125,225,116,85,93,87,101,217,247,85,89,22,126,91,215,133,225,246,125,225,24,85,213,214,77,215,213,117,85,150,125,97,214,101,97,183,117,
223,40,105,154,105,106,162,168,170,154,40,170,170,169,170,182,109,170,174,173,91,162,232,170,162,170,202,178,103,170,174,172,202,178,175,171,174,108,235,154,40,170,174,168,170,178,44,170,170,44,171,178,172,251,170,44,235,182,168,170,186,173,202,178,176,
155,174,171,235,182,239,11,195,44,235,186,112,170,174,174,171,178,236,251,170,44,235,186,173,235,198,113,235,186,48,124,166,41,203,166,171,234,186,169,186,186,110,235,186,113,204,182,109,28,163,170,234,190,42,203,194,176,202,178,239,235,186,47,180,117,
33,81,85,117,221,148,93,227,87,101,89,247,109,95,119,158,91,247,133,178,109,59,191,173,251,202,113,235,186,210,248,57,207,111,28,185,182,109,28,179,110,27,191,173,251,198,243,43,63,97,56,142,165,103,154,182,109,170,170,173,155,170,171,235,178,110,43,
195,172,235,66,81,85,125,93,149,101,223,55,93,89,23,110,223,55,142,91,215,141,162,170,234,186,42,203,190,176,202,178,49,220,198,111,28,187,48,28,93,219,54,142,91,215,157,178,173,11,125,99,200,247,9,207,107,219,198,113,251,58,227,246,117,163,175,12,9,
199,143,0,0,128,1,7,0,128,0,19,202,64,161,33,43,2,128,56,1,0,6,33,231,20,83,16,42,197,32,116,16,82,234,32,164,84,49,6,33,115,78,74,197,28,148,80,74,106,33,148,212,42,198,32,84,142,73,200,156,147,18,74,104,41,148,210,82,7,161,165,80,74,107,161,148,214,
82,107,177,166,212,98,237,32,164,22,74,105,45,148,210,90,106,169,198,212,90,140,17,99,16,50,231,164,100,206,73,9,165,180,22,74,105,45,115,78,74,231,160,164,14,66,74,165,164,20,75,74,45,86,204,73,201,160,163,210,65,72,169,164,18,83,73,169,181,80,74,107,
165,164,22,75,74,49,182,20,91,110,49,214,28,74,105,45,164,18,91,73,41,198,20,83,109,45,198,154,35,198,32,100,206,73,201,156,147,18,74,105,45,148,210,90,229,152,148,14,66,74,153,131,146,74,74,173,149,146,82,204,156,147,210,65,72,169,131,142,74,73,41,182,
146,74,76,161,148,214,74,74,177,133,82,90,108,49,214,156,82,108,53,148,210,90,73,41,198,146,74,108,45,198,90,91,76,181,117,16,90,11,165,180,22,74,105,173,181,86,107,106,173,198,80,74,107,37,165,24,75,74,177,181,22,107,110,49,230,26,74,105,173,164,18,
91,73,169,197,22,91,142,45,198,154,83,107,53,166,214,106,110,49,230,26,91,109,61,214,154,115,74,173,214,212,82,141,45,198,154,99,109,189,213,154,123,239,32,164,22,74,105,45,148,210,98,106,45,198,214,98,173,161,148,214,74,42,177,149,146,90,108,49,230,
218,90,140,57,148,210,98,73,169,197,146,82,140,45,198,154,91,108,185,166,150,106,108,49,230,154,82,139,181,230,218,115,108,53,246,212,90,172,45,198,154,83,75,181,214,90,115,143,185,245,86,0,0,192,128,3,0,64,128,9,101,160,208,144,149,0,64,20,0,0,65,136,
82,206,73,105,16,114,204,57,42,9,66,204,57,39,169,114,76,66,41,41,85,204,65,8,37,181,206,57,41,41,197,214,57,8,37,165,22,75,42,45,197,86,107,41,41,181,22,107,45,0,0,160,192,1,0,32,192,6,77,137,197,1,10,13,89,9,0,68,1,0,32,198,32,196,24,132,6,25,165,24,
131,208,24,164,20,99,16,34,165,24,115,78,74,165,20,99,206,73,201,24,115,14,66,42,25,99,206,65,40,41,132,80,74,42,41,133,16,74,73,37,165,2,0,0,10,28,0,0,2,108,208,148,88,28,160,208,144,21,1,64,20,0,0,96,12,98,12,49,134,32,116,84,50,42,17,132,76,74,39,
169,129,16,90,11,173,117,214,82,107,165,197,204,90,106,173,180,216,64,8,173,133,214,50,75,37,198,212,90,102,173,196,152,90,43,0,0,236,192,1,0,236,192,66,40,52,100,37,0,144,7,0,64,24,163,20,99,206,57,103,16,98,204,57,232,28,52,8,49,230,28,132,14,42,198,
156,131,14,66,8,21,99,206,65,8,33,132,204,57,8,33,132,16,66,230,28,132,16,66,8,161,131,16,66,8,165,148,210,65,8,33,132,82,74,233,32,132,16,66,41,165,116,16,66,8,161,148,82,10,0,0,42,112,0,0,8,176,81,100,115,130,145,160,66,67,86,2,0,121,0,0,128,49,74,
57,7,161,148,70,41,198,32,148,146,82,163,20,99,16,74,73,169,114,12,66,41,41,197,86,57,7,161,148,148,90,236,32,148,210,90,108,53,118,16,74,105,45,198,90,67,74,173,197,88,107,174,33,165,214,98,172,53,215,212,90,140,181,230,154,107,74,45,198,90,107,205,
185,0,0,220,5,7,0,176,3,27,69,54,39,24,9,42,52,100,37,0,144,7,0,128,32,164,20,99,140,49,134,20,98,138,49,231,156,67,8,41,197,152,115,206,41,166,24,115,206,57,231,148,98,140,57,231,156,115,140,49,231,156,115,206,57,198,152,115,206,57,231,28,115,206,57,
231,156,115,142,57,231,156,115,206,57,231,156,115,206,57,231,156,115,206,57,231,156,115,206,9,0,0,42,112,0,0,8,176,81,100,115,130,145,160,66,67,86,2,0,169,0,0,0,17,86,98,140,49,198,24,27,8,49,198,24,99,140,49,70,18,98,140,49,198,24,99,108,49,198,24,99,
140,49,198,152,98,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,99,140,49,198,24,91,107,173,181,214,90,107,173,181,214,90,107,173,
181,214,90,107,173,0,64,191,10,7,0,255,7,27,86,71,56,41,26,11,44,52,100,37,0,16,14,0,0,24,195,152,115,142,57,6,29,132,134,41,232,164,132,14,66,8,161,67,74,57,40,37,132,80,74,41,41,115,78,74,74,165,164,148,90,74,153,115,82,82,42,37,165,150,82,234,32,164,
212,90,74,45,181,214,90,7,37,165,214,82,106,173,181,214,58,8,165,180,212,90,107,173,181,216,65,72,41,165,214,90,139,45,198,80,74,74,173,181,216,98,140,53,134,82,82,106,173,197,216,98,172,49,164,210,82,108,45,198,24,99,172,161,148,214,90,107,49,198,24,
107,45,41,181,214,98,140,181,198,90,107,73,169,181,214,98,139,53,214,90,11,0,224,110,112,0,128,72,176,113,134,149,164,179,194,209,224,66,67,86,2,0,33,1,0,4,66,140,57,231,156,115,16,66,8,33,82,138,49,231,160,131,16,66,8,33,68,74,49,230,28,116,16,66,8,
33,132,140,49,231,160,131,16,66,8,33,132,144,49,230,28,116,16,66,8,33,132,16,58,231,28,132,16,66,8,161,132,82,74,231,28,116,16,66,8,33,148,80,66,233,32,132,16,66,8,161,132,82,74,41,29,132,16,66,40,161,132,82,74,41,37,132,16,66,9,165,148,82,74,41,165,
132,16,66,8,161,132,18,74,41,165,148,16,66,8,165,148,82,74,41,165,148,18,66,8,33,148,82,74,41,165,148,82,66,8,161,148,80,74,41,165,148,82,74,8,33,132,82,74,41,165,148,82,74,9,33,132,80,74,41,165,148,82,74,41,33,132,18,74,41,165,148,82,74,41,165,0,0,128,
3,7,0,128,0,35,232,36,163,202,34,108,52,225,194,3,80,104,200,74,0,128,12,0,0,113,216,106,235,41,214,200,32,197,156,132,150,75,132,144,114,16,98,46,17,82,138,57,71,177,101,72,25,197,24,213,148,49,165,20,83,82,107,232,156,98,140,81,79,157,99,74,49,195,
172,148,86,74,40,145,130,210,114,172,181,118,204,1,0,0,32,8,0,48,16,33,51,129,64,1,20,24,200,0,128,3,132,4,41,0,160,176,192,208,49,92,4,4,228,18,50,10,12,10,199,132,115,210,105,3,0,16,132,200,12,145,136,88,12,18,19,170,129,162,98,58,0,88,92,96,200,7,
128,12,141,141,180,139,11,232,50,192,5,93,220,117,32,132,32,4,33,136,197,1,20,144,128,131,19,110,120,226,13,79,184,193,9,58,69,165,14,2,0,0,0,0,0,1,0,30,0,0,146,13,32,34,34,154,57,142,14,143,15,144,16,145,17,146,18,147,19,148,0,0,0,0,0,224,1,128,15,0,
128,36,5,136,136,136,102,142,163,195,227,3,36,68,100,132,164,196,228,4,37,0,0,0,0,0,0,0,0,0,8,8,8,0,0,0,0,0,4,0,0,0,8,8,79,103,103,83,0,0,192,59,0,0,0,0,0,0,153,3,97,43,2,0,0,0,169,58,23,146,32,54,52,54,58,246,252,255,12,255,7,255,14,255,15,255,12,255,
20,255,5,255,19,255,6,255,2,255,10,255,6,255,15,108,10,93,103,243,86,237,103,242,178,237,171,132,106,161,21,240,144,229,148,39,23,205,161,7,170,63,255,218,246,159,99,9,186,194,98,255,239,156,233,243,100,152,234,139,235,28,253,245,165,3,176,44,0,204,62,
187,180,111,251,214,188,164,74,125,21,168,22,74,3,51,87,217,141,56,149,115,45,74,200,214,241,10,132,158,211,211,255,207,149,250,56,248,192,225,63,83,149,77,7,219,103,135,3,149,13,196,82,131,12,176,111,197,183,144,68,125,21,232,76,106,54,192,207,101,206,
112,195,58,181,36,122,13,23,27,91,61,248,234,122,101,102,71,239,206,215,38,90,47,156,4,254,252,101,50,168,20,34,254,3,196,94,101,245,140,93,13,223,79,8,81,179,79,107,168,64,80,177,49,152,47,119,116,28,60,191,65,202,172,65,150,112,96,199,151,199,38,46,
18,228,146,91,59,181,144,236,238,193,229,102,13,0,252,178,46,175,76,0,58,201,69,86,220,237,117,135,187,251,132,250,44,51,160,130,178,255,128,10,16,224,199,1,132,3,10,6,193,249,4,0,97,49,41,75,48,3,200,91,10,172,132,126,185,93,193,235,193,121,53,231,164,
186,222,170,51,149,116,63,185,140,0,251,47,69,128,184,253,82,14,160,54,127,57,5,176,186,153,242,232,81,63,253,179,89,65,47,140,83,2,190,216,252,189,170,176,202,52,167,12,168,170,185,102,110,172,13,25,157,166,99,141,223,124,249,188,162,222,98,45,181,250,
13,40,46,203,73,9,163,118,65,187,222,133,248,223,158,250,104,198,110,47,95,144,89,2,118,252,90,133,59,96,126,124,153,79,108,170,50,214,29,170,79,205,241,172,138,190,202,245,232,57,26,24,160,15,201,112,37,54,131,48,80,196,233,242,124,233,245,39,127,213,
245,232,127,139,187,112,192,217,31,61,17,240,173,37,56,53,207,246,229,28,183,13,240,9,215,231,75,250,131,12,44,69,193,219,241,161,81,244,209,126,53,61,155,179,187,252,121,190,181,209,25,87,5,62,217,133,89,221,234,54,205,89,238,30,119,132,143,62,42,87,
16,240,31,208,0,39,240,253,171,0,29,135,134,42,215,16,59,86,146,7,74,96,113,224,26,0,242,192,3,208,38,60,118,134,2,57,128,190,103,61,240,15,75,5,192,14,29,115,43,232,68,245,90,0,206,182,12,2,240,187,79,210,0,248,223,152,7,64,156,45,14,245,143,237,15,
83,64,38,154,95,41,36,189,58,129,149,112,46,231,86,3,160,110,214,42,248,228,223,244,36,21,116,53,255,110,176,215,202,105,0,113,146,247,64,128,214,206,190,122,112,163,18,113,250,243,159,237,185,8,160,0,188,52,193,7,50,83,93,46,128,158,122,155,100,228,
254,124,198,130,250,229,255,58,144,235,100,166,239,145,192,154,83,181,181,254,197,182,168,104,103,185,115,253,224,42,49,120,181,43,36,195,6,230,47,65,7,153,160,176,125,173,74,236,180,27,235,46,167,1,254,39,46,211,186,26,133,195,149,39,82,10,74,234,165,
136,4,62,158,238,185,146,125,0,242,39,198,36,104,14,167,173,2,119,160,3,62,185,101,161,111,244,82,148,83,238,206,142,68,55,57,85,19,82,65,209,191,128,6,52,0,192,97,3,140,48,70,62,224,46,160,198,87,16,199,97,151,60,8,28,80,101,87,192,204,3,29,193,0,48,
53,20,232,25,250,127,202,65,199,9,240,89,192,214,1,248,158,10,0,237,214,17,3,192,141,181,2,184,93,6,129,4,205,50,67,0,128,163,186,136,8,101,217,148,2,66,253,25,5,128,245,102,170,170,46,88,237,114,64,77,190,54,160,66,7,64,100,178,57,77,17,122,37,222,205,
33,88,102,244,193,205,83,238,2,37,0,196,15,130,59,112,120,42,180,160,211,89,36,71,147,55,69,163,247,249,231,41,32,148,182,221,165,6,216,189,15,159,19,2,66,142,19,94,73,33,225,202,229,123,191,148,224,247,102,0,62,59,0,237,255,78,0,72,235,201,6,240,235,
127,189,112,85,176,159,143,232,203,141,61,9,192,243,125,166,132,202,58,192,23,208,192,164,160,126,253,214,130,92,186,20,12,162,92,225,175,210,138,18,14,70,136,208,47,213,154,106,98,8,192,41,105,34,15,160,157,117,92,78,212,1,45,18,0,30,185,101,97,156,
98,163,218,108,119,53,35,188,111,160,77,192,57,251,23,0,0,208,0,15,80,1,116,129,49,218,7,124,7,112,0,190,1,235,144,124,242,32,112,116,12,162,131,25,1,130,61,192,93,152,148,14,24,20,193,217,106,2,147,107,0,255,54,208,93,2,0,230,2,14,0,224,109,218,0,240,
213,86,5,168,164,29,145,128,28,11,139,4,0,240,30,101,1,106,219,59,35,88,0,87,222,2,197,62,166,67,147,204,137,6,74,73,168,65,20,10,0,133,171,162,37,214,229,252,108,62,189,165,49,231,55,236,69,1,0,135,22,174,86,107,160,227,166,4,138,113,150,126,193,218,
75,77,79,160,240,192,51,33,208,179,123,73,11,64,182,182,182,10,192,100,190,234,150,6,105,117,31,134,26,30,82,184,2,32,199,3,30,59,3,128,0,54,5,116,172,31,183,32,170,62,140,141,34,16,30,224,170,105,29,64,78,44,28,199,5,141,27,183,218,81,251,236,2,67,9,
202,206,98,83,203,90,46,52,133,47,83,245,154,236,138,189,59,195,218,162,215,253,83,62,206,155,54,50,152,30,4,0,30,185,213,25,63,113,169,202,189,239,250,142,176,155,20,102,3,228,236,95,64,5,84,0,128,15,232,87,224,90,64,9,172,15,120,73,96,78,224,3,48,216,
128,151,30,80,208,192,1,5,9,178,196,147,0,16,77,48,124,160,24,216,70,88,63,148,128,117,185,0,95,155,129,203,68,1,64,253,142,2,128,124,141,6,0,208,21,71,1,160,60,36,0,40,83,190,54,2,0,80,16,5,16,43,203,195,54,5,32,39,144,0,156,14,2,21,123,187,83,128,238,
46,214,168,132,212,243,1,153,233,87,39,253,221,64,0,0,0,224,70,74,212,233,255,90,86,161,83,102,147,238,66,183,110,15,165,52,94,175,69,193,115,229,68,222,17,128,170,91,18,45,14,86,253,184,125,21,114,19,185,180,129,18,72,93,118,169,39,152,80,122,87,13,
16,170,170,190,18,1,33,83,31,194,146,255,57,129,129,216,4,31,193,110,72,70,7,160,192,64,237,229,13,64,125,127,145,0,82,32,219,158,169,159,49,226,219,32,0,2,108,94,226,192,93,169,80,199,139,33,46,180,51,150,200,87,59,128,54,189,220,63,25,43,46,110,171,
1,76,0,30,185,101,153,212,232,198,148,123,220,101,139,25,238,134,65,49,17,206,65,127,1,21,0,0,224,3,118,12,40,1,37,176,62,224,60,129,11,240,13,40,60,32,128,29,225,65,224,152,40,66,3,7,52,4,56,0,159,128,236,50,52,162,130,41,176,5,172,103,69,224,180,117,
128,83,18,232,56,0,224,102,136,2,0,82,203,2,0,14,153,16,0,108,197,7,32,66,126,26,40,0,200,108,134,66,130,38,15,37,0,64,60,4,1,0,167,19,72,66,32,95,53,0,245,102,45,161,35,75,69,0,108,202,79,141,144,56,121,94,58,21,143,38,186,40,80,0,2,23,69,165,90,201,
172,212,22,133,90,221,215,0,194,249,93,160,220,39,246,0,0,160,83,97,125,246,224,99,30,130,118,139,11,228,108,79,15,222,157,28,217,15,75,154,255,207,49,239,156,103,131,9,185,127,86,1,100,109,159,108,3,232,182,201,78,11,99,81,41,160,243,31,224,219,1,115,
76,52,72,162,52,174,132,9,31,89,1,3,144,2,16,207,57,175,129,202,191,27,161,39,25,32,144,237,123,103,162,132,222,85,189,212,153,101,167,97,246,182,180,207,0,30,185,21,153,56,137,11,83,206,184,239,98,171,243,97,108,128,245,15,0,232,115,224,143,42,128,151,
7,168,0,182,177,1,22,63,224,2,28,1,156,39,144,54,64,45,112,192,148,58,56,96,12,96,160,10,184,205,120,45,225,49,197,96,3,159,173,147,208,87,140,3,128,254,223,30,198,82,64,114,71,0,64,57,135,22,0,100,59,27,128,82,255,13,64,133,57,18,0,186,253,92,11,0,242,
22,26,157,2,238,216,196,19,2,36,93,163,6,192,115,40,169,30,110,10,160,190,160,134,161,199,155,252,205,200,183,253,64,226,201,65,81,1,202,1,224,204,29,161,226,147,45,27,61,118,151,188,140,80,8,252,232,132,100,26,227,247,166,67,167,190,243,90,18,128,161,
103,95,27,211,31,242,61,48,252,119,175,218,140,166,27,99,192,163,212,60,29,34,64,180,156,102,242,254,118,174,14,200,17,190,123,64,1,24,255,118,112,138,104,123,130,119,0,192,224,4,233,112,49,6,32,1,128,29,11,209,255,100,123,69,245,233,48,64,44,88,213,
144,145,186,65,110,135,35,70,170,179,242,14,54,103,138,55,98,99,66,3,0,254,184,21,153,212,138,11,215,206,184,118,17,222,239,144,76,160,211,47,192,0,0,128,7,56,3,40,176,42,218,7,92,128,111,192,45,128,217,3,0,74,8,8,28,208,1,28,48,70,3,210,131,2,0,36,97,
210,204,100,11,154,129,194,8,30,183,38,176,79,77,224,231,5,116,74,1,32,55,165,20,0,226,95,6,0,103,79,4,160,206,38,32,16,105,178,201,3,64,81,222,196,72,64,84,244,221,0,0,32,161,7,96,225,114,20,218,53,144,220,132,82,238,161,236,3,189,156,106,0,30,183,215,
69,113,101,62,77,120,40,121,50,198,219,223,94,0,8,0,44,22,161,201,18,159,89,82,131,123,108,31,69,52,86,215,68,7,46,229,108,54,58,151,178,210,201,0,128,222,12,211,216,77,79,119,125,146,253,32,213,107,230,145,13,28,120,58,167,118,1,118,52,63,161,10,16,
122,214,184,77,1,136,168,203,117,255,23,146,186,33,45,182,29,66,6,212,47,160,95,247,116,96,177,87,208,237,246,79,17,21,64,215,89,33,9,255,72,15,115,2,86,178,8,236,167,177,159,179,212,90,93,175,2,126,137,32,251,79,130,89,219,169,43,128,61,1,30,185,101,
65,45,197,96,194,115,94,83,196,247,123,172,77,84,215,95,64,3,42,0,192,7,184,3,56,1,42,128,181,195,32,22,129,39,128,203,6,168,4,3,28,48,49,193,1,99,0,146,168,3,150,8,70,3,69,129,21,208,63,87,192,58,191,0,239,79,96,158,5,0,28,125,75,0,64,214,136,5,5,192,
112,121,0,96,145,39,148,51,188,107,5,96,189,109,158,130,88,235,27,99,69,0,82,30,167,29,40,76,169,232,103,198,242,28,80,244,205,20,192,235,41,208,112,236,162,116,197,240,211,185,26,243,99,92,221,75,245,8,120,1,64,89,90,73,73,220,152,183,222,118,167,126,
40,104,53,185,221,138,245,97,140,125,109,150,154,33,228,34,85,46,163,222,125,63,123,235,222,82,45,181,115,171,173,26,132,176,195,180,46,0,221,218,155,188,2,104,186,232,40,164,8,210,170,63,168,187,189,25,177,148,53,49,253,36,53,40,21,85,198,144,55,42,
145,246,53,1,29,6,251,221,92,230,105,146,146,90,4,141,78,77,251,160,41,53,192,201,166,136,80,162,216,245,25,202,106,153,0,254,168,197,97,47,231,160,210,46,71,23,211,238,134,130,19,153,167,95,64,3,12,0,120,128,87,96,27,155,209,63,160,3,80,2,47,9,28,54,
64,11,6,56,14,29,59,240,0,64,9,64,240,37,192,65,51,39,45,71,49,144,23,232,45,128,179,215,4,234,148,1,199,14,0,216,85,141,3,0,168,109,7,160,66,83,128,31,129,56,192,37,87,33,1,0,52,113,60,149,86,86,249,69,75,37,96,119,98,20,20,230,33,52,183,149,131,37,
229,196,119,128,131,158,43,14,50,62,85,178,81,100,254,223,217,125,227,129,48,169,7,21,2,16,1,0,164,7,113,178,4,98,88,172,232,245,237,0,152,19,3,77,243,228,74,222,189,87,159,214,221,247,149,243,2,55,87,255,164,154,153,191,23,110,94,75,117,147,171,185,
128,191,239,191,227,178,0,186,11,204,211,4,112,170,151,28,1,134,61,189,222,51,207,171,203,26,9,123,196,247,216,17,31,184,185,120,192,46,79,233,216,81,210,82,191,93,65,203,240,247,144,214,8,53,89,73,57,154,13,27,100,201,181,32,164,207,194,123,132,76,36,
101,100,143,145,177,122,4,183,194,108,122,98,131,2,30,169,101,153,30,31,69,56,227,88,33,166,147,7,27,72,150,252,11,0,104,0,128,15,216,11,80,1,116,9,136,29,6,49,52,112,14,8,43,240,101,0,56,96,98,130,3,26,26,24,46,134,3,82,150,204,76,97,132,254,81,13,208,
111,70,224,29,11,184,148,0,5,174,12,9,0,138,128,203,1,0,188,22,185,0,128,137,192,0,24,126,54,17,192,211,206,146,176,80,146,12,3,0,196,35,223,64,32,233,184,27,245,246,75,160,169,121,60,11,82,112,64,4,7,254,55,215,216,180,113,157,205,153,67,185,224,86,
180,20,64,0,0,5,21,78,41,131,198,82,9,188,129,150,75,229,53,244,201,223,207,171,153,215,146,22,227,162,57,140,5,123,186,50,192,195,59,215,118,15,112,178,223,87,14,128,242,162,175,176,66,9,251,35,117,185,141,106,124,136,120,145,162,71,164,201,101,98,167,
8,1,128,66,251,158,136,208,45,9,141,12,37,224,104,189,226,63,162,208,232,196,67,199,25,95,225,66,182,214,74,102,92,118,171,116,249,69,152,27,18,210,237,170,30,36,183,170,242,184,3,116,0,222,168,197,97,139,216,48,179,108,134,240,123,15,131,129,36,240,
47,0,0,0,192,14,91,99,51,176,9,40,14,131,40,24,18,213,21,16,210,120,112,28,14,192,6,76,193,20,192,65,3,180,128,100,64,93,176,107,77,224,46,229,192,71,128,142,0,92,249,89,0,212,69,43,1,224,166,144,18,10,0,66,201,9,234,47,13,81,96,252,104,144,116,193,159,
39,67,23,208,249,4,133,128,1,173,183,152,102,83,235,80,122,3,141,138,88,1,113,169,39,49,154,97,176,81,103,129,248,222,179,79,62,37,80,5,12,0,112,69,64,252,146,146,152,94,182,231,220,119,19,195,165,155,192,105,114,238,33,236,239,125,120,112,251,171,121,
221,57,121,214,19,164,247,118,53,109,145,16,140,121,245,48,93,9,140,124,114,15,49,33,141,200,65,106,182,107,74,145,133,9,201,110,157,90,245,66,141,18,223,33,235,126,234,232,235,41,192,37,65,239,162,15,36,9,142,74,157,239,45,1,150,128,91,250,224,46,126,
116,192,153,97,16,105,198,147,14,146,97,11,156,239,98,11,13,128,7,18,0,254,168,5,185,177,141,76,148,51,78,165,171,237,174,192,213,128,235,31,80,1,117,50,240,75,10,224,245,3,84,2,74,224,105,64,177,67,199,64,224,27,48,91,0,50,112,60,58,58,216,0,6,37,0,
39,3,40,48,3,245,51,172,191,41,7,235,249,23,1,128,198,237,198,212,117,0,186,83,73,0,136,190,167,4,0,173,15,80,0,176,55,19,80,0,232,198,138,2,245,191,157,80,120,25,10,75,64,15,26,38,34,0,74,142,61,128,98,66,77,77,134,183,159,160,130,250,91,136,151,51,
39,169,183,254,245,233,69,162,25,54,187,3,184,20,0,174,80,168,63,112,124,221,98,154,139,198,252,158,237,50,236,218,21,132,93,75,138,77,237,95,204,251,175,86,211,65,182,108,168,2,140,188,125,33,13,128,204,116,190,175,173,43,171,185,12,95,252,214,72,115,
31,130,59,111,162,76,96,188,50,247,132,63,147,217,203,15,104,248,126,116,2,0,176,160,160,58,89,220,213,1,148,4,105,120,164,255,23,16,0,51,156,233,53,102,76,15,91,84,187,5,185,138,58,145,104,59,44,119,63,151,129,195,146,188,0,30,169,197,234,56,201,129,
181,81,78,37,194,222,195,82,94,127,1,21,0,0,224,1,70,192,214,24,161,127,192,6,240,0,206,19,104,43,32,131,57,176,113,152,54,128,161,104,128,7,208,25,0,72,6,198,34,92,22,176,222,99,31,224,204,4,6,9,145,0,78,38,32,0,112,29,73,128,195,135,15,6,0,187,132,
180,0,220,184,77,0,160,10,36,65,98,157,203,173,1,0,146,124,13,5,212,1,64,151,108,124,40,128,200,238,175,33,49,148,19,179,5,69,252,107,156,212,212,253,201,153,68,20,215,174,148,217,110,191,205,49,205,31,191,222,183,91,214,24,91,106,131,130,166,40,0,198,
242,240,128,44,184,79,186,111,76,135,220,229,39,25,6,134,92,154,142,192,188,81,59,91,22,192,187,248,235,17,64,241,157,59,253,96,5,154,18,46,54,147,2,159,132,152,185,73,49,186,177,229,38,115,253,84,0,0,174,121,79,52,34,165,127,75,167,111,139,232,0,144,
235,0,74,69,54,144,227,199,118,121,41,187,54,74,115,158,159,104,192,108,25,208,187,63,219,203,200,132,92,45,224,14,0,30,169,165,217,222,204,196,218,200,151,210,149,157,123,14,145,1,247,47,160,2,26,0,224,1,78,128,197,14,155,63,64,1,60,128,15,128,88,0,
90,122,8,62,57,176,1,83,176,54,1,119,7,0,5,36,3,113,8,235,163,90,208,255,56,12,250,79,192,102,6,0,208,24,51,0,160,115,81,56,112,43,93,0,88,14,194,194,83,178,151,12,8,104,217,78,45,149,41,226,148,64,74,11,210,204,5,165,244,160,165,156,132,182,119,90,56,
210,15,147,80,214,237,1,155,188,93,34,167,122,82,0,24,1,128,17,170,71,157,217,150,88,204,3,159,230,47,218,217,212,168,81,17,69,218,250,123,216,187,171,82,145,10,75,7,235,221,75,167,245,173,233,103,146,80,189,252,172,4,51,230,238,225,137,1,122,210,255,
57,0,190,125,116,173,2,96,95,201,139,88,114,46,60,33,167,207,98,107,35,128,154,172,169,235,27,72,50,15,206,210,214,94,1,64,139,240,93,236,218,43,192,89,202,148,204,209,21,73,3,232,148,238,218,135,35,179,74,137,128,132,83,63,79,193,135,90,131,125,55,102,
24,182,50,51,205,169,13,67,193,76,0,79,103,103,83,0,0,192,123,0,0,0,0,0,0,153,3,97,43,3,0,0,0,53,123,117,14,27,255,20,253,255,7,255,7,255,3,255,15,255,3,255,0,246,255,3,253,250,255,3,248,255,1,255,2,254,168,133,193,60,139,140,205,25,46,41,194,124,152,
152,8,39,228,95,128,129,6,0,248,0,35,64,2,74,64,238,208,209,128,91,0,107,5,148,1,224,120,28,128,13,104,50,44,3,54,3,38,167,3,176,6,201,192,188,3,222,163,6,232,175,13,5,30,41,128,2,31,148,0,85,174,2,0,28,62,233,0,128,52,96,1,64,94,9,205,82,132,253,124,
134,3,235,179,28,60,13,168,120,164,28,33,210,210,145,19,4,252,199,154,22,97,254,133,41,120,241,110,12,148,139,40,78,211,192,219,42,210,207,206,158,188,54,90,90,98,156,236,182,211,1,28,0,112,40,193,235,253,192,234,102,231,25,252,249,89,183,70,233,32,32,
0,0,156,95,90,175,189,119,18,121,153,123,120,164,84,241,160,43,153,142,167,188,245,166,127,46,110,75,180,160,169,91,0,167,117,170,232,4,204,195,11,180,42,0,250,58,217,3,12,40,60,136,13,131,112,194,137,2,187,181,118,197,115,37,5,76,76,45,255,12,179,105,
116,164,114,219,148,187,150,0,80,124,66,148,131,37,111,27,128,148,135,122,41,118,226,75,126,125,216,140,55,180,215,65,195,121,163,5,36,0,30,153,165,246,216,198,128,202,24,167,46,226,110,114,56,202,251,23,0,0,0,224,1,253,10,168,177,1,230,14,29,195,128,
7,208,250,210,13,120,93,48,0,7,133,137,20,200,169,224,253,117,128,175,219,11,156,49,129,34,7,0,240,10,75,1,224,96,65,0,216,253,84,64,20,123,117,202,52,46,218,72,137,52,94,23,16,42,117,242,187,64,1,16,219,164,23,8,31,38,190,136,105,170,245,145,23,15,29,
153,202,62,141,120,194,81,132,252,219,212,65,188,45,216,94,43,18,115,58,241,45,5,16,250,157,208,35,48,66,42,35,2,129,219,15,129,214,142,13,255,24,99,240,44,237,197,116,160,63,39,108,61,61,12,163,222,162,40,158,209,157,250,231,209,129,95,127,175,64,130,
1,128,238,92,147,255,185,38,213,249,237,43,151,29,61,109,153,228,176,106,6,142,60,148,166,73,160,236,112,95,180,109,33,49,12,208,142,86,253,53,158,177,250,159,87,81,148,193,67,38,184,240,220,126,233,237,118,80,38,88,93,155,64,15,166,152,70,28,244,141,
175,30,147,29,30,153,101,65,111,42,39,105,134,185,152,212,125,5,57,162,238,95,64,3,42,0,192,151,192,57,96,1,5,160,63,64,0,74,224,73,160,99,1,40,129,13,144,147,96,38,224,110,128,6,166,128,122,232,159,43,96,125,180,1,31,3,102,51,0,128,108,167,0,149,72,
190,45,0,137,218,174,4,0,188,206,43,42,173,195,202,130,3,0,20,25,157,82,107,235,181,29,41,165,68,252,48,26,64,121,106,195,50,175,83,41,157,98,84,222,55,77,244,53,201,147,239,141,143,147,180,201,148,249,230,40,0,238,212,254,46,202,199,199,237,155,239,
120,133,220,206,14,160,178,90,215,197,15,200,101,183,38,72,192,186,62,237,77,8,137,94,209,24,13,60,89,117,59,12,247,66,214,239,8,14,151,86,245,166,1,141,197,184,187,52,253,23,21,3,0,16,0,155,129,52,217,125,252,175,11,159,81,106,100,160,2,125,114,121,
226,242,2,218,95,111,28,189,205,13,0,126,98,145,75,2,118,136,245,150,36,9,34,252,251,189,216,13,29,206,187,104,204,166,193,185,254,96,222,118,155,213,114,89,173,92,76,0,30,153,213,106,47,99,100,74,61,103,142,248,190,199,100,128,132,244,23,208,0,0,0,15,
240,10,184,176,71,223,161,96,17,120,0,29,43,26,4,35,225,144,124,118,15,54,224,4,211,1,207,0,122,4,132,3,81,128,254,2,184,199,90,96,215,2,112,140,43,2,128,62,152,1,0,37,137,160,176,159,0,128,196,37,9,52,194,217,75,7,117,157,12,182,150,144,192,207,174,
16,194,0,56,228,10,10,245,209,240,104,88,133,105,67,74,20,181,3,196,169,89,120,87,151,155,109,235,213,161,150,120,114,96,255,176,207,13,210,223,82,68,41,92,212,21,32,162,134,154,234,63,48,147,251,249,159,242,185,171,170,9,13,80,1,28,95,57,159,146,176,
144,148,16,204,10,247,182,32,176,113,233,218,46,0,149,126,69,131,49,193,55,63,165,146,66,249,26,3,193,28,202,245,214,204,232,112,71,240,239,224,130,221,200,189,231,62,112,238,155,105,55,110,0,0,160,142,138,97,182,88,89,31,101,103,215,255,185,48,196,17,
3,236,169,192,132,213,135,234,119,31,51,98,61,78,107,174,124,114,92,26,15,0,254,168,165,97,111,90,206,210,116,42,17,223,111,80,155,208,137,252,11,0,104,0,128,29,86,197,32,176,37,208,177,67,65,128,158,2,214,6,136,218,152,104,86,128,193,5,224,112,39,164,
3,214,5,250,111,202,64,127,182,30,120,7,96,205,3,112,51,42,0,207,94,11,0,88,92,13,41,0,64,25,171,180,168,254,85,170,162,197,248,170,149,56,113,90,190,22,178,14,132,186,100,51,80,20,42,5,88,150,132,63,75,40,94,231,15,105,23,50,115,7,63,108,222,0,40,1,
66,246,148,54,179,187,197,111,94,188,250,221,214,177,52,85,128,198,17,5,176,201,179,81,5,48,103,102,143,81,2,232,15,91,66,224,155,144,121,142,52,251,160,133,120,76,20,142,60,118,56,144,100,144,140,127,12,5,186,55,196,252,60,62,250,103,48,0,18,8,190,148,
122,226,147,138,238,37,37,143,135,1,96,2,218,213,121,3,64,107,97,201,170,118,22,13,56,216,192,134,99,94,205,130,96,209,250,173,198,62,162,147,165,13,32,192,244,206,239,138,133,6,96,135,75,92,140,209,52,97,43,3,254,152,101,86,111,35,23,237,88,138,48,31,
174,77,64,243,47,64,128,1,0,30,160,0,58,48,12,245,29,234,72,224,12,32,205,3,31,25,128,35,16,40,96,5,79,176,14,240,10,130,169,132,244,1,99,17,92,91,7,168,89,3,120,17,48,74,10,0,215,103,28,0,144,171,141,226,0,105,243,43,10,28,179,161,80,213,143,54,0,244,
143,80,120,136,119,143,172,167,0,16,161,168,43,143,134,72,244,40,15,166,123,5,212,179,2,213,253,13,170,19,228,168,53,120,196,226,7,15,27,227,91,223,118,254,199,5,7,4,0,170,11,148,231,238,109,207,231,53,142,173,217,153,75,186,175,159,34,20,0,94,67,55,
99,122,136,79,166,194,5,243,37,48,115,65,66,45,18,164,171,183,29,124,192,204,190,251,168,8,140,220,236,218,52,202,226,49,101,40,15,91,185,84,235,206,136,146,145,63,16,190,154,190,227,182,254,103,115,192,179,178,142,125,206,126,208,72,143,143,157,89,165,
197,22,24,147,94,62,220,200,56,1,152,239,104,166,49,218,217,70,230,184,70,65,0,242,78,125,154,163,251,141,67,196,14,165,158,147,27,48,3,222,168,149,97,155,181,81,181,145,207,37,194,123,30,182,1,246,47,160,2,42,0,192,3,250,0,46,24,163,237,80,67,128,189,
1,210,2,120,221,81,144,104,96,5,210,224,1,62,0,128,84,34,7,244,0,214,243,18,176,222,191,1,63,3,118,28,8,0,37,160,32,128,156,188,1,148,7,211,140,64,89,114,8,208,110,229,239,2,180,149,122,2,47,51,127,41,40,37,216,183,1,80,39,17,212,205,108,102,119,96,92,
31,81,44,102,40,187,67,226,247,250,122,234,94,1,0,0,80,17,160,135,31,54,45,10,103,123,159,246,170,247,200,34,56,128,74,64,233,135,255,20,190,178,122,19,58,29,136,166,188,149,214,201,43,128,224,234,87,5,192,193,167,23,217,2,104,156,121,96,132,129,244,
93,5,132,66,69,46,53,79,45,18,186,68,230,81,181,224,18,128,243,207,56,8,147,177,93,116,52,47,126,73,253,53,25,64,0,191,109,200,179,120,66,70,243,117,57,83,68,7,178,152,146,196,86,191,86,199,228,72,0,171,231,232,73,246,245,239,124,204,153,136,67,208,55,
3,116,54,222,152,101,217,222,174,156,149,237,226,98,50,157,187,53,224,253,5,84,0,0,128,7,168,4,58,49,198,252,128,11,144,128,10,96,89,0,50,61,58,26,10,88,1,6,19,32,187,18,22,40,204,176,190,181,43,240,183,67,2,127,105,160,72,1,0,245,30,46,0,72,122,160,
0,254,134,2,240,144,5,144,68,74,211,13,2,11,40,10,98,57,170,136,111,70,138,10,100,101,7,0,44,105,196,231,11,126,12,32,49,200,134,253,144,102,146,24,184,218,173,134,87,123,158,144,114,0,128,8,9,1,199,127,165,22,78,231,129,241,130,154,201,174,54,6,112,
223,54,21,96,116,234,123,226,1,179,60,81,60,32,76,57,254,145,15,208,106,199,115,204,107,24,170,104,196,166,32,53,7,20,196,200,53,239,64,129,91,68,177,232,66,85,14,151,246,210,138,248,167,210,64,98,0,26,42,21,32,3,200,64,235,97,84,187,106,13,51,131,2,
192,59,100,30,130,109,137,79,35,135,117,0,243,187,10,118,239,68,84,211,1,137,38,78,208,146,249,175,87,105,79,133,9,180,27,36,222,168,149,97,75,141,170,12,147,168,156,110,24,70,6,114,127,1,6,0,0,60,96,107,64,137,49,198,135,142,134,33,209,154,192,209,1,
192,6,52,193,30,224,182,37,25,88,69,240,168,154,192,183,15,5,222,29,192,64,89,0,184,30,16,1,0,84,55,1,252,231,121,14,128,71,195,68,34,12,10,66,20,234,200,230,242,197,53,94,157,11,94,229,199,114,244,194,175,66,5,29,219,195,235,150,106,53,170,236,68,11,
64,160,128,24,92,81,78,95,109,95,139,98,12,247,52,111,173,82,73,139,160,57,154,148,192,236,123,70,208,46,128,183,106,67,235,2,68,127,93,32,1,89,94,8,0,222,116,31,137,250,235,203,168,221,186,20,26,230,61,30,63,2,167,130,122,37,63,181,10,148,255,63,153,
204,37,72,204,201,85,230,126,33,181,24,4,136,96,1,10,224,4,18,32,247,238,222,38,0,211,7,255,201,61,233,77,58,112,191,59,30,192,230,130,230,80,70,139,90,168,206,217,151,22,32,169,32,210,189,114,205,136,141,214,4,0,222,168,21,225,56,245,65,180,221,14,83,
236,119,23,2,44,37,81,218,191,0,3,0,0,94,0,63,0,53,214,152,31,160,0,36,240,4,208,22,40,104,201,198,225,109,192,145,68,3,60,237,72,11,212,55,248,182,154,9,126,103,47,176,187,8,76,5,5,128,228,177,8,10,96,76,28,128,167,231,17,128,158,150,130,128,58,199,
33,146,82,139,49,23,32,204,210,89,226,74,192,130,112,113,69,253,103,168,144,53,77,115,211,214,162,225,231,221,131,199,69,87,231,10,82,172,123,41,113,184,250,14,138,134,249,155,89,33,153,200,235,162,134,176,115,29,5,240,246,129,113,11,240,224,149,207,
213,0,122,94,232,3,129,144,159,22,148,30,118,219,183,164,106,251,119,50,21,18,81,96,31,197,2,252,86,215,253,119,61,171,209,90,2,64,1,242,41,128,120,57,71,212,31,146,192,161,151,217,58,128,220,86,17,204,144,77,100,87,118,24,140,145,214,176,255,104,172,
223,169,60,76,253,84,34,101,108,131,106,107,165,36,253,111,18,24,103,147,8,217,101,86,181,245,60,84,15,192,82,2,254,168,53,86,157,245,81,149,17,167,16,97,247,39,56,74,251,23,208,128,10,104,128,47,129,115,192,43,160,0,182,119,216,26,139,192,19,64,91,0,
138,212,198,37,111,3,158,36,70,128,39,37,24,24,20,160,63,175,128,117,184,129,254,213,192,220,64,0,192,221,102,1,72,180,119,28,0,139,192,18,0,176,203,15,19,103,28,235,83,10,208,234,109,12,1,132,163,122,52,87,130,202,68,50,161,128,202,89,232,197,134,191,
146,94,160,227,106,32,154,93,19,23,184,95,0,36,146,0,83,195,104,17,180,243,49,149,132,80,116,139,240,204,253,6,168,52,181,118,2,140,217,93,123,4,176,241,224,19,16,24,197,28,27,221,171,225,234,81,128,44,254,95,83,34,248,104,153,197,218,191,133,48,46,186,
162,83,16,192,128,65,191,129,145,248,85,142,214,0,202,146,241,138,115,13,98,2,140,126,199,220,40,54,235,190,188,2,33,0,146,246,207,216,215,136,238,175,227,189,185,90,71,72,144,46,83,218,21,105,13,59,133,6,211,184,85,192,213,226,124,32,76,108,0,190,152,
213,65,154,124,80,74,62,184,166,234,190,99,50,144,245,23,208,0,0,0,15,240,10,184,176,71,223,97,59,44,2,15,64,44,0,25,216,184,68,174,192,145,68,7,220,249,164,116,192,156,208,255,6,112,143,117,128,93,11,192,113,11,0,172,234,214,40,0,177,44,238,1,176,111,
116,128,146,124,130,251,201,243,134,170,34,90,239,143,81,81,178,114,188,246,76,1,9,245,192,2,80,143,85,210,12,171,222,75,19,171,137,252,252,39,103,17,145,167,63,22,0,152,136,208,233,250,74,234,136,232,188,109,126,146,102,166,148,26,206,180,15,226,32,
116,183,43,100,129,100,99,193,221,18,2,200,77,158,2,176,82,59,29,104,135,249,252,89,187,142,17,175,128,70,29,88,205,19,147,228,250,57,58,38,24,223,2,0,204,150,233,243,160,48,248,84,27,29,119,123,192,231,162,245,205,155,24,118,170,179,217,159,71,72,24,
3,172,95,252,206,136,160,22,76,182,122,51,235,30,177,251,142,164,237,63,18,83,57,132,220,12,56,222,234,97,232,121,2,0,222,152,53,118,153,106,99,74,235,142,20,126,247,39,40,145,121,253,5,52,0,160,2,188,0,70,9,60,56,204,15,216,49,32,128,45,128,142,121,
192,168,93,0,202,10,28,105,76,192,109,128,21,176,141,208,95,149,131,254,227,42,88,223,19,216,34,0,0,141,53,1,0,168,180,1,112,246,1,0,157,252,0,188,133,120,247,69,45,96,237,235,186,163,206,91,47,183,107,148,88,168,215,16,64,244,27,52,177,140,211,15,219,
86,84,66,61,104,4,73,168,172,126,76,1,232,152,173,210,182,154,190,150,235,148,14,22,75,152,84,43,211,187,80,191,61,16,252,11,52,157,1,60,186,233,43,55,0,203,210,191,1,38,84,18,108,17,228,242,100,127,169,40,182,246,113,51,2,142,100,64,58,23,4,8,183,254,
158,217,62,197,178,83,90,245,164,89,195,173,158,127,200,1,52,166,216,218,97,111,186,190,117,9,121,133,144,156,27,220,107,2,0,216,173,125,197,160,74,171,143,162,110,56,104,228,181,181,203,83,139,188,223,81,45,118,150,238,20,186,185,104,255,147,92,161,
10,201,199,4,190,152,21,118,109,24,84,154,105,41,194,110,50,16,19,208,254,3,0,250,14,240,165,149,64,241,0,149,192,14,24,196,226,7,60,0,1,188,6,144,230,129,171,165,27,192,10,76,65,28,32,73,6,50,192,227,107,130,126,251,7,0,88,123,223,165,128,149,98,141,
43,1,216,200,44,0,88,172,54,152,160,240,227,31,3,128,183,193,84,66,162,222,47,18,145,2,246,59,214,57,133,240,176,83,39,32,160,197,134,40,64,241,52,158,44,137,227,143,47,12,33,203,222,47,195,181,136,195,111,187,125,64,188,53,199,169,89,105,114,114,110,
106,9,114,127,254,72,155,4,102,14,192,180,40,172,139,177,61,66,194,85,136,56,55,124,44,119,250,45,13,64,127,83,137,186,31,81,90,73,0,18,196,230,66,169,117,160,108,168,72,10,148,130,201,22,95,254,241,255,209,5,218,20,32,128,67,13,76,64,181,47,204,226,
117,0,26,88,165,255,252,142,43,235,115,160,245,250,166,90,52,235,7,44,101,165,70,199,5,120,161,196,121,96,184,185,103,81,0,222,136,213,217,222,214,134,181,29,14,18,126,62,45,29,217,251,23,0,0,0,224,1,79,13,108,96,16,30,80,36,16,248,10,111,79,0,112,133,
192,1,5,9,86,128,96,19,176,93,158,72,129,222,192,215,149,3,223,96,23,224,52,1,20,67,10,0,87,195,18,0,80,38,82,128,216,138,0,96,103,47,18,192,38,211,81,4,32,54,62,134,162,137,122,127,111,170,59,240,113,142,80,0,88,13,8,160,52,193,167,105,82,1,222,69,51,
46,234,198,159,153,153,233,71,146,216,1,128,2,0,35,161,211,196,111,29,159,234,251,48,180,73,214,193,81,152,108,17,148,234,167,84,129,111,117,22,169,17,8,125,53,215,16,0,53,29,157,72,128,236,45,50,255,42,180,151,202,33,235,173,80,106,212,214,27,146,223,
146,130,145,167,136,244,43,18,65,113,85,195,67,242,197,27,8,14,3,160,141,120,235,57,11,185,14,192,108,37,50,184,64,13,58,96,116,157,28,169,224,157,225,21,234,203,123,0,130,246,134,97,172,119,92,237,241,214,5,240,243,161,232,224,230,93,91,80,10,222,136,
53,153,222,198,168,198,142,71,137,253,233,38,28,181,1,215,95,64,5,0,0,120,128,2,80,160,163,124,192,13,144,128,23,64,216,0,145,118,75,32,5,26,63,47,20,16,245,176,122,6,126,119,87,224,61,18,24,164,0,0,205,28,3,10,224,205,216,16,128,187,249,68,4,28,19,128,
68,58,80,96,1,128,174,137,214,194,219,149,85,43,1,2,91,73,7,252,166,193,36,106,221,95,92,170,176,117,138,149,122,70,106,230,226,182,191,3,204,204,29,251,3,16,30,47,57,70,2,193,211,222,2,210,208,181,106,192,28,145,163,186,84,225,153,170,7,17,105,243,162,
143,235,112,138,48,148,140,88,183,201,119,42,36,87,236,156,240,253,239,237,172,254,47,4,128,1,180,230,69,31,88,102,242,133,96,141,47,51,10,86,27,40,230,175,62,169,59,127,21,140,96,35,89,242,253,252,49,232,17,112,53,192,38,40,67,210,2,208,205,205,244,
39,78,119,61,237,115,182,175,228,61,162,0,86,224,248,57,194,101,172,206,59,135,208,63,49,80,37,10,122,176,66,6,60,54,0,79,103,103,83,0,0,192,191,0,0,0,0,0,0,153,3,97,43,4,0,0,0,79,236,212,107,20,255,9,255,1,254,250,255,2,249,242,242,240,250,248,249,240,
233,249,235,246,158,136,213,185,54,139,76,180,147,196,127,98,50,221,228,112,53,28,251,23,0,208,0,0,15,184,14,64,129,14,31,240,10,8,192,24,104,14,248,0,72,15,128,2,6,128,182,105,178,5,3,243,0,214,63,238,3,124,182,30,248,228,6,46,123,0,192,123,141,2,0,
186,177,70,41,96,107,39,68,240,7,45,212,74,2,100,102,28,177,176,226,41,17,189,148,98,241,200,192,74,226,233,126,79,4,47,125,15,16,36,119,119,93,10,248,119,137,119,58,43,4,135,72,195,39,205,191,55,200,209,179,171,159,67,5,192,197,145,214,62,91,176,10,
29,171,3,214,139,2,184,186,237,109,66,128,107,199,127,110,0,170,15,251,69,18,16,87,63,73,144,204,71,206,196,237,214,85,249,84,65,189,83,65,192,55,80,230,251,219,81,163,79,184,190,59,12,0,0,230,35,203,244,210,245,195,112,26,1,148,151,83,223,79,127,142,
211,153,27,3,119,0,140,68,92,171,134,12,252,188,226,215,237,166,53,111,164,91,215,186,244,132,237,242,75,50,118,217,199,198,169,206,85,84,128,171,147,162,193,170,43,162,49,241,0,222,136,117,118,175,190,97,101,16,254,139,222,114,191,199,219,112,236,95,
128,1,128,10,240,0,99,192,162,163,31,22,81,176,32,202,6,136,234,6,128,192,6,224,77,44,3,227,57,24,162,6,112,167,19,128,63,23,112,220,0,0,248,60,13,0,138,43,210,29,138,240,180,185,2,152,77,137,109,217,98,78,26,226,158,75,148,227,181,154,189,37,22,37,254,
106,138,20,16,115,80,222,253,252,98,146,145,182,28,19,69,232,43,69,90,116,138,8,64,240,250,251,223,106,61,32,143,74,236,65,96,194,138,196,127,169,1,225,193,7,199,218,96,172,48,16,33,246,73,131,172,68,105,13,226,187,182,65,255,123,22,242,222,205,206,220,
61,76,71,60,63,94,35,9,222,206,18,31,255,228,207,195,36,15,1,176,123,52,246,50,223,207,247,12,131,144,113,48,178,67,75,212,190,128,189,71,71,35,102,18,48,176,105,189,211,230,212,50,32,233,217,48,183,20,79,53,0,202,253,159,239,26,212,150,159,59,18,74,
86,162,219,204,119,44,90,84,159,240,195,136,185,212,115,152,78,60,0,222,136,245,65,111,201,85,104,137,63,97,239,55,197,6,186,254,2,0,0,0,188,0,30,192,5,248,195,10,246,56,252,6,152,113,3,244,37,64,5,236,196,50,160,8,158,85,129,183,229,192,78,5,88,70,14,
0,198,103,205,128,5,146,215,40,66,196,31,206,104,14,229,95,103,5,47,126,134,233,156,20,220,190,213,130,122,12,198,151,105,4,26,122,36,167,2,213,142,1,248,120,240,185,104,112,65,182,118,67,197,205,93,58,13,224,49,225,170,94,188,235,55,253,233,4,28,200,
179,183,59,1,225,212,249,215,181,72,96,198,195,165,170,128,64,107,38,32,222,212,64,217,33,154,174,222,83,22,71,131,173,29,165,37,221,59,139,168,6,54,121,194,50,59,168,67,144,186,253,113,77,0,23,14,133,200,131,143,69,54,48,55,220,214,123,244,162,245,106,
8,50,121,44,138,18,183,20,105,132,33,13,183,28,128,136,39,195,181,20,73,34,129,45,51,169,86,125,222,212,73,164,203,245,132,67,235,207,85,184,70,148,119,142,75,90,236,190,132,237,152,216,208,83,81,0,190,136,53,217,86,125,16,97,39,233,191,174,140,186,225,
177,54,81,221,191,0,0,0,0,15,48,151,64,7,143,63,172,131,199,62,184,3,116,128,184,1,230,196,4,116,171,24,136,27,232,111,213,73,88,255,41,7,110,85,128,139,64,4,0,27,173,101,1,64,234,246,32,94,125,198,174,0,42,97,165,23,243,250,144,181,80,200,30,179,247,
62,101,248,70,198,160,70,105,13,47,89,1,20,219,172,132,145,226,167,173,41,94,34,31,125,133,70,98,57,224,144,80,81,167,185,141,124,160,128,240,200,101,122,183,128,217,239,109,151,0,96,204,215,46,234,128,233,30,167,18,91,49,74,152,68,134,157,241,94,230,
206,79,115,196,175,155,87,140,97,11,1,13,163,233,49,37,115,241,177,98,77,25,228,155,70,165,227,10,123,205,60,21,0,219,225,47,85,154,72,48,32,222,125,215,182,96,12,24,6,0,150,182,204,175,34,208,40,88,191,10,6,220,140,220,206,206,243,50,151,233,143,17,
116,172,226,188,149,12,196,40,187,12,76,21,153,155,2,61,9,0,190,136,213,225,212,146,177,116,39,233,71,239,71,175,194,49,26,142,253,11,104,64,5,0,120,9,156,3,14,116,220,97,135,53,86,96,3,76,127,9,136,13,9,93,64,108,192,164,20,160,4,250,159,85,176,142,
51,240,81,2,179,3,0,200,72,33,96,1,31,179,9,4,15,63,20,192,219,133,164,42,230,249,205,191,89,1,225,233,19,197,61,202,233,74,129,54,110,253,5,8,90,249,188,41,57,110,137,22,69,229,25,49,102,149,248,121,26,64,52,131,214,220,101,153,3,16,68,84,169,34,111,
27,222,186,136,6,176,113,160,54,15,0,165,43,174,251,0,87,107,239,147,66,4,44,15,76,101,112,10,89,179,168,141,118,127,20,106,181,91,15,201,146,230,76,3,118,6,227,85,228,12,46,34,50,51,18,200,91,31,31,191,26,3,161,121,213,169,200,91,1,49,97,216,58,30,220,
99,71,199,60,56,208,118,1,149,8,189,137,242,214,13,12,0,47,232,206,173,162,178,229,1,25,87,212,61,59,181,88,112,246,190,94,226,67,135,118,0,27,242,71,245,76,179,3,138,81,9,158,120,117,65,139,216,178,114,194,65,98,70,186,233,177,53,28,251,23,208,128,10,
0,240,18,56,1,106,76,244,7,40,129,133,129,40,11,64,73,198,174,51,42,144,99,192,3,180,17,248,59,181,192,93,10,192,113,199,82,0,94,111,144,0,240,57,155,68,28,31,211,93,180,224,214,117,7,72,34,159,119,40,64,108,41,140,2,85,253,121,233,178,40,238,126,41,
21,0,214,13,247,170,245,146,62,213,149,62,132,253,55,253,149,6,66,207,26,26,74,128,254,179,106,27,144,4,125,118,31,18,111,235,85,78,79,87,175,192,108,77,92,98,143,174,204,27,86,239,65,73,193,142,4,178,109,63,133,94,61,70,84,72,231,170,13,94,28,164,65,
252,205,243,42,19,151,246,69,60,11,4,18,202,44,135,79,3,195,0,96,128,68,189,125,159,138,182,12,64,119,203,215,245,224,166,109,238,171,207,51,18,22,206,107,63,179,76,195,60,130,93,145,238,111,172,53,86,242,187,116,175,70,95,39,167,86,166,193,104,12,197,
89,191,43,223,99,112,23,192,4,158,104,117,97,155,233,136,202,201,252,137,253,206,39,215,6,114,127,1,0,13,0,112,216,0,35,20,56,84,249,10,31,136,13,120,109,187,129,103,14,160,227,10,49,176,211,224,71,229,192,253,19,224,61,0,115,22,160,126,94,52,1,152,110,
134,186,40,155,166,113,128,127,11,208,250,123,124,38,22,222,111,254,5,165,150,231,123,173,9,218,109,43,0,196,91,177,144,66,82,86,162,194,147,222,170,66,113,148,165,58,154,176,79,118,113,162,0,78,234,43,1,188,246,112,221,57,192,114,197,230,0,112,243,254,
89,34,0,215,38,225,209,34,115,32,83,104,205,148,207,82,43,61,243,73,180,130,33,87,116,206,15,72,98,28,25,98,216,183,232,180,247,104,144,194,173,141,21,139,82,6,99,9,178,109,181,47,57,181,138,83,152,25,246,115,78,70,57,1,165,0,9,58,183,83,169,29,224,80,
49,247,83,59,150,18,97,181,187,227,141,15,2,20,201,211,253,247,190,242,213,58,204,32,240,69,244,190,29,60,98,235,216,0,158,104,117,65,155,116,203,198,38,253,137,174,211,77,30,110,19,241,250,11,0,0,0,112,88,21,35,128,15,40,0,1,108,1,8,27,112,82,63,198,
128,200,231,24,56,47,128,223,171,1,252,193,93,128,187,0,138,166,2,204,47,6,64,133,137,1,224,159,231,8,224,53,43,7,66,165,29,31,135,0,165,30,83,20,64,150,46,239,140,8,133,196,62,151,17,32,76,39,112,113,250,241,125,218,127,16,128,147,30,122,60,2,33,251,
221,167,18,32,207,234,227,164,1,209,106,72,146,236,109,229,4,69,117,200,103,21,247,170,44,72,170,224,140,137,116,44,226,12,193,76,246,165,209,58,61,62,119,226,98,183,9,87,234,103,103,193,149,251,135,87,71,166,188,248,208,125,16,87,205,66,4,90,10,10,226,
162,36,143,206,66,145,27,199,119,103,30,45,147,110,88,230,176,210,92,25,183,116,165,76,107,127,100,63,177,11,36,125,135,83,55,243,181,188,40,10,47,34,232,221,61,1,202,96,54,53,81,69,100,193,91,130,0,94,120,213,97,107,117,203,82,139,103,133,80,127,222,
33,218,16,68,22,254,5,84,64,5,0,120,9,60,128,197,195,97,140,137,79,228,39,110,9,72,107,91,21,98,96,42,88,31,74,192,250,75,17,172,95,128,248,165,0,224,78,230,65,1,56,115,14,84,25,239,11,128,79,142,166,8,180,248,187,167,132,2,62,255,234,94,234,225,115,
154,107,38,64,223,230,21,136,49,125,42,69,130,196,233,43,137,145,191,196,192,206,154,116,148,167,13,230,224,210,79,226,0,222,253,179,81,41,77,160,244,239,17,96,242,233,163,101,201,227,76,213,92,103,122,216,137,146,221,186,195,110,45,75,239,58,97,232,
73,73,164,255,187,106,255,187,193,158,252,43,78,195,71,193,81,21,184,153,63,59,192,192,222,28,62,45,42,221,160,140,101,67,149,188,200,30,230,227,82,174,105,80,162,25,24,185,48,191,99,252,158,164,17,61,125,131,194,63,147,78,204,203,84,226,191,150,63,90,
58,37,206,91,127,52,87,166,186,244,108,2,19,158,120,53,65,159,116,16,225,14,194,191,16,187,238,220,124,3,205,81,127,1,0,0,0,222,24,216,11,80,16,216,53,212,16,128,11,112,5,0,144,174,29,48,0,56,178,167,67,12,76,77,240,235,224,1,254,125,17,120,56,4,252,
82,0,0,243,163,149,0,48,222,20,0,218,217,45,0,148,89,121,53,164,214,171,169,237,21,69,57,11,23,65,69,43,211,162,17,0,34,166,151,19,148,138,243,150,235,5,226,31,21,0,208,234,84,168,150,26,61,150,119,18,148,54,124,211,182,235,166,68,170,57,148,179,190,
227,51,37,240,125,219,18,201,1,78,254,17,31,0,186,255,235,81,195,152,136,170,58,44,135,37,87,26,99,147,59,131,26,50,142,161,166,235,115,100,18,97,31,241,10,159,3,0,255,107,86,239,139,59,234,250,136,101,128,2,190,165,21,167,84,226,28,253,147,195,40,217,
56,1,48,29,196,103,232,235,190,226,104,59,216,137,1,43,213,16,66,67,116,104,219,37,64,13,78,95,200,200,102,23,68,253,212,162,122,193,176,224,19,193,4,158,120,77,97,41,196,64,226,12,186,191,20,215,220,247,27,28,195,149,67,127,1,2,8,0,224,141,0,47,128,
134,196,21,20,140,49,136,13,38,106,254,0,25,5,176,154,48,163,153,98,13,192,235,196,0,15,103,8,16,53,0,70,0,0,116,198,22,0,96,255,95,9,184,243,144,1,34,132,75,169,68,17,115,60,146,218,75,92,71,177,235,229,227,56,190,187,10,26,156,119,153,160,224,187,124,
174,186,81,190,75,16,115,29,24,54,186,66,152,127,101,231,218,100,34,67,1,178,159,232,99,192,44,133,78,223,128,9,5,59,104,5,96,221,31,137,140,4,230,56,74,200,100,158,19,128,9,214,198,236,6,54,156,180,61,140,232,65,216,86,119,200,174,151,205,209,155,194,
32,127,206,27,93,172,11,21,46,57,180,35,228,152,217,78,83,33,21,135,243,5,86,171,45,8,61,173,88,29,146,236,172,79,50,73,38,243,145,140,58,8,128,219,92,188,63,53,21,40,137,89,218,8,253,8,80,146,65,65,213,128,210,183,73,43,221,0,81,20,0,158,104,117,74,
43,76,70,226,193,159,184,45,208,123,120,77,20,237,95,128,0,2,0,120,51,160,4,182,32,240,37,160,4,36,160,4,108,9,168,69,1,164,142,137,169,102,32,174,192,165,18,224,120,86,128,167,5,244,29,3,0,152,190,215,1,192,174,255,111,2,72,184,32,0,186,171,193,122,
69,245,198,146,99,1,208,211,39,88,17,132,78,206,204,0,96,167,83,164,112,106,189,75,122,232,165,250,189,17,60,14,101,29,203,20,145,230,87,239,22,64,207,125,191,11,35,192,218,120,135,23,96,244,159,75,213,140,133,48,253,226,66,96,36,173,86,90,219,64,45,
34,186,55,178,210,164,97,163,109,125,22,70,31,171,28,58,1,56,206,18,240,203,63,65,32,116,174,159,99,98,169,229,171,66,130,132,153,163,53,212,9,56,41,135,139,17,177,82,233,247,147,123,128,245,237,240,124,207,15,101,78,170,110,89,41,79,45,26,8,34,9,180,
118,129,103,126,125,78,184,86,196,6,194,255,31,15,165,20,86,187,121,44,46,8,83,190,10,54,204,117,158,88,141,97,157,235,5,106,39,92,37,118,115,191,199,171,1,239,47,0,0,0,192,5,43,73,199,195,97,97,209,176,1,52,213,215,134,44,89,33,166,24,139,224,17,251,
7,56,219,190,192,199,128,209,30,112,246,86,115,186,32,28,48,0,41,110,238,90,64,169,231,95,39,1,78,118,235,185,26,96,57,122,203,236,226,213,167,255,75,5,138,167,211,110,30,168,3,39,159,61,70,43,192,143,158,106,231,0,35,15,155,54,35,77,160,251,121,3,236,
245,65,192,22,255,166,56,174,73,50,83,39,12,29,79,58,145,247,110,206,8,34,185,172,239,194,38,239,171,169,123,51,81,109,16,109,36,157,158,47,172,73,1,115,127,125,12,80,24,66,248,76,69,61,216,29,54,103,138,17,150,104,16,196,43,135,55,53,242,123,60,236,
182,237,213,54,41,97,125,235,222,254,88,238,38,23,118,207,101,167,6,114,141,147,181,177,39,197,36,195,24,148,107,220,165,166,24,132,109,195,254,248,204,139,134,194,63,202,0,217,1,126,56,245,65,33,147,219,207,184,139,252,95,216,230,173,226,255,7,84,128,
5,215,159,2,168,56,12,34,1,142,15,30,61,33,223,204,3,180,214,138,64,194,20,59,3,88,207,103,208,255,103,207,80,0,95,233,177,84,138,96,63,159,73,129,191,191,42,64,157,14,229,3,208,243,175,85,149,226,124,150,10,202,98,191,169,44,174,202,183,20,234,76,221,
58,146,4,170,238,165,234,40,195,223,150,149,83,193,149,5,178,223,235,1,83,180,179,2,144,127,124,192,216,75,49,128,251,27,52,8,207,24,154,183,155,99,195,206,92,251,230,149,154,6,92,92,155,11,173,183,66,197,233,26,74,115,87,255,127,87,29,112,27,107,127,
68,90,152,128,155,151,222,237,92,221,49,238,220,142,150,15,234,200,156,2,63,62,226,43,38,74,209,60,58,43,203,165,112,128,171,115,70,166,184,74,253,8,142,100,194,89,9,164,41,16,119,117,37,215,0,251,201,124,32,5,186,186,229,238,216,118,64,147,0,222,56,
109,106,37,247,236,115,239,40,126,197,198,221,228,72,166,131,255,95,0,0,0,128,7,28,128,2,143,247,64,1,72,24,18,205,74,128,236,121,128,188,48,100,207,50,99,136,29,176,127,21,184,135,4,93,5,86,16,5,88,57,51,67,64,0,103,26,128,84,237,167,136,56,202,184,
2,32,68,86,13,150,16,208,183,132,37,229,42,215,172,98,117,240,89,217,64,65,165,21,192,253,59,127,12,30,223,205,164,122,119,164,131,182,234,139,125,36,128,162,35,145,2,248,255,131,207,149,128,105,149,235,193,1,126,184,85,27,238,100,106,17,98,68,67,94,
92,123,92,54,22,109,179,35,231,189,70,140,232,11,205,147,139,118,83,208,132,199,16,32,159,3,202,190,84,198,1,139,109,36,203,190,140,91,87,41,43,109,113,87,244,88,165,193,62,186,91,179,12,166,235,78,68,56,254,67,60,240,248,3,166,65,18,187,245,194,126,
57,225,252,24,95,63,98,66,60,39,52,39,12,226,81,159,211,44,100,103,221,214,121,66,232,235,108,204,47,152,116,0,190,39,149,153,66,22,155,159,93,197,47,93,32,144,129,228,176,63,160,1,206,2,251,31,5,216,122,137,137,126,92,0,128,171,236,210,78,164,138,25,
197,13,250,183,1,88,143,57,39,1,72,28,37,176,20,182,239,35,5,160,94,252,204,57,224,127,143,131,203,237,255,247,202,40,103,117,224,85,83,17,218,127,91,215,0,19,107,16,173,30,36,80,181,193,158,122,132,32,145,19,1,104,187,138,174,1,200,124,84,157,205,152,
198,126,50,101,24,106,88,222,110,99,215,159,73,165,125,232,120,1,217,7,196,31,20,27,158,134,251,78,113,72,36,3,77,147,181,174,79,195,34,147,122,208,73,12,255,235,90,146,137,219,244,146,68,34,166,84,148,148,138,2,47,185,207,213,50,104,254,31,9,184,66,
47,61,192,105,99,137,253,237,66,174,75,95,98,208,34,67,162,154,245,217,84,184,190,76,64,91,28,121,131,76,140,245,187,37,27,149,90,98,126,55,138,176,49,51,157,89,209,244,31,65,2,0,126,72,245,118,159,201,17,42,119,147,127,132,244,14,181,1,238,47,0,0,0,
192,27,1,74,64,32,113,88,93,160,142,68,82,49,53,86,170,20,83,148,214,67,255,181,28,120,186,110,130,75,93,192,129,22,0,236,201,95,8,0,238,227,203,4,5,186,251,39,7,20,203,49,17,103,242,243,69,158,137,227,126,251,129,60,13,48,159,221,4,64,107,199,236,166,
2,225,219,165,47,56,71,96,198,252,191,112,2,128,174,9,114,93,43,131,68,204,84,11,249,146,221,238,230,230,138,104,168,80,179,125,97,160,42,149,218,147,220,71,238,228,20,249,1,128,31,230,40,21,245,69,12,162,20,232,255,227,192,228,77,84,231,30,172,187,138,
25,181,174,247,15,75,37,17,203,236,121,92,158,158,147,36,110,207,138,82,6,1,198,7,249,254,242,156,203,251,114,123,54,152,225,188,240,221,21,149,32,144,219,88,155,17,116,67,234,133,134,36,98,186,225,156,242,89,146,100,242,86,90,154,127,188,180,44,103,
21,116,184,96,209,101,233,187,235,19,0,79,103,103,83,0,4,86,233,0,0,0,0,0,0,153,3,97,43,5,0,0,0,169,30,118,253,11,242,245,243,234,245,243,240,234,242,223,194,30,72,213,86,157,9,67,180,34,220,70,247,43,104,77,212,247,23,0,96,0,192,123,5,140,18,24,97,17,
87,48,198,161,99,155,128,90,0,116,172,3,61,195,20,99,1,124,191,0,87,167,77,48,56,93,192,127,0,80,0,209,38,0,96,203,175,237,1,100,249,96,3,2,190,26,168,49,102,141,92,63,105,57,202,143,109,1,119,194,11,139,130,47,244,87,4,0,189,165,61,56,196,122,45,21,
237,8,49,33,16,143,188,93,33,224,234,178,199,2,2,97,211,38,29,0,28,169,5,32,66,242,175,178,64,174,175,52,185,62,149,148,14,66,52,230,71,253,128,181,240,249,196,3,173,28,23,98,246,136,194,227,148,121,130,159,115,60,224,158,95,139,206,216,145,11,27,156,
212,219,14,189,85,116,238,71,93,228,142,172,200,171,203,231,161,176,145,197,60,50,46,94,218,231,190,33,143,210,166,10,104,16,113,129,68,108,62,161,170,238,246,47,59,101,129,221,10,255,45,242,240,118,248,243,74,115,21,160,219,208,41,224,1,30,72,53,153,
58,33,73,184,11,71,54,238,92,137,225,126,127,1,0,0,0,94,3,74,64,160,224,18,21,52,20,172,13,80,249,137,136,196,84,51,69,221,25,124,223,47,193,175,59,1,122,31,96,173,24,0,9,212,155,1,0,136,159,9,208,88,175,82,1,120,62,22,72,197,189,205,51,160,212,50,247,
154,212,48,112,218,16,124,1,223,155,104,17,149,177,161,174,212,185,53,61,2,251,206,169,116,1,176,113,221,251,34,0,14,119,235,64,74,25,14,196,133,169,78,142,15,227,67,125,180,202,35,152,50,34,78,236,195,43,241,202,205,239,81,31,121,15,165,13,100,210,76,
56,103,64,163,55,205,96,163,67,121,182,23,50,139,42,225,75,4,253,136,137,229,118,22,101,93,194,198,238,137,188,61,64,223,106,195,230,172,163,222,180,14,4,73,94,98,64,79,109,147,213,46,233,181,94,3,228,149,60,188,86,95,241,203,177,195,187,135,123,99,202,
75,50,92,138,28,38,75,140,214,237,26,189,244,67,26,93,47,171,230,54,85,2,126,56,45,65,154,49,160,121,39,190,162,83,238,247,16,152,208,247,23,0,0,0,224,130,79,14,15,135,197,160,227,161,77,107,84,164,239,9,67,113,86,66,255,165,10,214,127,118,3,131,97,96,
157,12,0,159,179,31,1,234,234,22,192,169,7,243,9,192,240,53,19,64,238,154,79,178,20,126,192,54,221,68,91,173,237,55,53,192,57,48,211,74,21,120,112,181,209,13,192,245,45,31,38,1,24,181,46,212,106,1,97,81,60,160,209,27,27,58,123,181,193,97,65,108,118,245,
15,150,159,234,221,79,137,91,111,180,21,106,159,7,229,236,155,231,39,80,100,53,29,66,90,19,51,90,226,57,112,117,103,248,123,174,152,27,107,176,118,207,108,217,169,19,119,2,140,89,174,128,111,168,56,66,195,249,247,61,118,200,210,40,158,12,69,153,172,177,
93,202,117,109,160,205,175,157,49,109,151,69,30,220,241,165,223,104,235,159,175,149,168,226,93,12,140,233,147,9,61,119,79,222,247,56,192,202,10,11,77,7,152,99,47,8,0,62,24,117,106,197,218,225,227,158,186,31,97,187,2,111,132,126,127,0,128,3,236,31,12,
64,197,134,53,250,161,134,228,65,69,111,100,35,124,99,41,182,35,244,159,13,124,195,172,25,0,30,30,142,117,9,96,156,95,8,194,233,223,84,40,250,203,173,128,143,159,242,174,53,133,225,84,66,29,154,222,255,60,27,96,137,243,50,121,172,18,216,116,248,11,14,
35,9,71,85,4,144,111,234,192,123,249,162,130,183,27,158,196,212,8,154,212,135,247,209,214,143,212,176,132,193,106,111,163,183,62,142,218,87,137,14,187,186,38,99,179,77,199,183,229,63,38,180,7,83,127,112,174,144,205,120,177,30,149,160,38,8,164,196,233,
14,235,185,90,147,179,213,71,251,104,186,13,116,61,200,48,170,138,234,143,16,63,161,16,151,148,245,200,122,67,83,110,37,167,155,8,69,233,46,37,175,117,114,71,49,176,77,16,86,61,107,212,150,250,104,77,125,159,110,154,128,248,183,255,225,3,177,113,238,
27,30,248,172,182,39,151,230,181,15,253,20,220,140,13,248,253,2,0,0,0,60,160,6,20,144,188,7,18,80,194,68,179,2,84,181,90,203,130,100,198,129,51,216,175,12,120,121,13,86,25,32,8,0,200,254,92,9,9,235,162,25,7,226,91,190,136,83,181,215,1,40,165,205,144,
214,74,20,57,92,24,132,177,38,170,134,11,119,54,90,68,145,252,84,135,170,180,244,152,192,93,12,80,157,46,137,5,176,68,214,207,8,9,55,87,116,80,52,10,44,230,237,182,225,229,25,88,173,254,203,121,128,243,87,227,47,174,252,16,18,93,142,157,22,58,189,182,
138,86,186,151,13,134,29,60,125,161,153,68,127,62,191,104,60,254,35,29,94,160,79,148,13,174,198,77,170,213,18,31,230,36,44,147,175,53,144,198,8,171,100,154,94,178,224,92,199,45,16,243,34,227,245,138,108,45,174,133,193,91,148,179,173,54,173,189,190,190,
108,233,90,179,197,50,230,202,220,38,124,207,73,21,92,96,13,151,89,210,214,102,88,177,12,232,169,216,0,158,248,108,170,39,119,249,59,55,117,139,237,228,65,6,250,253,1,21,224,12,184,254,148,96,71,75,12,34,143,79,224,64,83,53,234,72,148,98,197,216,41,194,
122,182,1,239,17,37,2,192,103,94,147,179,82,36,183,95,22,128,241,245,157,20,48,217,150,66,193,217,182,249,28,33,234,217,23,215,21,85,225,242,44,74,96,76,23,249,99,191,38,152,209,219,130,4,248,229,184,36,34,182,71,5,136,129,215,138,182,120,90,100,147,
123,62,10,33,101,81,156,62,199,244,207,192,204,118,132,191,234,96,81,46,24,168,63,65,9,91,76,85,113,47,44,158,72,190,163,16,184,65,214,91,52,123,75,94,87,54,162,14,230,96,131,227,129,218,160,216,53,59,50,14,4,31,124,200,185,21,150,11,64,73,23,211,168,
220,69,133,168,136,192,49,83,111,183,185,6,179,234,161,72,83,51,194,243,40,86,173,193,189,132,199,17,33,164,241,96,172,79,69,156,85,110,218,242,10,227,40,213,41,193,156,237,136,185,233,169,170,64,209,1,158,7,213,65,34,19,230,229,73,190,105,142,12,244,
255,5,0,52,0,192,3,60,128,0,56,44,12,160,67,51,86,182,49,34,85,138,112,108,35,120,83,5,253,165,8,60,5,176,56,20,160,72,30,26,41,0,84,151,121,72,85,171,75,27,0,181,154,3,5,151,108,183,206,1,98,252,252,127,78,197,113,61,238,13,104,243,241,159,239,18,193,
131,182,155,19,19,4,243,87,36,77,137,0,7,14,63,86,45,8,72,13,37,128,166,19,44,224,214,119,90,165,118,37,67,145,83,154,249,11,41,41,39,71,169,88,248,82,118,176,129,145,49,42,40,177,174,6,13,225,155,253,242,138,222,120,53,37,62,212,98,142,59,50,176,177,
70,88,91,96,180,214,120,111,43,192,232,181,75,137,30,179,180,189,190,179,137,18,202,23,128,180,107,193,100,211,223,217,92,158,21,86,15,7,114,60,98,68,155,20,78,135,125,211,126,56,3,76,130,112,171,123,166,1,156,13,80,186,224,209,186,203,37,209,149,192,
0,225,112,17,41,94,8,173,138,39,89,251,107,147,252,163,227,161,102,100,192,247,11,48,0,0,224,42,124,65,2,14,22,68,1,84,85,195,62,27,197,140,250,25,188,214,76,240,116,45,112,92,192,90,37,0,184,99,36,64,212,125,47,129,66,140,199,83,0,124,255,58,5,94,63,
142,93,139,170,129,85,75,56,168,31,188,158,34,0,181,238,122,74,96,182,179,47,147,0,172,208,57,47,57,64,42,126,199,154,70,175,48,254,77,7,193,208,78,167,24,52,14,229,12,249,179,136,51,175,133,215,85,77,106,204,150,206,116,120,161,35,252,149,9,218,135,
7,139,210,241,36,222,226,231,125,205,220,125,196,34,122,111,228,136,149,177,148,184,224,99,93,187,169,223,202,117,121,179,237,105,95,51,3,165,187,226,209,161,31,127,224,153,3,116,18,32,212,132,61,150,123,42,189,13,105,254,61,23,176,83,140,253,250,132,
120,50,141,165,118,40,41,3,171,33,242,98,164,54,163,146,185,63,217,48,208,10,157,0,0,62,248,108,156,155,140,132,76,186,105,208,140,77,112,247,23,0,0,0,224,26,70,104,128,131,213,1,160,250,146,214,6,100,39,4,195,84,240,122,16,224,238,18,244,193,0,153,3,
133,83,98,217,112,41,149,118,199,226,32,212,147,77,142,66,152,23,173,194,28,191,95,116,133,234,135,211,218,104,65,251,190,212,10,113,169,206,141,7,54,159,74,105,6,136,82,235,142,43,236,3,38,225,201,84,58,109,133,82,4,84,228,246,76,89,94,67,7,207,161,
229,191,78,34,206,19,27,53,53,107,7,45,183,196,200,156,119,18,171,38,184,50,17,93,8,110,121,87,114,129,46,10,169,122,251,2,117,132,86,14,158,220,18,169,5,98,218,110,188,201,207,92,116,116,135,244,240,29,183,212,172,226,28,232,184,111,74,92,102,107,150,
88,22,198,103,5,95,8,22,235,194,153,219,228,65,131,113,7,233,103,73,208,188,117,95,33,206,176,150,75,217,50,27,127,80,37,127,179,214,215,63,169,89,6,86,240,85,11,101,245,196,4,0,254,71,92,32,37,151,188,188,171,181,89,119,41,69,134,235,189,30,39,246,31,
189,19,176,83,92,162,58,191,116,144,150,133,18,81,225,231,186,128,18,48,187,43,177,170,148,119,239,187,9,133,73,50,110,61,116,33,147,62,63,191,73,69,6,44,102,150,9,245,87,207,248,183,8,140,123,253,84,80,125,34,62,35,15,201,196,126,139,81,99,21,118,63,
164,191,146,125,158,60,67,207,251,105,81,145,1,80,9,83,34,178,134,20,178,221,14,178,154,83,199,88,227,57,55,83,182,119,231,173,192,243,72,225,150,155,253,2,109,98,71,25,0,227,164,144,238,143,175,108,35,1,118,99,211,240,172,1,249,60,9,80,230,133,187,229,
173,133,21,245,23,198,51,22,53,139,218,245,194,155,154,226,121,139,13,45,89,116,184,161,102,30,155,122,186,49,116,243,6,133,225,46,83,166,169,69,5,39,171,254,225,150,7,216,67,66,200,101,188,136,110,11,76,11,190,101,252,26,235,105,114,115,44,62,55,251,
112,24,99,7,48,142,149,198,210,172,4,3,248,152,255,53,158,13,95,77,121,237,99,46,196,47,127,127,188,73,69,227,250,149,189,227,167,204,131,102,203,138,99,150,31,241,28,2,73,206,107,155,179,120,172,31,229,203,98,2,152,219,227,224,97,91,147,163,108,103,
102,81,253,210,18,121,170,117,172,56,213,146,169,168,46,116,179,51,168,117,66,83,118,98,75,78,88,148,189,12,239,170,0,181,191,185,98,204,4,45,187,162,119,247,211,196,243,183,240,61,249,115,215,71,125,113,63,162,254,236,204,136,194,2,184,65,138,1,48,126,
247,228,53,121,141,240,61,220,139,86,173,97,52,252,15,72,24,94,185,252,60,242,192,233,6,127,186,6,180,170,6,32,120,243,150,75,106,85,48,42,118,6,0,0 };
const char* singing_ogg = (const char*) temp_binary_data_1;
const char* getNamedResource (const char*, int&) throw();
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw()
{
unsigned int hash = 0;
if (resourceNameUTF8 != 0)
while (*resourceNameUTF8 != 0)
hash = 31 * hash + (unsigned int) *resourceNameUTF8++;
switch (hash)
{
case 0xb1ef755b: numBytes = 452; return proaudio_path;
case 0x09d82643: numBytes = 19215; return singing_ogg;
default: break;
}
numBytes = 0;
return 0;
}
const char* namedResourceList[] =
{
"proaudio_path",
"singing_ogg"
};
}

View file

@ -0,0 +1,29 @@
/* =========================================================================================
This is an auto-generated file: Any edits you make may be overwritten!
*/
#ifndef BINARYDATA_H_43410497_INCLUDED
#define BINARYDATA_H_43410497_INCLUDED
namespace BinaryData
{
extern const char* proaudio_path;
const int proaudio_pathSize = 452;
extern const char* singing_ogg;
const int singing_oggSize = 19215;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];
// Number of elements in the namedResourceList array.
const int namedResourceListSize = 2;
// If you provide the name of one of the binary resource variables above, this function will
// return the corresponding data and its size (or a null pointer if the name isn't found).
const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes) throw();
}
#endif

View file

@ -0,0 +1,48 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
This is the header file that your files should include in order to get all the
JUCE library headers. You should avoid including the JUCE headers directly in
your own source files, because that wouldn't pick up the correct configuration
options for your app.
*/
#ifndef __APPHEADERFILE_NAPIAV__
#define __APPHEADERFILE_NAPIAV__
#include "AppConfig.h"
#include <juce_audio_basics/juce_audio_basics.h>
#include <juce_audio_devices/juce_audio_devices.h>
#include <juce_audio_formats/juce_audio_formats.h>
#include <juce_audio_plugin_client/juce_audio_plugin_client.h>
#include <juce_audio_processors/juce_audio_processors.h>
#include <juce_audio_utils/juce_audio_utils.h>
#include <juce_core/juce_core.h>
#include <juce_data_structures/juce_data_structures.h>
#include <juce_events/juce_events.h>
#include <juce_graphics/juce_graphics.h>
#include <juce_gui_basics/juce_gui_basics.h>
#include <juce_gui_extra/juce_gui_extra.h>
#include "BinaryData.h"
#if ! DONT_SET_USING_JUCE_NAMESPACE
// If your code uses a lot of JUCE classes, then this will obviously save you
// a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE.
using namespace juce;
#endif
#if ! JUCE_DONT_DECLARE_PROJECTINFO
namespace ProjectInfo
{
const char* const projectName = "AUv3Synth";
const char* const versionString = "1.0.0";
const int versionNumber = 0x10000;
}
#endif
#endif // __APPHEADERFILE_NAPIAV__

View file

@ -2,11 +2,11 @@
Important Note!!
================
The purpose of this folder is to contain files that are auto-generated by the Introjucer,
The purpose of this folder is to contain files that are auto-generated by the Projucer,
and ALL files in this folder will be mercilessly DELETED and completely re-written whenever
the Introjucer saves your project.
the Projucer saves your project.
Therefore, it's a bad idea to make any manual changes to the files in here, or to
put any of your own files in here if you don't want to lose them. (Of course you may choose
to add the folder's contents to your version-control system so that you can re-merge your own
modifications after the Introjucer has saved its changes).
modifications after the Projucer has saved its changes).

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_basics/juce_audio_basics.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_basics/juce_audio_basics.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_devices/juce_audio_devices.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_devices/juce_audio_devices.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_formats/juce_audio_formats.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_formats/juce_audio_formats.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_AU_2.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_RTAS_1.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_RTAS_2.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_RTAS_3.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_RTAS_4.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_VST_utils.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_plugin_client/juce_audio_plugin_client_utils.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_processors/juce_audio_processors.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_processors/juce_audio_processors.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_utils/juce_audio_utils.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_utils/juce_audio_utils.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_core/juce_core.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_core/juce_core.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_data_structures/juce_data_structures.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_data_structures/juce_data_structures.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_events/juce_events.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_events/juce_events.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_graphics/juce_graphics.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_graphics/juce_graphics.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_gui_basics/juce_gui_basics.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_gui_basics/juce_gui_basics.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_gui_extra/juce_gui_extra.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_gui_extra/juce_gui_extra.mm>

View file

@ -0,0 +1,142 @@
/*
==============================================================================
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
*/
#include "MaterialLookAndFeel.h"
//==============================================================================
class AUv3SynthEditor : public AudioProcessorEditor,
public ButtonListener,
public Slider::Listener,
private Timer
{
public:
//==============================================================================
AUv3SynthEditor (AudioProcessor& processor)
: AudioProcessorEditor (processor),
recordButton ("Record"),
roomSizeSlider (Slider::LinearHorizontal, Slider::NoTextBox)
{
LookAndFeel::setDefaultLookAndFeel (&materialLookAndFeel);
roomSizeSlider.setValue (getParameterValue ("roomSize"), NotificationType::dontSendNotification);
recordButton.addListener (this);
addAndMakeVisible (recordButton);
roomSizeSlider.addListener (this);
roomSizeSlider.setRange (0.0, 1.0);
addAndMakeVisible (roomSizeSlider);
Path proAudioPath;
proAudioPath.loadPathFromData (BinaryData::proaudio_path, BinaryData::proaudio_pathSize);
proAudioIcon.setPath (proAudioPath);
addAndMakeVisible (proAudioIcon);
Colour proAudioIconColour = findColour (TextButton::buttonOnColourId);
proAudioIcon.setFill (FillType (proAudioIconColour));
setSize (600, 400);
startTimer (100);
}
//==============================================================================
void paint (Graphics& g) override
{
g.fillAll (findColour (ResizableWindow::backgroundColourId));
}
void resized() override
{
Rectangle<int> r = getLocalBounds();
int guiElementAreaHeight = r.getHeight() / 3;
proAudioIcon.setTransformToFit (r.removeFromLeft (proportionOfWidth (0.25))
.withSizeKeepingCentre (guiElementAreaHeight, guiElementAreaHeight)
.toFloat(),
RectanglePlacement::fillDestination);
int margin = guiElementAreaHeight / 4;
r.reduce (margin, margin);
int buttonHeight = guiElementAreaHeight - margin;
recordButton.setBounds (r.removeFromTop (guiElementAreaHeight).withSizeKeepingCentre (r.getWidth(), buttonHeight));
roomSizeSlider.setBounds (r.removeFromTop (guiElementAreaHeight).withSizeKeepingCentre (r.getWidth(), buttonHeight));
}
//==============================================================================
void buttonClicked (Button* button) override
{
if (button == &recordButton)
{
recordButton.setEnabled (false);
setParameterValue ("isRecording", 1.0f);
}
}
void sliderValueChanged (Slider*) override
{
setParameterValue ("roomSize", roomSizeSlider.getValue());
}
private:
//==============================================================================
void timerCallback() override
{
bool isRecordingNow = (getParameterValue ("isRecording") >= 0.5f);
recordButton.setEnabled (! isRecordingNow);
roomSizeSlider.setValue (getParameterValue ("roomSize"), NotificationType::dontSendNotification);
}
//==============================================================================
AudioProcessorParameter* getParameter (const String& paramId)
{
if (AudioProcessor* processor = getAudioProcessor())
{
const OwnedArray<AudioProcessorParameter>& params = processor->getParameters();
for (int i = 0; i < params.size(); ++i)
{
if (AudioProcessorParameterWithID* param = dynamic_cast<AudioProcessorParameterWithID*> (params[i]))
{
if (param->paramID == paramId)
return param;
}
}
}
return nullptr;
}
//==============================================================================
float getParameterValue (const String& paramId)
{
if (AudioProcessorParameter* param = getParameter (paramId))
return param->getValue();
return 0.0f;
}
void setParameterValue (const String& paramId, float value)
{
if (AudioProcessorParameter* param = getParameter (paramId))
param->setValueNotifyingHost (value);
}
//==============================================================================
MaterialLookAndFeel materialLookAndFeel;
//==============================================================================
TextButton recordButton;
Slider roomSizeSlider;
DrawablePath proAudioIcon;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AUv3SynthEditor)
};

View file

@ -0,0 +1,172 @@
/*
==============================================================================
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
*/
#include "../JuceLibraryCode/JuceHeader.h"
#include "AUv3SynthEditor.h"
class AUv3SynthProcessor : public AudioProcessor
{
public:
AUv3SynthProcessor ()
: currentRecording (1, 1), currentProgram (0)
{
// initialize parameters
addParameter (isRecordingParam = new AudioParameterBool ("isRecording", "Is Recording", false));
addParameter (roomSizeParam = new AudioParameterFloat ("roomSize", "Room Size", 0.0f, 1.0f, 0.5f));
formatManager.registerBasicFormats();
for (int i = 0; i < maxNumVoices; ++i)
synth.addVoice (new SamplerVoice());
loadNewSample (BinaryData::singing_ogg, BinaryData::singing_oggSize, "ogg");
}
//==============================================================================
void prepareToPlay (double sampleRate, int estimatedMaxSizeOfBuffer) override
{
ignoreUnused (estimatedMaxSizeOfBuffer);
lastSampleRate = sampleRate;
currentRecording.setSize (1, static_cast<int> (std::ceil (kMaxDurationOfRecording * lastSampleRate)));
samplesRecorded = 0;
synth.setCurrentPlaybackSampleRate (lastSampleRate);
reverb.setSampleRate (lastSampleRate);
}
void processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages) override
{
Reverb::Parameters reverbParameters;
reverbParameters.roomSize = roomSizeParam->get();
reverb.setParameters (reverbParameters);
synth.renderNextBlock (buffer, midiMessages, 0, buffer.getNumSamples());
if (getMainBusNumOutputChannels() == 1)
reverb.processMono (buffer.getWritePointer (0), buffer.getNumSamples());
else if (getMainBusNumOutputChannels() == 2)
reverb.processStereo (buffer.getWritePointer (0), buffer.getWritePointer (1), buffer.getNumSamples());
}
//==============================================================================
void releaseResources() override { currentRecording.setSize (1, 1); }
//==============================================================================
bool acceptsMidi() const override { return true; }
bool producesMidi() const override { return false; }
bool silenceInProducesSilenceOut() const override { return false; }
double getTailLengthSeconds() const override { return 0.0; }
//==============================================================================
AudioProcessorEditor* createEditor() override { return new AUv3SynthEditor (*this); }
bool hasEditor() const override { return true; }
//==============================================================================
const String getName() const override { return "AUv3 Synth"; }
int getNumPrograms() override { return 4; }
int getCurrentProgram() override { return currentProgram; }
void setCurrentProgram (int index) override { currentProgram = index; }
const String getProgramName (int index) override
{
switch (index)
{
case 0:
return "Piano";
case 1:
return "Singing";
case 2:
return "Pinched Balloon";
case 3:
return "Gazeebo";
}
return "<Unknown>";
}
//==============================================================================
void changeProgramName (int /*index*/, const String& /*name*/) override {}
//==============================================================================
void getStateInformation (MemoryBlock& destData) override
{
MemoryOutputStream stream (destData, true);
stream.writeFloat (*isRecordingParam);
stream.writeFloat (*roomSizeParam);
}
void setStateInformation (const void* data, int sizeInBytes) override
{
MemoryInputStream stream (data, static_cast<size_t> (sizeInBytes), false);
isRecordingParam->setValueNotifyingHost (stream.readFloat());
roomSizeParam->setValueNotifyingHost (stream.readFloat());
}
private:
//==============================================================================
void loadNewSample (const void* data, int dataSize, const char* format)
{
MemoryInputStream* soundBuffer = new MemoryInputStream (data, static_cast<std::size_t> (dataSize), false);
ScopedPointer<AudioFormatReader> formatReader (formatManager.findFormatForFileExtension (format)->createReaderFor (soundBuffer, true));
BigInteger midiNotes;
midiNotes.setRange (0, 126, true);
SynthesiserSound::Ptr newSound = new SamplerSound ("Voice", *formatReader, midiNotes, 0x40, 0.0, 0.0, 10.0);
synth.removeSound (0);
sound = newSound;
synth.addSound (sound);
}
void swapSamples()
{
MemoryBlock mb;
MemoryOutputStream* stream = new MemoryOutputStream (mb, true);
{
ScopedPointer<AudioFormatWriter> writer (formatManager.findFormatForFileExtension ("wav")->createWriterFor (stream, lastSampleRate, 1, 16,
StringPairArray(), 0));
writer->writeFromAudioSampleBuffer (currentRecording, 0, currentRecording.getNumSamples());
writer->flush();
stream->flush();
}
loadNewSample (mb.getData(), static_cast<int> (mb.getSize()), "wav");
}
//==============================================================================
static constexpr int maxNumVoices = 5;
static constexpr double kMaxDurationOfRecording = 1.0;
//==============================================================================
AudioFormatManager formatManager;
int samplesRecorded;
double lastSampleRate;
AudioBuffer<float> currentRecording;
Reverb reverb;
Synthesiser synth;
SynthesiserSound::Ptr sound;
AudioParameterBool* isRecordingParam;
AudioParameterFloat* roomSizeParam;
int currentProgram;
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AUv3SynthProcessor)
};
//==============================================================================
// This creates new instances of the plugin..
AudioProcessor* JUCE_CALLTYPE createPluginFilter()
{
return new AUv3SynthProcessor();
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,133 @@
/*
==============================================================================
Copyright (c) 2015 - ROLI Ltd.
==============================================================================
*/
#include "../JuceLibraryCode/JuceHeader.h"
//==============================================================================
class MaterialLookAndFeel : public LookAndFeel_V3
{
public:
//==============================================================================
MaterialLookAndFeel()
{
setColour (ResizableWindow::backgroundColourId, windowBackgroundColour);
setColour (TextButton::buttonOnColourId, brightButtonColour);
setColour (TextButton::buttonColourId, disabledButtonColour);
}
//==============================================================================
void drawButtonBackground (Graphics& g,
Button& button,
const Colour& /*backgroundColour*/,
bool isMouseOverButton,
bool isButtonDown) override
{
ignoreUnused (isMouseOverButton);
const int width = button.getWidth();
const int height = button.getHeight();
Rectangle<float> buttonRect (0, 0, width, height);
buttonRect.reduce (haloRadius, 0.0f);
if (isButtonDown)
g.setColour (brightButtonColour.withAlpha (0.7f));
else if (! button.isEnabled())
g.setColour (disabledButtonColour);
else
g.setColour (brightButtonColour);
g.fillRoundedRectangle (buttonRect, 5.0f);
}
//==============================================================================
void drawButtonText (Graphics& g, TextButton& button, bool isMouseOverButton, bool isButtonDown) override
{
ignoreUnused (isMouseOverButton, isButtonDown);
Font font (getTextButtonFont (button, button.getHeight()));
g.setFont (font);
if (button.isEnabled())
g.setColour (Colours::white);
else
g.setColour (backgroundColour);
g.drawFittedText (button.getButtonText(), 0, 1,
button.getWidth(),
button.getHeight(),
Justification::centred, 2);
}
//==============================================================================
void drawLinearSlider (Graphics& g, int x, int y, int width, int height,
float sliderPos, float minSliderPos, float maxSliderPos,
const Slider::SliderStyle style, Slider& slider) override
{
ignoreUnused (style, minSliderPos, maxSliderPos);
Rectangle<int> r = Rectangle<int> (x + haloRadius, y, width - (haloRadius * 2), height);
Rectangle<int> backgroundBar = r.withSizeKeepingCentre(r.getWidth(), 2);
sliderPos = (sliderPos - minSliderPos) / static_cast<float> (width);
int knobPos = static_cast<int> (sliderPos * r.getWidth());
g.setColour (sliderActivePart);
g.fillRect (backgroundBar.removeFromLeft (knobPos));
g.setColour (sliderInactivePart);
g.fillRect (backgroundBar);
if (slider.isMouseOverOrDragging())
{
Rectangle<int> haloBounds = r.withTrimmedLeft (knobPos - haloRadius)
.withWidth (haloRadius*2)
.withSizeKeepingCentre(haloRadius*2, haloRadius*2);
g.setColour (sliderActivePart.withAlpha (0.5f));
g.fillEllipse (haloBounds.toFloat());
}
const int knobRadius = slider.isMouseOverOrDragging() ? knobActiveRadius : knobInActiveRadius;
Rectangle<int> knobBounds = r.withTrimmedLeft (knobPos - knobRadius)
.withWidth (knobRadius*2)
.withSizeKeepingCentre(knobRadius*2, knobRadius*2);
g.setColour (sliderActivePart);
g.fillEllipse (knobBounds.toFloat());
}
//==============================================================================
Font getTextButtonFont (TextButton& button, int buttonHeight) override
{
return LookAndFeel_V3::getTextButtonFont (button, buttonHeight).withHeight (buttonFontSize);
}
Font getLabelFont (Label& label) override
{
return LookAndFeel_V3::getLabelFont (label).withHeight (labelFontSize);
}
//==============================================================================
const int labelFontSize = 12;
const int buttonFontSize = 15;
//==============================================================================
const int knobActiveRadius = 12;
const int knobInActiveRadius = 8;
const int haloRadius = 18;
//==============================================================================
const Colour windowBackgroundColour = Colour (0xff262328);
const Colour backgroundColour = Colour (0xff4d4d4d);
const Colour brightButtonColour = Colour (0xff80cbc4);
const Colour disabledButtonColour = Colour (0xffe4e4e4);
const Colour sliderInactivePart = Colour (0xff545d62);
const Colour sliderActivePart = Colour (0xff80cbc4);
};

View file

@ -2,7 +2,7 @@
<JUCERPROJECT id="LrATE6" name="AnimationAppExample" projectType="guiapp" version="1.0.0"
bundleIdentifier="com.yourcompany.AnimationAppExample" includeBinaryInAppConfig="1"
jucerVersion="4.1.0">
jucerVersion="4.2.0">
<MAINGROUP id="F3keCY" name="AnimationAppExample">
<GROUP id="{5E4132EA-C4A0-CBDE-BEDA-FD6772DA79D5}" name="Source">
<FILE id="n1FmZc" name="MainComponent.cpp" compile="1" resource="0"
@ -34,7 +34,7 @@
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
</MODULEPATHS>
</XCODE_MAC>
<XCODE_IPHONE targetFolder="Builds/iOS">
<XCODE_IPHONE targetFolder="Builds/iOS" iosScreenOrientation="portraitlandscape">
<CONFIGURATIONS>
<CONFIGURATION name="Debug" iosCompatibility="default" isDebug="1" optimisation="1"
targetName="AnimationAppExample"/>

View file

@ -11,6 +11,8 @@
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AnimationAppExample</string>
<key>CFBundleDisplayName</key>
<string>AnimationAppExample</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>

View file

@ -13,6 +13,8 @@
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>AnimationAppExample</string>
<key>CFBundleDisplayName</key>
<string>AnimationAppExample</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
@ -27,12 +29,15 @@
<true/>
<key>UIRequiresFullScreen</key>
<true/>
<key>UIStatusBarHidden</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIBackgroundModes</key>
<array/>
</dict>
</plist>

View file

@ -4,8 +4,8 @@
project - if you alter its contents, your changes may be overwritten!
There's a section below where you can add your own custom code safely, and the
Introjucer will preserve the contents of that block, but the best way to change
any of these definitions is by using the Introjucer's project settings.
Projucer will preserve the contents of that block, but the best way to change
any of these definitions is by using the Projucer's project settings.
Any commented-out settings will assume their default values.
@ -17,7 +17,7 @@
//==============================================================================
// [BEGIN_USER_CODE_SECTION]
// (You can add your own code in this section, and the Introjucer will not overwrite it)
// (You can add your own code in this section, and the Projucer will not overwrite it)
// [END_USER_CODE_SECTION]
@ -38,9 +38,15 @@
//==============================================================================
#ifndef JUCE_STANDALONE_APPLICATION
#define JUCE_STANDALONE_APPLICATION 1
#ifdef JucePlugin_Build_Standalone
#define JUCE_STANDALONE_APPLICATION JucePlugin_Build_Standalone
#else
#define JUCE_STANDALONE_APPLICATION 1
#endif
#endif
#define JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED 1
//==============================================================================
// juce_audio_devices flags:

View file

@ -14,19 +14,21 @@
#define __APPHEADERFILE_LRATE6__
#include "AppConfig.h"
#include "modules/juce_audio_basics/juce_audio_basics.h"
#include "modules/juce_audio_devices/juce_audio_devices.h"
#include "modules/juce_audio_formats/juce_audio_formats.h"
#include "modules/juce_audio_processors/juce_audio_processors.h"
#include "modules/juce_core/juce_core.h"
#include "modules/juce_cryptography/juce_cryptography.h"
#include "modules/juce_data_structures/juce_data_structures.h"
#include "modules/juce_events/juce_events.h"
#include "modules/juce_graphics/juce_graphics.h"
#include "modules/juce_gui_basics/juce_gui_basics.h"
#include "modules/juce_gui_extra/juce_gui_extra.h"
#include "modules/juce_opengl/juce_opengl.h"
#include "modules/juce_video/juce_video.h"
#include <juce_audio_basics/juce_audio_basics.h>
#include <juce_audio_devices/juce_audio_devices.h>
#include <juce_audio_formats/juce_audio_formats.h>
#include <juce_audio_processors/juce_audio_processors.h>
#include <juce_core/juce_core.h>
#include <juce_cryptography/juce_cryptography.h>
#include <juce_data_structures/juce_data_structures.h>
#include <juce_events/juce_events.h>
#include <juce_graphics/juce_graphics.h>
#include <juce_gui_basics/juce_gui_basics.h>
#include <juce_gui_extra/juce_gui_extra.h>
#include <juce_opengl/juce_opengl.h>
#include <juce_video/juce_video.h>
#if ! DONT_SET_USING_JUCE_NAMESPACE
// If your code uses a lot of JUCE classes, then this will obviously save you

View file

@ -2,11 +2,11 @@
Important Note!!
================
The purpose of this folder is to contain files that are auto-generated by the Introjucer,
The purpose of this folder is to contain files that are auto-generated by the Projucer,
and ALL files in this folder will be mercilessly DELETED and completely re-written whenever
the Introjucer saves your project.
the Projucer saves your project.
Therefore, it's a bad idea to make any manual changes to the files in here, or to
put any of your own files in here if you don't want to lose them. (Of course you may choose
to add the folder's contents to your version-control system so that you can re-merge your own
modifications after the Introjucer has saved its changes).
modifications after the Projucer has saved its changes).

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_basics/juce_audio_basics.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_basics/juce_audio_basics.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_devices/juce_audio_devices.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_devices/juce_audio_devices.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_formats/juce_audio_formats.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_formats/juce_audio_formats.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_processors/juce_audio_processors.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_audio_processors/juce_audio_processors.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_core/juce_core.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_core/juce_core.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_cryptography/juce_cryptography.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_cryptography/juce_cryptography.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_data_structures/juce_data_structures.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_data_structures/juce_data_structures.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_events/juce_events.cpp>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_events/juce_events.mm>

View file

@ -0,0 +1,9 @@
/*
IMPORTANT! This file is auto-generated each time you save your
project - if you alter its contents, your changes may be overwritten!
*/
#include "AppConfig.h"
#include <juce_graphics/juce_graphics.cpp>

Some files were not shown because too many files have changed in this diff Show more