summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@digia.com>2014-09-02 10:23:39 +0300
committerSamuli Piippo <samuli.piippo@digia.com>2014-09-02 10:24:26 +0300
commit406db8fabcf8de5ab31880ca579edb7004cc4f4e (patch)
tree6b349020fef1d2f8f601a509d7c259fa40bea0f9
parent2aab20bb2c32aadba2bef16828e3dd0f6c29a30b (diff)
parentad9ea42d493bc9b125c019373fa5fe84cfcc225d (diff)
Merge remote-tracking branch 'origin/stable' into dev
* origin/stable: (63 commits) Doc: Bump version to 3.1.1 Make FPS checkbox persistent Handle accelerometer readings in rotated items webengine: Add slight delay before loading the start page webengine: disable the webgl demo Update screenshot of the Virtual Keyboard demo [Doc] Use symbolic links for demo preview images Changed the audio track on the Qt_EnterpriseEmbedded_1080p.mp4 video. Fix demo descriptions. launchersettings: make ip field span two columns Remove deleted demos also from doc Update all VirtualKeyboard import to version 1.1 Doc: Bump version to 3.1.0 Doc: Content/language improvement for About QtEE demo. Disable GraphicalEffects demo on beagleboneblack about: fit text properly to the box Fix Meet Qt Enterprise Embedded video url on startup Fix a typo in the new About presentation About Boot to Qt-demo update Update Enterprise gallery demo description ... Change-Id: I928ab65867993c83ae645834430fd15825349fde
-rw-r--r--basicsuite/about-b2qt/AboutBoot2Qt.qml268
-rw-r--r--basicsuite/about-b2qt/Box.qml3
-rw-r--r--basicsuite/about-b2qt/ColouredTitle.qml (renamed from basicsuite/qt5-launchpresentation/WebkitSlide.qml)21
-rw-r--r--basicsuite/about-b2qt/HighlightText.qml (renamed from basicsuite/qt5-launchpresentation/calqlatr/content/StyleLabel.qml)21
-rw-r--r--basicsuite/about-b2qt/QtForAndroid.qml2
-rw-r--r--basicsuite/about-b2qt/description.txt4
-rw-r--r--basicsuite/about-b2qt/main.qml9
-rw-r--r--basicsuite/about-b2qt/preview_l.jpgbin28727 -> 34971 bytes
-rw-r--r--basicsuite/basicsuite.pro4
-rw-r--r--basicsuite/camera/description.txt4
-rw-r--r--basicsuite/camera/exclude.txt3
-rw-r--r--basicsuite/controls-touch/title.txt2
-rw-r--r--basicsuite/enterprise-gallery/description.txt2
-rw-r--r--basicsuite/enterprise-qtdatavis3d/description.txt1
-rw-r--r--basicsuite/enterprise-qtdatavis3d/enterprise-qtdatavis3d.pro (renamed from basicsuite/photogallery/photogallery.pro)7
-rw-r--r--basicsuite/enterprise-qtdatavis3d/exclude.txt2
-rw-r--r--basicsuite/enterprise-qtdatavis3d/layer_1.pngbin0 -> 34540 bytes
-rw-r--r--basicsuite/enterprise-qtdatavis3d/layer_2.pngbin0 -> 10553 bytes
-rw-r--r--basicsuite/enterprise-qtdatavis3d/layer_3.pngbin0 -> 13022 bytes
-rw-r--r--basicsuite/enterprise-qtdatavis3d/main.qml233
-rw-r--r--basicsuite/enterprise-qtdatavis3d/preview_l.jpgbin0 -> 30360 bytes
-rw-r--r--basicsuite/enterprise-qtdatavis3d/title.txt1
-rw-r--r--basicsuite/graphicaleffects/exclude.txt2
-rw-r--r--basicsuite/launchersettings/NetworkList.qml1
-rw-r--r--basicsuite/launchersettings/PoweroffAction.qml1
-rw-r--r--basicsuite/launchersettings/RebootAction.qml1
-rw-r--r--basicsuite/launchersettings/main.qml2
-rwxr-xr-xbasicsuite/mediaplayer/main.qml1
-rw-r--r--basicsuite/photogallery/description.txt1
-rw-r--r--basicsuite/photogallery/main.qml295
-rw-r--r--basicsuite/photogallery/preview_l.jpgbin55274 -> 0 bytes
-rw-r--r--basicsuite/photogallery/title.txt1
-rw-r--r--basicsuite/qt5-cinematicdemo/description.txt6
-rw-r--r--basicsuite/qt5-everywhere/demos/gridrssnews/RssDelegate.qml2
-rw-r--r--basicsuite/qt5-launchpresentation/Button.qml78
-rw-r--r--basicsuite/qt5-launchpresentation/CameraSlide.qml92
-rw-r--r--basicsuite/qt5-launchpresentation/CanvasSlide.qml161
-rw-r--r--basicsuite/qt5-launchpresentation/DemoMain.qml139
-rw-r--r--basicsuite/qt5-launchpresentation/EffectsSlide.qml203
-rw-r--r--basicsuite/qt5-launchpresentation/ExamplesSlide.qml89
-rw-r--r--basicsuite/qt5-launchpresentation/FontSlide.qml98
-rw-r--r--basicsuite/qt5-launchpresentation/NoisyGradient.qml92
-rw-r--r--basicsuite/qt5-launchpresentation/NormalMapGenerator.qml92
-rw-r--r--basicsuite/qt5-launchpresentation/OpacityTransitionPresentation.qml104
-rw-r--r--basicsuite/qt5-launchpresentation/ParticleSlide.qml86
-rw-r--r--basicsuite/qt5-launchpresentation/README51
-rw-r--r--basicsuite/qt5-launchpresentation/ShaderSlide.qml197
-rw-r--r--basicsuite/qt5-launchpresentation/SlideDeck.qml232
-rw-r--r--basicsuite/qt5-launchpresentation/Swirl.qml116
-rw-r--r--basicsuite/qt5-launchpresentation/VideoSlide.qml116
-rw-r--r--basicsuite/qt5-launchpresentation/WebKitSlideContent.qml124
-rw-r--r--basicsuite/qt5-launchpresentation/WidgetsSlide.qml152
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/.DS_Storebin6148 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/Calqlatr.qml110
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/Button.qml80
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/Display.qml124
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/NumberPad.qml69
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/audio/touch.wavbin950 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/calculator.js143
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-back.pngbin328 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-close.pngbin488 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-settings.pngbin503 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/logo.pngbin5950 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-left.pngbin12401 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-right.pngbin12967 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-grip.pngbin298 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-a.pngbin2326 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-b.pngbin2334 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-green.pngbin4808 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-white.pngbin4601 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/demo.qmlproject18
-rw-r--r--basicsuite/qt5-launchpresentation/description.txt5
-rw-r--r--basicsuite/qt5-launchpresentation/images/ally.pngbin1907941 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/butterfly.pngbin18668 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/displace.pngbin20269 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/fog.pngbin225653 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/particle.pngbin861 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/qt-logo.pngbin49656 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/widgets_boxes.pngbin589779 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/widgets_chips.pngbin211342 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/widgets_mainwindows.pngbin95685 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/widgets_styles_fusion.pngbin65678 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/images/widgets_styles_macstyle.pngbin70514 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/main.qml63
-rw-r--r--basicsuite/qt5-launchpresentation/main_hifi.qml43
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/.DS_Storebin6148 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/Maroon.qml233
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml90
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml240
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml115
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml84
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml111
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml53
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wavbin20972 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wavbin13274 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wavbin8638 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wavbin15790 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wavbin4936 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wavbin17798 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wavbin2562 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wavbin27554 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/background.pngbin5802 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.pngbin23974 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.pngbin12238 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.pngbin4067 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.pngbin8916 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.pngbin13945 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.pngbin6760 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.pngbin4771 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.pngbin3398 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.pngbin1889 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.pngbin3751 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.pngbin3946 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.pngbin4392 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.pngbin911 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.pngbin3737 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.pngbin3362 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.pngbin22440 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.pngbin12729 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.pngbin4138 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.pngbin2830 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/help.pngbin38255 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.pngbin1675 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.pngbin7706 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.pngbin3477 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.pngbin18332 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.pngbin7797 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.pngbin22832 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.pngbin4046 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.pngbin6181 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.pngbin2391 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/points.pngbin1561 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.pngbin6257 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.pngbin801 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.pngbin1535 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.pngbin18121 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.pngbin11929 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.pngbin4137 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.pngbin248412 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.pngbin2777 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.pngbin4959 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.pngbin5063 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.pngbin1326 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.pngbin1515 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.pngbin4230 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.pngbin2763 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/logic.js264
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml262
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml133
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml114
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml83
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml128
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml72
-rw-r--r--basicsuite/qt5-launchpresentation/particles/customemitter.qml91
-rw-r--r--basicsuite/qt5-launchpresentation/particles/particle.pngbin861 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/particles/particle4.pngbin1799 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/particles/star.pngbin1550 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/particles/starfish_mask.pngbin11301 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/particles/velocityfrommotion.qml306
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/Clock.qml77
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml162
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/Presentation.qml196
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/Slide.qml186
-rw-r--r--basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml61
-rw-r--r--basicsuite/qt5-launchpresentation/preview_l.jpgbin16252 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/qt5-launchpresentation.pro18
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/.DS_Storebin6148 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/Samegame.qml371
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/Block.qml114
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/BlockEmitter.qml57
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/Button.qml70
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/GameArea.qml226
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/LogoAnimation.qml102
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/MenuEmitter.qml53
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/PaintEmitter.qml98
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/PrimaryPack.qml122
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/PuzzleBlock.qml111
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/SamegameText.qml49
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/SimpleBlock.qml108
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/SmokeText.qml83
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/background-puzzle.pngbin86666 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/background.pngbin101018 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/bar.pngbin10970 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/blue-puzzle.pngbin2219 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/blue.pngbin1018 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-highscore.pngbin2276 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-puzzle.pngbin2811 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-1.pngbin2728 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-2.pngbin3378 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-3.pngbin1423 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-4.pngbin2096 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-new.pngbin3662 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-menu.pngbin2391 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-puzzle-next.pngbin3658 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/but-quit.pngbin2100 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/green-puzzle.pngbin2271 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/green.pngbin1024 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-fail.pngbin6549 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-ok.pngbin7190 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-time.pngbin1159 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-a.pngbin1814 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-e.pngbin1725 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-g.pngbin1765 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-m.pngbin1743 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-s.pngbin1791 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/logo.pngbin3608 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-brick.pngbin861 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-paint.pngbin714 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-smoke.pngbin5409 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/red-puzzle.pngbin2218 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/red.pngbin1018 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore-new.pngbin6767 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore.pngbin3179 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-no-winner.pngbin6321 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-go.pngbin5395 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-won.pngbin5618 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1.pngbin1751 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-go.pngbin5874 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-won.pngbin6177 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2.pngbin2381 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow-puzzle.pngbin2239 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow.pngbin1008 -> 0 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/TemplateBase.qml70
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level0.qml59
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level1.qml59
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level2.qml61
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level3.qml60
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level4.qml58
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level5.qml59
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level6.qml60
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level7.qml58
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level8.qml59
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/content/levels/level9.qml62
-rwxr-xr-xbasicsuite/qt5-launchpresentation/samegame/content/samegame.js581
-rw-r--r--basicsuite/qt5-launchpresentation/samegame/settings.js56
-rw-r--r--basicsuite/qt5-launchpresentation/title.txt1
-rw-r--r--basicsuite/sensors/Accelbubble.qml145
-rw-r--r--basicsuite/sensors/Light.qml77
-rw-r--r--basicsuite/sensors/exclude.txt9
-rw-r--r--basicsuite/sensors/main.qml34
-rw-r--r--basicsuite/sensors/preview_l.jpgbin19464 -> 16715 bytes
-rw-r--r--basicsuite/shared/SharedMain.qml2
-rw-r--r--basicsuite/shared/engine.h3
-rw-r--r--basicsuite/shared/main.cpp15
-rw-r--r--basicsuite/shared/shared.pri5
-rw-r--r--basicsuite/textinput/TextArea.qml7
-rw-r--r--basicsuite/textinput/TextBase.qml4
-rw-r--r--basicsuite/textinput/TextField.qml14
-rw-r--r--basicsuite/textinput/main.qml49
-rw-r--r--basicsuite/textinput/preview_l.jpgbin10684 -> 25769 bytes
-rw-r--r--basicsuite/webengine/ErrorPage.qml (renamed from basicsuite/qt5-launchpresentation/particles/emitmask.qml)53
-rw-r--r--basicsuite/webengine/content/csstetrahedron/index.html25
-rw-r--r--basicsuite/webengine/content/csstetrahedron/screenshot.pngbin0 -> 7405 bytes
-rw-r--r--basicsuite/webengine/content/csstetrahedron/style.css109
-rw-r--r--basicsuite/webengine/content/index.html37
-rw-r--r--basicsuite/webengine/content/morphingcubes/index.html286
-rw-r--r--basicsuite/webengine/content/morphingcubes/screenshot.pngbin0 -> 15607 bytes
-rw-r--r--basicsuite/webengine/content/rubiks/css/style.css36
-rw-r--r--basicsuite/webengine/content/rubiks/index.html25
-rw-r--r--basicsuite/webengine/content/rubiks/js/css3.oz.js28
-rw-r--r--basicsuite/webengine/content/rubiks/js/oz.js334
-rw-r--r--basicsuite/webengine/content/rubiks/js/quaternion.js78
-rw-r--r--basicsuite/webengine/content/rubiks/js/rubik.js492
-rw-r--r--basicsuite/webengine/content/rubiks/screenshot.pngbin0 -> 7159 bytes
-rw-r--r--basicsuite/webengine/content/webgl/helloqt.html49
-rw-r--r--basicsuite/webengine/content/webgl/helloqt.js223
-rw-r--r--basicsuite/webengine/content/webgl/qtlogo.js2468
-rw-r--r--basicsuite/webengine/content/webgl/screenshot.pngbin0 -> 17367 bytes
-rw-r--r--basicsuite/webengine/content/webgl/three.min.js737
-rw-r--r--basicsuite/webengine/description.txt3
-rw-r--r--basicsuite/webengine/exclude.txt5
-rw-r--r--basicsuite/webengine/main.qml293
-rw-r--r--basicsuite/webengine/preview_l.jpgbin0 -> 18081 bytes
-rw-r--r--basicsuite/webengine/title.txt1
-rw-r--r--basicsuite/webengine/ui/icons/down.pngbin0 -> 6275 bytes
-rw-r--r--basicsuite/webengine/ui/icons/go-next.pngbin0 -> 6729 bytes
-rw-r--r--basicsuite/webengine/ui/icons/go-previous.pngbin0 -> 6737 bytes
-rw-r--r--basicsuite/webengine/ui/icons/home.pngbin0 -> 4504 bytes
-rw-r--r--basicsuite/webengine/ui/icons/process-stop.pngbin0 -> 9423 bytes
-rw-r--r--basicsuite/webengine/ui/icons/up.pngbin0 -> 6257 bytes
-rw-r--r--basicsuite/webengine/ui/icons/view-refresh.pngbin0 -> 12593 bytes
-rw-r--r--basicsuite/webengine/webengine.pro14
-rw-r--r--doc/b2qt-demos.qdoc49
-rw-r--r--doc/b2qt-demos.qdocconf5
l---------[-rw-r--r--]doc/images/b2qt-demo-about-b2qt.jpgbin28727 -> 41 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-camera.jpgbin33458 -> 37 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-controls-touch.jpgbin11179 -> 45 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-enterprise-charts.jpgbin11070 -> 48 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-enterprise-dashboard.jpgbin11239 -> 51 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-enterprise-gallery.jpgbin9016 -> 49 bytes
l---------doc/images/b2qt-demo-enterprise-qtdatavis3d.jpg1
l---------[-rw-r--r--]doc/images/b2qt-demo-graphicaleffects.jpgbin33841 -> 47 bytes
l---------doc/images/b2qt-demo-launchersettings.jpg1
l---------[-rw-r--r--]doc/images/b2qt-demo-mediaplayer.jpgbin29015 -> 42 bytes
-rw-r--r--doc/images/b2qt-demo-photogallery.jpgbin55274 -> 0 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-qt5-cinematicdemo.jpgbin36830 -> 48 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-qt5-everywhere.jpgbin34331 -> 45 bytes
-rw-r--r--doc/images/b2qt-demo-qt5-launchpresentation.jpgbin16252 -> 0 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-qt5-particlesdemo.jpgbin8889 -> 48 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-sensorexplorer.jpgbin21553 -> 45 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-sensors.jpgbin19464 -> 38 bytes
l---------[-rw-r--r--]doc/images/b2qt-demo-textinput.jpgbin10684 -> 40 bytes
l---------doc/images/b2qt-demo-webengine.jpg1
-rwxr-xr-xdoc/images/update-doc-images.sh2
-rw-r--r--videos/Qt_EnterpriseEmbedded_1080p.mp4bin0 -> 23057072 bytes
305 files changed, 6023 insertions, 9419 deletions
diff --git a/basicsuite/about-b2qt/AboutBoot2Qt.qml b/basicsuite/about-b2qt/AboutBoot2Qt.qml
index d050a71..ada3eb1 100644
--- a/basicsuite/about-b2qt/AboutBoot2Qt.qml
+++ b/basicsuite/about-b2qt/AboutBoot2Qt.qml
@@ -46,11 +46,18 @@ Column {
width: parent.width
- spacing: engine.smallFontSize()
+ spacing: engine.smallFontSize() * 2
- Title {
- id: title
- text: "Qt Enterprise Embedded"
+ property color qtlightgreen: '#80c342'
+ property color qtmediumgreen: '#328930'
+ property color qtdarkgreen: '#006325'
+ property color qtdarkblue: '#14148c'
+ property color qtlightblue: '#14aaff'
+ property color qtpurple: '#ae32a0'
+ property color qtred: '#b40000'
+
+ ColouredTitle {
+ text: "MEET Qt ENTERPRISE EMBEDDED"
}
ContentText {
@@ -59,62 +66,221 @@ Column {
text: '<p align="justify">Qt Enterprise Embedded provides a fully-integrated solution
to get you started immediately with software development on your embedded device
with a tailored user experience for embedded Linux and embedded Android. It
- supports your key requirements for high performance, minimal footprint together
- with Qt’s flexible full-framework modular architecture to deliver unparalleled
- scalability.'
+ supports your key requirements for high performance and minimal footprint, and together
+ with Qt - a full framework with modular architecture - delivers unparalleled
+ scalability. The development cycle is as rapid as it gets with fully integrated
+ embedded tooling, pre-configured software stack and a collection of value-add components.</p>'
}
+ // Large overview picture
Column {
- id: diagram
- spacing: 1
- width: parent.width * 0.5
+ width: parent.width
anchors.horizontalCenter: parent.horizontalCenter
- Box { text: "Application"; accentColor: "coral" }
- Box { text: "Qt Framework"; accentColor: Qt.rgba(0.64, 0.82, 0.15) }
- Box { text: "Android/Linux Baselayer"; accentColor: "steelblue" }
- Box { text: "Embedded Hardware"; accentColor: "steelblue"}
+ spacing: 10
+
+ Box{ text: "Cross-Platform Qt Libraries"; width: parent.width; accentColor: qtlightgreen }
+ Box{ text: "Value-Add Components"; width: parent.width; accentColor: qtlightgreen }
+
+ Row {
+ id: row1
+ spacing: 10
+ width: parent.width
+
+ Box{ text: "Complete\nDevelopment Environment\nwith Qt Creator IDE";
+ width: (row1.width - row1.spacing) / 2; height: column1.height; accentColor: qtmediumgreen }
+
+ Column {
+ id: column1
+ width: (row1.width - row1.spacing ) / 2
+ spacing: row1.spacing
+
+
+ Box{ text: "Boot to Qt\nSoftware Stack\nfor HW"; accentColor: qtdarkblue; height: b2.height * 3 }
+ Box{ id: b2; text: "Build-Your-Own-Stack Tooling"; accentColor: qtdarkblue; }
+ }
+ }
+ } // end overview picture
+
+ ColouredTitle {
+ text: "POWER OF CROSS-PLATFORM Qt"
+ }
+
+ ContentText {
+ width: parent.width
+ text: '<p align="justify">Leverage the cross-platform C++ native APIs for maximum performance on both beautiful
+ user interfaces as well as non-GUI operations. With C++, you have full control
+ over your application code and direct device access. You can also create custom configurations
+ of Qt Enterprise Embedded, targeting a large variety of supported hardware and
+ operating systems with ease. As with any Qt project, the same application can be deployed
+ natively to desktop and mobile OS targets as well.</p>'
+ }
+
+ HighlightText {
+ text: "Velvet-Like Native UIs, HTML5 or Both!"
}
ContentText {
- id: description
+ width: parent.width
+ text: '<p align="justify">With <strong>Qt Quick</strong> you can create beautiful and modern touch-based UIs
+ with maximum performance. Just like everything you find from this demo launcher!</p>
+ <p align="justify">Should you want dynamic web content and HTML5, the <strong>Qt WebEngine</strong> gives you a
+ Chromium-based browser engine with comprehensive HTML5 feature support. Mix and match with Qt Quick to get the best
+ of both worlds!</p>'
+ }
+ ColouredTitle {
+ text: "SHORTER TIME-TO-MARKET"
+ }
+
+ HighlightText {
+ text: "Full Embedded Development Environment"
+ }
+
+ ContentText {
width: parent.width
+ text: '<p align="justify">A full-blown, productivity enhancing development environment,
+ installed on a Linux development desktop. This self-contained environment
+ is installed and updated through one online installer and features the Qt
+ Creator Enterprise IDE, with features that facilitate the whole product
+ creation lifecycle: UI designer, code editor, direct device deployment
+ via USB or IP, emulator, on-device debugging and profiling.</p>'
+ }
+
- text: '<p align="justify">Qt Enterprise Embedded gives you shorter time-to-market
- providing you with the productivity-enhancing tools and value-adding components.
- You are up-to-speed with development and prototyping since day one. You can just
- focus on writing your application with Qt.<br>
- <p align="justify">Qt Enterprise Embedded provides you with the following:
- <ul>
- <li><b>A full-blown, productivity enhancing development environment</b>,
- installed on a Linux development desktop. This self-contained environment
- is installed and updated through one online installer and features the Qt
- Creator Enterprise IDE, with features that facilitate the whole product
- creation lifecycle: UI designer, code editor, direct device deployment
- via USB or IP, emulator, on-device debugging and profiling.</li><br>
- <li><b>Shorter time-to-market with the Boot to Qt Software Stack</b>. A
- light-weight, Qt-optimized, full software stack that is installed into
- the actual target device. The stack comes in two flavors, Embedded Android
- and Embedded Linux. The pre-built stack gets you up-to-speed with prototyping
- in no time and with our professional tooling you can customize the stack into
- your exact production needs.</li><br>
- <li><b>Full power and scalability of Qt on Embedded</b>. Leverage the
- cross-platform C++ native APIs for maximum performance on both beautiful
- user interfaces as well as non-GUI operations. With C++, you have full control
- over your application code. You can also configure Qt Enterprise Embedded
- directly from the source codes into a large variety of supported hardware and
- operating systems. As with any Qt project, the same application can be deployed
- natively to desktop and mobile OS targets as well.</li><br>
- <li><b>Value-Adding Components</b>. No need to re-implement the wheel! Full Qt
- Enterprise libraries give you a shortcut on development time providing ready-made
- solutions, such as a comprehensive virtual keyboard, charts and industrial UI
- controls.
- </ul>
-
- <p align="justify">Qt Enterprise Embedded includes <b>Boot to Qt</b>, a light-weight,
- Qt-optimized, full software stack for embedded systems that is installed into the actual
- target device. The Boot to Qt stack can be made to run on a variety of hardware - Qt
- Enterprise Embedded comes with pre-built images for several reference devices.
- '
+ HighlightText {
+ text: "Boot to Qt Software Stack -\nEmbedded Prototyping Couldn't Get Any Simpler!"
}
+
+ Row {
+ width: parent.width
+ spacing: 30
+
+ ContentText {
+ width: (parent.width - parent.spacing ) / 2
+
+ text: '<p align="justify">The <strong>Boot to Qt</strong> software stack gets you
+ immediately started with software development on your embedded device
+ with a tailored user experience for embedded Linux and embedded Android. It
+ supports your key requirements for high performance, minimal footprint together
+ with Qt’s flexible full-framework modular architecture to deliver unparalleled
+ scalability.</p><p align="justify">The Boot to Qt stack can be made to run on a variety
+ of hardware with the provided <strong>Build-Your-Own-Stack</strong> tooling. It comes
+ pre-built for several reference devices with the installation of Qt Enterprise Embedded.</p>'
+ }
+
+ Column {
+ spacing: 5
+ width: ( parent.width - parent.spacing ) / 2
+ Box { text: "Application"; accentColor: qtpurple }
+ Box { text: "Qt Framework"; accentColor: qtlightgreen }
+ Box { text: "Android/Linux Baselayer"; accentColor: qtdarkblue }
+ Box { text: "Embedded Hardware"; accentColor: qtdarkblue }
+ }
+
+
+ }
+
+ HighlightText {
+ text: "Value-Add Components - No Need to Re-Invent the Wheel!"
+ }
+ ContentText {
+ width: parent.width
+ text: '<p align="justify">The Qt libraries come with a lot of high-level functionality for
+ various parts of your application. On top of that, we\'ve extended Qt Enterprise Embedded
+ to contain all the important things you need to create your embedded device, such as:</p>'
+ }
+
+
+ // The "grid" layout for key add-ons
+ Row {
+ width: parent.width * 0.9
+ spacing: 30
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Column {
+ spacing: 10
+ width: parent.width * 0.4
+
+ HighlightText {
+ color: qtlightgreen
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: engine.smallFontSize()
+ text: "Virtual Keyboard"
+ }
+ HighlightText {
+ color: qtlightgreen
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: engine.smallFontSize()
+
+ text: "Dynamic and Static Charting"
+ }
+ HighlightText {
+ color: qtlightgreen
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: engine.smallFontSize()
+
+ text: "Pre-Built UI Controls"
+ }
+ }
+ Column {
+ spacing: 10
+ width: parent.width * 0.4
+ HighlightText {
+ color: qtlightgreen
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: engine.smallFontSize()
+ text: "3D Data Visualization"
+ }
+ HighlightText {
+ color: qtlightgreen
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: engine.smallFontSize()
+ text: "Qt Quick Compiler"
+ }
+ HighlightText {
+ color: qtlightgreen
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: engine.smallFontSize()
+ text: "Additional Tooling"
+ }
+ }
+ } // end of "grid" layout
+
+ ColouredTitle {
+ text: "TRUSTED TECHNOLOGY PARTNER"
+ }
+ ContentText {
+ width: parent.width
+ text: '<p align="justify">Qt is powering millions of everyday embedded devices used by over 70 industries. The Qt developer
+ community consists of hundreds of thousands of enthusiastic developers.</p>'
+ }
+ ContentText {
+ width: parent.width
+ text: '<p align="justify">With Qt Enterprise Embedded you are never alone with your device creation. You get
+ <strong>full support and portfolio of Digia Qt Professional Services</strong>
+ to help you pass all obstacles and reach your markets faster with outstanding quality.</p>'
+ }
+
+ ColouredTitle {
+ text: "GETTING STARTED WITH DEVELOPMENT"
+ }
+ ContentText {
+ width: parent.width
+ text: '<p align="justify">Play around with the demos in this launcher to see the power of Qt and get your
+ free evaluation version of Qt Enterprise Embedded with the Boot to Qt images
+ for common developer boards from</p>'
+ }
+ HighlightText {
+ text: "http://qt.digia.com/QtEnterpriseEmbedded"
+ color: qtpurple
+ font.bold: true
+ horizontalAlignment: Text.AlignHCenter
+ }
+ ContentText {
+ width: parent.width
+ text: '<p align="justify">With an online installer, you\'ll get the out-of-the-box
+ pre-configured development environment, Qt Creator IDE, and you can start your
+ embedded development immediately!</p>'
+ }
+
}
diff --git a/basicsuite/about-b2qt/Box.qml b/basicsuite/about-b2qt/Box.qml
index ab6e971..72ede4b 100644
--- a/basicsuite/about-b2qt/Box.qml
+++ b/basicsuite/about-b2qt/Box.qml
@@ -56,7 +56,7 @@ Rectangle {
gradient: Gradient {
GradientStop { position: 0; color: root.accentColor; }
- GradientStop { position: 1; color: "black"; }
+ GradientStop { position: 1; color: Qt.darker(Qt.darker(root.accentColor)); }
}
Text {
@@ -65,6 +65,7 @@ Rectangle {
font.bold: true;
color: "white"
anchors.centerIn: parent
+ horizontalAlignment: Text.AlignHCenter
}
}
diff --git a/basicsuite/qt5-launchpresentation/WebkitSlide.qml b/basicsuite/about-b2qt/ColouredTitle.qml
index 9febcdf..c73192c 100644
--- a/basicsuite/qt5-launchpresentation/WebkitSlide.qml
+++ b/basicsuite/about-b2qt/ColouredTitle.qml
@@ -39,21 +39,16 @@
**
****************************************************************************/
import QtQuick 2.0
-import "presentation"
-Slide {
- id: slide
+Text {
- title: "Qt WebKit - WebView"
+ property color qtlightgreen: '#80c342'
- Loader {
- id: webkitLoader
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
- anchors.fill: parent
-
- source: "WebKitSlideContent.qml"
- }
-
- centeredText: webkitLoader.status == Loader.Error ? "Qt WebKit not installed or otherwise failed to load" : ""
+ font.pixelSize: engine.titleFontSize()
+ font.bold: true
+ color: qtlightgreen
}
-
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/StyleLabel.qml b/basicsuite/about-b2qt/HighlightText.qml
index 3bdea86..e1fc68e 100644
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/StyleLabel.qml
+++ b/basicsuite/about-b2qt/HighlightText.qml
@@ -1,9 +1,10 @@
/****************************************************************************
**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the examples of the Qt Enterprise Embedded.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
@@ -37,14 +38,16 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
import QtQuick 2.0
Text {
- width: 64
- font.pixelSize: 14
- font.bold: false
+
+ property color qtlightblue: '#14aaff'
+
+ width: parent.width
+ horizontalAlignment: Text.AlignLeft
wrapMode: Text.WordWrap
- lineHeight: 0.75
- color: "#676764"
+ font.pixelSize: engine.fontSize()
+ font.bold: true
+ color: qtlightblue
}
diff --git a/basicsuite/about-b2qt/QtForAndroid.qml b/basicsuite/about-b2qt/QtForAndroid.qml
index 16d834a..6b3b81f 100644
--- a/basicsuite/about-b2qt/QtForAndroid.qml
+++ b/basicsuite/about-b2qt/QtForAndroid.qml
@@ -87,7 +87,7 @@ Column {
ContentText {
width: parent.width
text: '<p align="justify"><b>Boot to Qt for embedded Linux</b> is build from scratch using
- Yocto 1.5 tools to contain only components required in the embedded device,
+ Yocto tools to contain only components required in the embedded device,
resulting in smaller image sizes while keeping valuable development tools available.'
}
}
diff --git a/basicsuite/about-b2qt/description.txt b/basicsuite/about-b2qt/description.txt
index 676a166..df6f286 100644
--- a/basicsuite/about-b2qt/description.txt
+++ b/basicsuite/about-b2qt/description.txt
@@ -1,3 +1 @@
-The "About Boot to Qt" provides an introduction to what Boot to Qt is all about.
-
-It talks briefly about how the software stack is built up, rough hardware requirements and how Boot to Qt differs from the more traditional Qt editions.
+The "About Qt Enterprise Embedded" provides an introduction to what Qt Enterprise Embedded is all about.
diff --git a/basicsuite/about-b2qt/main.qml b/basicsuite/about-b2qt/main.qml
index 694ba50..2b21a6b 100644
--- a/basicsuite/about-b2qt/main.qml
+++ b/basicsuite/about-b2qt/main.qml
@@ -48,11 +48,6 @@ Item {
width : Screen.height > Screen.width ? Screen.height : Screen.width
height : Screen.height > Screen.width ? Screen.width : Screen.height
-// Rectangle {
-// anchors.fill: parent
-// color: "black"
-// }
-
Flickable {
id: flick
property real inertia: 0.4
@@ -70,8 +65,6 @@ Item {
property real topOvershoot: Math.max(0, contentItem.y);
property real bottomOvershoot: Math.max(0, root.height - (contentItem.height + contentItem.y));
-// onTopOvershootChanged: print("Top Overshoot:", topOvershoot);
-// onBottomOvershootChanged: print("Bottom Overshoot:", bottomOvershoot);
Item {
id: shiftTrickery
@@ -107,8 +100,6 @@ Item {
Item { width: 1; height: engine.smallFontSize() }
AboutBoot2Qt { }
- QtForAndroid { }
- QtFramework { }
Image {
id: codeLessImage
source: "codeless.png"
diff --git a/basicsuite/about-b2qt/preview_l.jpg b/basicsuite/about-b2qt/preview_l.jpg
index f2eb2e0..5ea4310 100644
--- a/basicsuite/about-b2qt/preview_l.jpg
+++ b/basicsuite/about-b2qt/preview_l.jpg
Binary files differ
diff --git a/basicsuite/basicsuite.pro b/basicsuite/basicsuite.pro
index c098e1f..49d1123 100644
--- a/basicsuite/basicsuite.pro
+++ b/basicsuite/basicsuite.pro
@@ -6,3 +6,7 @@ qtHaveModule(multimedia) {
SUBDIRS += qt5-everywhere \
camera
}
+
+qtHaveModule(datavisualization) {
+ SUBDIRS += enterprise-qtdatavis3d
+}
diff --git a/basicsuite/camera/description.txt b/basicsuite/camera/description.txt
index 71c3c44..adfdafa 100644
--- a/basicsuite/camera/description.txt
+++ b/basicsuite/camera/description.txt
@@ -1,5 +1,3 @@
This example demonstrates the use of the camera features of Qt Multimedia with Qt Quick.
-Demo can be used to take pictures. Files are saved inside the /data/images/ folder and can be viewed with the "Photo Gallery" application.
-
-Camera parameters such as flash mode, scene mode or white balance can be changed. The availability of parameters depends on what the camera driver provides.
+Demo can be used to take photos which are saved in the /data/images/ directory. Camera parameters such as flash mode, scene mode or white balance can be changed. The availability of parameters depends on what the camera driver provides.
diff --git a/basicsuite/camera/exclude.txt b/basicsuite/camera/exclude.txt
index b481e58..bd99fda 100644
--- a/basicsuite/camera/exclude.txt
+++ b/basicsuite/camera/exclude.txt
@@ -1,8 +1,11 @@
android-beaglebone
android-iMX6
android-emulator
+android-nexus7v2
linux-beagleboard
linux-beaglebone
linux-iMX6
linux-raspberrypi
linux-emulator
+linux-imx6qsabresd
+linux-apalis-imx6
diff --git a/basicsuite/controls-touch/title.txt b/basicsuite/controls-touch/title.txt
index e35803a..60325b1 100644
--- a/basicsuite/controls-touch/title.txt
+++ b/basicsuite/controls-touch/title.txt
@@ -1 +1 @@
-080. Controls: Touch
+080. Controls - Touch
diff --git a/basicsuite/enterprise-gallery/description.txt b/basicsuite/enterprise-gallery/description.txt
index ba0806c..93b45f6 100644
--- a/basicsuite/enterprise-gallery/description.txt
+++ b/basicsuite/enterprise-gallery/description.txt
@@ -1,3 +1,3 @@
-The Gallery example showcases Qt Quick Enterprise Controls. If you have any suggestions for improvements to existing controls or ideas for new controls please email them to Qt.Enterprise-Controls@digia.com.
+The Gallery example showcases Qt Quick Enterprise Controls. These controls are developed based on the input and feedback coming directly from Qt Enterprise Embedded customers.
Each control can be customized and styled through the API. We have included a small subset of these customization options in the gallery example, which you can explore and interact with under the "cog" or "gear" icon on the lower right corner of each control's page.
diff --git a/basicsuite/enterprise-qtdatavis3d/description.txt b/basicsuite/enterprise-qtdatavis3d/description.txt
new file mode 100644
index 0000000..fbec419
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/description.txt
@@ -0,0 +1 @@
+Shows how to make a 3D surface plot, displaying three layers from three different height map images using Surface3D with Qt Quick 2.
diff --git a/basicsuite/photogallery/photogallery.pro b/basicsuite/enterprise-qtdatavis3d/enterprise-qtdatavis3d.pro
index 3b1476a..6f2feac 100644
--- a/basicsuite/photogallery/photogallery.pro
+++ b/basicsuite/enterprise-qtdatavis3d/enterprise-qtdatavis3d.pro
@@ -1,13 +1,16 @@
-TARGET = photogallery
+TARGET = enterprise-qtdatavis3d
include(../shared/shared.pri)
b2qtdemo_deploy_defaults()
+QT += datavisualization
+
content.files = \
*.qml \
*.png
+
content.path = $$DESTPATH
OTHER_FILES += $${content.files}
-INSTALLS += target content \ No newline at end of file
+INSTALLS += target content
diff --git a/basicsuite/enterprise-qtdatavis3d/exclude.txt b/basicsuite/enterprise-qtdatavis3d/exclude.txt
new file mode 100644
index 0000000..d8a20e7
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/exclude.txt
@@ -0,0 +1,2 @@
+linux-raspberrypi
+android-beaglebone
diff --git a/basicsuite/enterprise-qtdatavis3d/layer_1.png b/basicsuite/enterprise-qtdatavis3d/layer_1.png
new file mode 100644
index 0000000..9138c71
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/layer_1.png
Binary files differ
diff --git a/basicsuite/enterprise-qtdatavis3d/layer_2.png b/basicsuite/enterprise-qtdatavis3d/layer_2.png
new file mode 100644
index 0000000..61631ae
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/layer_2.png
Binary files differ
diff --git a/basicsuite/enterprise-qtdatavis3d/layer_3.png b/basicsuite/enterprise-qtdatavis3d/layer_3.png
new file mode 100644
index 0000000..796df64
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/layer_3.png
Binary files differ
diff --git a/basicsuite/enterprise-qtdatavis3d/main.qml b/basicsuite/enterprise-qtdatavis3d/main.qml
new file mode 100644
index 0000000..417ade0
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/main.qml
@@ -0,0 +1,233 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Layouts 1.0
+import QtQuick.Controls 1.0
+import QtDataVisualization 1.0
+import "."
+
+import QtQuick.Enterprise.Controls 1.1
+import QtQuick.Enterprise.Controls.Styles 1.1
+
+Item {
+ id: mainview
+
+ function toPixels(percentage) {
+ return percentage * Math.min(mainview.width, mainview.height);
+ }
+
+ Item {
+ id: surfaceView
+ width: mainview.width - buttonLayout.width
+ height: mainview.height
+ anchors.right: mainview.right;
+
+ ColorGradient {
+ id: layerOneGradient
+ ColorGradientStop { position: 0.0; color: "black" }
+ ColorGradientStop { position: 0.31; color: "tan" }
+ ColorGradientStop { position: 0.32; color: "green" }
+ ColorGradientStop { position: 0.40; color: "darkslategray" }
+ ColorGradientStop { position: 1.0; color: "white" }
+ }
+
+ ColorGradient {
+ id: layerTwoGradient
+ ColorGradientStop { position: 0.315; color: "blue" }
+ ColorGradientStop { position: 0.33; color: "white" }
+ }
+
+ ColorGradient {
+ id: layerThreeGradient
+ ColorGradientStop { position: 0.0; color: "red" }
+ ColorGradientStop { position: 0.15; color: "black" }
+ }
+
+ Surface3D {
+ id: surfaceLayers
+ width: surfaceView.width
+ height: surfaceView.height
+ theme: Theme3D {
+ type: Theme3D.ThemeEbony
+ font.pointSize: 35
+ colorStyle: Theme3D.ColorStyleRangeGradient
+ }
+ shadowQuality: AbstractGraph3D.ShadowQualityNone
+ selectionMode: AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
+ axisY.min: 20
+ axisY.max: 200
+ axisX.segmentCount: 5
+ axisX.subSegmentCount: 2
+ axisX.labelFormat: "%i"
+ axisZ.segmentCount: 5
+ axisZ.subSegmentCount: 2
+ axisZ.labelFormat: "%i"
+ axisY.segmentCount: 5
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%i"
+
+ Surface3DSeries {
+ id: layerOneSeries
+ baseGradient: layerOneGradient
+ HeightMapSurfaceDataProxy {
+ heightMapFile: "/data/user/qt/enterprise-qtdatavis3d/layer_1.png"
+ }
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+ visible: layerOneToggle.checked // bind to checkbox state
+ }
+
+ Surface3DSeries {
+ id: layerTwoSeries
+ baseGradient: layerTwoGradient
+ HeightMapSurfaceDataProxy {
+ heightMapFile: "/data/user/qt/enterprise-qtdatavis3d/layer_2.png"
+ }
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+ visible: layerTwoToggle.checked // bind to checkbox state
+ }
+
+ Surface3DSeries {
+ id: layerThreeSeries
+ baseGradient: layerThreeGradient
+ HeightMapSurfaceDataProxy {
+ heightMapFile: "/data/user/qt/enterprise-qtdatavis3d/layer_3.png"
+ }
+ flatShadingEnabled: false
+ drawMode: Surface3DSeries.DrawSurface
+ visible: layerThreeToggle.checked // bind to checkbox state
+ }
+ }
+ }
+
+ ColumnLayout {
+ id: buttonLayout
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ spacing: 0
+
+ GroupBox {
+ //title: "Layer Selection"
+ Layout.fillWidth: true
+ flat: true
+ Column {
+ spacing: 5
+ ToggleButton {
+ id: layerOneToggle
+ text: "Ground\n Layer"
+ checked: true
+ width: toPixels(0.12)
+ height: width
+ }
+
+ ToggleButton {
+ id: layerTwoToggle
+ text: "Sea\n Layer"
+ checked: true
+ width: toPixels(0.12)
+ height: width
+ }
+
+ ToggleButton {
+ id: layerThreeToggle
+ text: "Tectonic\n Layer"
+ checked: true
+ width: toPixels(0.12)
+ height: width
+ }
+ }
+ }
+
+ GroupBox {
+ //title: "Layer Style"
+ Layout.fillWidth: true
+ flat: true
+ Column {
+ spacing: 5
+ ToggleButton {
+ id: layerOneGrid
+ text: "Ground\n as\n Grid"
+ width: toPixels(0.12)
+ height: width
+ onCheckedChanged: {
+ if (checked)
+ layerOneSeries.drawMode = Surface3DSeries.DrawWireframe
+ else
+ layerOneSeries.drawMode = Surface3DSeries.DrawSurface
+ }
+ }
+
+ ToggleButton {
+ id: layerTwoGrid
+ text: "Sea\n as\n Grid"
+ width: toPixels(0.12)
+ height: width
+ onCheckedChanged: {
+ if (checked)
+ layerTwoSeries.drawMode = Surface3DSeries.DrawWireframe
+ else
+ layerTwoSeries.drawMode = Surface3DSeries.DrawSurface
+ }
+ }
+
+ ToggleButton {
+ id: layerThreeGrid
+ text: "Tectonic\n as\n Grid"
+ width: toPixels(0.12)
+ height: width
+ onCheckedChanged: {
+ if (checked)
+ layerThreeSeries.drawMode = Surface3DSeries.DrawWireframe
+ else
+ layerThreeSeries.drawMode = Surface3DSeries.DrawSurface
+ }
+ }
+ }
+ }
+
+ GroupBox {
+ Layout.fillWidth: true
+ flat: true
+ Column {
+ spacing: 5
+ ToggleButton {
+ id: sliceButton
+ text: "Slice\n All\n Layers"
+ width: toPixels(0.12)
+ height: width
+ onClicked: {
+ if (surfaceLayers.selectionMode & AbstractGraph3D.SelectionMultiSeries) {
+ surfaceLayers.selectionMode = AbstractGraph3D.SelectionRow
+ | AbstractGraph3D.SelectionSlice
+ text = "Slice\n All\n Layers"
+ } else {
+ surfaceLayers.selectionMode = AbstractGraph3D.SelectionRow
+ | AbstractGraph3D.SelectionSlice
+ | AbstractGraph3D.SelectionMultiSeries
+ text = "Slice\n One\n Layer"
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/basicsuite/enterprise-qtdatavis3d/preview_l.jpg b/basicsuite/enterprise-qtdatavis3d/preview_l.jpg
new file mode 100644
index 0000000..ee3d50d
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/preview_l.jpg
Binary files differ
diff --git a/basicsuite/enterprise-qtdatavis3d/title.txt b/basicsuite/enterprise-qtdatavis3d/title.txt
new file mode 100644
index 0000000..2b34f13
--- /dev/null
+++ b/basicsuite/enterprise-qtdatavis3d/title.txt
@@ -0,0 +1 @@
+095. Qt Data Visualization 3D - Surface Multiseries
diff --git a/basicsuite/graphicaleffects/exclude.txt b/basicsuite/graphicaleffects/exclude.txt
new file mode 100644
index 0000000..715f5c2
--- /dev/null
+++ b/basicsuite/graphicaleffects/exclude.txt
@@ -0,0 +1,2 @@
+linux-beaglebone
+android-beaglebone
diff --git a/basicsuite/launchersettings/NetworkList.qml b/basicsuite/launchersettings/NetworkList.qml
index ebe5ce1..1820dac 100644
--- a/basicsuite/launchersettings/NetworkList.qml
+++ b/basicsuite/launchersettings/NetworkList.qml
@@ -142,6 +142,7 @@ Item {
visible: !connected
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: 18
+ inputMethodHints: Qt.ImhNoPredictiveText
}
Button {
diff --git a/basicsuite/launchersettings/PoweroffAction.qml b/basicsuite/launchersettings/PoweroffAction.qml
index 8c14b79..d0bcd39 100644
--- a/basicsuite/launchersettings/PoweroffAction.qml
+++ b/basicsuite/launchersettings/PoweroffAction.qml
@@ -43,6 +43,5 @@ import QtDroid.Utils 1.0
Action
{
- text: "Power Off!"
onTriggered: DroidUtils.powerOffSystem()();
}
diff --git a/basicsuite/launchersettings/RebootAction.qml b/basicsuite/launchersettings/RebootAction.qml
index e6f57ca..995fb61 100644
--- a/basicsuite/launchersettings/RebootAction.qml
+++ b/basicsuite/launchersettings/RebootAction.qml
@@ -43,6 +43,5 @@ import QtDroid.Utils 1.0
Action
{
- text: "Reboot"
onTriggered: DroidUtils.rebootSystem();
}
diff --git a/basicsuite/launchersettings/main.qml b/basicsuite/launchersettings/main.qml
index 7c4daaf..8933598 100644
--- a/basicsuite/launchersettings/main.qml
+++ b/basicsuite/launchersettings/main.qml
@@ -208,6 +208,7 @@ Rectangle {
}
}
CheckBox {
+ checked: engine.fpsEnabled
onCheckedChanged: engine.fpsEnabled = checked;
}
}
@@ -243,6 +244,7 @@ Rectangle {
text: if (networkControllerLoader.item != undefined) { networkControllerLoader.item.getIPAddress(); }
font.pixelSize: 18
color: "white"
+ Layout.columnSpan: 2
}
Button {
diff --git a/basicsuite/mediaplayer/main.qml b/basicsuite/mediaplayer/main.qml
index d8075c8..4aa038c 100755
--- a/basicsuite/mediaplayer/main.qml
+++ b/basicsuite/mediaplayer/main.qml
@@ -257,6 +257,7 @@ FocusScope {
function init() {
content.init()
+ content.openVideo("file:///data/videos/Qt_EnterpriseEmbedded_1080p.mp4");
}
function openVideo() {
diff --git a/basicsuite/photogallery/description.txt b/basicsuite/photogallery/description.txt
deleted file mode 100644
index f47f907..0000000
--- a/basicsuite/photogallery/description.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a simple photo gallery, showing images found in /data/images. Images captured with the Camera demo will also appear in this folder.
diff --git a/basicsuite/photogallery/main.qml b/basicsuite/photogallery/main.qml
deleted file mode 100644
index a7f114e..0000000
--- a/basicsuite/photogallery/main.qml
+++ /dev/null
@@ -1,295 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: For any questions to Digia, please use the contact form at
-** http://qt.digia.com/
-**
-** This file is part of the examples of the Qt Enterprise Embedded.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import Qt.labs.folderlistmodel 1.0
-
-Item {
- id: root
-
- width: 320
- height: 480
-
- Rectangle {
- anchors.fill: parent
- color: "black"
- }
-
- FolderListModel {
- id: imageList
- folder: "/data/images"
- nameFilters: ["*.png", "*.jpg"]
-
- showDirs: false
- }
-
- Text {
- id: noImages
- color: "white"
- visible: grid.count == 0
- text: "No images in " + imageList.folder
- anchors.centerIn: parent
- }
-
- GridView {
- id: grid
-
- anchors.fill: parent
-
- cellHeight: root.width / 3
- cellWidth: cellHeight
-
- model: imageList
-
-// NumberAnimation on contentY { from: 0; to: 2000; duration: 3000; loops: 1; easing.type: Easing.InOutCubic }
-
- delegate: Rectangle {
-
- id: box
- color: "white"
- width: grid.cellWidth
- height: grid.cellHeight
- scale: 0.97
- rotation: 2;
- antialiasing: true
-
- Rectangle {
- id: sepia
- color: "#b08050"
- width: image.width
- height: image.height
- anchors.centerIn: parent
-
- property real fakeOpacity: image.status == Image.Ready ? 1.5 : 0
- Behavior on fakeOpacity { NumberAnimation { duration: 1000 } }
-
- opacity: fakeOpacity
- visible: image.opacity <= 0.99;
- antialiasing: true
- }
-
- Image {
- id: image
- source: filePath
- width: grid.cellWidth * 0.9
- height: grid.cellHeight * 0.9
- anchors.centerIn: sepia
- asynchronous: true
- opacity: sepia.fakeOpacity - .5
- sourceSize.width: width;
- antialiasing: true
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- root.showBigImage(filePath, box.x - grid.contentX, box.y - grid.contentY, image);
- }
- }
- }
- }
-
- function showBigImage(filePath, itemX, itemY, image) {
- fakeBigImage.x = itemX;
- fakeBigImage.y = itemY;
- fakeBigImage.sourceSize = image.sourceSize;
- fakeBigImage.source = filePath;
-
- beginEnterLargeAnimation.running = true;
- }
-
- property int time: 500;
- property real xPos: width < height ? 0 : width / 2 - height / 2;
- property real yPos: width < height ? height / 2 - width / 2: 0;
- property real size: Math.min(width, height);
-
- states: [
- State { name: "grid" },
- State { name: "enter-large" },
- State { name: "large" },
- State { name: "exit-large" }
- ]
-
- SequentialAnimation {
- id: beginEnterLargeAnimation
- PropertyAction { target: mouseArea; property: "enabled"; value: "true" }
- PropertyAction { target: fakeBigImage; property: "rotation"; value: 2; }
- PropertyAction { target: fakeBigImage; property: "scale"; value: 0.97 * 0.9; }
- PropertyAction { target: fakeBigImage; property: "width"; value: grid.cellWidth; }
- PropertyAction { target: fakeBigImage; property: "height"; value: grid.cellHeight; }
- PropertyAction { target: fakeBigImage; property: "visible"; value: true; }
-
- ParallelAnimation {
- NumberAnimation { target: fakeBigImage; property: "rotation"; to: 0; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "scale"; to: 1; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "x"; to: root.xPos; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "y"; to: root.yPos; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "width"; to: root.size; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "height"; to: root.size; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: grid; property: "opacity"; to: 0; duration: root.time; easing.type: Easing.InOutCubic }
- }
- ScriptAction {
- script: {
-
- bigImage = realBigImageComponent.createObject(root);
- bigImage.source = fakeBigImage.source;
- }
- }
- }
-
- property Item bigImage;
- property real targetRotation: 0;
- property real targetWidth: 0
- property real targetHeight: 0
- property bool bigImageShowing: false;
-
- SequentialAnimation {
- id: finalizeEnterLargeAnimation
- ScriptAction { script: {
- fakeBigImage.anchors.centerIn = root;
- }
- }
- ParallelAnimation {
- NumberAnimation { target: bigImage; property: "opacity"; to: 1; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "rotation"; to: root.targetRotation; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: bigImage; property: "rotation"; to: root.targetRotation; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "width"; to: root.targetWidth; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: fakeBigImage; property: "height"; to: root.targetHeight; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: bigImage; property: "width"; to: root.targetWidth; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: bigImage; property: "height"; to: root.targetHeight; duration: root.time; easing.type: Easing.InOutCubic }
- }
- PropertyAction { target: fakeBigImage; property: "visible"; value: false }
- PropertyAction { target: root; property: "bigImageShowing"; value: true }
- }
-
- SequentialAnimation {
- id: backToGridAnimation
- ParallelAnimation {
- NumberAnimation { target: bigImage; property: "opacity"; to: 0; duration: root.time; easing.type: Easing.InOutCubic }
- NumberAnimation { target: grid; property: "opacity"; to: 1; duration: root.time; easing.type: Easing.InOutCubic }
- }
- PropertyAction { target: fakeBigImage; property: "source"; value: "" }
- PropertyAction { target: root; property: "bigImageShowing"; value: false }
- PropertyAction { target: mouseArea; property: "enabled"; value: false }
- ScriptAction { script: {
- bigImage.destroy();
- fakeBigImage.anchors.centerIn = undefined
- }
- }
- }
-
- Image {
- id: fakeBigImage
- width: grid.cellWidth
- height: grid.cellHeight
- visible: false
- antialiasing: true
- }
-
- Component {
- id: realBigImageComponent
-
- Image {
- id: realBigImage
-
- anchors.centerIn: parent;
-
- asynchronous: true;
-
- // Bound size to the current display size, to try to avoid any GL_MAX_TEXTURE_SIZE issues.
- sourceSize: Qt.size(Math.max(root.width, root.height), Math.max(root.width, root.height));
-
- opacity: 0
- onStatusChanged: {
-
- if (status != Image.Ready)
- return;
-
- var imageIsLandscape = width > height;
- var screenIsLandscape = root.width > root.height;
-
- var targetScale;
-
- // Rotation needed...
- if (imageIsLandscape != screenIsLandscape && width != height) {
- root.targetRotation = 90;
- var aspect = width / height
- var screenAspect = root.height / root.width
-
- if (aspect > screenAspect) {
- targetScale = root.height / width
- } else {
- targetScale = root.width / height;
- }
- } else {
- root.targetRotation = 0;
- var aspect = height / width;
- var screenAspect = root.height / root.width
-
- if (aspect > screenAspect) {
- targetScale = root.height / height
- } else {
- targetScale = root.width / width;
- }
- }
-
- root.targetWidth = width * targetScale
- root.targetHeight = height * targetScale;
-
- width = root.size
- height = root.size;
-
- finalizeEnterLargeAnimation.running = true;
- }
- }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- enabled: false
-
- onClicked: {
- if (root.bigImageShowing)
- backToGridAnimation.running = true;
- }
- }
-
-}
diff --git a/basicsuite/photogallery/preview_l.jpg b/basicsuite/photogallery/preview_l.jpg
deleted file mode 100644
index 0b67f1d..0000000
--- a/basicsuite/photogallery/preview_l.jpg
+++ /dev/null
Binary files differ
diff --git a/basicsuite/photogallery/title.txt b/basicsuite/photogallery/title.txt
deleted file mode 100644
index eda05c5..0000000
--- a/basicsuite/photogallery/title.txt
+++ /dev/null
@@ -1 +0,0 @@
-120. Photo Gallery
diff --git a/basicsuite/qt5-cinematicdemo/description.txt b/basicsuite/qt5-cinematicdemo/description.txt
index 253d246..c78f386 100644
--- a/basicsuite/qt5-cinematicdemo/description.txt
+++ b/basicsuite/qt5-cinematicdemo/description.txt
@@ -1,5 +1,3 @@
-The Qt5 Cinematic Experience is a demo by "QUIt Coding", a small group of talented individuals enjoying software development with cutting edge technologies. They are official members of the Qt Ambassador Program.
+The Qt5 Cinematic Experience is a demo by "QUIt Coding".
-The demo shows off a number features of Qt Quick 2.0. A nicely styled list control of movie covers with lighting effects, particles and transitions. The information roll-down curvy curtain is implemented using inline GLSL in the QML file.
-
-The source code for this demo and more awesome looking Qt Quick examples are available from quitcoding.com.
+The demo shows off a number features of Qt Quick 2.0. A nicely styled list control of movie covers with lighting effects, particles and transitions. The information roll-down curvy curtain is implemented using inline GLSL in the QML file. The source code for this demo and more awesome looking Qt Quick examples are available from quitcoding.com.
diff --git a/basicsuite/qt5-everywhere/demos/gridrssnews/RssDelegate.qml b/basicsuite/qt5-everywhere/demos/gridrssnews/RssDelegate.qml
index 87b25c2..e5d042f 100644
--- a/basicsuite/qt5-everywhere/demos/gridrssnews/RssDelegate.qml
+++ b/basicsuite/qt5-everywhere/demos/gridrssnews/RssDelegate.qml
@@ -86,8 +86,6 @@ Rectangle {
anchors.bottom: parent.bottom
color: "Black"
opacity: 0.5
- visible: iconImage.source
-
}
Text {
diff --git a/basicsuite/qt5-launchpresentation/Button.qml b/basicsuite/qt5-launchpresentation/Button.qml
deleted file mode 100644
index 6d6bf6e..0000000
--- a/basicsuite/qt5-launchpresentation/Button.qml
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
-
- id: root;
-
- border.width: (pressed ? 1.5 : 1) * height / 20;
- border.color: Qt.rgba(1, 1, 1, 0.4);
- radius: height / 4;
-
- antialiasing: true
-
- gradient: Gradient {
- GradientStop { position: 0; color: Qt.rgba(0.5, 0.5, 0.5, pressed ? 0.7 : 0.5); }
- GradientStop { position: 1; color: Qt.rgba(0.2, 0.2, 0.2, pressed ? 0.7 : 0.5); }
- }
-
- Behavior on color { ColorAnimation { duration: 100 } }
-
- property bool pressed;
- property alias label: textItem.text;
-
- Text {
- id: textItem
- anchors.centerIn: parent
- color: "white"
- font.pixelSize: parent.height / 3;
- font.bold: true
- }
-
- MouseArea {
- id: mouse
- anchors.fill: parent
- onPressed: root.pressed = !root.pressed;
-
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/CameraSlide.qml b/basicsuite/qt5-launchpresentation/CameraSlide.qml
deleted file mode 100644
index a253c08..0000000
--- a/basicsuite/qt5-launchpresentation/CameraSlide.qml
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtMultimedia 5.0
-import "presentation"
-
-import QtGraphicalEffects 1.0
-
-Slide {
-
- id: slide
-
- title: "Qt Multimedia - Camera"
-
- Camera {
- id: camera
- Component.onCompleted: camera.stop();
- }
-
- VideoOutput {
- id: videoOut
- anchors.fill: parent
- source: camera
- layer.enabled: true;
- layer.effect: ZoomBlur {
- samples: 16
- length: button.pressed ? parent.height / 5 : 0
- Behavior on length {
- NumberAnimation { duration: 250 }
- }
- }
- }
-
- onVisibleChanged: {
- if (slide.visible)
- camera.start();
- else
- camera.stop();
- }
-
- Button {
- id: button
- anchors.bottom: videoOut.bottom
- anchors.horizontalCenter: videoOut.horizontalCenter
- anchors.bottomMargin: height / 2;
-// anchors.bottom: slide.top;
-// anchors.right: slide.right;
-// anchors.bottomMargin: height;
- label: pressed ? "Remove Effect" : "Zoom Effect";
- width: height * 4;
- height: parent.height * 0.1
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/CanvasSlide.qml b/basicsuite/qt5-launchpresentation/CanvasSlide.qml
deleted file mode 100644
index 46f98ed..0000000
--- a/basicsuite/qt5-launchpresentation/CanvasSlide.qml
+++ /dev/null
@@ -1,161 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "presentation"
-
-Slide {
- id: slide
-
- title: "Qt Quick - Canvas"
-
-
-
- Rectangle {
- height: parent.height
- width: parent.width * 0.45
- anchors.right: parent.right;
- antialiasing: true
- radius: slide.height * 0.03;
- color: Qt.rgba(0.0, 0.0, 0.0, 0.2);
- Canvas {
- id:canvas
- anchors.fill: parent;
-
- renderTarget: Canvas.Image;
- antialiasing: true;
- onPaint: {
- eval(editor.text);
- }
- }
- }
-
- Rectangle {
- height: parent.height
- width: parent.width * 0.45
- anchors.left: parent.left
- antialiasing: true
- radius: slide.height * 0.03;
- color: Qt.rgba(0.0, 0.0, 0.0, 0.2);
-
- clip: true;
-
- TextEdit {
- id: editor
- anchors.fill: parent;
- anchors.margins: 10
-
- font.pixelSize: 16
- color: "white"
- font.family: "courier"
- font.bold: true
-
- text:
-"var ctx = canvas.getContext('2d');
-ctx.save();
-ctx.clearRect(0, 0, canvas.width, canvas.height);
-ctx.strokeStyle = 'palegreen'
-ctx.fillStyle = 'limegreen';
-ctx.lineWidth = 5;
-
-ctx.beginPath();
-ctx.moveTo(100, 100);
-ctx.lineTo(300, 100);
-ctx.lineTo(100, 200);
-ctx.closePath();
-ctx.fill();
-ctx.stroke();
-
-ctx.fillStyle = 'aquamarine'
-ctx.font = '20px sans-serif'
-ctx.fillText('HTML Canvas API!', 100, 300);
-ctx.fillText('Imperative Drawing!', 100, 340);
-
-ctx.restore();
-"
- onTextChanged: canvas.requestPaint();
-
- onCursorRectangleChanged: {
- emitter.burst(10)
-
- }
-
- ParticleSystem {
- id: sys1
- running: slide.visible
- }
-
- ImageParticle {
- system: sys1
- source: "images/particle.png"
- color: "white"
- colorVariation: 0.2
- alpha: 0
- }
-
- Emitter {
- id: emitter
- system: sys1
-
- x: editor.cursorRectangle.x - editor.cursorRectangle.height / 2;
- y: editor.cursorRectangle.y
- width: editor.cursorRectangle.height
- height: editor.cursorRectangle.height
- enabled: false
-
- lifeSpan: 1000
-
- velocity: PointDirection { xVariation: 30; yVariation: 30; }
- acceleration: PointDirection {xVariation: 30; yVariation: 30; y: 100 }
-
- endSize: 0
-
- size: 4
- sizeVariation: 2
- }
-
- }
-
-
-
-
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/DemoMain.qml b/basicsuite/qt5-launchpresentation/DemoMain.qml
deleted file mode 100644
index 05454be..0000000
--- a/basicsuite/qt5-launchpresentation/DemoMain.qml
+++ /dev/null
@@ -1,139 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-import QtGraphicalEffects 1.0
-
-Item {
- id: demoMain;
-
- property bool useDropShadow: true;
- property bool useSwirls: true;
- property bool useSimpleGradient: false;
- property bool autorun: false;
-
- width: 1280
- height: 720
-
- NoisyGradient {
- anchors.fill: parent;
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.rgba(0.64 * 0.6, 0.82 * 0.6, 0.15 * 0.6) }
- GradientStop { position: 1.0; color: "black" }
- }
- visible: !parent.useSimpleGradient
- }
-
- Rectangle {
- anchors.fill: parent;
- gradient: Gradient {
- GradientStop { position: 0.0; color: Qt.rgba(0.64, 0.82, 0.15) }
- GradientStop { position: 1.0; color: "black" }
- }
- visible: parent.useSimpleGradient;
- }
-
- Rectangle {
- id: colorTable
- width: 1
- height: 46
- color: "transparent"
-
- Column {
- spacing: 2
- y: 1
- Rectangle { width: 1; height: 10; color: "white" }
- Rectangle { width: 1; height: 10; color: Qt.rgba(0.64 * 1.4, 0.82 * 1.4, 0.15 * 1.4, 1); }
- Rectangle { width: 1; height: 10; color: Qt.rgba(0.64, 0.82, 0.15); }
- Rectangle { width: 1; height: 10; color: Qt.rgba(0.64 * 0.7, 0.82 * 0.7, 0.15 * 0.7); }
- }
-
- layer.enabled: true
- layer.smooth: true
- visible: false;
- }
-
-
- Swirl
- {
- x: 0;
- width: parent.width
- height: parent.height * 0.2
- anchors.bottom: parent.bottom;
- amplitude: height * 0.2;
- colorTable: colorTable;
- speed: 0.2;
- opacity: 0.3
- visible: parent.useSwirls;
- }
-
- Timer {
- interval: 20000
- running: parent.autorun
- repeat: true
-
- onTriggered: {
- var from = slides.currentSlide;
- var to = from == slides.slides.length - 1 ? 1 : from + 1;
- slides.switchSlides(slides.slides[from], slides.slides[to], true);
- slides.currentSlide = to;
- }
- }
-
- SlideDeck {
- id: slides
- titleColor: "white"
- textColor: "white"
- anchors.fill: parent
- layer.enabled: parent.useDropShadow
- layer.effect: DropShadow {
- horizontalOffset: slides.width * 0.005;
- verticalOffset: slides.width * 0.005;
- radius: 16.0
- samples: 16
- fast: true
- color: Qt.rgba(0.0, 0.0, 0.0, 0.7);
- }
- }
-
-
-
-}
diff --git a/basicsuite/qt5-launchpresentation/EffectsSlide.qml b/basicsuite/qt5-launchpresentation/EffectsSlide.qml
deleted file mode 100644
index 0355284..0000000
--- a/basicsuite/qt5-launchpresentation/EffectsSlide.qml
+++ /dev/null
@@ -1,203 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-import QtGraphicalEffects 1.0
-
-import "presentation"
-
-Slide {
- id: slide
-
- title: "Qt Graphical Effects"
- writeInText: "The Qt Graphical Effects module includes a wide range of effects:"
-
- property real t;
- SequentialAnimation on t {
- NumberAnimation { from: 0; to: 1; duration: 5000; easing.type: Easing.InOutCubic }
- NumberAnimation { from: 1; to: 0; duration: 5000; easing.type: Easing.InOutCubic }
- loops: Animation.Infinite
- running: slide.visible;
- }
-
- SequentialAnimation {
- PropertyAction { target: grid; property: "opacity"; value: 0 }
- PauseAnimation { duration: 1500 }
- NumberAnimation { target: grid; property: "opacity"; to: 1; duration: 2000; easing.type: Easing.InOutCubic }
- running: slide.visible;
- }
-
- Grid {
- id: grid;
-
- opacity: 0;
-
- width: parent.width
- height: parent.height * 0.84
- anchors.bottom: parent.bottom;
-
- property real cw: width / columns
- property real ch: height / rows;
-
- property int fontSize: slide.baseFontSize * 0.5
-
- columns: 4
- rows: 2
-
- Item {
- width: grid.cw
- height: grid.ch
- Text { text: "Original"; color: "white"; font.pixelSize: grid.fontSize; anchors.horizontalCenter: noEffect.horizontalCenter }
- Image {
- id: noEffect;
- source: "images/butterfly.png"
- width: grid.cw * 0.9
- fillMode: Image.PreserveAspectFit
- }
- }
-
- Column {
- Glow {
- id: glowEffect
- radius: 4
- samples: 4
- spread: slide.t
- source: noEffect
- width: grid.cw * 0.9
- height: width;
- Text { text: "Glow"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
-
- Column {
- InnerShadow {
- id: innerShadowEffect
- radius: slide.t * 16;
- samples: 16
- color: "black"
- source: noEffect
- width: grid.cw * 0.9
- height: width;
- Text { text: "InnerShadow"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
-
- Column {
- GaussianBlur {
- id: blurEffect
- radius: slide.t * samples;
- samples: 8
- source: noEffect
- width: grid.cw * 0.9
- height: width;
- Text { text: "GaussianBlur"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
-
- Column {
- ThresholdMask {
- id: thresholdEffect
- maskSource: Image { source: "images/fog.png" }
- threshold: slide.t * 0.5 + 0.2;
- spread: 0.2
- source: noEffect
- width: grid.cw * 0.9
- height: width;
- Text { text: "ThresholdMask"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
-
- Column {
- BrightnessContrast {
- id: brightnessEffect
- brightness: Math.sin(slide.t * 2 * Math.PI) * 0.5;
- contrast: Math.sin(slide.t * 4 * Math.PI) * 0.5;
- source: noEffect
- width: grid.cw * 0.9
- height: width;
- Text { text: "BrightnessContrast"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
-
- Column {
- Colorize {
- id: colorizeEffect
- hue: slide.t
- source: noEffect
- width: grid.cw * 0.9
- height: width;
- Text { text: "Colorize"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
-
- Column {
- OpacityMask {
-
- Item {
- id: maskSource;
- anchors.fill: parent;
- Rectangle {
- anchors.fill: parent;
- opacity: slide.t;
- }
-
- Text {
- text: "Qt 5"
- font.pixelSize: parent.height * 0.15
- font.bold: true;
- font.underline: true;
- anchors.centerIn: parent;
- rotation: 70
- }
- visible: false;
- }
-
- id: opacityMaskEffect
- source: noEffect
- maskSource: maskSource;
- width: grid.cw * 0.9
- height: width;
- Text { text: "OpacityMask"; color: "white"; font.pixelSize: grid.fontSize; anchors.top: parent.top; anchors.horizontalCenter: parent.horizontalCenter; }
- }
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/ExamplesSlide.qml b/basicsuite/qt5-launchpresentation/ExamplesSlide.qml
deleted file mode 100644
index 4540532..0000000
--- a/basicsuite/qt5-launchpresentation/ExamplesSlide.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "presentation"
-
-Slide
-{
- id: slide
-
- title: "Qt Quick 2"
-
- Row {
- anchors.fill: parent
-
- spacing: (width - 320 * 3) / 2
-
- Item {
- width: 320
- height: 480
- clip: true
- Loader {
- id: load1
- }
- }
-
- Item {
- width: 320
- height: 480
- clip: true;
- Loader {
- id: load2
- }
- }
-
- Loader {
- id: load3
- }
- }
-
- onVisibleChanged: {
- if (visible) {
- load1.source = "maroon/Maroon.qml"
- load2.source = "samegame/Samegame.qml"
- load3.source = "calqlatr/Calqlatr.qml"
- } else {
- load1.source = ""
- load2.source = ""
- load3.source = ""
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/FontSlide.qml b/basicsuite/qt5-launchpresentation/FontSlide.qml
deleted file mode 100644
index ce98779..0000000
--- a/basicsuite/qt5-launchpresentation/FontSlide.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "presentation"
-
-Slide {
- id: fontSlide;
- title: "Qt Quick - Fonts"
- writeInText: "The default font rendering in Qt Quick 2.0 uses distance fields, making\nit possible to do fully transformable text with subpixel positioning and\nsubpixel antialiasing.
-
-Native font rendering is also an option for applications that want to look native."
-
- Rectangle {
- id: textRoot
- anchors.centerIn: parent
- anchors.horizontalCenterOffset: parent.width * 0.2
- anchors.verticalCenterOffset: parent.width * 0.1
-
- width: 120
- height: 40
-
- color: "transparent"
- border.color: "white"
- border.width: 1
-
- Text {
- anchors.centerIn: parent
-
- text: "Awesome!"
- color: "white"
-
- font.pixelSize: 20;
-
- SequentialAnimation on scale {
- NumberAnimation { to: 4; duration: 2508; easing.type: Easing.OutElastic }
- NumberAnimation { to: 1; duration: 2508; easing.type: Easing.OutElastic }
- PauseAnimation { duration: 1000 }
- loops: Animation.Infinite
- running: fontSlide.visible
- }
-
- NumberAnimation on rotation { from: 0; to: 360; duration: 10000; loops: Animation.Infinite; easing.type: Easing.InOutCubic; running: fontSlide.visible }
- }
- }
-
- ShaderEffectSource {
- width: textRoot.width
- height: textRoot.height
- sourceItem: textRoot
- anchors.bottom: parent.bottom;
- anchors.left: parent.left;
- smooth: false
- transformOrigin: Item.BottomLeft;
-
- visible: true
-
- scale: 4;
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/NoisyGradient.qml b/basicsuite/qt5-launchpresentation/NoisyGradient.qml
deleted file mode 100644
index 904f14e..0000000
--- a/basicsuite/qt5-launchpresentation/NoisyGradient.qml
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-ShaderEffect {
-
- id: effectRoot;
-
- width: 1280
- height: 720
-
- property Gradient gradient: Gradient {
- GradientStop { position: 0; color: "white" }
- GradientStop { position: 0.4; color: "blue" }
- GradientStop { position: 1.0; color: "black" }
- }
-
- Rectangle {
- id: colorTable
- width: 1
- height: 128;
-
- gradient: effectRoot.gradient;
-
- layer.enabled: true
- layer.smooth: true
-
- visible: false;
- }
-
- property variant source: colorTable;
-
- blending: false;
-
- fragmentShader:"
- #ifdef GL_ES
- precision lowp float;
- #endif
-
- uniform lowp sampler2D source;
- uniform lowp float qt_Opacity;
- varying highp vec2 qt_TexCoord0;
-
- // Noise function from: http://stackoverflow.com/questions/4200224/random-noise-functions-for-glsl
- float rand(vec2 n) {
- return 0.5 + 0.5 * fract(sin(dot(n.xy, vec2(12.9898, 78.233))) * 43758.5453);
- }
-
- void main() {
- lowp float len = clamp(length(vec2(0.5, 0.0) - qt_TexCoord0), 0.0, 1.0);
- gl_FragColor = texture2D(source, vec2(0, len)) * qt_Opacity + rand(qt_TexCoord0) * 0.05;
- }
-"
-}
diff --git a/basicsuite/qt5-launchpresentation/NormalMapGenerator.qml b/basicsuite/qt5-launchpresentation/NormalMapGenerator.qml
deleted file mode 100644
index c6f55c7..0000000
--- a/basicsuite/qt5-launchpresentation/NormalMapGenerator.qml
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtGraphicalEffects 1.0
-
-ShaderEffect {
- id: effectRoot;
-
- property alias source: blurShader.source;
-
- GaussianBlur
- {
- id: blurShader;
- width: source != undefined ? source.width : 0
- height: source != undefined ? source.height : 0
- samples: 8
- radius: 8
-
- layer.enabled: true;
- layer.smooth: true;
-
- visible: false;
- }
-
- width: 256
- height: 128
-
- property variant tex: blurShader;
- property size pixelSize: Qt.size(1 / blurShader.width, 1 / blurShader.height);
-
- fragmentShader: "
- #ifdef GL_ES
- precision lowp float;
- #endif
-
- uniform lowp float qt_Opacity;
- uniform lowp sampler2D tex;
- uniform highp vec2 pixelSize;
- varying highp vec2 qt_TexCoord0;
- void main() {
-
- lowp vec2 xps = vec2(pixelSize.x, 0.0);
- vec3 vx = vec3(1, 0, texture2D(tex, qt_TexCoord0 + xps).x - texture2D(tex, qt_TexCoord0 - xps).x);
-
- lowp vec2 yps = vec2(0.0, pixelSize.y);
- vec3 vy = vec3(0, 1, texture2D(tex, qt_TexCoord0 + yps).x - texture2D(tex, qt_TexCoord0 - yps).x);
-
- vec3 n = normalize(cross(vx, vy)) * 0.5 + 0.5;
-
- gl_FragColor = vec4(n, 1);
- }
- "
-
-}
diff --git a/basicsuite/qt5-launchpresentation/OpacityTransitionPresentation.qml b/basicsuite/qt5-launchpresentation/OpacityTransitionPresentation.qml
deleted file mode 100644
index 542ec6f..0000000
--- a/basicsuite/qt5-launchpresentation/OpacityTransitionPresentation.qml
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-import "presentation"
-
-Presentation {
-
- id: deck
-
- width: 1280
- height: 720
-
- property bool inTransition: false;
-
- property variant fromSlide: Item { }
- property variant toSlide: Item { }
-
- property int transitionTime: 500;
-
- SequentialAnimation {
- id: forwardTransition
- PropertyAction { target: deck; property: "inTransition"; value: true }
- PropertyAction { target: toSlide; property: "visible"; value: true }
- ParallelAnimation {
- NumberAnimation { target: fromSlide; property: "opacity"; from: 1; to: 0; duration: deck.transitionTime; easing.type: Easing.OutQuart }
- NumberAnimation { target: fromSlide; property: "scale"; from: 1; to: 1.1; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
- NumberAnimation { target: toSlide; property: "opacity"; from: 0; to: 1; duration: deck.transitionTime; easing.type: Easing.InQuart }
- NumberAnimation { target: toSlide; property: "scale"; from: 0.7; to: 1; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
- }
- PropertyAction { target: fromSlide; property: "visible"; value: false }
- PropertyAction { target: fromSlide; property: "scale"; value: 1 }
- PropertyAction { target: deck; property: "inTransition"; value: false }
- }
- SequentialAnimation {
- id: backwardTransition
- running: false
- PropertyAction { target: deck; property: "inTransition"; value: true }
- PropertyAction { target: toSlide; property: "visible"; value: true }
- ParallelAnimation {
- NumberAnimation { target: fromSlide; property: "opacity"; from: 1; to: 0; duration: deck.transitionTime; easing.type: Easing.OutQuart }
- NumberAnimation { target: fromSlide; property: "scale"; from: 1; to: 0.7; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
- NumberAnimation { target: toSlide; property: "opacity"; from: 0; to: 1; duration: deck.transitionTime; easing.type: Easing.InQuart }
- NumberAnimation { target: toSlide; property: "scale"; from: 1.1; to: 1; duration: deck.transitionTime; easing.type: Easing.InOutQuart }
- }
- PropertyAction { target: fromSlide; property: "visible"; value: false }
- PropertyAction { target: fromSlide; property: "scale"; value: 1 }
- PropertyAction { target: deck; property: "inTransition"; value: false }
- }
-
- function switchSlides(from, to, forward)
- {
- if (deck.inTransition)
- return false
-
- deck.fromSlide = from
- deck.toSlide = to
-
- if (forward)
- forwardTransition.running = true
- else
- backwardTransition.running = true
-
- return true
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/ParticleSlide.qml b/basicsuite/qt5-launchpresentation/ParticleSlide.qml
deleted file mode 100644
index 2569a17..0000000
--- a/basicsuite/qt5-launchpresentation/ParticleSlide.qml
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "presentation"
-
-Slide
-{
- id: slide
-
- title: "Qt Quick - Particle System"
-
- Row {
- anchors.fill: parent
-
- SequentialAnimation on opacity {
- running: slide.visible;
- PropertyAction { value: 0 }
- PauseAnimation { duration: 2000; }
- NumberAnimation { to: 1; duration: 1000 }
- }
-
- spacing: (width - 320 * 3) / 2
-
- Loader {
- id: load1
- }
-
- Loader {
- id: load2
- }
-
- Loader {
- id: load3
- }
- }
-
- onVisibleChanged: {
- if (visible) {
- load1.source = "particles/velocityfrommotion.qml"
- load2.source = "particles/customemitter.qml"
- load3.source = "particles/emitmask.qml"
- } else {
- load1.source = ""
- load2.source = ""
- load3.source = ""
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/README b/basicsuite/qt5-launchpresentation/README
deleted file mode 100644
index 6b3f927..0000000
--- a/basicsuite/qt5-launchpresentation/README
+++ /dev/null
@@ -1,51 +0,0 @@
-This project contains quick tour of Qt 5.0, primarily focusing on its
-graphical capabilities.
-
-
-
-------------------------------------------------------------------------
- Requirements:
-
- - Qt 5, including QtDeclarative, QtGraphicalEffects and QtMultimedia.
- Commercial URL: http://qt.digia.com
- Open Source URL: http://qt-project.org
-
- - The QML Presentation System:
- URL: https://qt.gitorious.org/qt-labs/qml-presentation-system
- git: git clone https://git.gitorious.org/qt-labs/qml-presentation-system.git
-
- - A movie file called 'bunny.mov' in the same directory as the
- main.qml file. The demo will run without, but the Video slide will
- not show anything.
-
-
-
-------------------------------------------------------------------------
- Running:
-
-To run the demo, start it using the Qt Quick 2.0 'qmlscene' tool.
-
-> qmlscene main.qml
-
-The demo includes a slightly fancy fullscreen gradient and a rather
-computationally intensive drop shadow which can be too much for
-low-end GPUs. On these systems, one could try to use the 'lofi'
-launcher instead.
-
-> qmlscene main_lofi.qml
-
-It is possible to tweak the parameters of the main file also.
-
-
-
-------------------------------------------------------------------------
- Troubleshooting:
-
-For a -developer-build of Qt, the webkit plugin and QtWebProcess will
-be located inside the qtwebkit module, rather than inside QtBase, the plugin
-must be added to the QML import path and the path to QtWebProcess must be
-added to PATH for the demo to run.
-
-The slides have been written for the resolution 1280x720. When resized
-some of the spacing and content will look a bit odd. Any patches to
-fix this will be welcomed :) \ No newline at end of file
diff --git a/basicsuite/qt5-launchpresentation/ShaderSlide.qml b/basicsuite/qt5-launchpresentation/ShaderSlide.qml
deleted file mode 100644
index 206cd9e..0000000
--- a/basicsuite/qt5-launchpresentation/ShaderSlide.qml
+++ /dev/null
@@ -1,197 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "presentation"
-
-
-Slide {
- id: slide
-
- title: "Qt Quick - ShaderEffect"
-
- writeInText: "Harness the raw power of the graphics processor. The ShaderEffect\nelement lets you write GLSL inline in your QML files."
-
- Image {
- id: sourceItem
- source: "images/ally.png"
- visible: false
- }
-
- SequentialAnimation {
- id: kickoffAnimation
-
- // setup
- PropertyAction { target: rotationAnimation; property: "running"; value: false }
- PropertyAction { target: timeAnimation; property: "running"; value: false }
- PropertyAction { target: shader; property: "amp"; value: 0 }
- PropertyAction { target: shader; property: "xrot"; value: 0 }
- PropertyAction { target: shader; property: "zrot"; value: 0 }
- PropertyAction { target: shader; property: "time"; value: 0 }
- PropertyAction { target: shader; property: "scale"; value: 1; }
- PropertyAction { target: rotationAnimation; property: "running"; value: false }
- PropertyAction { target: timeAnimation; property: "running"; value: false }
- // short pause
- PauseAnimation { duration: 2000 }
- // get started...
- ParallelAnimation {
- NumberAnimation { target: shader; property: "xrot"; to: 2 * Math.PI / 8; duration: 1000; easing.type: Easing.InOutCubic }
- NumberAnimation { target: shader; property: "amp"; to: 0.1; duration: 1000; easing.type: Easing.InOutCubic }
-// NumberAnimation { target: shader; property: "scale"; to: 1.5; duration: 1000; easing.type: Easing.InOutCubic }
- PropertyAction { target: rotationAnimation; property: "running"; value: true }
- PropertyAction { target: timeAnimation; property: "running"; value: true }
- }
-
- running: slide.visible;
- }
-
-
- ShaderEffect {
- id: shader
- width: height
- height: parent.height
- anchors.centerIn: parent;
- anchors.verticalCenterOffset: slide.height * 0.1
-
- blending: true
-
- mesh: "50x50"
-
- property variant size: Qt.size(width, height);
-
- property variant source: sourceItem;
-
- property real amp: 0
-
- property real xrot: 0; // 2 * Math.PI / 8;
-// NumberAnimation on xrot { from: 0; to: Math.PI * 2; duration: 3000; loops: Animation.Infinite }
-
- property real zrot: 0
- NumberAnimation on zrot {
- id: rotationAnimation
- from: 0;
- to: Math.PI * 2;
- duration: 20000;
- loops: Animation.Infinite
- easing.type: Easing.InOutCubic
- running: false;
- }
-
- property real time: 0
- NumberAnimation on time {
- id: timeAnimation
- from: 0;
- to: Math.PI * 2;
- duration: 3457;
- loops: Animation.Infinite
- running: false;
- }
-
- vertexShader: "
- attribute highp vec4 qt_Vertex;
- attribute highp vec2 qt_MultiTexCoord0;
- uniform highp mat4 qt_Matrix;
- uniform highp float xrot;
- uniform highp float zrot;
- uniform highp vec2 size;
- uniform highp float time;
- uniform highp float amp;
- varying lowp vec2 v_TexCoord;
- varying lowp float v_light;
- void main() {
- highp float xcosa = cos(xrot);
- highp float xsina = sin(xrot);
-
- highp mat4 xrot = mat4(1, 0, 0, 0,
- 0, xcosa, xsina, 0,
- 0, -xsina, xcosa, 0,
- 0, 0, 0, 1);
-
- highp float zcosa = cos(zrot);
- highp float zsina = sin(zrot);
-
- highp mat4 zrot = mat4(zcosa, zsina, 0, 0,
- -zsina, zcosa, 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1);
-
- highp float near = 2.;
- highp float far = 6.;
- highp float fmn = far - near;
-
- highp mat4 proj = mat4(near, 0, 0, 0,
- 0, near, 0, 0,
- 0, 0, -(far + near) / fmn, -1.,
- 0, 0, -2. * far * near / fmn, 1);
-
- highp mat4 model = mat4(2, 0, 0, 0,
- 0, 2, 0, 0,
- 0, 0, 2, 0,
- 0, -.5, -4, 1);
-
- vec4 nLocPos = vec4(qt_Vertex.xy * 2.0 / size - 1.0, 0, 1);
- nLocPos.z = cos(nLocPos.x * 5. + time) * amp;
-
- vec4 pos = proj * model * xrot * zrot * nLocPos;
- pos = vec4(pos.xyx/pos.w, 1);
-
- gl_Position = qt_Matrix * vec4((pos.xy + 1.0) / 2.0 * size , 0, 1);
-
- v_TexCoord = qt_MultiTexCoord0;
-
-
- v_light = dot(normalize(vec3(-sin(nLocPos.x * 5.0 + time) * 5.0 * amp, 0, -1)), vec3(0, 0, -1));
- }
- "
-
- fragmentShader: "
- uniform lowp sampler2D source;
- uniform lowp float qt_Opacity;
- varying highp vec2 v_TexCoord;
- varying lowp float v_light;
- void main() {
- highp vec4 c = texture2D(source, v_TexCoord);
- gl_FragColor = (vec4(pow(v_light, 16.0)) * 0.3 + c) * qt_Opacity;
- }
- "
-
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/SlideDeck.qml b/basicsuite/qt5-launchpresentation/SlideDeck.qml
deleted file mode 100644
index d9b76ce..0000000
--- a/basicsuite/qt5-launchpresentation/SlideDeck.qml
+++ /dev/null
@@ -1,232 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-import QtGraphicalEffects 1.0
-
-import "presentation"
-
-OpacityTransitionPresentation {
- id: presentation
-
- width: 1280
- height: 720
-
- transitionTime: 2000
-
-
- /********************************************************************************
- *
- * Introduction
- *
- */
-
-/*
- Rectangle {
- id: openingSlideBlackout
- color: "black"
- anchors.fill: parent;
- Behavior on opacity { NumberAnimation { duration: 1000 } }
- }
-
- onCurrentSlideChanged: {
- if (currentSlide < 2)
- openingSlideBlackout.opacity = 1;
- else
- openingSlideBlackout.opacity = 0;
- }
-
-
- Slide {
-
- }
-*/
-
- Slide {
- id: introSlide
-
- writeInText: "The following is a quick tour of what is new in Qt 5.
-
-It is an application written with Qt Quick, based on Qt 5. The source code is available from:
-https://qt.gitorious.org/qt-labs/qt5-launch-demo
-
-We hope you will enjoy Qt 5 as much as we have enjoyed creating it.
-
-[tap to advance]"
-
-// Image {
-// source: "images/qt-logo.png"
-// opacity: 0.4
-// z: -1
-// anchors.centerIn: parent
-// }
- }
-
- Slide {
- centeredText: "Introducing"
- fontScale: 2
- }
-
- Slide {
- centeredText: "Qt 5"
- fontScale: 4;
- }
-
-
- Slide {
- writeInText: "OpenGL-based scene graph for Qt Quick 2.0 - providing velvet animations, particles and impressive graphical effects
-
-Multimedia - Audio, Video and Camera support on all major platforms
-
-WebKit - Full HTML 5 support from the world's most popular web engine"
-
- }
-
- Slide {
- writeInText: "C++ language features - template-based connect(), C++11 support
-
-Connectivity and Networking - DNS lookup, improved IPv6 support
-
-JSON Support - Fast parser and writer, binary format support"
- }
-
- Slide {
- writeInText: "Modularization of the Qt libraries - sanitizing our codebase and simplifying deployment
-
-Qt Platform Abstraction - Unifying the Qt codebase across platforms, minimizing the porting effort for new platforms
-
-Wayland support - Wayland-compatible Qt backend and compositor framework"
- }
-
-
- WidgetsSlide { }
-
-
-
-
- /********************************************************************************
- *
- * Qt Quick Graphics Stack
- *
- */
- ExamplesSlide { }
-
- FontSlide { }
- CanvasSlide { }
- ParticleSlide { }
- ShaderSlide { }
-
-
-
- /********************************************************************************
- *
- * Qt Graphical Effects
- *
- */
-
- EffectsSlide {}
-
-// /********************************************************************************
-// *
-// * Multimedia
-// *
-// */
-
-// Slide {
-// title: "Qt Multimedia"
-// writeInText: "The Qt Multmedia module is implemented on all our major platforms, including Windows, Mac OS X and Linux.
-
-//It contains both a C++ API for use with existing Qt Widgets based applications and a QML API for use with Qt Quick 2.0.
-
-//The features include recording and playback of video and audio and also use of camera.
-
-//It also integrates nicely with the Qt Graphical Effects module."
-// }
-
-// VideoSlide { }
-// CameraSlide { }
-
-
-
-
- /********************************************************************************
- *
- * WebKit
- *
- */
-
-// WebkitSlide { }
-
-
-
- /********************************************************************************
- *
- * The End
- *
- */
-
- Slide {
- title: "Links"
- content: [
- "Qt Project: qt-project.org",
- "Qt by Digia: qt.digia.com",
- "Follow us on Twitter",
- " @QtProject",
- " @QtCommercial",
- "Find us on Facebook:",
- " Qt Project",
- " Qt by Digia",
- "This demo: https://qt.gitorious.org/qt-labs/qt5-launch-demo"
- ];
-
- Image {
- z: -1
- opacity: 0.7
- source: "images/qt-logo.png"
- anchors.top: parent.top
- anchors.right: parent.right
- anchors.rightMargin: parent.width * 0.15
- fillMode: Image.PreserveAspectFit
- }
-
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/Swirl.qml b/basicsuite/qt5-launchpresentation/Swirl.qml
deleted file mode 100644
index 710f04b..0000000
--- a/basicsuite/qt5-launchpresentation/Swirl.qml
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-ShaderEffect {
- id: shader
-
- width: 400
- height: 300
-
- property real speed: 1
-
- property color d: Qt.rgba(Math.random() * 0.7,
- Math.random() * 0.5,
- Math.random() * 0.7,
- Math.random() * 0.5)
- property real tx
- NumberAnimation on tx { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
- property real ty
- NumberAnimation on ty { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
- property real tz
- NumberAnimation on tz { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
- property real tw
- NumberAnimation on tw { from: 0; to: Math.PI * 2; duration: (Math.random() * 30 + 30) * 1000 / speed; loops: Animation.Infinite }
-
- property real amplitude: height / 2
-
- property variant colorTable: ShaderEffectSource { sourceItem: Rectangle { width: 4; height: 4; color: "green" } }
-
- fragmentShader: "
- uniform lowp float qt_Opacity;
- uniform lowp sampler2D colorTable;
- varying highp vec2 qt_TexCoord0;
- varying lowp float xx;
-
- void main() {
- gl_FragColor = texture2D(colorTable, qt_TexCoord0);
- gl_FragColor.xyz += xx * 0.1;
- gl_FragColor *= qt_Opacity;
- }
- "
-
- vertexShader: "
- uniform lowp vec4 d;
- uniform highp float tx;
- uniform highp float ty;
- uniform highp float tz;
- uniform highp float tw;
- uniform highp float amplitude;
- uniform highp mat4 qt_Matrix;
- attribute highp vec4 qt_Vertex;
- attribute highp vec2 qt_MultiTexCoord0;
- varying highp vec2 qt_TexCoord0;
- varying lowp float xx;
- void main() {
- highp vec4 pos = qt_Vertex;
-
- highp float y = sin(-tx + d.x * qt_MultiTexCoord0.x * 57. + 12. * d.y)
- + sin(ty * 2.0 + d.z * qt_MultiTexCoord0.x * 21. + 5. * d.w)
- + sin(tz * 4.0 + d.y * qt_MultiTexCoord0.x * 13. + 7.0 * d.x)
- + sin(-ty * 8.0 + d.w * qt_MultiTexCoord0.x * 29. + 15. * d.z);
- highp float x = sin(-tx + d.x * qt_MultiTexCoord0.x * 213. + 15. * d.y)
- + sin(ty * 2.0 + d.z * qt_MultiTexCoord0.x * 107. + 12. * d.w)
- + sin(tz * 4.0 + d.y * qt_MultiTexCoord0.x * 13. + 5. * d.x)
- + sin(-ty * 8.0 + d.w * qt_MultiTexCoord0.x * 15. + 7. * d.z);
- xx = x;
-
- pos.xy += vec2(x * sin(qt_MultiTexCoord0.x * 3.14152) * 0.3,
- y * (1.0 - qt_MultiTexCoord0.y)) * amplitude;
-
- gl_Position = qt_Matrix * pos;
- qt_TexCoord0 = qt_MultiTexCoord0;
- }
- "
-
- mesh: GridMesh { resolution: Qt.size(width / 10, 4) }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/VideoSlide.qml b/basicsuite/qt5-launchpresentation/VideoSlide.qml
deleted file mode 100644
index a7aac8a..0000000
--- a/basicsuite/qt5-launchpresentation/VideoSlide.qml
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtMultimedia 5.0
-import "presentation"
-
-import QtGraphicalEffects 1.0
-
-Slide {
-
- id: slide
-
- title: "Qt Multimedia - Video"
-
- Video {
- id: video
-
- anchors.fill: parent
- source: "bunny.mov"
- autoLoad: true;
-
- layer.enabled: true;
- layer.smooth: true;
- layer.effect: Displace {
- displacementSource: normalMap
- displacement: button.pressed ? 1.0 : 0.0
- Behavior on displacement {
- NumberAnimation { duration: 1000 }
- }
- }
- }
-
- Rectangle {
- id: theItem;
- width: 256
- height: 128
- color: "transparent"
- Text {
- id: label
- color: "white"
- text: "Qt 5"
-// font.family: "Times New Roman"
- font.bold: true;
- font.pixelSize: 80
- anchors.centerIn: parent
- }
- visible: false;
- }
-
- NormalMapGenerator {
- anchors.left: theItem.right
- width: 256
- height: 128
- id: normalMap
- source: theItem;
- visible: false
- }
-
- centeredText: video.hasVideo ? "" : "'bunny.mov' is not found or cannot be played: " + video.errorString
-
- onVisibleChanged: {
- if (slide.visible)
- video.play();
- else
- video.pause();
- }
-
- Button {
- id: button
- anchors.bottom: video.bottom
- anchors.horizontalCenter: video.horizontalCenter
- anchors.bottomMargin: height / 2;
- label: pressed ? "Remove Effect" : "Displacement Effect";
- width: height * 4;
- height: parent.height * 0.1
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/WebKitSlideContent.qml b/basicsuite/qt5-launchpresentation/WebKitSlideContent.qml
deleted file mode 100644
index ceb103f..0000000
--- a/basicsuite/qt5-launchpresentation/WebKitSlideContent.qml
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: For any questions to Digia, please use the contact form at
-** http://qt.digia.com/
-**
-** This file is part of the examples of the Qt Enterprise Embedded.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import QtWebKit 3.0
-
-Item {
- id: slide
-
- anchors.fill: parent;
-
- WebView {
- id: browser
- anchors.fill: parent
- url: editor.text
-
- // This works around rendering bugs in webkit. CSS animations
- // and webGL content gets a bad offset, but this hack
- // clips it so it is not visible. Not ideal, but it kinda works
- // for now.
- layer.enabled: true
- layer.smooth: true
- }
-
- Rectangle {
- border.width: 2
- border.color: "black"
- opacity: 0.5
- color: "black"
- anchors.fill: editor
- anchors.margins: -editor.height * 0.2;
-
- radius: -anchors.margins
- antialiasing: true
- }
-
- TextInput {
- id: editor
- anchors.top: browser.bottom;
- anchors.horizontalCenter: browser.horizontalCenter
- font.pixelSize: slide.height * 0.05;
- text: "http://qt.digia.com"
- onAccepted: browser.reload();
- color: "white"
-
- onCursorPositionChanged: {
- var rect = positionToRectangle(cursorPosition);
- emitter.x = rect.x;
- emitter.y = rect.y;
- emitter.width = rect.width;
- emitter.height = rect.height;
- emitter.burst(10);
- }
-
- ParticleSystem {
- id: sys1
- running: slide.visible
- }
-
- ImageParticle {
- system: sys1
- source: "images/particle.png"
- color: "white"
- colorVariation: 0.2
- alpha: 0
- }
-
- Emitter {
- id: emitter
- system: sys1
-
- enabled: false
-
- lifeSpan: 2000
-
- velocity: PointDirection { xVariation: 30; yVariation: 30; }
- acceleration: PointDirection {xVariation: 30; yVariation: 30; y: 100 }
-
- endSize: 0
-
- size: 8
- sizeVariation: 2
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/WidgetsSlide.qml b/basicsuite/qt5-launchpresentation/WidgetsSlide.qml
deleted file mode 100644
index 20f0770..0000000
--- a/basicsuite/qt5-launchpresentation/WidgetsSlide.qml
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "presentation"
-
-Slide {
- id: slide
-
- writeInText: "The Qt Widgets are working better than ever with accessibility\nimprovements and retina display support."
-
- property int slamTime: 800;
- property int waitTime: 500;
-
- y: parent.height * 0.1
-
- SequentialAnimation {
- id: widgetAnimation
- ScriptAction { script: {
- boxesImage.opacity = 0;
- mainwindowsImage.opacity = 0;
- chipsWindow.opacity = 0;
- stylesWindow.opacity = 0;
- }
- }
- PauseAnimation { duration: 3000 }
- ParallelAnimation {
- NumberAnimation { target: boxesImage; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.OutBack }
- NumberAnimation { target: boxesImage; property: "rotation"; from: 20; to: 10; duration: slide.slamTime; easing.type: Easing.OutBack }
- NumberAnimation { target: boxesImage; property: "scale"; from: 2; to: 1.5; duration: slide.slamTime; easing.type: Easing.OutBack }
- }
- PauseAnimation { duration: slide.waitTime }
- ParallelAnimation {
- NumberAnimation { target: mainwindowsImage; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.OutBack }
- NumberAnimation { target: mainwindowsImage; property: "rotation"; from: -35; to: -20; duration: slide.slamTime; easing.type: Easing.OutBack}
- NumberAnimation { target: mainwindowsImage; property: "scale"; from: 2; to: 1.5; duration: slide.slamTime; easing.type: Easing.OutBack }
- }
- PauseAnimation { duration: slide.waitTime }
- ParallelAnimation {
- NumberAnimation { target: chipsWindow; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.InOutCubic }
- NumberAnimation { target: chipsWindow; property: "rotation"; from: 10; to: 25; duration: slide.slamTime; easing.type: Easing.OutBack}
- NumberAnimation { target: chipsWindow; property: "scale"; from: 2.5; to: 1.6; duration: slide.slamTime; easing.type: Easing.OutBack }
- }
- PauseAnimation { duration: slide.waitTime }
- ParallelAnimation {
- NumberAnimation { target: stylesWindow; property: "opacity"; from: 0; to: 1; duration: slide.slamTime; easing.type: Easing.InOutCubic }
- NumberAnimation { target: stylesWindow; property: "rotation"; from: 30; to: -15; duration: slide.slamTime; easing.type: Easing.OutBack}
- NumberAnimation { target: stylesWindow; property: "scale"; from: 1.8; to: 1.4; duration: slide.slamTime; easing.type: Easing.OutBack }
- }
- running: false
- }
-
- onVisibleChanged: {
- widgetAnimation.running = slide.visible;
- }
-
- Row {
- x: slide.width * 0.05
- y: slide.height * 0.65;
- width: parent.width
- Image {
- id: boxesImage;
- source: "images/widgets_boxes.png"
- fillMode: Image.PreserveAspectFit
- width: slide.width * .2
- antialiasing: true
- opacity: 0;
- y: -slide.height * 0.2
- rotation: 10
- scale: 1.5;
- }
- Image {
- id: mainwindowsImage
- source: "images/widgets_mainwindows.png"
- fillMode: Image.PreserveAspectFit
- width: slide.width * .2
- antialiasing: true
- opacity: 0
- }
- Image {
- id: chipsWindow
- source: "images/widgets_chips.png"
- fillMode: Image.PreserveAspectFit
- width: slide.width * .2
- x: slide.width * -0.05
- y: -slide.height * 0.2
- antialiasing: true
- opacity: 0
- }
-
- Image {
- id: stylesWindow
- source: "images/widgets_styles_fusion.png"
- fillMode: Image.PreserveAspectFit
- width: slide.width * .2
-
- x: slide.width * 1
- y: -slide.height * 0.1
- antialiasing: true
- opacity: 0
-
- Image {
- source: "images/widgets_styles_macstyle.png"
- fillMode: Image.PreserveAspectFit
- width: slide.width * .2
-
- x: parent.width * 0.3
- y: parent.width * 0.1
- rotation: -20
- antialiasing: true
- }
- }
- }
-}
-
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/.DS_Store b/basicsuite/qt5-launchpresentation/calqlatr/.DS_Store
deleted file mode 100644
index fe95b02..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/Calqlatr.qml b/basicsuite/qt5-launchpresentation/calqlatr/Calqlatr.qml
deleted file mode 100644
index 7640fbd..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/Calqlatr.qml
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "content"
-import "content/calculator.js" as CalcEngine
-
-
-Rectangle {
- id: window
- width: 320
- height: 480
- focus: true
- color: "#272822"
-
- onWidthChanged: controller.reload()
-
- function operatorPressed(operator) { CalcEngine.operatorPressed(operator) }
- function digitPressed(digit) { CalcEngine.digitPressed(digit) }
-
- Item {
- id: pad
- width: window.width * 0.58
- NumberPad { y: 10; anchors.horizontalCenter: parent.horizontalCenter }
- }
-
- AnimationController {
- id: controller
- animation: ParallelAnimation {
- id: anim
- NumberAnimation { target: display; property: "x"; duration: 400; from: -16; to: window.width - display.width; easing.type: Easing.InOutQuad }
- NumberAnimation { target: pad; property: "x"; duration: 400; from: window.width - pad.width; to: 0; easing.type: Easing.InOutQuad }
- SequentialAnimation {
- NumberAnimation { target: pad; property: "scale"; duration: 200; from: 1; to: 0.97; easing.type: Easing.InOutQuad }
- NumberAnimation { target: pad; property: "scale"; duration: 200; from: 0.97; to: 1; easing.type: Easing.InOutQuad }
- }
- }
- }
-
- Display {
- id: display
- x: -16
- width: window.width * 0.42
- height: parent.height
-
- MouseArea {
- property real startX: 0
- property real oldP: 0
- property bool rewind: false
-
- anchors.fill: parent
- onPositionChanged: {
- var reverse = startX > window.width / 2
- var mx = mapToItem(window, mouse.x).x
- var p = Math.abs((mx - startX) / (window.width - display.width))
- if (p < oldP)
- rewind = reverse ? false : true
- else
- rewind = reverse ? true : false
- controller.progress = reverse ? 1 - p : p
- oldP = p
- }
- onPressed: startX = mapToItem(window, mouse.x).x
- onReleased: {
- if (rewind)
- controller.completeToBeginning()
- else
- controller.completeToEnd()
- }
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/Button.qml b/basicsuite/qt5-launchpresentation/calqlatr/content/Button.qml
deleted file mode 100644
index c355c2d..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/Button.qml
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- property alias text: textItem.text
- property alias color: textItem.color
-
- property bool operator: false
-
- signal clicked
-
- width: 30
- height: 50
-
- Text {
- id: textItem
- font.pixelSize: 48
- wrapMode: Text.WordWrap
- lineHeight: 0.75
- color: "white"
- }
-
-// Rectangle {
-// color: "red"
-// opacity: 0.2
-// anchors.fill: mouse
-// }
-
- MouseArea {
- id: mouse
- anchors.fill: parent
- anchors.margins: -5
- onClicked: {
- //parent.clicked()
- if (operator)
- window.operatorPressed(parent.text)
- else
- window.digitPressed(parent.text)
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/Display.qml b/basicsuite/qt5-launchpresentation/calqlatr/content/Display.qml
deleted file mode 100644
index 3c1d9c0..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/Display.qml
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: display
-
- function displayOperator(operator)
- {
- listView.model.append({ "operator": operator, "operand": "" })
- }
-
- function newLine(operator, operand)
- {
- listView.model.append({ "operator": operator, "operand": operand })
- }
-
- function appendDigit(digit)
- {
- if (!listView.model.count)
- listView.model.append({ "operator": "", "operand": "" })
- var i = listView.model.count - 1;
- listView.model.get(i).operand = listView.model.get(i).operand + digit;
- }
-
- Item {
- id: theItem
- width: parent.width + 32
- height: parent.height
-
- Rectangle {
- id: rect
- x: 16
- color: "white"
- height: parent.height
- width: display.width - 16
- }
- Image {
- anchors.right: rect.left
- source: "images/paper-edge-left.png"
- height: parent.height
- fillMode: Image.TileVertically
- }
- Image {
- anchors.left: rect.right
- source: "images/paper-edge-right.png"
- height: parent.height
- fillMode: Image.TileVertically
- }
-
- Image {
- source: "images/paper-grip.png"
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 20
- }
-
- ListView {
- id: listView
- x: 16; y: 30
- width: display.width
- height: display.height
- delegate: Item {
- height: 20
- width: parent.width
- Text {
- id: operator
- x: 8
- font.pixelSize: 18
- color: "#6da43d"
- text: model.operator
- }
- Text {
- id: operand
- font.pixelSize: 18
- anchors.right: parent.right
- anchors.rightMargin: 26
- text: model.operand
- }
- }
- model: ListModel { }
- }
-
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/NumberPad.qml b/basicsuite/qt5-launchpresentation/calqlatr/content/NumberPad.qml
deleted file mode 100644
index 853c763..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/NumberPad.qml
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Grid {
- columns: 3
- columnSpacing: 32
- rowSpacing: 16
-
- Button { text: "7" }
- Button { text: "8" }
- Button { text: "9" }
- Button { text: "4" }
- Button { text: "5" }
- Button { text: "6" }
- Button { text: "1" }
- Button { text: "2" }
- Button { text: "3" }
- Button { text: "0" }
- Button { text: "." }
- Button { text: " " }
- Button { text: "±"; color: "#6da43d"; operator: true }
- Button { text: "−"; color: "#6da43d"; operator: true }
- Button { text: "+"; color: "#6da43d"; operator: true }
- Button { text: " "; color: "#6da43d"; operator: true }
- Button { text: "÷"; color: "#6da43d"; operator: true }
- Button { text: "×"; color: "#6da43d"; operator: true }
- Button { text: "C"; color: "#6da43d"; operator: true }
- Button { text: " "; color: "#6da43d"; operator: true }
- Button { text: "="; color: "#6da43d"; operator: true }
-}
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/audio/touch.wav b/basicsuite/qt5-launchpresentation/calqlatr/content/audio/touch.wav
deleted file mode 100644
index 94cccb7..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/audio/touch.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/calculator.js b/basicsuite/qt5-launchpresentation/calqlatr/content/calculator.js
deleted file mode 100644
index 843ef39..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/calculator.js
+++ /dev/null
@@ -1,143 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-var curVal = 0
-var memory = 0
-var lastOp = ""
-var previousOperator = ""
-var digits = ""
-
-function disabled(op) {
- if (op == "." && digits.toString().search(/\./) != -1) {
- return true
- } else if (op == window.squareRoot && digits.toString().search(/-/) != -1) {
- return true
- } else {
- return false
- }
-}
-
-function digitPressed(op)
-{
- if (disabled(op))
- return
- if (digits.toString().length >= 14)
- return
- if (lastOp.toString().length == 1 && ((lastOp >= "0" && lastOp <= "9") || lastOp == ".") ) {
- digits = digits + op.toString()
- display.appendDigit(op.toString())
- } else {
- digits = op
- display.appendDigit(op.toString())
- }
- lastOp = op
-}
-
-function operatorPressed(op)
-{
- if (disabled(op))
- return
- lastOp = op
-
- if (previousOperator == "+") {
- digits = Number(digits.valueOf()) + Number(curVal.valueOf())
- } else if (previousOperator == "−") {
- digits = Number(curVal) - Number(digits.valueOf())
- } else if (previousOperator == "×") {
- digits = Number(curVal) * Number(digits.valueOf())
- } else if (previousOperator == "÷") {
- digits = Number(Number(curVal) / Number(digits.valueOf())).toString()
- } else if (previousOperator == "=") {
- }
-
- if (op == "+" || op == "−" || op == "×" || op == "÷") {
- previousOperator = op
- curVal = digits.valueOf()
- display.displayOperator(previousOperator)
- return
- }
-
- if (op == "=") {
- display.newLine("=", digits.toString())
- }
-
- curVal = 0
- previousOperator = ""
-
- if (op == "1/x") {
- digits = (1 / digits.valueOf()).toString()
- } else if (op == "x^2") {
- digits = (digits.valueOf() * digits.valueOf()).toString()
- } else if (op == "Abs") {
- digits = (Math.abs(digits.valueOf())).toString()
- } else if (op == "Int") {
- digits = (Math.floor(digits.valueOf())).toString()
- } else if (op == window.plusminus) {
- digits = (digits.valueOf() * -1).toString()
- } else if (op == window.squareRoot) {
- digits = (Math.sqrt(digits.valueOf())).toString()
- } else if (op == "mc") {
- memory = 0;
- } else if (op == "m+") {
- memory += digits.valueOf()
- } else if (op == "mr") {
- digits = memory.toString()
- } else if (op == "m-") {
- memory = digits.valueOf()
- } else if (op == window.leftArrow) {
- digits = digits.toString().slice(0, -1)
- if (digits.length == 0) {
- digits = "0"
- }
- } else if (op == "Off") {
- Qt.quit();
- } else if (op == "C") {
- digits = "0"
- } else if (op == "AC") {
- curVal = 0
- memory = 0
- lastOp = ""
- digits ="0"
- }
-
-
-}
-
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-back.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-back.png
deleted file mode 100644
index 2989ee2..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-back.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-close.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-close.png
deleted file mode 100644
index 3e21248..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-close.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-settings.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-settings.png
deleted file mode 100644
index 98e662f..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/icon-settings.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/logo.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/logo.png
deleted file mode 100644
index 6bc6561..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/logo.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-left.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-left.png
deleted file mode 100644
index ca29a3a..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-left.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-right.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-right.png
deleted file mode 100644
index 7c2da7b..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-edge-right.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-grip.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-grip.png
deleted file mode 100644
index 953c408..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/paper-grip.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-a.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-a.png
deleted file mode 100644
index e08ddfa..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-a.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-b.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-b.png
deleted file mode 100644
index d9aa7e3..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/settings-selected-b.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-green.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-green.png
deleted file mode 100644
index 64dbde6..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-green.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-white.png b/basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-white.png
deleted file mode 100644
index bb02b00..0000000
--- a/basicsuite/qt5-launchpresentation/calqlatr/content/images/touch-white.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/demo.qmlproject b/basicsuite/qt5-launchpresentation/demo.qmlproject
deleted file mode 100644
index eed1c97..0000000
--- a/basicsuite/qt5-launchpresentation/demo.qmlproject
+++ /dev/null
@@ -1,18 +0,0 @@
-/* File generated by Qt Creator, version 2.6.1 */
-
-import QmlProject 1.1
-
-Project {
- mainFile: "main.qml"
-
- /* Include .qml, .js, and image files from current directory and subdirectories */
- QmlFiles {
- directory: "."
- }
- JavaScriptFiles {
- directory: "."
- }
- ImageFiles {
- directory: "images"
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/description.txt b/basicsuite/qt5-launchpresentation/description.txt
deleted file mode 100644
index 6ad8936..0000000
--- a/basicsuite/qt5-launchpresentation/description.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-The following is a quick tour of what is new in Qt 5. It is an application written with Qt Quick, based on Qt 5, the source code is available from [1]. The demo makes use of the QML Presentation System, available from [2]. Qt5 launch demo has been modified slightly to run in this launcher.
-
-[1] https://qt.gitorious.org/qt-labs/qt5-launch-demo
-[2] ssh://codereview.qt-project.org/qt-labs/qml-presentation-system.git
-
diff --git a/basicsuite/qt5-launchpresentation/images/ally.png b/basicsuite/qt5-launchpresentation/images/ally.png
deleted file mode 100644
index 05b405b..0000000
--- a/basicsuite/qt5-launchpresentation/images/ally.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/butterfly.png b/basicsuite/qt5-launchpresentation/images/butterfly.png
deleted file mode 100644
index b8cc35c..0000000
--- a/basicsuite/qt5-launchpresentation/images/butterfly.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/displace.png b/basicsuite/qt5-launchpresentation/images/displace.png
deleted file mode 100644
index 440e8cb..0000000
--- a/basicsuite/qt5-launchpresentation/images/displace.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/fog.png b/basicsuite/qt5-launchpresentation/images/fog.png
deleted file mode 100644
index f462222..0000000
--- a/basicsuite/qt5-launchpresentation/images/fog.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/particle.png b/basicsuite/qt5-launchpresentation/images/particle.png
deleted file mode 100644
index 5c83896..0000000
--- a/basicsuite/qt5-launchpresentation/images/particle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/qt-logo.png b/basicsuite/qt5-launchpresentation/images/qt-logo.png
deleted file mode 100644
index 7f2c662..0000000
--- a/basicsuite/qt5-launchpresentation/images/qt-logo.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/widgets_boxes.png b/basicsuite/qt5-launchpresentation/images/widgets_boxes.png
deleted file mode 100644
index 3115255..0000000
--- a/basicsuite/qt5-launchpresentation/images/widgets_boxes.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/widgets_chips.png b/basicsuite/qt5-launchpresentation/images/widgets_chips.png
deleted file mode 100644
index 4ef1664..0000000
--- a/basicsuite/qt5-launchpresentation/images/widgets_chips.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/widgets_mainwindows.png b/basicsuite/qt5-launchpresentation/images/widgets_mainwindows.png
deleted file mode 100644
index 5ce5416..0000000
--- a/basicsuite/qt5-launchpresentation/images/widgets_mainwindows.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/widgets_styles_fusion.png b/basicsuite/qt5-launchpresentation/images/widgets_styles_fusion.png
deleted file mode 100644
index d94f859..0000000
--- a/basicsuite/qt5-launchpresentation/images/widgets_styles_fusion.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/images/widgets_styles_macstyle.png b/basicsuite/qt5-launchpresentation/images/widgets_styles_macstyle.png
deleted file mode 100644
index 033f43b..0000000
--- a/basicsuite/qt5-launchpresentation/images/widgets_styles_macstyle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/main.qml b/basicsuite/qt5-launchpresentation/main.qml
deleted file mode 100644
index 627ec48..0000000
--- a/basicsuite/qt5-launchpresentation/main.qml
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- id: root
-
- width: 1280
- height: 720
-
- property real widthFactor: root.width / root.height;
-
- DemoMain {
- width: 720 * root.widthFactor
- height: 720
-
- anchors.centerIn: parent
-
- scale: root.height / height
-
- useDropShadow: false;
- useSimpleGradient: true;
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/main_hifi.qml b/basicsuite/qt5-launchpresentation/main_hifi.qml
deleted file mode 100644
index 19e006b..0000000
--- a/basicsuite/qt5-launchpresentation/main_hifi.qml
+++ /dev/null
@@ -1,43 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the Qt 5 launch demo.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-DemoMain {
- autorun: true
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/.DS_Store b/basicsuite/qt5-launchpresentation/maroon/.DS_Store
deleted file mode 100644
index b5c859b..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/Maroon.qml b/basicsuite/qt5-launchpresentation/maroon/Maroon.qml
deleted file mode 100644
index d7bfcb6..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/Maroon.qml
+++ /dev/null
@@ -1,233 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "content"
-import "content/logic.js" as Logic
-
-Item {
- id: root
- width: 320
- height: 480
- property var gameState: Logic.newGameState(canvas);
- property bool passedSplash: false
-
- Image {
- source:"content/gfx/background.png"
- anchors.bottom: view.bottom
-
- ParticleSystem {
- id: particles
- anchors.fill: parent
-
- ImageParticle {
- id: bubble
- anchors.fill: parent
- source: "content/gfx/catch.png"
- opacity: 0.25
- }
-
- Wander {
- xVariance: 25;
- pace: 25;
- }
-
- Emitter {
- width: parent.width
- height: 150
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 3
- startTime: 15000
-
- emitRate: 2
- lifeSpan: 15000
-
- acceleration: PointDirection{ y: -6; xVariation: 2; yVariation: 2 }
-
- size: 24
- sizeVariation: 16
- }
- }
- }
-
- Column {
- id: view
- y: -(height - 480)
- width: 320
-
- GameOverScreen { gameCanvas: canvas }
-
- Item {
- id: canvasArea
- width: 320
- height: 480
-
- Row {
- height: childrenRect.height
- Image {
- id: wave
- y: 30
- source:"content/gfx/wave.png"
- }
- Image {
- y: 30
- source:"content/gfx/wave.png"
- }
- NumberAnimation on x { from: 0; to: -(wave.width); duration: 16000; loops: Animation.Infinite }
- SequentialAnimation on y {
- loops: Animation.Infinite
- NumberAnimation { from: y - 2; to: y + 2; duration: 1600; easing.type: Easing.InOutQuad }
- NumberAnimation { from: y + 2; to: y - 2; duration: 1600; easing.type: Easing.InOutQuad }
- }
- }
-
- Row {
- opacity: 0.5
- Image {
- id: wave2
- y: 25
- source: "content/gfx/wave.png"
- }
- Image {
- y: 25
- source: "content/gfx/wave.png"
- }
- NumberAnimation on x { from: -(wave2.width); to: 0; duration: 32000; loops: Animation.Infinite }
- SequentialAnimation on y {
- loops: Animation.Infinite
- NumberAnimation { from: y + 2; to: y - 2; duration: 1600; easing.type: Easing.InOutQuad }
- NumberAnimation { from: y - 2; to: y + 2; duration: 1600; easing.type: Easing.InOutQuad }
- }
- }
-
- Image {
- source: "content/gfx/sunlight.png"
- opacity: 0.02
- y: 0
- anchors.horizontalCenter: parent.horizontalCenter
- transformOrigin: Item.Top
- SequentialAnimation on rotation {
- loops: Animation.Infinite
- NumberAnimation { from: -10; to: 10; duration: 8000; easing.type: Easing.InOutSine }
- NumberAnimation { from: 10; to: -10; duration: 8000; easing.type: Easing.InOutSine }
- }
- }
-
- Image {
- source: "content/gfx/sunlight.png"
- opacity: 0.04
- y: 20
- anchors.horizontalCenter: parent.horizontalCenter
- transformOrigin: Item.Top
- SequentialAnimation on rotation {
- loops: Animation.Infinite
- NumberAnimation { from: 10; to: -10; duration: 8000; easing.type: Easing.InOutSine }
- NumberAnimation { from: -10; to: 10; duration: 8000; easing.type: Easing.InOutSine }
- }
- }
-
- Image {
- source: "content/gfx/grid.png"
- opacity: 0.5
- }
-
- GameCanvas {
- id: canvas
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 20
- x: 32
- focus: true
- }
-
- InfoBar { anchors.bottom: canvas.top; anchors.bottomMargin: 6; width: parent.width }
-
- //3..2..1..go
- Timer {
- id: countdownTimer
- interval: 1000
- running: root.countdown < 5
- repeat: true
- onTriggered: root.countdown++
- }
- Repeater {
- model: ["content/gfx/text-blank.png", "content/gfx/text-3.png", "content/gfx/text-2.png", "content/gfx/text-1.png", "content/gfx/text-go.png"]
- delegate: Image {
- visible: root.countdown <= index
- opacity: root.countdown == index ? 0.5 : 0.1
- scale: root.countdown >= index ? 1.0 : 0.0
- source: modelData
- Behavior on opacity { NumberAnimation {} }
- Behavior on scale { NumberAnimation {} }
- }
- }
- }
-
- NewGameScreen {
- onStartButtonClicked: root.passedSplash = true
- }
- }
-
- property int countdown: 10
- Timer {
- id: gameStarter
- interval: 4000
- running: false
- repeat: false
- onTriggered: Logic.startGame(canvas);
- }
-
- states: [
- State {
- name: "gameOn"; when: gameState.gameOver == false && passedSplash
- PropertyChanges { target: view; y: -(height - 960) }
- StateChangeScript { script: root.countdown = 0; }
- PropertyChanges { target: gameStarter; running: true }
- },
- State {
- name: "gameOver"; when: gameState.gameOver == true
- PropertyChanges { target: view; y: 0 }
- }
- ]
-
- transitions: Transition {
- NumberAnimation { properties: "x,y"; duration: 1200; easing.type: Easing.OutQuad }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml b/basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml
deleted file mode 100644
index 49641fc..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "logic.js" as Logic
-
-Item {
- id: container
- width: 64
- height: 64
- property alias source: img.source
- property int index
- property int row: 0
- property int col: 0
- property int towerType
- property bool canBuild: true
- property Item gameCanvas: parent.parent.parent
- signal clicked()
-
- Image {
- id: img
- opacity: (canBuild && gameCanvas.coins >= Logic.towerData[towerType-1].cost) ? 1.0 : 0.4
- }
- Text {
- anchors.right: parent.right
- font.pointSize: 14
- font.bold: true
- color: "#ffffff"
- text: Logic.towerData[towerType - 1].cost
- }
- MouseArea {
- anchors.fill: parent
- onClicked: {
- Logic.buildTower(towerType, col, row)
- container.clicked()
- }
- }
- Image {
- visible: col == index && row != 0
- source: "gfx/dialog-pointer.png"
- anchors.top: parent.bottom
- anchors.topMargin: 4
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Image {
- visible: col == index && row == 0
- source: "gfx/dialog-pointer.png"
- rotation: 180
- anchors.bottom: parent.top
- anchors.bottomMargin: 6
- anchors.horizontalCenter: parent.horizontalCenter
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml b/basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml
deleted file mode 100644
index 5e6e963..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml
+++ /dev/null
@@ -1,240 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "logic.js" as Logic
-import "towers" as Towers
-
-Item {
- id: grid
-
- property int squareSize: 64
- property int rows: 6
- property int cols: 4
- property Item canvas: grid
- property int score: 0
- property int coins: 100
- property int lives: 3
- property int waveNumber: 0
- property int waveProgress: 0
- property var towers
- property var mobs
- property bool gameRunning: false
- property bool gameOver: false
- property bool errored: false
- property string errorString: ""
-
- width: cols * squareSize
- height: rows * squareSize
-
- function freshState() {
- lives = 3
- coins = 100
- score = 0
- waveNumber = 0
- waveProgress = 0
- gameOver = false
- gameRunning = false
- towerMenu.shown = false
- helpButton.comeBack();
- }
-
- Text {
- id: errorText // Mostly for debug purposes
- text: errorString
- visible: errored
- color: "red"
- font.pixelSize: 18
- wrapMode: Text.WordWrap
- width: parent.width / 1.2
- height: parent.height / 1.2
- anchors.centerIn: parent
- z: 1000
- }
-
- Timer {
- interval: 16
- running: true
- repeat: true
- onTriggered: Logic.tick()
- }
-
- MouseArea {
- id: ma
- anchors.fill: parent
- onClicked: {
- if (towerMenu.visible)
- towerMenu.finish()
- else
- towerMenu.open(mouse.x, mouse.y)
- }
- }
-
- Image {
- id: towerMenu
- visible: false
- z: 1500
- scale: 0.9
- opacity: 0.7
- property int dragDistance: 16
- property int targetRow: 0
- property int targetCol: 0
- property bool shown: false
- property bool towerExists: false
-
- function finish() {
- shown = false
- }
-
- function open(xp,yp) {
- if (!grid.gameRunning)
- return
- targetRow = Logic.row(yp)
- targetCol = Logic.col(xp)
- if (targetRow == 0)
- towerMenu.y = (targetRow + 1) * grid.squareSize
- else
- towerMenu.y = (targetRow - 1) * grid.squareSize
- towerExists = (grid.towers[Logic.towerIdx(targetCol, targetRow)] != null)
- shown = true
- helpButton.goAway();
- }
-
- states: State {
- name: "shown"; when: towerMenu.shown && !grid.gameOver
- PropertyChanges { target: towerMenu; visible: true; scale: 1; opacity: 1 }
- }
-
- transitions: Transition {
- PropertyAction { property: "visible" }
- NumberAnimation { properties: "opacity,scale"; duration: 500; easing.type: Easing.OutElastic }
- }
-
- x: -32
- source: "gfx/dialog.png"
- Row {
- id: buttonRow
- height: 100
- anchors.centerIn: parent
- spacing: 8
- BuildButton {
- row: towerMenu.targetRow; col: towerMenu.targetCol
- anchors.verticalCenter: parent.verticalCenter
- towerType: 1; index: 0
- canBuild: !towerMenu.towerExists
- source: "gfx/dialog-melee.png"
- onClicked: towerMenu.finish()
- }
- BuildButton {
- row: towerMenu.targetRow; col: towerMenu.targetCol
- anchors.verticalCenter: parent.verticalCenter
- towerType: 2; index: 1
- canBuild: !towerMenu.towerExists
- source: "gfx/dialog-shooter.png"
- onClicked: towerMenu.finish()
- }
- BuildButton {
- row: towerMenu.targetRow; col: towerMenu.targetCol
- anchors.verticalCenter: parent.verticalCenter
- towerType: 3; index: 2
- canBuild: !towerMenu.towerExists
- source: "gfx/dialog-bomb.png"
- onClicked: towerMenu.finish()
- }
- BuildButton {
- row: towerMenu.targetRow; col: towerMenu.targetCol
- anchors.verticalCenter: parent.verticalCenter
- towerType: 4; index: 3
- canBuild: !towerMenu.towerExists
- source: "gfx/dialog-factory.png"
- onClicked: towerMenu.finish()
- }
- }
- }
-
-
- Keys.onPressed: { // Cheat Codes while Testing
- if (event.key == Qt.Key_Up && (event.modifiers & Qt.ShiftModifier))
- grid.coins += 10;
- if (event.key == Qt.Key_Left && (event.modifiers & Qt.ShiftModifier))
- grid.lives += 1;
- if (event.key == Qt.Key_Down && (event.modifiers & Qt.ShiftModifier))
- Logic.gameState.waveProgress += 1000;
- if (event.key == Qt.Key_Right && (event.modifiers & Qt.ShiftModifier))
- Logic.endGame();
- }
-
- Image {
- id: helpButton
- z: 1010
- source: "gfx/button-help.png"
- function goAway() {
- helpMA.enabled = false;
- helpButton.opacity = 0;
- }
- function comeBack() {
- helpMA.enabled = true;
- helpButton.opacity = 1;
- }
- Behavior on opacity { NumberAnimation {} }
- MouseArea {
- id: helpMA
- anchors.fill: parent
- onClicked: {helpImage.visible = true; helpButton.visible = false;}
- }
-
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- }
-
- Image {
- id: helpImage
- z: 1010
- source: "gfx/help.png"
- anchors.fill: parent
- visible: false
- MouseArea {
- anchors.fill: parent
- onClicked: helpImage.visible = false;
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml b/basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml
deleted file mode 100644
index dfb439f..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "logic.js" as Logic
-
-Item {
- id: gameOverScreen
- width: 320
- height: 400
- property GameCanvas gameCanvas
-
- Image {
- id: img
- source: "gfx/text-gameover.png"
- anchors.centerIn: parent
- }
-
- ParticleSystem {
- anchors.fill: parent
- ImageParticle {
- id: cloud
- source: "gfx/cloud.png"
- alphaVariation: 0.25
- opacity: 0.25
- }
-
- Wander {
- xVariance: 100;
- pace: 1;
- }
-
- Emitter {
- id: cloudLeft
- width: 160
- height: 160
- anchors.right: parent.left
- emitRate: 0.5
- lifeSpan: 12000
- velocity: PointDirection{ x: 64; xVariation: 2; yVariation: 2 }
- size: 160
- }
-
- Emitter {
- id: cloudRight
- width: 160
- height: 160
- anchors.left: parent.right
- emitRate: 0.5
- lifeSpan: 12000
- velocity: PointDirection{ x: -64; xVariation: 2; yVariation: 2 }
- size: 160
- }
- }
-
-
- Text {
- visible: gameCanvas != undefined
- text: "You saved " + gameCanvas.score + " fishes!"
- anchors.top: img.bottom
- anchors.topMargin: 12
- anchors.horizontalCenter: parent.horizontalCenter
- font.bold: true
- color: "#000000"
- opacity: 0.5
- }
-
- Image {
- source: "gfx/button-play.png"
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 0
- MouseArea {
- anchors.fill: parent
- onClicked: gameCanvas.gameOver = false//This will actually trigger the state change in main.qml
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml b/basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml
deleted file mode 100644
index 36303fc..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- height: childrenRect.height
-
- // Display the number of lives
- Row {
- anchors.left: parent.left
- anchors.leftMargin: 10
- spacing: 5
- Repeater {
- id: rep
- model: Math.min(10, canvas.lives)
- delegate: Image { source: "gfx/lifes.png" }
- }
- }
-
- // Display the number of fishes saved
- Row {
- anchors.right: points.left
- anchors.rightMargin: 20
- spacing: 5
- Image { source: "gfx/scores.png" }
- Text {
- text: canvas.score
- font.bold: true
- }
- }
-
- // Display the number of coins
- Row {
- id: points
- anchors.right: parent.right
- anchors.rightMargin: 10
- spacing: 5
- Image { source: "gfx/points.png" }
- Text {
- id: pointsLabel
- text: canvas.coins
- font.bold: true
- }
- }
-}
-
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml b/basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml
deleted file mode 100644
index 495e3aa..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-// This is the first screen.
-// It shows the logo and emit a startButtonClicked signal
-// when the user press the "PLAY" button.
-
-Item {
- id: newGameScreen
- width: 320
- height: 480
-
- signal startButtonClicked
-
- Image {
- source: "gfx/logo.png"
- anchors.top: parent.top
- anchors.topMargin: 60
- }
-
- Image {
- source: "gfx/logo-fish.png"
- anchors.top: parent.top
-
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation { from: x + 148; to: x + 25; duration: 2000; easing.type: Easing.InOutQuad }
- NumberAnimation { from: x + 25; to: x + 148; duration: 1600; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on anchors.topMargin {
- loops: Animation.Infinite
- NumberAnimation { from: 100; to: 60; duration: 1600; easing.type: Easing.InOutQuad }
- NumberAnimation { from: 60; to: 100; duration: 2000; easing.type: Easing.InOutQuad }
- }
- }
-
- Image {
- source: "gfx/logo-bubble.png"
- anchors.top: parent.top
-
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation { from: x + 140; to: x + 40; duration: 2000; easing.type: Easing.InOutQuad }
- NumberAnimation { from: x + 40; to: x + 140; duration: 1600; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on anchors.topMargin {
- loops: Animation.Infinite
- NumberAnimation { from: 100; to: 60; duration: 1600; easing.type: Easing.InOutQuad }
- NumberAnimation { from: 60; to: 100; duration: 2000; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on width {
- loops: Animation.Infinite
- NumberAnimation { from: 140; to: 160; duration: 1000; easing.type: Easing.InOutQuad }
- NumberAnimation { from: 160; to: 140; duration: 800; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on height {
- loops: Animation.Infinite
- NumberAnimation { from: 150; to: 140; duration: 800; easing.type: Easing.InOutQuad }
- NumberAnimation { from: 140; to: 150; duration: 1000; easing.type: Easing.InOutQuad }
- }
- }
-
- Image {
- source: "gfx/button-play.png"
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 60
- MouseArea {
- anchors.fill: parent
- onClicked: newGameScreen.startButtonClicked()
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml b/basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml
deleted file mode 100644
index d286a39..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-//Proxies a SoundEffect if QtMultimedia is installed
-Item {
- id: container
- property QtObject effect: Qt.createQmlObject("import QtMultimedia 5.0; SoundEffect{ source: '" + container.source + "' }", container);
- property url source: ""
- onSourceChanged: if (effect != null) effect.source = source;
- function play() {
- if (effect != null)
- effect.play();
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wav
deleted file mode 100644
index b334dc1..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wav
deleted file mode 100644
index 3e22124..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wav
deleted file mode 100644
index d3eade8..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wav
deleted file mode 100644
index 0d9ef2c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wav
deleted file mode 100644
index a2ace6c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wav
deleted file mode 100644
index d325af4..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wav
deleted file mode 100644
index 4e2284f..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wav
deleted file mode 100644
index 3e12b94..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wav
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/background.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/background.png
deleted file mode 100644
index d548b93..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/background.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.png
deleted file mode 100644
index 42da5d7..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.png
deleted file mode 100644
index 3bd62e2..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.png
deleted file mode 100644
index 380da7d..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.png
deleted file mode 100644
index aecebc1..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.png
deleted file mode 100644
index 6cdad6c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.png
deleted file mode 100644
index 78ca9fe..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.png
deleted file mode 100644
index b7620fe..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.png
deleted file mode 100644
index d7c35f8..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.png
deleted file mode 100644
index 1571341..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.png
deleted file mode 100644
index 708d916..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.png
deleted file mode 100644
index d2e2a48..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.png
deleted file mode 100644
index 069d18d..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.png
deleted file mode 100644
index 9b51a09..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.png
deleted file mode 100644
index af980ca..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.png
deleted file mode 100644
index d528ba7..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.png
deleted file mode 100644
index 8981678..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.png
deleted file mode 100644
index a145582..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.png
deleted file mode 100644
index bfb9f3f..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.png
deleted file mode 100644
index b595552..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/help.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/help.png
deleted file mode 100644
index 4654e4c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/help.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.png
deleted file mode 100644
index 135310b..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.png
deleted file mode 100644
index 136151c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.png
deleted file mode 100644
index c41833a..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.png
deleted file mode 100644
index 787ac99..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.png
deleted file mode 100644
index c53873b..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.png
deleted file mode 100644
index 621d9df..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.png
deleted file mode 100644
index ab24015..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.png
deleted file mode 100644
index dedacc7..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.png
deleted file mode 100644
index 7569c35..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/points.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/points.png
deleted file mode 100644
index 1d2386d..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/points.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.png
deleted file mode 100644
index aa2e650..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.png
deleted file mode 100644
index c25a0c3..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.png
deleted file mode 100644
index af757fe..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.png
deleted file mode 100644
index 08e7e30..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.png
deleted file mode 100644
index 663098d..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.png
deleted file mode 100644
index d44401e..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.png
deleted file mode 100644
index d1c7042..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.png
deleted file mode 100644
index 3ea399c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.png
deleted file mode 100644
index 934a481..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.png
deleted file mode 100644
index 47523f5..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.png
deleted file mode 100644
index 4a687b2..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.png
deleted file mode 100644
index 4f53ef0..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.png
deleted file mode 100644
index bfc26f7..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.png
deleted file mode 100644
index f97426c..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/logic.js b/basicsuite/qt5-launchpresentation/maroon/content/logic.js
deleted file mode 100644
index dd76b7e..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/logic.js
+++ /dev/null
@@ -1,264 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-.pragma library // Shared game state
-.import QtQuick 2.0 as QQ
-
-// Game Stuff
-var gameState // Local reference
-function getGameState() { return gameState; }
-
-var towerData = [ // Name and cost, stats are in the delegate per instance
- { "name": "Melee", "cost": 20 },
- { "name": "Ranged", "cost": 50 },
- { "name": "Bomb", "cost": 75 },
- { "name": "Factory", "cost": 25 }
-]
-
-var waveBaseData = [300, 290, 280, 270, 220, 180, 160, 80, 80, 80, 30, 30, 30, 30];
-var waveData = [];
-
-var towerComponents = new Array(towerData.length);
-var mobComponent = Qt.createComponent("mobs/MobBase.qml");
-
-function endGame()
-{
- gameState.gameRunning = false;
- gameState.gameOver = true;
- for (var i = 0; i < gameState.cols; i++) {
- for (var j = 0; j < gameState.rows; j++) {
- if (gameState.towers[towerIdx(i, j)]) {
- gameState.towers[towerIdx(i, j)].destroy();
- gameState.towers[towerIdx(i, j)] = null;
- }
- }
- for (var j in gameState.mobs[i])
- gameState.mobs[i][j].destroy();
- gameState.mobs[i].splice(0,gameState.mobs[i].length); //Leaves queue reusable
- }
-}
-
-function startGame(gameCanvas)
-{
- waveData = new Array();
- for (var i in waveBaseData)
- waveData[i] = waveBaseData[i];
- gameState.freshState();
- for (var i = 0; i < gameCanvas.cols; i++) {
- for (var j = 0; j < gameCanvas.rows; j++)
- gameState.towers[towerIdx(i, j)] = null;
- gameState.mobs[i] = new Array();
- }
- gameState.towers[towerIdx(0, 0)] = newTower(3, 0, 0);//Start with a starfish in the corner
- gameState.gameRunning = true;
- gameState.gameOver = false;
-}
-
-function newGameState(gameCanvas)
-{
- for (var i = 0; i < towerComponents.length; i++) {
- towerComponents[i] = Qt.createComponent("towers/" + towerData[i].name + ".qml");
- if (towerComponents[i].status == QQ.Component.Error) {
- gameCanvas.errored = true;
- gameCanvas.errorString += "Loading Tower " + towerData[i].name + "\n" + (towerComponents[i].errorString());
- console.log(towerComponents[i].errorString());
- }
- }
- gameState = gameCanvas;
- gameState.freshState();
- gameState.towers = new Array(gameCanvas.rows * gameCanvas.cols);
- gameState.mobs = new Array(gameCanvas.cols);
- return gameState;
-}
-
-function row(y)
-{
- return Math.floor(y / gameState.squareSize);
-}
-
-function col(x)
-{
- return Math.floor(x / gameState.squareSize);
-}
-
-function towerIdx(x, y)
-{
- return y + (x * gameState.rows);
-}
-
-function newMob(col)
-{
- var ret = mobComponent.createObject(gameState.canvas,
- { "col" : col,
- "speed" : (Math.min(2.0, 0.10 * (gameState.waveNumber + 1))),
- "y" : gameState.canvas.height });
- gameState.mobs[col].push(ret);
- return ret;
-}
-
-function newTower(type, row, col)
-{
- var ret = towerComponents[type].createObject(gameState.canvas);
- ret.row = row;
- ret.col = col;
- ret.fireCounter = ret.rof;
- ret.spawn();
- return ret;
-}
-
-function buildTower(type, x, y)
-{
- if (gameState.towers[towerIdx(x,y)] != null) {
- if (type <= 0) {
- gameState.towers[towerIdx(x,y)].sell();
- gameState.towers[towerIdx(x,y)] = null;
- }
- } else {
- if (gameState.coins < towerData[type - 1].cost)
- return;
- gameState.towers[towerIdx(x, y)] = newTower(type - 1, y, x);
- gameState.coins -= towerData[type - 1].cost;
- }
-}
-
-function killMob(col, mob)
-{
- if (!mob)
- return;
- var idx = gameState.mobs[col].indexOf(mob);
- if (idx == -1 || !mob.hp)
- return;
- mob.hp = 0;
- mob.die();
- gameState.mobs[col].splice(idx,1);
-}
-
-function killTower(row, col)
-{
- var tower = gameState.towers[towerIdx(col, row)];
- if (!tower)
- return;
- tower.hp = 0;
- tower.die();
- gameState.towers[towerIdx(col, row)] = null;
-}
-
-function tick()
-{
- if (!gameState.gameRunning)
- return;
-
- // Spawn
- gameState.waveProgress += 1;
- var i = gameState.waveProgress;
- var j = 0;
- while (i > 0 && j < waveData.length)
- i -= waveData[j++];
- if ( i == 0 ) // Spawn a mob
- newMob(Math.floor(Math.random() * gameState.cols));
- if ( j == waveData.length ) { // Next Wave
- gameState.waveNumber += 1;
- gameState.waveProgress = 0;
- var waveModifier = 10; // Constant governing how much faster the next wave is to spawn (not fish speed)
- for (var k in waveData ) // Slightly faster
- if (waveData[k] > waveModifier)
- waveData[k] -= waveModifier;
- }
-
- // Towers Attack
- for (var j in gameState.towers) {
- var tower = gameState.towers[j];
- if (tower == null)
- continue;
- if (tower.fireCounter > 0) {
- tower.fireCounter -= 1;
- continue;
- }
- var column = tower.col;
- for (var k in gameState.mobs[column]) {
- var conflict = gameState.mobs[column][k];
- if (conflict.y <= gameState.canvas.height && conflict.y + conflict.height > tower.y
- && conflict.y - ((tower.row + 1) * gameState.squareSize) < gameState.squareSize * tower.range) { // In Range
- tower.fire();
- tower.fireCounter = tower.rof;
- conflict.hit(tower.damage);
- }
- }
-
- // Income
- if (tower.income) {
- gameState.coins += tower.income;
- tower.fire();
- tower.fireCounter = tower.rof;
- }
- }
-
- // Mobs move
- for (var i = 0; i < gameState.cols; i++) {
- for (var j = 0; j < gameState.mobs[i].length; j++) {
- var mob = gameState.mobs[i][j];
- var newPos = gameState.mobs[i][j].y - gameState.mobs[i][j].speed;
- if (newPos < 0) {
- gameState.lives -= 1;
- killMob(i, mob);
- if (gameState.lives <= 0)
- endGame();
- continue;
- }
- var conflict = gameState.towers[towerIdx(i, row(newPos))];
- if (conflict != null) {
- if (mob.y < conflict.y + gameState.squareSize)
- gameState.mobs[i][j].y += gameState.mobs[i][j].speed * 10; // Moved inside tower, now hurry back out
- if (mob.fireCounter > 0) {
- mob.fireCounter--;
- } else {
- gameState.mobs[i][j].fire();
- conflict.hp -= mob.damage;
- if (conflict.hp <= 0)
- killTower(conflict.row, conflict.col);
- mob.fireCounter = mob.rof;
- }
- } else {
- gameState.mobs[i][j].y = newPos;
- }
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml b/basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml
deleted file mode 100644
index d4ece66..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml
+++ /dev/null
@@ -1,262 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../logic.js" as Logic
-import ".."
-
-Item {
- id: container
- property string name: "Fish"
- property int col: 0
- property real hp: 3
- property real damage: 1
- property real speed: 0.25
- property int rof: 30 //In ticks
- property int fireCounter: 0
- property bool dying: false
- width: parent ? parent.squareSize : 0
- height: parent ? parent.squareSize : 0
- x: col * width
- z: 1001
- function fire() { }
-
- function die() {
- if (dying)
- return;
- dying = true;
- bubble.jumpTo("burst");
- if (fishSprite.currentSprite == "front")
- fishSprite.jumpTo(Math.random() > 0.5 ? "left" : "right" );
- fishSwim.start();
- Logic.gameState.score += 1;
- killedSound.play();
- bubble.scale = 0.9
- destroy(350);
- }
-
- function inked() {
- if (hp > 0)
- ink.jumpTo("dirty");
- }
-
- function hit(dmg) {
- hp -= dmg;
-
- if (hp <= 0)
- Logic.killMob(col, container);
- }
-
- Component.onCompleted: spawnSound.play()
-
- SoundEffect {
- id: spawnSound
- source: "../audio/catch.wav"
- }
- SoundEffect {
- id: killedSound
- source: "../audio/catch-action.wav"
- }
-
- SpriteSequence {
- id: fishSprite
- width: 64
- height: 64
- interpolate: false
- goalSprite: ""
-
- Sprite {
- name: "left"
- source: "../gfx/mob-idle.png"
- frameWidth: 64
- frameHeight: 64
- frameCount: 1
- frameDuration: 800
- frameDurationVariation: 400
- to: { "front" : 1 }
- }
-
- Sprite {
- name: "front"
- source: "../gfx/mob-idle.png"
- frameCount: 1
- frameX: 64
- frameWidth: 64
- frameHeight: 64
- frameDuration: 800
- frameDurationVariation: 400
- to: { "left" : 1, "right" : 1 }
- }
-
- Sprite {
- name: "right"
- source: "../gfx/mob-idle.png"
- frameCount: 1
- frameX: 128
- frameWidth: 64
- frameHeight: 64
- frameDuration: 800
- frameDurationVariation: 400
- to: { "front" : 1 }
- }
-
-
- Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation.
- name: "dummy"
- source: "../gfx/melee-idle.png"
- frameCount: 8
- frameWidth: 64
- frameHeight: 64
- frameX: 0
- frameDuration: 200
- }
-
- NumberAnimation on x {
- id: fishSwim
- running: false
- property bool goingLeft: fishSprite.currentSprite == "right"
- to: goingLeft ? -360 : 360
- duration: 300
- }
- }
-
- SpriteSequence {
- id: bubble
- width: 64
- height: 64
- scale: 0.4 + (0.2 * hp)
- interpolate: false
- goalSprite: ""
-
- Behavior on scale {
- NumberAnimation { duration: 150; easing.type: Easing.OutBack }
- }
-
- Sprite {
- name: "big"
- source: "../gfx/catch.png"
- frameCount: 1
- to: { "burst" : 0 }
- }
-
- Sprite {
- name: "burst"
- source: "../gfx/catch-action.png"
- frameCount: 3
- frameX: 64
- frameDuration: 200
- }
-
- Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation.
- name: "dummy"
- source: "../gfx/melee-idle.png"
- frameCount: 8
- frameWidth: 64
- frameHeight: 64
- frameX: 0
- frameDuration: 200
- }
- SequentialAnimation on width {
- loops: Animation.Infinite
- NumberAnimation { from: width * 1; to: width * 1.1; duration: 800; easing.type: Easing.InOutQuad }
- NumberAnimation { from: width * 1.1; to: width * 1; duration: 1000; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on height {
- loops: Animation.Infinite
- NumberAnimation { from: height * 1; to: height * 1.15; duration: 1200; easing.type: Easing.InOutQuad }
- NumberAnimation { from: height * 1.15; to: height * 1; duration: 1000; easing.type: Easing.InOutQuad }
- }
- }
-
- SpriteSequence {
- id: ink
- width: 64
- height: 64
- scale: bubble.scale
- goalSprite: ""
-
- Sprite {
- name: "clean"
- source: "../gfx/projectile-action.png"
- frameCount: 1
- frameX: 0
- frameWidth: 64
- frameHeight: 64
- }
- Sprite {
- name: "dirty"
- source: "../gfx/projectile-action.png"
- frameCount: 3
- frameX: 64
- frameWidth: 64
- frameHeight: 64
- frameDuration: 150
- to: {"clean":1}
- }
-
- Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation.
- name: "dummy"
- source: "../gfx/melee-idle.png"
- frameCount: 8
- frameWidth: 64
- frameHeight: 64
- frameX: 0
- frameDuration: 200
- }
- SequentialAnimation on width {
- loops: Animation.Infinite
- NumberAnimation { from: width * 1; to: width * 1.1; duration: 800; easing.type: Easing.InOutQuad }
- NumberAnimation { from: width * 1.1; to: width * 1; duration: 1000; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on height {
- loops: Animation.Infinite
- NumberAnimation { from: height * 1; to: height * 1.15; duration: 1200; easing.type: Easing.InOutQuad }
- NumberAnimation { from: height * 1.15; to: height * 1; duration: 1000; easing.type: Easing.InOutQuad }
- }
-
- }
-
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation { from: x; to: x - 5; duration: 900; easing.type: Easing.InOutQuad }
- NumberAnimation { from: x - 5; to: x; duration: 900; easing.type: Easing.InOutQuad }
- }
-}
-
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml
deleted file mode 100644
index 00437f4..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../logic.js" as Logic
-import ".."
-
-TowerBase {
- id: container
- hp: 10
- range: 0.4
- rof: 10
- property real detonationRange: 2.5
-
- function fire() {
- sound.play()
- sprite.jumpTo("shoot")
- animDelay.start()
- }
-
- function finishFire() {
- var sCol = Math.max(0, col - 1)
- var eCol = Math.min(Logic.gameState.cols - 1, col + 1)
- var killList = new Array()
- for (var i = sCol; i <= eCol; i++) {
- for (var j = 0; j < Logic.gameState.mobs[i].length; j++)
- if (Math.abs(Logic.gameState.mobs[i][j].y - container.y) < Logic.gameState.squareSize * detonationRange)
- killList.push(Logic.gameState.mobs[i][j])
- while (killList.length > 0)
- Logic.killMob(i, killList.pop())
- }
- Logic.killTower(row, col);
- }
-
- Timer {
- id: animDelay
- running: false
- interval: shootState.frameCount * shootState.frameDuration
- onTriggered: finishFire()
- }
-
- function die()
- {
- destroy() // No blink, because we usually meant to die
- }
-
- SoundEffect {
- id: sound
- source: "../audio/bomb-action.wav"
- }
-
- SpriteSequence {
- id: sprite
- width: 64
- height: 64
- interpolate: false
- goalSprite: ""
-
- Sprite {
- name: "idle"
- source: "../gfx/bomb-idle.png"
- frameCount: 4
- frameDuration: 800
- }
-
- Sprite {
- id: shootState
- name: "shoot"
- source: "../gfx/bomb-action.png"
- frameCount: 6
- frameDuration: 155
- to: { "dying" : 1 } // So that if it takes a frame to clean up, it is on the last frame of the explosion
- }
-
- Sprite {
- name: "dying"
- source: "../gfx/bomb-action.png"
- frameCount: 1
- frameX: 64 * 5
- frameWidth: 64
- frameHeight: 64
- frameDuration: 155
- }
-
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation { from: x; to: x + 4; duration: 900; easing.type: Easing.InOutQuad }
- NumberAnimation { from: x + 4; to: x; duration: 900; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on y {
- loops: Animation.Infinite
- NumberAnimation { from: y; to: y - 4; duration: 900; easing.type: Easing.InOutQuad }
- NumberAnimation { from: y - 4; to: y; duration: 900; easing.type: Easing.InOutQuad }
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml
deleted file mode 100644
index b34a184..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../logic.js" as Logic
-import ".."
-
-TowerBase {
- id: container
- rof: 160
- income: 5
- SpriteSequence {
- id: sprite
- width: 64
- height: 64
- interpolate: false
- goalSprite: ""
-
- Sprite {
- name: "idle"
- source: "../gfx/factory-idle.png"
- frameCount: 4
- frameDuration: 200
- }
-
- Sprite {
- name: "action"
- source: "../gfx/factory-action.png"
- frameCount: 4
- frameDuration: 90
- to: { "idle" : 1 }
- }
-
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation { from: x; to: x + 4; duration: 900; easing.type: Easing.InOutQuad }
- NumberAnimation { from: x + 4; to: x; duration: 900; easing.type: Easing.InOutQuad }
- }
- SequentialAnimation on y {
- loops: Animation.Infinite
- NumberAnimation { from: y; to: y - 4; duration: 900; easing.type: Easing.InOutQuad }
- NumberAnimation { from: y - 4; to: y; duration: 900; easing.type: Easing.InOutQuad }
- }
- }
-
- SoundEffect {
- id: actionSound
- source: "../audio/factory-action.wav"
- }
-
- function fire() {
- actionSound.play()
- sprite.jumpTo("action")
- coinLaunch.start()
- }
-
- function spawn() {
- coin.target = Logic.gameState.mapToItem(container, 240, -32)
- }
-
- Image {
- id: coin
- property var target: { "x" : 0, "y" : 0 }
- source: "../gfx/currency.png"
- visible: false
- }
-
- SequentialAnimation {
- id: coinLaunch
- PropertyAction { target: coin; property: "visible"; value: true }
- ParallelAnimation {
- NumberAnimation { target: coin; property: "x"; from: 16; to: coin.target.x }
- NumberAnimation { target: coin; property: "y"; from: 16; to: coin.target.y }
- }
- PropertyAction { target: coin; property: "visible"; value: false }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml
deleted file mode 100644
index 1b49a45..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import ".."
-
-TowerBase {
- hp: 4
- range: 0.1
- damage: 1
- rof: 40
- income: 0
-
- SpriteSequence {
- id: sprite
- width: 64
- height: 64
- interpolate: false
- goalSprite: ""
-
- Sprite {
- name: "idle"
- source: "../gfx/melee-idle.png"
- frameCount: 8
- frameDuration: 250
- }
-
- Sprite {
- name: "shoot"
- source: "../gfx/melee-action.png"
- frameCount: 2
- frameDuration: 200
- to: { "idle" : 1 }
- }
- }
-
- function fire() {
- shootSound.play()
- sprite.jumpTo("shoot")
- }
-
- SoundEffect {
- id: shootSound
- source: "../audio/melee-action.wav"
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml
deleted file mode 100644
index 33f3354..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../logic.js" as Logic
-import ".."
-
-TowerBase {
- id: container
- hp: 2
- range: 6
- damage: 0 // By projectile
- rof: 40
- income: 0
- property var targetMob
- property real realDamage: 1
- function fire() {
- proj.x = 32 - proj.width / 2
- proj.y = 0
- targetMob = Logic.gameState.mobs[col][0]
- projAnim.to = targetMob.y - container.y -10
- projAnim.start()
- shootSound.play()
- sprite.jumpTo("shoot")
- }
-
- Image {
- id: proj
- y: 1000
- SequentialAnimation on y {
- id: projAnim
- running: false
- property real to: 1000
- SmoothedAnimation {
- to: projAnim.to
- velocity: 400
- }
- ScriptAction {
- script: {
- if (targetMob && targetMob.hit) {
- targetMob.hit(realDamage)
- targetMob.inked()
- projSound.play()
- }
- }
- }
- PropertyAction {
- value: 1000;
- }
- }
- source: "../gfx/projectile.png"
- }
-
- SoundEffect {
- id: shootSound
- source: "../audio/shooter-action.wav"
- }
- SoundEffect {
- id: projSound
- source: "../audio/projectile-action.wav"
- }
-
- SpriteSequence {
- id: sprite
- width: 64
- height: 64
- interpolate: false
- goalSprite: ""
-
- Sprite {
- name: "idle"
- source: "../gfx/shooter-idle.png"
- frameCount: 4
- frameDuration: 250
- }
-
- Sprite {
- name: "shoot"
- source: "../gfx/shooter-action.png"
- frameCount: 5
- frameDuration: 90
- to: { "idle" : 1 }
- }
-
- SequentialAnimation on x {
- loops: Animation.Infinite
- NumberAnimation { from: x; to: x - 4; duration: 900; easing.type: Easing.InOutQuad }
- NumberAnimation { from: x - 4; to: x; duration: 900; easing.type: Easing.InOutQuad }
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml
deleted file mode 100644
index 5c71cb0..0000000
--- a/basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Item {
- property real hp: 1
- property real range: 0
- property real damage: 0
- property int rof: 100
- property int fireCounter: 0
- property int income: 0
- property int row: 0
- property int col: 0
-
- width: parent ? parent.squareSize : 0
- height: parent ? parent.squareSize : 0
- //This is how it is placed on the gameboard, do not modify/animate the X/Y/Z of a TowerBase please
- x: col * width
- y: row * height
- z: 1000
-
- function fire() { }
- function spawn() { } //After all game properties are set
- function die() { stdDeath.start(); destroy(1000); }
- function sell() { destroy(); }
-
- SequentialAnimation on opacity {
- id: stdDeath
- running: false
- loops: 2
- NumberAnimation { from: 1; to: 0; }
- NumberAnimation { from: 0; to: 1; }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/particles/customemitter.qml b/basicsuite/qt5-launchpresentation/particles/customemitter.qml
deleted file mode 100644
index 270935d..0000000
--- a/basicsuite/qt5-launchpresentation/particles/customemitter.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-ParticleSystem {
- id: sys
- width: 320
- height: 480
- running: true
-
- property real petalLength: 180
- property real petalRotation: 0
- NumberAnimation on petalRotation {
- from: 0;
- to: 360;
- loops: -1;
- running: true
- duration: 24000
- }
-
- function convert(a) {return a*(Math.PI/180);}
- Emitter {
- lifeSpan: 4000
- emitRate: 120
- size: 12
- anchors.centerIn: parent
- //! [0]
- onEmitParticles: {
- for (var i=0; i<particles.length; i++) {
- var particle = particles[i];
- particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24));
- var theta = Math.floor(Math.random() * 6.0);
- particle.red = theta == 0 || theta == 1 || theta == 2 ? 0.2 : 1;
- particle.green = theta == 2 || theta == 3 || theta == 4 ? 0.2 : 1;
- particle.blue = theta == 4 || theta == 5 || theta == 0 ? 0.2 : 1;
- theta /= 6.0;
- theta *= 2.0*Math.PI;
- theta += sys.convert(sys.petalRotation);//Convert from degrees to radians
- particle.initialVX = petalLength * Math.cos(theta);
- particle.initialVY = petalLength * Math.sin(theta);
- particle.initialAX = particle.initialVX * -0.5;
- particle.initialAY = particle.initialVY * -0.5;
- }
- }
- //! [0]
- }
-
- ImageParticle {
- source: "particle4.png"
- alpha: 0.0
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/particles/particle.png b/basicsuite/qt5-launchpresentation/particles/particle.png
deleted file mode 100644
index 5c83896..0000000
--- a/basicsuite/qt5-launchpresentation/particles/particle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/particles/particle4.png b/basicsuite/qt5-launchpresentation/particles/particle4.png
deleted file mode 100644
index bc95b70..0000000
--- a/basicsuite/qt5-launchpresentation/particles/particle4.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/particles/star.png b/basicsuite/qt5-launchpresentation/particles/star.png
deleted file mode 100644
index 0d592cf..0000000
--- a/basicsuite/qt5-launchpresentation/particles/star.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/particles/starfish_mask.png b/basicsuite/qt5-launchpresentation/particles/starfish_mask.png
deleted file mode 100644
index 2ef74f9..0000000
--- a/basicsuite/qt5-launchpresentation/particles/starfish_mask.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/particles/velocityfrommotion.qml b/basicsuite/qt5-launchpresentation/particles/velocityfrommotion.qml
deleted file mode 100644
index 2824e1d..0000000
--- a/basicsuite/qt5-launchpresentation/particles/velocityfrommotion.qml
+++ /dev/null
@@ -1,306 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
-
- id: root
-
- height: 480
- width: 320
- visible: true
-
- MouseArea {
- id: mouseArea
- anchors.fill: root
- }
-
- ParticleSystem { id: sys1 }
- ImageParticle {
- system: sys1
- source: "particle.png"
- color: "cyan"
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "cyan"
- to: "magenta"
- duration: 1000
- }
- ColorAnimation {
- from: "magenta"
- to: "blue"
- duration: 2000
- }
- ColorAnimation {
- from: "blue"
- to: "violet"
- duration: 2000
- }
- ColorAnimation {
- from: "violet"
- to: "cyan"
- duration: 2000
- }
- }
- colorVariation: 0.3
- }
- //! [0]
- Emitter {
- id: trailsNormal
- system: sys1
-
- emitRate: 500
- lifeSpan: 2000
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
-
- velocity: PointDirection {xVariation: 4; yVariation: 4;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
- velocityFromMovement: 8
-
- size: 8
- sizeVariation: 4
- }
- //! [0]
- ParticleSystem { id: sys2 }
- ImageParticle {
- color: "cyan"
- system: sys2
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "magenta"
- to: "cyan"
- duration: 1000
- }
- ColorAnimation {
- from: "cyan"
- to: "magenta"
- duration: 2000
- }
- }
- colorVariation: 0.5
- source: "star.png"
- }
- Emitter {
- id: trailsStars
- system: sys2
-
- emitRate: 100
- lifeSpan: 2200
-
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
-
- velocity: PointDirection {xVariation: 4; yVariation: 4;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
- velocityFromMovement: 8
-
- size: 22
- sizeVariation: 4
- }
- ParticleSystem { id: sys3; }
- ImageParticle {
- source: "particle.png"
- system: sys3
- color: "orange"
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "red"
- to: "green"
- duration: 2000
- }
- ColorAnimation {
- from: "green"
- to: "red"
- duration: 2000
- }
- }
-
- colorVariation: 0.2
-
- }
- Emitter {
- id: trailsNormal2
- system: sys3
-
- emitRate: 300
- lifeSpan: 2000
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
-
- velocityFromMovement: 16
-
- velocity: PointDirection {xVariation: 4; yVariation: 4;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
-
- size: 12
- sizeVariation: 4
- }
- ParticleSystem { id: sys4; }
- ImageParticle {
- system: sys4
- source: "star.png"
- color: "green"
- alpha: 0
- SequentialAnimation on color {
- loops: Animation.Infinite
- ColorAnimation {
- from: "green"
- to: "red"
- duration: 2000
- }
- ColorAnimation {
- from: "red"
- to: "green"
- duration: 2000
- }
- }
-
- colorVariation: 0.5
- }
- Emitter {
- id: trailsStars2
- system: sys4
-
- emitRate: 50
- lifeSpan: 2200
-
-
- y: mouseArea.pressed ? mouseArea.mouseY : circle2.cy
- x: mouseArea.pressed ? mouseArea.mouseX : circle2.cx
-
- velocityFromMovement: 16
- velocity: PointDirection {xVariation: 2; yVariation: 2;}
- acceleration: PointDirection {xVariation: 10; yVariation: 10;}
-
- size: 22
- sizeVariation: 4
- }
-
-
-
- Item {
- id: circle
- //anchors.fill: parent
- property real radius: 0
- property real dx: root.width / 2
- property real dy: root.height / 2
- property real cx: radius * Math.sin(percent*6.283185307179) + dx
- property real cy: radius * Math.cos(percent*6.283185307179) + dy
- property real percent: 0
-
- SequentialAnimation on percent {
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- duration: 1000
- from: 1
- to: 0
- loops: 8
- }
- NumberAnimation {
- duration: 1000
- from: 0
- to: 1
- loops: 8
- }
-
- }
-
- SequentialAnimation on radius {
- loops: Animation.Infinite
- running: true
- NumberAnimation {
- duration: 4000
- from: 0
- to: 100
- }
- NumberAnimation {
- duration: 4000
- from: 100
- to: 0
- }
- }
- }
-
- Item {
- id: circle3
- property real radius: 100
- property real dx: root.width / 2
- property real dy: root.height / 2
- property real cx: radius * Math.sin(percent*6.283185307179) + dx
- property real cy: radius * Math.cos(percent*6.283185307179) + dy
- property real percent: 0
-
- SequentialAnimation on percent {
- loops: Animation.Infinite
- running: true
- NumberAnimation { from: 0.0; to: 1 ; duration: 10000; }
- }
- }
-
- Item {
- id: circle2
- property real radius: 30
- property real dx: circle3.cx
- property real dy: circle3.cy
- property real cx: radius * Math.sin(percent*6.283185307179) + dx
- property real cy: radius * Math.cos(percent*6.283185307179) + dy
- property real percent: 0
-
- SequentialAnimation on percent {
- loops: Animation.Infinite
- running: true
- NumberAnimation { from: 0.0; to: 1 ; duration: 1000; }
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/presentation/Clock.qml b/basicsuite/qt5-launchpresentation/presentation/Clock.qml
deleted file mode 100644
index d4c97ce..0000000
--- a/basicsuite/qt5-launchpresentation/presentation/Clock.qml
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QML Presentation System.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Digia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-
-import QtQuick 2.0
-
-Text {
- id: clock
-
- property real fontSize: parent.height * 0.05
- property real fontScale: 0.5
- property color textColor: parent.textColor != undefined ? parent.textColor : "black"
- property string fontFamily: parent.fontFamily != undefined ? parent.fontFamily : "Helvetica"
-
- text: currentTime();
-
- function currentTime() {
- var d = new Date();
- var m = d.getMinutes();
- if (m < 10) m = "0" + m;
- return d.getHours() + ":" + m;
- }
-
- color: textColor;
- font.family: fontFamily;
- font.pixelSize: fontSize * fontScale;
-
- anchors.bottom: parent.bottom;
- anchors.left: parent.left;
- anchors.margins: font.pixelSize;
-
- Timer {
- interval: 60000;
- repeat: true;
- running: true
- onTriggered: clock.text = clock.currentTime();
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml b/basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml
deleted file mode 100644
index ba8626b..0000000
--- a/basicsuite/qt5-launchpresentation/presentation/CodeSlide.qml
+++ /dev/null
@@ -1,162 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QML Presentation System.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Digia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-
-Slide {
- id: slide;
-
- property string codeFontFamily: parent.codeFontFamily;
- property string code;
- property real codeFontSize: baseFontSize * 0.6;
-
-
-
- Rectangle {
- id: background
- anchors.fill: parent
- radius: height / 10;
- gradient: Gradient {
- GradientStop { position: 0; color: Qt.rgba(0.8, 0.8, 0.8, 0.5); }
- GradientStop { position: 1; color: Qt.rgba(0.2, 0.2, 0.2, 0.5); }
- }
- border.color: slide.textColor;
- border.width: height / 250;
- antialiasing: true
- }
-
- onCodeChanged: {
- listModel.clear();
- var codeLines = slide.code.split("\n");
- for (var i=0; i<codeLines.length; ++i) {
- listModel.append({
- line: i,
- code: codeLines[i]
- });
- }
- }
-
-
-
- ListModel {
- id: listModel
- }
-
-
- onVisibleChanged: {
- listView.focus = slide.visible;
- listView.currentIndex = -1;
- }
-
- ListView {
- id: listView;
-
- anchors.fill: parent;
- anchors.margins: background.radius / 2
- clip: true
-
- model: listModel;
- focus: true;
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- listView.focus = true;
- listView.currentIndex = listView.indexAt(mouse.x, mouse.y + listView.contentY);
- }
-
- }
-
- delegate: Item {
-
- id: itemDelegate
-
- height: lineLabel.height
- width: parent.width
-
- Rectangle {
- id: lineLabelBackground
- width: lineLabel.height * 3;
- height: lineLabel.height;
- color: slide.textColor;
- opacity: 0.1;
- }
-
- Text {
- id: lineLabel
- anchors.right: lineLabelBackground.right;
- text: (line+1) + ":"
- color: slide.textColor;
- font.family: slide.codeFontFamily
- font.pixelSize: slide.codeFontSize
- font.bold: itemDelegate.ListView.isCurrentItem;
- opacity: itemDelegate.ListView.isCurrentItem ? 1 : 0.9;
-
- }
-
- Rectangle {
- id: lineContentBackground
- anchors.fill: lineContent;
- anchors.leftMargin: -height / 2;
- color: slide.textColor
- opacity: 0.2
- visible: itemDelegate.ListView.isCurrentItem;
- }
-
- Text {
- id: lineContent
- anchors.left: lineLabelBackground.right
- anchors.leftMargin: lineContent.height;
- anchors.right: parent.right;
- color: slide.textColor;
- text: code;
- font.family: slide.codeFontFamily
- font.pixelSize: slide.codeFontSize
- font.bold: itemDelegate.ListView.isCurrentItem;
- opacity: itemDelegate.ListView.isCurrentItem ? 1 : 0.9;
- }
- }
- }
-
-
-
-}
diff --git a/basicsuite/qt5-launchpresentation/presentation/Presentation.qml b/basicsuite/qt5-launchpresentation/presentation/Presentation.qml
deleted file mode 100644
index fc9ea4c..0000000
--- a/basicsuite/qt5-launchpresentation/presentation/Presentation.qml
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QML Presentation System.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Digia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-import QtQuick.Window 2.0
-
-Item {
- id: root
-
- property variant slides: []
- property int currentSlide;
-
- property bool showNotes: false;
-
- property color titleColor: textColor;
- property color textColor: "black"
- property string fontFamily: "Helvetica"
- property string codeFontFamily: "Courier New"
-
- // Private API
- property bool _faded: false
- property int _userNum;
-
- Component.onCompleted: {
- var slideCount = 0;
- var slides = [];
- for (var i=0; i<root.children.length; ++i) {
- var r = root.children[i];
- if (r.isSlide) {
- slides.push(r);
- }
- }
-
- root.slides = slides;
- root._userNum = 0;
-
- // Make first slide visible...
- if (root.slides.length > 0) {
- root.currentSlide = 0;
- root.slides[root.currentSlide].visible = true;
- }
- }
-
- function switchSlides(from, to, forward) {
- from.visible = false
- to.visible = true
- return true
- }
-
- function goToNextSlide() {
- root._userNum = 0
- if (_faded)
- return
- if (root.currentSlide + 1 < root.slides.length) {
- var from = slides[currentSlide]
- var to = slides[currentSlide + 1]
- if (switchSlides(from, to, true)) {
- currentSlide = currentSlide + 1;
- root.focus = true;
- }
- }
- }
-
- function goToPreviousSlide() {
- root._userNum = 0
- if (root._faded)
- return
- if (root.currentSlide - 1 >= 0) {
- var from = slides[currentSlide]
- var to = slides[currentSlide - 1]
- if (switchSlides(from, to, false)) {
- currentSlide = currentSlide - 1;
- root.focus = true;
- }
- }
- }
-
- function goToUserSlide() {
- --_userNum;
- if (root._faded || _userNum >= root.slides.length)
- return
- if (_userNum < 0)
- goToNextSlide()
- else if (root.currentSlide != _userNum) {
- var from = slides[currentSlide]
- var to = slides[_userNum]
- if (switchSlides(from, to, _userNum > currentSlide)) {
- currentSlide = _userNum;
- root.focus = true;
- }
- }
- }
-
- focus: true
-
- Keys.onSpacePressed: goToNextSlide()
- Keys.onRightPressed: goToNextSlide()
- Keys.onDownPressed: goToNextSlide()
- Keys.onLeftPressed: goToPreviousSlide()
- Keys.onUpPressed: goToPreviousSlide()
- Keys.onEscapePressed: Qt.quit()
- Keys.onPressed: {
- if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9)
- _userNum = 10 * _userNum + (event.key - Qt.Key_0)
- else {
- if (event.key == Qt.Key_Return || event.key == Qt.Key_Enter)
- goToUserSlide();
- else if (event.key == Qt.Key_Backspace)
- goToPreviousSlide();
- else if (event.key == Qt.Key_C)
- root._faded = !root._faded;
- _userNum = 0;
- }
- }
-
- Rectangle {
- z: 1000
- color: "black"
- anchors.fill: parent
- opacity: root._faded ? 1 : 0
- Behavior on opacity { NumberAnimation { duration: 250 } }
- }
-
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- acceptedButtons: Qt.LeftButton | Qt.RightButton
- onClicked: {
- if (mouse.button == Qt.RightButton)
- goToPreviousSlide()
- else
- goToNextSlide()
- }
- onPressAndHold: goToPreviousSlide(); //A back mechanism for touch only devices
- }
-
- Window {
- id: notesWindow;
- width: 400
- height: 300
-
- title: "QML Presentation: Notes"
- visible: root.showNotes
-
- Text {
- anchors.fill: parent
- anchors.margins: parent.height * 0.1;
-
- font.pixelSize: 16
- wrapMode: Text.WordWrap
-
- property string notes: root.slides[root.currentSlide].notes;
- text: notes == "" ? "Slide has no notes..." : notes;
- font.italic: notes == "";
- }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/presentation/Slide.qml b/basicsuite/qt5-launchpresentation/presentation/Slide.qml
deleted file mode 100644
index 339298d..0000000
--- a/basicsuite/qt5-launchpresentation/presentation/Slide.qml
+++ /dev/null
@@ -1,186 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QML Presentation System.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Digia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-
-Item {
- /*
- Slides can only be instantiated as a direct child of a Presentation {} as they rely on
- several properties there.
- */
-
- id: slide
-
- property bool isSlide: true;
-
- property string title;
- property variant content: []
- property string centeredText
- property string writeInText;
- property string notes;
-
- property real fontSize: parent.height * 0.05
- property real fontScale: 1
-
- property real baseFontSize: fontSize * fontScale
- property real titleFontSize: fontSize * 1.2 * fontScale
- property real bulletSpacing: 1
-
- property real contentWidth: width
-
- // Define the slide to be the "content area"
- x: parent.width * 0.05
- y: parent.height * 0.2
- width: parent.width * 0.9
- height: parent.height * 0.7
-
- property real masterWidth: parent.width
- property real masterHeight: parent.height
-
- property color titleColor: parent.titleColor;
- property color textColor: parent.textColor;
- property string fontFamily: parent.fontFamily;
-
- visible: false
-
- Text {
- id: titleText
- font.pixelSize: titleFontSize
- text: title;
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.top
- anchors.bottomMargin: parent.fontSize * 1.5
- font.bold: true;
- font.family: slide.fontFamily
- color: slide.titleColor
- horizontalAlignment: Text.Center
- z: 1
- }
-
- Text {
- id: centeredId
- width: parent.width
- anchors.centerIn: parent
- anchors.verticalCenterOffset: - parent.y / 3
- text: centeredText
- horizontalAlignment: Text.Center
- font.pixelSize: baseFontSize
- font.family: slide.fontFamily
- color: slide.textColor
- wrapMode: Text.Wrap
- }
-
- Text {
- id: writeInTextId
- property int length;
- font.family: slide.fontFamily
- font.pixelSize: baseFontSize
- color: slide.textColor
-
- anchors.fill: parent;
- wrapMode: Text.Wrap
-
- text: slide.writeInText.substring(0, length);
-
- NumberAnimation on length {
- from: 0;
- to: slide.writeInText.length;
- duration: slide.writeInText.length * 30;
- running: slide.visible && parent.visible && slide.writeInText.length > 0
- }
-
- visible: slide.writeInText != undefined;
- }
-
-
- Column {
- id: contentId
- anchors.fill: parent
-
- Repeater {
- model: content.length
-
- Row {
- id: row
-
- function decideIndentLevel(s) { return s.charAt(0) == " " ? 1 + decideIndentLevel(s.substring(1)) : 0 }
- property int indentLevel: decideIndentLevel(content[index])
- property int nextIndentLevel: index < content.length - 1 ? decideIndentLevel(content[index+1]) : 0
- property real indentFactor: (10 - row.indentLevel * 2) / 10;
-
- height: text.height + (nextIndentLevel == 0 ? 1 : 0.3) * slide.baseFontSize * slide.bulletSpacing
- x: slide.baseFontSize * indentLevel
-
- Rectangle {
- id: dot
- y: baseFontSize * row.indentFactor / 2
- width: baseFontSize / 4
- height: baseFontSize / 4
- color: slide.textColor
- radius: width / 2
- smooth: true
- opacity: text.text.length == 0 ? 0 : 1
- }
-
- Rectangle {
- id: space
- width: dot.width * 2
- height: 1
- color: "#00ffffff"
- }
-
- Text {
- id: text
- width: slide.contentWidth - parent.x - dot.width - space.width
- font.pixelSize: baseFontSize * row.indentFactor
- text: content[index]
- textFormat: Text.PlainText
- wrapMode: Text.WordWrap
- color: slide.textColor
- horizontalAlignment: Text.AlignLeft
- font.family: slide.fontFamily
- }
- }
- }
- }
-
-}
diff --git a/basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml b/basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml
deleted file mode 100644
index 06e7542..0000000
--- a/basicsuite/qt5-launchpresentation/presentation/SlideCounter.qml
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QML Presentation System.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Digia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-
-Text {
- id: counter;
-
- property real fontSize: parent.height * 0.05
- property real fontScale: 0.5;
- property color textColor: parent.textColor != undefined ? parent.textColor : "black"
- property string fontFamily: parent.fontFamily != undefined ? parent.fontFamily : "Helvetica"
-
- text: "# " + (parent.currentSlide + 1) + " / " + parent.slides.length;
- color: counter.textColor;
- font.family: counter.fontFamily;
- font.pixelSize: fontSize * fontScale;
-
- anchors.right: parent.right;
- anchors.bottom: parent.bottom;
- anchors.margins: font.pixelSize;
-}
diff --git a/basicsuite/qt5-launchpresentation/preview_l.jpg b/basicsuite/qt5-launchpresentation/preview_l.jpg
deleted file mode 100644
index 8decd76..0000000
--- a/basicsuite/qt5-launchpresentation/preview_l.jpg
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/qt5-launchpresentation.pro b/basicsuite/qt5-launchpresentation/qt5-launchpresentation.pro
deleted file mode 100644
index c3aba46..0000000
--- a/basicsuite/qt5-launchpresentation/qt5-launchpresentation.pro
+++ /dev/null
@@ -1,18 +0,0 @@
-TARGET = qt5-launchpresentation
-
-include(../shared/shared.pri)
-b2qtdemo_deploy_defaults()
-
-content.files = \
- *.qml \
- calqlatr \
- maroon \
- particles \
- presentation \
- samegame \
- images
-content.path = $$DESTPATH
-
-OTHER_FILES += $${content.files}
-
-INSTALLS += target content \ No newline at end of file
diff --git a/basicsuite/qt5-launchpresentation/samegame/.DS_Store b/basicsuite/qt5-launchpresentation/samegame/.DS_Store
deleted file mode 100644
index 9805454..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/Samegame.qml b/basicsuite/qt5-launchpresentation/samegame/Samegame.qml
deleted file mode 100644
index 2b0b82a..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/Samegame.qml
+++ /dev/null
@@ -1,371 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "content/samegame.js" as Logic
-import "settings.js" as Settings
-import "content"
-
-Rectangle {
- id: root
- width: 320; height: 480
- property int acc: 0
-
-
- function loadPuzzle() {
- if (gameCanvas.mode != "")
- Logic.cleanUp();
- Logic.startNewGame(gameCanvas,"puzzle","levels/level"+acc+".qml")
- }
- function nextPuzzle() {
- acc = (acc + 1) % 10;
- loadPuzzle();
- }
- Timer {
- id: gameOverTimer
- interval: 1500
- running : gameCanvas.gameOver && gameCanvas.mode == "puzzle" //mode will be reset by cleanUp();
- repeat : false
- onTriggered: {
- Logic.cleanUp();
- nextPuzzle();
- }
- }
-
- Image {
- source: "content/gfx/background.png"
- anchors.fill: parent
- }
-
- GameArea {
- id: gameCanvas
- z: 1
- y: Settings.headerHeight
-
- width: parent.width
- height: parent.height - Settings.headerHeight - Settings.footerHeight
-
- backgroundVisible: root.state == "in-game"
- onModeChanged: if (gameCanvas.mode != "puzzle") puzzleWon = false; //UI has stricter constraints on this variable than the game does
- Age {
- groups: ["redspots", "greenspots", "bluespots", "yellowspots"]
- enabled: root.state == ""
- system: gameCanvas.ps
- }
-
- onPuzzleLost: acc--;//So that nextPuzzle() reloads the current one
-
- }
-
- Item {
- id: menu
- z: 2
- width: parent.width;
- anchors.top: parent.top
- anchors.bottom: bottomBar.top
-
- LogoAnimation {
- x: 64
- y: Settings.headerHeight
- particleSystem: gameCanvas.ps
- running: root.state == ""
- }
- Row {
- x: 112
- y: 20
- Image { source: "content/gfx/logo-a.png" }
- Image { source: "content/gfx/logo-m.png" }
- Image { source: "content/gfx/logo-e.png" }
- }
-
- Column {
- y: 100 + 40
- spacing: Settings.menuButtonSpacing
-
- Button {
- width: root.width
- rotatedButton: true
- imgSrc: "content/gfx/but-game-1.png"
- onClicked: {
- if (root.state == "in-game")
- return //Prevent double clicking
- root.state = "in-game"
- gameCanvas.blockFile = "Block.qml"
- gameCanvas.background = "gfx/background.png"
- arcadeTimer.start();
- }
- //Emitted particles don't fade out, because ImageParticle is on the GameArea
- system: gameCanvas.ps
- group: "green"
- Timer {
- id: arcadeTimer
- interval: Settings.menuDelay
- running : false
- repeat : false
- onTriggered: Logic.startNewGame(gameCanvas)
- }
- }
-
- Button {
- width: root.width
- rotatedButton: true
- imgSrc: "content/gfx/but-game-2.png"
- onClicked: {
- if (root.state == "in-game")
- return
- root.state = "in-game"
- gameCanvas.blockFile = "Block.qml"
- gameCanvas.background = "gfx/background.png"
- twopTimer.start();
- }
- system: gameCanvas.ps
- group: "green"
- Timer {
- id: twopTimer
- interval: Settings.menuDelay
- running : false
- repeat : false
- onTriggered: Logic.startNewGame(gameCanvas, "multiplayer")
- }
- }
-
- Button {
- width: root.width
- rotatedButton: true
- imgSrc: "content/gfx/but-game-3.png"
- onClicked: {
- if (root.state == "in-game")
- return
- root.state = "in-game"
- gameCanvas.blockFile = "SimpleBlock.qml"
- gameCanvas.background = "gfx/background.png"
- endlessTimer.start();
- }
- system: gameCanvas.ps
- group: "blue"
- Timer {
- id: endlessTimer
- interval: Settings.menuDelay
- running : false
- repeat : false
- onTriggered: Logic.startNewGame(gameCanvas, "endless")
- }
- }
-
- Button {
- width: root.width
- rotatedButton: true
- imgSrc: "content/gfx/but-game-4.png"
- group: "yellow"
- onClicked: {
- if (root.state == "in-game")
- return
- root.state = "in-game"
- gameCanvas.blockFile = "PuzzleBlock.qml"
- gameCanvas.background = "gfx/background.png"
- puzzleTimer.start();
- }
- Timer {
- id: puzzleTimer
- interval: Settings.menuDelay
- running : false
- repeat : false
- onTriggered: loadPuzzle();
- }
- system: gameCanvas.ps
- }
- }
- }
-
- Image {
- id: scoreBar
- source: "content/gfx/bar.png"
- width: parent.width
- z: 6
- y: -Settings.headerHeight
- height: Settings.headerHeight
- Behavior on opacity { NumberAnimation {} }
- SamegameText {
- id: arcadeScore
- anchors { right: parent.right; topMargin: 3; rightMargin: 11; top: parent.top}
- text: '<font color="#f7d303">P1:</font> ' + gameCanvas.score
- font.pixelSize: Settings.fontPixelSize
- textFormat: Text.StyledText
- color: "white"
- opacity: gameCanvas.mode == "arcade" ? 1 : 0
- Behavior on opacity { NumberAnimation {} }
- }
- SamegameText {
- id: arcadeHighScore
- anchors { left: parent.left; topMargin: 3; leftMargin: 11; top: parent.top}
- text: '<font color="#f7d303">Highscore:</font> ' + gameCanvas.highScore
- opacity: gameCanvas.mode == "arcade" ? 1 : 0
- }
- SamegameText {
- id: p1Score
- anchors { right: parent.right; topMargin: 3; rightMargin: 11; top: parent.top}
- text: '<font color="#f7d303">P1:</font> ' + gameCanvas.score
- opacity: gameCanvas.mode == "multiplayer" ? 1 : 0
- }
- SamegameText {
- id: p2Score
- anchors { left: parent.left; topMargin: 3; leftMargin: 11; top: parent.top}
- text: '<font color="#f7d303">P2:</font> ' + gameCanvas.score2
- opacity: gameCanvas.mode == "multiplayer" ? 1 : 0
- rotation: 180
- }
- SamegameText {
- id: puzzleMoves
- anchors { left: parent.left; topMargin: 3; leftMargin: 11; top: parent.top}
- text: '<font color="#f7d303">Moves:</font> ' + gameCanvas.moves
- opacity: gameCanvas.mode == "puzzle" ? 1 : 0
- }
- SamegameText {
- Image {
- source: "content/gfx/icon-time.png"
- x: -20
- }
- id: puzzleTime
- anchors { topMargin: 3; top: parent.top; horizontalCenter: parent.horizontalCenter; horizontalCenterOffset: 20}
- text: "00:00"
- opacity: gameCanvas.mode == "puzzle" ? 1 : 0
- Timer {
- interval: 1000
- repeat: true
- running: gameCanvas.mode == "puzzle" && !gameCanvas.gameOver
- onTriggered: {
- var elapsed = Math.floor((new Date() - Logic.gameDuration)/ 1000.0);
- var mins = Math.floor(elapsed/60.0);
- var secs = (elapsed % 60);
- puzzleTime.text = (mins < 10 ? "0" : "") + mins + ":" + (secs < 10 ? "0" : "") + secs;
- }
- }
- }
- SamegameText {
- id: puzzleScore
- anchors { right: parent.right; topMargin: 3; rightMargin: 11; top: parent.top}
- text: '<font color="#f7d303">Score:</font> ' + gameCanvas.score
- opacity: gameCanvas.mode == "puzzle" ? 1 : 0
- }
- }
-
- Image {
- id: bottomBar
- width: parent.width
- height: Settings.footerHeight
- source: "content/gfx/bar.png"
- y: parent.height - Settings.footerHeight;
- z: 2
- Button {
- id: quitButton
- height: Settings.toolButtonHeight
- imgSrc: "content/gfx/but-quit.png"
- onClicked: {Qt.quit(); }
- anchors { left: parent.left; verticalCenter: parent.verticalCenter; leftMargin: 11 }
- }
- Button {
- id: menuButton
- height: Settings.toolButtonHeight
- imgSrc: "content/gfx/but-menu.png"
- visible: (root.state == "in-game");
- onClicked: {root.state = ""; Logic.cleanUp(); gameCanvas.mode = ""}
- anchors { left: quitButton.right; verticalCenter: parent.verticalCenter; leftMargin: 0 }
- }
- Button {
- id: againButton
- height: Settings.toolButtonHeight
- imgSrc: "content/gfx/but-game-new.png"
- visible: (root.state == "in-game");
- opacity: gameCanvas.gameOver && (gameCanvas.mode == "arcade" || gameCanvas.mode == "multiplayer")
- Behavior on opacity{ NumberAnimation {} }
- onClicked: {if (gameCanvas.gameOver) { Logic.startNewGame(gameCanvas, gameCanvas.mode);}}
- anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 11 }
- }
- Button {
- id: nextButton
- height: Settings.toolButtonHeight
- imgSrc: "content/gfx/but-puzzle-next.png"
- visible: (root.state == "in-game") && gameCanvas.mode == "puzzle" && gameCanvas.puzzleWon
- opacity: gameCanvas.puzzleWon ? 1 : 0
- Behavior on opacity{ NumberAnimation {} }
- onClicked: {if (gameCanvas.puzzleWon) nextPuzzle();}
- anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 11 }
- }
- }
-
- Connections {
- target: root
- onStateChanged: stateChangeAnim.running = true
- }
- SequentialAnimation {
- id: stateChangeAnim
- ParallelAnimation {
- NumberAnimation { target: bottomBar; property: "y"; to: root.height; duration: Settings.menuDelay/2; easing.type: Easing.OutQuad }
- NumberAnimation { target: scoreBar; property: "y"; to: -Settings.headerHeight; duration: Settings.menuDelay/2; easing.type: Easing.OutQuad }
- }
- ParallelAnimation {
- NumberAnimation { target: bottomBar; property: "y"; to: root.height - Settings.footerHeight; duration: Settings.menuDelay/2; easing.type: Easing.OutBounce}
- NumberAnimation { target: scoreBar; property: "y"; to: root.state == "" ? -Settings.headerHeight : 0; duration: Settings.menuDelay/2; easing.type: Easing.OutBounce}
- }
- }
-
- states: [
- State {
- name: "in-game"
- PropertyChanges {
- target: menu
- opacity: 0
- visible: false
- }
- }
- ]
-
- transitions: [
- Transition {
- NumberAnimation {properties: "x,y,opacity"}
- }
- ]
-
- //"Debug mode"
- focus: true
- Keys.onAsteriskPressed: Logic.nuke();
- Keys.onSpacePressed: gameCanvas.puzzleWon = true;
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/Block.qml b/basicsuite/qt5-launchpresentation/samegame/content/Block.qml
deleted file mode 100644
index 85f2e27..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/Block.qml
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: block
- property bool dying: false
- property bool spawned: false
- property int type: 0
- property ParticleSystem particleSystem
-
- Behavior on x {
- enabled: spawned;
- SpringAnimation{ spring: 2; damping: 0.2 }
- }
- Behavior on y {
- SpringAnimation{ spring: 2; damping: 0.2 }
- }
-
- Image {
- id: img
- source: {
- if (type == 0){
- "gfx/red.png";
- } else if (type == 1) {
- "gfx/blue.png";
- } else if (type == 2) {
- "gfx/green.png";
- } else {
- "gfx/yellow.png";
- }
- }
- opacity: 0
- Behavior on opacity { NumberAnimation { duration: 200 } }
- anchors.fill: parent
- }
-
- //Foreground particles
- BlockEmitter {
- id: particles
- system: particleSystem
- group: {
- if (type == 0){
- "red";
- } else if (type == 1) {
- "blue";
- } else if (type == 2) {
- "green";
- } else {
- "yellow";
- }
- }
- anchors.fill: parent
- }
-
- //Paint particles on the background
- PaintEmitter {
- id: particles2
- system: particleSystem
- }
-
- states: [
- State {
- name: "AliveState"; when: spawned == true && dying == false
- PropertyChanges { target: img; opacity: 1 }
- },
-
- State {
- name: "DeathState"; when: dying == true
- StateChangeScript { script: {particleSystem.paused = false; particles.pulse(100); particles2.pulse(100);} }
- PropertyChanges { target: img; opacity: 0 }
- StateChangeScript { script: block.destroy(1000); }
- }
- ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/BlockEmitter.qml b/basicsuite/qt5-launchpresentation/samegame/content/BlockEmitter.qml
deleted file mode 100644
index 7dad509..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/BlockEmitter.qml
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-import "../settings.js" as Settings
-
-Emitter {
- property Item block: parent
- velocity: TargetDirection{targetX: block.width/2; targetY: block.height/2; magnitude: -40; magnitudeVariation: 40}
- acceleration: TargetDirection{targetX: block.width/2; targetY: block.height/2; magnitude: -100;}
- shape: EllipseShape{fill:true}
- enabled: false;
- lifeSpan: 700; lifeSpanVariation: 100
- emitRate: 1000
- maximumEmitted: 100 //only fires 0.1s bursts (still 2x old number)
- size: Settings.blockSize * 0.85
- endSize: Settings.blockSize * 0.85 /2
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/Button.qml b/basicsuite/qt5-launchpresentation/samegame/content/Button.qml
deleted file mode 100644
index aab21ec..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/Button.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- property alias imgSrc: image.source
- property alias system: emitter.system
- property alias group: emitter.group
- signal clicked
- property bool rotatedButton: false
-
- width: image.width
- height: image.sourceSize.height
- Image {
- id: image
- height: parent.height
- width: height/sourceSize.height * sourceSize.width
-
- anchors.horizontalCenter: parent.horizontalCenter
- rotation: rotatedButton ? ((Math.random() * 3 + 2) * (Math.random() <= 0.5 ? -1 : 1)) : 0
- MenuEmitter {
- id: emitter
- anchors.fill: parent
- //shape: MaskShape {source: image.source}
- }
- }
- MouseArea {
- anchors.fill: parent
- onClicked: {parent.clicked(); emitter.burst(400);}
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/GameArea.qml b/basicsuite/qt5-launchpresentation/samegame/content/GameArea.qml
deleted file mode 100644
index f3ca98d..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/GameArea.qml
+++ /dev/null
@@ -1,226 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "samegame.js" as Logic
-
-Item {
- id: gameCanvas
- property bool gameOver: true
- property int score: 0
- property int highScore: 0
- property int moves: 0
- property string mode: ""
- property ParticleSystem ps: particleSystem
- //For easy theming
- property alias backgroundVisible: bg.visible
- property string background: "gfx/background.png"
- property string blockFile: "Block.qml"
- onBlockFileChanged: Logic.changeBlock(blockFile);
- property alias particlePack: auxLoader.source
- //For multiplayer
- property int score2: 0
- property int curTurn: 1
- property bool autoTurnChange: false
- signal swapPlayers
- property bool swapping: false
- //onSwapPlayers: if (autoTurnChange) Logic.turnChange();//Now implemented below
- //For puzzle
- property url level
- property bool puzzleWon: false
- signal puzzleLost //Since root is tracking the puzzle progress
- function showPuzzleEnd (won) {
- if (won) {
- smokeParticle.color = Qt.rgba(0,1,0,0);
- puzzleWin.play();
- } else {
- smokeParticle.color = Qt.rgba(1,0,0,0);
- puzzleFail.play();
- puzzleLost();
- }
- }
- function showPuzzleGoal (str) {
- puzzleTextBubble.opacity = 1;
- puzzleTextLabel.text = str;
- }
- Image {
- id: bg
- z: -1
- anchors.fill: parent
- source: background;
- fillMode: Image.PreserveAspectCrop
- }
-
- MouseArea {
- anchors.fill: parent; onClicked: {
- if (puzzleTextBubble.opacity == 1) {
- puzzleTextBubble.opacity = 0;
- Logic.finishLoadingMap();
- } else if (!swapping) {
- Logic.handleClick(mouse.x,mouse.y);
- }
- }
- }
-
- Image {
- id: highScoreTextBubble
- opacity: mode == "arcade" && gameOver && gameCanvas.score == gameCanvas.highScore ? 1 : 0
- Behavior on opacity { NumberAnimation {} }
- anchors.centerIn: parent
- z: 10
- source: "gfx/bubble-highscore.png"
- Image {
- anchors.centerIn: parent
- source: "gfx/text-highscore-new.png"
- rotation: -10
- }
- }
-
- Image {
- id: puzzleTextBubble
- anchors.centerIn: parent
- opacity: 0
- Behavior on opacity { NumberAnimation {} }
- z: 10
- source: "gfx/bubble-puzzle.png"
- Connections {
- target: gameCanvas
- onModeChanged: if (mode != "puzzle" && puzzleTextBubble.opacity > 0) puzzleTextBubble.opacity = 0;
- }
- Text {
- id: puzzleTextLabel
- width: parent.width - 24
- anchors.centerIn: parent
- horizontalAlignment: Text.AlignHCenter
- color: "white"
- font.pixelSize: 24
- font.bold: true
- wrapMode: Text.WordWrap
- }
- }
- onModeChanged: {
- p1WonImg.opacity = 0;
- p2WonImg.opacity = 0;
- }
- SmokeText { id: puzzleWin; source: "gfx/icon-ok.png"; system: particleSystem }
- SmokeText { id: puzzleFail; source: "gfx/icon-fail.png"; system: particleSystem }
-
- onSwapPlayers: {
- smokeParticle.color = "yellow"
- Logic.turnChange();
- if (curTurn == 1) {
- p1Text.play();
- } else {
- p2Text.play();
- }
- clickDelay.running = true;
- }
- SequentialAnimation {
- id: clickDelay
- ScriptAction { script: gameCanvas.swapping = true; }
- PauseAnimation { duration: 750 }
- ScriptAction { script: gameCanvas.swapping = false; }
- }
-
- SmokeText {
- id: p1Text; source: "gfx/text-p1-go.png";
- system: particleSystem; playerNum: 1
- opacity: p1WonImg.opacity + p2WonImg.opacity > 0 ? 0 : 1
- }
-
- SmokeText {
- id: p2Text; source: "gfx/text-p2-go.png";
- system: particleSystem; playerNum: 2
- opacity: p1WonImg.opacity + p2WonImg.opacity > 0 ? 0 : 1
- }
-
- onGameOverChanged: {
- if (gameCanvas.mode == "multiplayer") {
- if (gameCanvas.score >= gameCanvas.score2) {
- p1WonImg.opacity = 1;
- } else {
- p2WonImg.opacity = 1;
- }
- }
- }
- Image {
- id: p1WonImg
- source: "gfx/text-p1-won.png"
- anchors.centerIn: parent
- opacity: 0
- Behavior on opacity { NumberAnimation {} }
- z: 10
- }
- Image {
- id: p2WonImg
- source: "gfx/text-p2-won.png"
- anchors.centerIn: parent
- opacity: 0
- Behavior on opacity { NumberAnimation {} }
- z: 10
- }
-
- ParticleSystem{
- id: particleSystem;
- anchors.fill: parent
- z: 5
- ImageParticle {
- id: smokeParticle
- groups: ["smoke"]
- source: "gfx/particle-smoke.png"
- alpha: 0.1
- alphaVariation: 0.1
- color: "yellow"
- }
- Loader {
- id: auxLoader
- anchors.fill: parent
- source: "PrimaryPack.qml"
- onItemChanged: {
- if (item && "particleSystem" in item)
- item.particleSystem = particleSystem
- if (item && "gameArea" in item)
- item.gameArea = gameCanvas
- }
- }
- }
-}
-
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/LogoAnimation.qml b/basicsuite/qt5-launchpresentation/samegame/content/LogoAnimation.qml
deleted file mode 100644
index c879893..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/LogoAnimation.qml
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: container //Positioned where the 48x48 S/G should be
- property alias running: mainAnim.running
- property ParticleSystem particleSystem
- property int dur: 500
- signal boomTime
- Image {
- id: s1
- source: "gfx/logo-s.png"
- y: 0
- }
- Image {
- id: g1
- source: "gfx/logo-g.png"
- y: -128
- }
- Column {
- Repeater {
- model: 2
- Item {
- width: 48
- height: 48
- BlockEmitter {
- id: emitter
- anchors.fill: parent
- group: "red"
- system: particleSystem
- Connections {
- target: container
- onBoomTime: emitter.pulse(100);
- }
- }
- }
- }
- }
- SequentialAnimation {
- id: mainAnim
- running: true
- loops: -1
- PropertyAction { target: g1; property: "y"; value: -128}
- PropertyAction { target: g1; property: "opacity"; value: 1}
- PropertyAction { target: s1; property: "y"; value: 0}
- PropertyAction { target: s1; property: "opacity"; value: 1}
- NumberAnimation { target: g1; property: "y"; from: -96; to: -48; duration: dur}
- ParallelAnimation {
- NumberAnimation { target: g1; property: "y"; from: -48; to: 0; duration: dur}
- NumberAnimation { target: s1; property: "y"; from: 0; to: 48; duration: dur }
- }
- PauseAnimation { duration: dur }
- ScriptAction { script: container.boomTime(); }
- ParallelAnimation {
- NumberAnimation { target: g1; property: "opacity"; to: 0; duration: dur }
- NumberAnimation { target: s1; property: "opacity"; to: 0; duration: dur }
- }
- PropertyAction { target: s1; property: "y"; value: -128}
- PropertyAction { target: s1; property: "opacity"; value: 1}
- NumberAnimation { target: s1; property: "y"; from: -96; to: 0; duration: dur * 2}
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/MenuEmitter.qml b/basicsuite/qt5-launchpresentation/samegame/content/MenuEmitter.qml
deleted file mode 100644
index 16c7660..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/MenuEmitter.qml
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Emitter {
- anchors.fill: parent
- velocity: AngleDirection{angleVariation: 360; magnitude: 140; magnitudeVariation: 40}
- enabled: false;
- lifeSpan: 500;
- emitRate: 1
- size: 28
- endSize: 14
- group: "yellow"
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/PaintEmitter.qml b/basicsuite/qt5-launchpresentation/samegame/content/PaintEmitter.qml
deleted file mode 100644
index 4a67c4a..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/PaintEmitter.qml
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-import "../settings.js" as Settings
-
-Emitter {
- property Item block: parent
- anchors.fill: parent
- shape: EllipseShape { fill: true }
- group: {
- if (block.type == 0){
- "redspots";
- } else if (block.type == 1) {
- "bluespots";
- } else if (block.type == 2) {
- "greenspots";
- } else {
- "yellowspots";
- }
- }
- size: Settings.blockSize * 2
- endSize: Settings.blockSize/2
- lifeSpan: 30000
- enabled: false
- emitRate: 60
- maximumEmitted: 60
- velocity: PointDirection{ y: 4; yVariation: 4 }
- /* Possibly better, but dependent on gerrit change,28212
- property real mainIntensity: 0.8
- property real subIntensity: 0.1
- property real colorVariation: 0.005
- onEmitParticles: {//One group, many colors, for better stacking
- for (var i=0; i<particles.length; i++) {
- var particle = particles[i];
- if (block.type == 0) {
- particle.red = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.green = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.blue = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- } else if (block.type == 1) {
- particle.red = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.green = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.blue = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- } else if (block.type == 2) {
- particle.red = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.green = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.blue = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- } else if (block.type == 3) {
- particle.red = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.green = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.blue = subIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- } else {
- particle.red = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.green = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- particle.blue = mainIntensity + (Math.random() * colorVariation * 2 - colorVariation);
- }
- }
- }
- */
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/PrimaryPack.qml b/basicsuite/qt5-launchpresentation/samegame/content/PrimaryPack.qml
deleted file mode 100644
index 278ed0e..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/PrimaryPack.qml
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: container
- property ParticleSystem particleSystem
- property GameArea gameArea
- onGameAreaChanged: bgstacker.parent = gameArea;//Move to direct child of game canvas
- Item {
- id: bgstacker
- z: 0
- ImageParticle {
- groups: ["yellowspots"]
- color: Qt.darker("yellow");//Actually want desaturated...
- system: particleSystem
- source: "gfx/particle-paint.png"
- colorVariation: 0.2
- alpha: 0.2
- entryEffect: ImageParticle.None
- }
- ImageParticle {
- groups: ["redspots"]
- system: particleSystem
- color: Qt.darker("red");//Actually want desaturated...
- source: "gfx/particle-paint.png"
- colorVariation: 0.2
- alpha: 0.2
- entryEffect: ImageParticle.None
- }
- ImageParticle {
- groups: ["greenspots"]
- system: particleSystem
- color: Qt.darker("green");//Actually want desaturated...
- source: "gfx/particle-paint.png"
- colorVariation: 0.2
- alpha: 0.2
- entryEffect: ImageParticle.None
- }
- ImageParticle {
- groups: ["bluespots"]
- system: particleSystem
- color: Qt.darker("blue");//Actually want desaturated...
- source: "gfx/particle-paint.png"
- colorVariation: 0.2
- alpha: 0.2
- entryEffect: ImageParticle.None
- }
- }
- ImageParticle {
- groups: ["yellow"]
- system: particleSystem
- color: Qt.darker("yellow");//Actually want desaturated...
- source: "gfx/particle-brick.png"
- colorVariation: 0.4
- alpha: 0.1
- }
- ImageParticle {
- groups: ["red"]
- system: particleSystem
- color: Qt.darker("red");//Actually want desaturated...
- source: "gfx/particle-brick.png"
- colorVariation: 0.4
- alpha: 0.1
- }
- ImageParticle {
- groups: ["green"]
- system: particleSystem
- color: Qt.darker("green");//Actually want desaturated...
- source: "gfx/particle-brick.png"
- colorVariation: 0.4
- alpha: 0.1
- }
- ImageParticle {
- groups: ["blue"]
- system: particleSystem
- color: Qt.darker("blue");//Actually want desaturated...
- source: "gfx/particle-brick.png"
- colorVariation: 0.4
- alpha: 0.1
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/PuzzleBlock.qml b/basicsuite/qt5-launchpresentation/samegame/content/PuzzleBlock.qml
deleted file mode 100644
index 8a0e725..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/PuzzleBlock.qml
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: block
- property bool dying: false
- property bool spawned: false
- property int type: 0
- property ParticleSystem particleSystem
-
- Behavior on x {
- enabled: spawned;
- NumberAnimation{ easing.type: Easing.OutBounce }
- }
- Behavior on y {
- NumberAnimation{ easing.type: Easing.InQuad }
- }
-
- Image {
- id: img
- source: {
- if (type == 0){
- "gfx/red-puzzle.png";
- } else if (type == 1) {
- "gfx/blue-puzzle.png";
- } else if (type == 2) {
- "gfx/green-puzzle.png";
- } else {
- "gfx/yellow-puzzle.png";
- }
- }
- opacity: 0
- Behavior on opacity { NumberAnimation { duration: 200 } }
- anchors.centerIn: parent
- anchors.verticalCenterOffset: -4
- anchors.horizontalCenterOffset: 4
- }
-
- //Foreground particles
- BlockEmitter {
- id: particles
- system: particleSystem
- group: {
- if (type == 0){
- "red";
- } else if (type == 1) {
- "blue";
- } else if (type == 2) {
- "green";
- } else {
- "yellow";
- }
- }
- anchors.fill: parent
- }
-
- states: [
- State {
- name: "AliveState"; when: spawned == true && dying == false
- PropertyChanges { target: img; opacity: 1 }
- },
-
- State {
- name: "DeathState"; when: dying == true
- PropertyChanges { target: img; scale: 2 }
- StateChangeScript { script: particles.pulse(200); }
- PropertyChanges { target: img; opacity: 0 }
- StateChangeScript { script: block.destroy(1000); }
- }
- ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/SamegameText.qml b/basicsuite/qt5-launchpresentation/samegame/content/SamegameText.qml
deleted file mode 100644
index 28c85f9..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/SamegameText.qml
+++ /dev/null
@@ -1,49 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2012 Research In Motion
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import "../settings.js" as Settings
-
-Text {
- font.pixelSize: Settings.fontPixelSize;
- color: "white";
- textFormat: Text.StyledText;
- Behavior on opacity { NumberAnimation {} }
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/SimpleBlock.qml b/basicsuite/qt5-launchpresentation/samegame/content/SimpleBlock.qml
deleted file mode 100644
index 22a1fa3..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/SimpleBlock.qml
+++ /dev/null
@@ -1,108 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- id: block
- property bool dying: false
- property bool spawned: false
- property int type: 0
- property ParticleSystem particleSystem
-
- Behavior on x {
- enabled: spawned;
- SpringAnimation{ spring: 2; damping: 0.2 }
- }
- Behavior on y {
- SpringAnimation{ spring: 2; damping: 0.2 }
- }
-
- Image {
- id: img
- source: {
- if (type == 0){
- "gfx/red.png";
- } else if (type == 1) {
- "gfx/blue.png";
- } else if (type == 2) {
- "gfx/green.png";
- } else {
- "gfx/yellow.png";
- }
- }
- opacity: 0
- Behavior on opacity { NumberAnimation { duration: 200 } }
- anchors.fill: parent
- }
-
- //Foreground particles
- BlockEmitter {
- id: particles
- system: particleSystem
- group: {
- if (type == 0){
- "red";
- } else if (type == 1) {
- "blue";
- } else if (type == 2) {
- "green";
- } else {
- "yellow";
- }
- }
- anchors.fill: parent
- }
-
- states: [
- State {
- name: "AliveState"; when: spawned == true && dying == false
- PropertyChanges { target: img; opacity: 1 }
- },
-
- State {
- name: "DeathState"; when: dying == true
- StateChangeScript { script: {particleSystem.paused = false; particles.pulse(100); } }
- PropertyChanges { target: img; opacity: 0 }
- StateChangeScript { script: block.destroy(1000); }
- }
- ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/SmokeText.qml b/basicsuite/qt5-launchpresentation/samegame/content/SmokeText.qml
deleted file mode 100644
index 73d9ae4..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/SmokeText.qml
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-import QtQuick.Particles 2.0
-
-Item {
- z: 10
- property alias source: img.source
- property alias system: emitter.system
- property int playerNum: 1
- function play() {
- anim.running = true;
- }
- anchors.centerIn: parent
- Image {
- opacity: 0
- id: img
- anchors.centerIn: parent
- rotation: playerNum == 1 ? -8 : -5
- Emitter {
- id: emitter
- group: "smoke"
- anchors.fill: parent
- shape: MaskShape { source: img.source }
- enabled: false
- emitRate: 1000
- lifeSpan: 600
- size: 64
- endSize: 32
- velocity: AngleDirection { angleVariation: 360; magnitudeVariation: 160 }
- }
- }
- SequentialAnimation {
- id: anim
- running: false
- PauseAnimation { duration: 500}
- ParallelAnimation {
- NumberAnimation { target: img; property: "opacity"; from: 0.1; to: 1.0 }
- NumberAnimation { target: img; property: "scale"; from: 0.1; to: 1.0 }
- }
- PauseAnimation { duration: 250}
- ScriptAction { script: emitter.pulse(100); }
- NumberAnimation { target: img; property: "opacity"; from: 1.0; to: 0.0 }
- }
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/background-puzzle.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/background-puzzle.png
deleted file mode 100644
index c2eca5f..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/background-puzzle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/background.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/background.png
deleted file mode 100644
index 60f57b6..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/background.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/bar.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/bar.png
deleted file mode 100644
index 4953cd6..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/bar.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/blue-puzzle.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/blue-puzzle.png
deleted file mode 100644
index e550d59..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/blue-puzzle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/blue.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/blue.png
deleted file mode 100644
index b8161c0..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/blue.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-highscore.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-highscore.png
deleted file mode 100644
index c4e38df..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-highscore.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-puzzle.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-puzzle.png
deleted file mode 100644
index 278556b..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/bubble-puzzle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-1.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-1.png
deleted file mode 100644
index 3343b7f..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-1.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-2.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-2.png
deleted file mode 100644
index afba106..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-2.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-3.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-3.png
deleted file mode 100644
index adea77a..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-3.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-4.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-4.png
deleted file mode 100644
index 18c922b..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-4.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-new.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-new.png
deleted file mode 100644
index 257e182..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-game-new.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-menu.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-menu.png
deleted file mode 100644
index 8440e87..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-menu.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-puzzle-next.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-puzzle-next.png
deleted file mode 100644
index 7e3ed41..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-puzzle-next.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-quit.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-quit.png
deleted file mode 100644
index 95c77ce..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/but-quit.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/green-puzzle.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/green-puzzle.png
deleted file mode 100644
index 581f76f..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/green-puzzle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/green.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/green.png
deleted file mode 100644
index da4cca5..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/green.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-fail.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-fail.png
deleted file mode 100644
index 4072611..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-fail.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-ok.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-ok.png
deleted file mode 100644
index 15a8442..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-ok.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-time.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-time.png
deleted file mode 100644
index 9490e49..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/icon-time.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-a.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-a.png
deleted file mode 100644
index 20c20ba..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-a.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-e.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-e.png
deleted file mode 100644
index dd663f1..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-e.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-g.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-g.png
deleted file mode 100644
index a319bf9..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-g.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-m.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-m.png
deleted file mode 100644
index 6a029b3..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-m.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-s.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-s.png
deleted file mode 100644
index 963b175..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo-s.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo.png
deleted file mode 100644
index e900edd..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/logo.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-brick.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-brick.png
deleted file mode 100644
index 5c83896..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-brick.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-paint.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-paint.png
deleted file mode 100644
index 9bd0a2a..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-paint.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-smoke.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-smoke.png
deleted file mode 100644
index b27f954..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/particle-smoke.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/red-puzzle.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/red-puzzle.png
deleted file mode 100644
index 9ceb17e..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/red-puzzle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/red.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/red.png
deleted file mode 100644
index 681810f..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/red.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore-new.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore-new.png
deleted file mode 100644
index 50f7fcd..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore-new.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore.png
deleted file mode 100644
index 7198c27..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-highscore.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-no-winner.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-no-winner.png
deleted file mode 100644
index b4a6685..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-no-winner.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-go.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-go.png
deleted file mode 100644
index c7bd2a5..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-go.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-won.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-won.png
deleted file mode 100644
index 41c2eb7..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1-won.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1.png
deleted file mode 100644
index b59c87b..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p1.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-go.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-go.png
deleted file mode 100644
index f03cd93..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-go.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-won.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-won.png
deleted file mode 100644
index 116b7f2..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2-won.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2.png
deleted file mode 100644
index d4f2bc7..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/text-p2.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow-puzzle.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow-puzzle.png
deleted file mode 100644
index 66044c8..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow-puzzle.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow.png b/basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow.png
deleted file mode 100644
index 6bc5d38..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/gfx/yellow.png
+++ /dev/null
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/TemplateBase.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/TemplateBase.qml
deleted file mode 100644
index f0832d4..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/TemplateBase.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle{
- id: control
- property int scoreTarget: -1
- property int timeTarget: -1
- property int moveTarget: -1
- property bool mustClear: true
- property string goalText: "Clear the level..."
-
- property var startingGrid //If this isn't an array of ints, we will refuse to load the level.
- /* Ints are 0-4. If not enough ints are there it will be prepadded with 0s to fill the grid
- (which ruins everything if you have the wrong number of rows).
- 0 - No block
- 1 - Red
- 2 - Blue
- 3 - Green
- 4 - Yellow
- Ideas for future colors, but not supported in this version:
- 5 - Purple
- 6 - Cyan
- 7 - Gray
- 8 - Black
- 9 - White
- */
-
- width: 320
- height: 416
- color: "white" //TODO: Theme support for both setting themes per level, and seeing it in the control!
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level0.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level0.qml
deleted file mode 100644
index 5d2fa4f..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level0.qml
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- moveTarget: 3
- goalText: "1 of 10<br><br>Clear in three moves..."
- startingGrid: [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 ,
- 0 , 0 , 0 , 0 , 0 , 1 , 1 , 2 , 1 , 1 ,
- 0 , 0 , 0 , 1 , 1 , 3 , 3 , 3 , 3 , 3 ,
- 0 , 1 , 1 , 3 , 3 , 3 , 1 , 3 , 1 , 1 ,
- 1 , 2 , 3 , 3 , 1 , 1 , 3 , 3 , 3 , 3 ,
- 1 , 3 , 3 , 2 , 3 , 3 , 3 , 3 , 1 , 1 ,
- 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level1.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level1.qml
deleted file mode 100644
index 4bb15cb..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level1.qml
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- timeTarget: 10
- goalText: "2 of 10<br><br>Clear in 10 seconds..."
- startingGrid: [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 1 , 3 , 3 , 3 , 1 , 1 , 1 , 1 , 2 , 2 ,
- 1 , 2 , 3 , 3 , 3 , 1 , 1 , 1 , 1 , 2 ,
- 2 , 2 , 1 , 3 , 3 , 3 , 1 , 1 , 1 , 2 ,
- 2 , 1 , 1 , 1 , 3 , 3 , 3 , 1 , 2 , 2 ,
- 1 , 1 , 1 , 1 , 1 , 3 , 3 , 3 , 2 , 1 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level2.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level2.qml
deleted file mode 100644
index a319479..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level2.qml
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- scoreTarget: 1200
- timeTarget: 60
- goalText: "3 of 10<br><br>Score over 1200 points in one minute..."
- mustClear: false
- startingGrid: [ 3 , 1 , 2 , 1 , 1 , 2 , 1 , 1 , 3 , 3 ,
- 1 , 3 , 3 , 2 , 3 , 3 , 1 , 1 , 3 , 1 ,
- 3 , 1 , 3 , 3 , 2 , 3 , 3 , 3 , 1 , 2 ,
- 3 , 2 , 2 , 1 , 3 , 3 , 2 , 1 , 1 , 2 ,
- 3 , 1 , 2 , 2 , 2 , 2 , 2 , 1 , 3 , 1 ,
- 2 , 3 , 1 , 2 , 2 , 3 , 3 , 1 , 3 , 2 ,
- 3 , 2 , 1 , 1 , 3 , 3 , 3 , 2 , 2 , 1 ,
- 1 , 2 , 2 , 3 , 2 , 3 , 3 , 3 , 1 , 1 ,
- 1 , 3 , 3 , 3 , 1 , 2 , 2 , 3 , 3 , 1 ,
- 3 , 3 , 2 , 1 , 2 , 2 , 1 , 1 , 1 , 3 ,
- 2 , 1 , 3 , 2 , 3 , 2 , 3 , 2 , 2 , 1 ,
- 1 , 3 , 1 , 2 , 1 , 2 , 3 , 1 , 2 , 2 ,
- 1 , 2 , 2 , 2 , 1 , 1 , 2 , 3 , 1 , 2 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level3.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level3.qml
deleted file mode 100644
index 43e82d7..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level3.qml
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- scoreTarget: 3000
- timeTarget: 60
- goalText: "4 of 10<br>Clear the board with over 3000 points in under a minute..."
- startingGrid: [ 3 , 3 , 1 , 1 , 1 , 2 , 2 , 4 , 3 , 3 ,
- 4 , 3 , 1 , 4 , 2 , 2 , 2 , 4 , 3 , 4 ,
- 4 , 3 , 3 , 4 , 1 , 1 , 3 , 3 , 4 , 4 ,
- 3 , 3 , 3 , 3 , 3 , 1 , 3 , 2 , 2 , 4 ,
- 4 , 4 , 3 , 4 , 3 , 1 , 4 , 4 , 4 , 4 ,
- 4 , 4 , 3 , 4 , 1 , 1 , 4 , 4 , 3 , 3 ,
- 4 , 2 , 2 , 2 , 2 , 2 , 4 , 4 , 4 , 1 ,
- 4 , 4 , 2 , 4 , 2 , 2 , 1 , 1 , 1 , 1 ,
- 4 , 4 , 2 , 4 , 2 , 2 , 1 , 4 , 4 , 1 ,
- 4 , 1 , 1 , 4 , 3 , 3 , 4 , 2 , 4 , 1 ,
- 4 , 1 , 1 , 2 , 3 , 3 , 4 , 2 , 2 , 1 ,
- 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 2 , 1 ,
- 4 , 1 , 1 , 2 , 2 , 3 , 4 , 3 , 4 , 4 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level4.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level4.qml
deleted file mode 100644
index 46ad42f..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level4.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- goalText: "5 of 10<br><br>Clear the level..."
- startingGrid: [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
- 1 , 3 , 2 , 1 , 1 , 1 , 1 , 3 , 2 , 3 ,
- 1 , 2 , 3 , 1 , 3 , 2 , 2 , 1 , 1 , 2 ,
- 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 3 , 3 ,
- 2 , 1 , 1 , 3 , 2 , 1 , 1 , 2 , 1 , 3 ,
- 1 , 3 , 3 , 1 , 2 , 1 , 2 , 1 , 3 , 3 ,
- 1 , 3 , 2 , 2 , 2 , 1 , 1 , 3 , 2 , 3 ,
- 1 , 1 , 3 , 2 , 3 , 3 , 2 , 1 , 1 , 1 ,
- 1 , 2 , 2 , 3 , 2 , 2 , 1 , 3 , 1 , 3 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level5.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level5.qml
deleted file mode 100644
index 3716264..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level5.qml
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- moveTarget: 4
- goalText: "6 of 10<br><br>Clear in four or less moves..."
- startingGrid: [ 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
- 4 , 2 , 2 , 2 , 4 , 3 , 3 , 3 , 4 , 4 ,
- 4 , 2 , 4 , 4 , 4 , 3 , 2 , 3 , 4 , 4 ,
- 4 , 2 , 2 , 2 , 4 , 3 , 3 , 3 , 4 , 4 ,
- 4 , 4 , 4 , 2 , 4 , 3 , 4 , 3 , 4 , 4 ,
- 4 , 2 , 2 , 2 , 4 , 3 , 4 , 3 , 4 , 4 ,
- 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ,
- 4 , 3 , 4 , 3 , 4 , 2 , 2 , 2 , 4 , 3 ,
- 4 , 3 , 3 , 3 , 4 , 2 , 4 , 4 , 4 , 3 ,
- 4 , 3 , 3 , 3 , 4 , 2 , 2 , 2 , 4 , 3 ,
- 4 , 3 , 4 , 3 , 4 , 2 , 4 , 4 , 4 , 4 ,
- 4 , 3 , 4 , 3 , 4 , 2 , 2 , 2 , 4 , 3 ,
- 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level6.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level6.qml
deleted file mode 100644
index 4547b75..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level6.qml
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- moveTarget: 20
- timeTarget: 40
- goalText: "7 of 10<br><br>Clear with 20 moves in 40 seconds (or better)."
- startingGrid: [ 1 , 3 , 1 , 1 , 1 , 1 , 2 , 1 , 2 , 2 ,
- 2 , 1 , 2 , 3 , 3 , 1 , 3 , 1 , 1 , 3 ,
- 3 , 1 , 1 , 1 , 2 , 2 , 3 , 2 , 3 , 1 ,
- 1 , 3 , 1 , 1 , 3 , 1 , 1 , 1 , 2 , 3 ,
- 2 , 1 , 1 , 1 , 3 , 2 , 3 , 3 , 2 , 3 ,
- 3 , 3 , 3 , 3 , 2 , 2 , 3 , 1 , 3 , 2 ,
- 2 , 2 , 3 , 2 , 2 , 3 , 2 , 2 , 2 , 2 ,
- 1 , 2 , 1 , 2 , 1 , 3 , 2 , 3 , 2 , 3 ,
- 1 , 1 , 2 , 3 , 3 , 3 , 3 , 1 , 1 , 2 ,
- 3 , 3 , 2 , 2 , 2 , 2 , 3 , 1 , 3 , 1 ,
- 1 , 2 , 3 , 3 , 3 , 1 , 3 , 2 , 1 , 2 ,
- 1 , 2 , 1 , 1 , 2 , 3 , 1 , 2 , 1 , 3 ,
- 3 , 1 , 2 , 2 , 1 , 3 , 3 , 1 , 3 , 2 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level7.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level7.qml
deleted file mode 100644
index 5d71d7c..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level7.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- goalText: "8 of 10<br><br>Clear the grid."
- startingGrid: [ 2 , 4 , 3 , 2 , 3 , 2 , 3 , 3 , 4 , 3 ,
- 2 , 2 , 3 , 3 , 1 , 4 , 3 , 3 , 3 , 2 ,
- 1 , 4 , 2 , 3 , 4 , 3 , 3 , 1 , 1 , 1 ,
- 2 , 1 , 2 , 4 , 4 , 2 , 2 , 3 , 2 , 1 ,
- 3 , 4 , 4 , 1 , 3 , 2 , 4 , 2 , 1 , 1 ,
- 2 , 2 , 3 , 1 , 2 , 4 , 1 , 2 , 1 , 2 ,
- 1 , 2 , 3 , 2 , 4 , 4 , 3 , 1 , 1 , 2 ,
- 4 , 4 , 2 , 1 , 2 , 4 , 2 , 2 , 4 , 3 ,
- 4 , 2 , 4 , 1 , 3 , 4 , 1 , 4 , 2 , 4 ,
- 4 , 3 , 4 , 1 , 4 , 3 , 1 , 3 , 1 , 1 ,
- 3 , 3 , 2 , 3 , 2 , 4 , 1 , 2 , 4 , 4 ,
- 3 , 4 , 2 , 2 , 4 , 3 , 4 , 1 , 3 , 2 ,
- 4 , 3 , 3 , 4 , 2 , 4 , 1 , 2 , 3 , 2 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level8.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level8.qml
deleted file mode 100644
index 9dbb8c2..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level8.qml
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- scoreTarget: 1000
- goalText: "9 of 10<br><br>Score over 1000 points"
- startingGrid: [ 1 , 4 , 4 , 3 , 2 , 1 , 4 , 2 , 4 , 2 ,
- 2 , 3 , 4 , 4 , 1 , 1 , 1 , 4 , 4 , 4 ,
- 1 , 3 , 1 , 2 , 2 , 1 , 2 , 1 , 4 , 2 ,
- 4 , 3 , 4 , 2 , 1 , 4 , 1 , 2 , 2 , 3 ,
- 3 , 4 , 2 , 4 , 4 , 3 , 2 , 2 , 2 , 1 ,
- 4 , 4 , 3 , 2 , 4 , 4 , 2 , 1 , 1 , 1 ,
- 1 , 2 , 1 , 3 , 4 , 1 , 1 , 3 , 2 , 3 ,
- 3 , 4 , 2 , 2 , 1 , 3 , 2 , 2 , 4 , 2 ,
- 2 , 4 , 1 , 2 , 2 , 4 , 3 , 3 , 3 , 1 ,
- 1 , 2 , 2 , 4 , 1 , 2 , 2 , 3 , 3 , 3 ,
- 4 , 4 , 1 , 4 , 3 , 1 , 3 , 3 , 3 , 4 ,
- 1 , 2 , 4 , 1 , 2 , 1 , 1 , 4 , 2 , 1 ,
- 1 , 2 , 3 , 4 , 2 , 4 , 4 , 2 , 1 , 3 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/levels/level9.qml b/basicsuite/qt5-launchpresentation/samegame/content/levels/level9.qml
deleted file mode 100644
index 4e8bf19..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/levels/level9.qml
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-import QtQuick 2.0
-
-TemplateBase{
- scoreTarget: 2000
- timeTarget: 60
- moveTarget: 20
- mustClear: false
- goalText: "10 of 10<br><br>Score 2000 in one minute with less than 20 moves!"
- startingGrid: [ 3 , 2 , 3 , 1 , 3 , 3 , 4 , 1 , 3 , 3 ,
- 2 , 3 , 2 , 1 , 1 , 2 , 2 , 2 , 4 , 1 ,
- 2 , 4 , 4 , 4 , 3 , 1 , 4 , 4 , 4 , 1 ,
- 3 , 1 , 3 , 4 , 4 , 2 , 2 , 2 , 2 , 3 ,
- 2 , 1 , 4 , 4 , 3 , 3 , 1 , 1 , 3 , 2 ,
- 3 , 2 , 1 , 4 , 3 , 4 , 1 , 3 , 4 , 2 ,
- 3 , 3 , 1 , 4 , 4 , 4 , 2 , 1 , 2 , 3 ,
- 2 , 3 , 4 , 3 , 4 , 1 , 1 , 3 , 2 , 4 ,
- 4 , 4 , 1 , 2 , 4 , 3 , 2 , 2 , 2 , 4 ,
- 1 , 4 , 2 , 2 , 1 , 1 , 2 , 1 , 1 , 4 ,
- 1 , 4 , 3 , 3 , 3 , 1 , 3 , 4 , 4 , 2 ,
- 3 , 4 , 1 , 1 , 2 , 2 , 2 , 3 , 2 , 1 ,
- 3 , 3 , 4 , 3 , 1 , 1 , 1 , 4 , 4 , 3 ]
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/content/samegame.js b/basicsuite/qt5-launchpresentation/samegame/content/samegame.js
deleted file mode 100755
index 7b226cb..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/content/samegame.js
+++ /dev/null
@@ -1,581 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/* This script file handles the game logic */
-.pragma library
-.import QtQuick.LocalStorage 2.0 as Sql
-.import "../settings.js" as Settings
-
-var maxColumn = 10;
-var maxRow = 13;
-var types = 3;
-var maxIndex = maxColumn*maxRow;
-var board = new Array(maxIndex);
-var blockSrc = "Block.qml";
-var gameDuration;
-var component = Qt.createComponent(blockSrc);
-var gameCanvas;
-var betweenTurns = false;
-
-var puzzleLevel = null;
-var puzzlePath = "";
-
-var gameMode = "arcade"; //Set in new game, then tweaks behaviour of other functions
-var gameOver = false;
-
-function changeBlock(src)
-{
- blockSrc = src;
- component = Qt.createComponent(blockSrc);
-}
-
-// Index function used instead of a 2D array
-function index(column, row)
-{
- return column + row * maxColumn;
-}
-
-function timeStr(msecs)
-{
- var secs = Math.floor(msecs/1000);
- var m = Math.floor(secs/60);
- var ret = "" + m + "m " + (secs%60) + "s";
- return ret;
-}
-
-function cleanUp()
-{
- if (gameCanvas == undefined)
- return;
- // Delete blocks from previous game
- for (var i = 0; i < maxIndex; i++) {
- if (board[i] != null)
- board[i].destroy();
- board[i] = null;
- }
- if (puzzleLevel != null){
- puzzleLevel.destroy();
- puzzleLevel = null;
- }
- gameCanvas.mode = ""
-}
-
-function startNewGame(gc, mode, map)
-{
- gameCanvas = gc;
- if (mode == undefined)
- gameMode = "arcade";
- else
- gameMode = mode;
- gameOver = false;
-
- cleanUp();
-
- gc.gameOver = false;
- gc.mode = gameMode;
- // Calculate board size
- maxColumn = Math.floor(gameCanvas.width/Settings.blockSize);
- maxRow = Math.floor(gameCanvas.height/Settings.blockSize);
- maxIndex = maxRow * maxColumn;
- if (gameMode == "arcade") //Needs to be after board sizing
- getHighScore();
-
-
- // Initialize Board
- board = new Array(maxIndex);
- gameCanvas.score = 0;
- gameCanvas.score2 = 0;
- gameCanvas.moves = 0;
- gameCanvas.curTurn = 1;
- if (gameMode == "puzzle")
- loadMap(map);
- else//Note that we load them in reverse order for correct visual stacking
- for (var column = maxColumn - 1; column >= 0; column--)
- for (var row = maxRow - 1; row >= 0; row--)
- createBlock(column, row);
- if (gameMode == "puzzle")
- getLevelHistory();//Needs to be after map load
- gameDuration = new Date();
-}
-
-var fillFound; // Set after a floodFill call to the number of blocks found
-var floodBoard; // Set to 1 if the floodFill reaches off that node
-
-// NOTE: Be careful with vars named x,y, as the calling object's x,y are still in scope
-function handleClick(x,y)
-{
- if (betweenTurns || gameOver || gameCanvas == undefined)
- return;
- var column = Math.floor(x/Settings.blockSize);
- var row = Math.floor(y/Settings.blockSize);
- if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
- return;
- if (board[index(column, row)] == null)
- return;
- // If it's a valid block, remove it and all connected (does nothing if it's not connected)
- floodFill(column,row, -1);
- if (fillFound <= 0)
- return;
- if (gameMode == "multiplayer" && gameCanvas.curTurn == 2)
- gameCanvas.score2 += (fillFound - 1) * (fillFound - 1);
- else
- gameCanvas.score += (fillFound - 1) * (fillFound - 1);
- if (gameMode == "multiplayer" && gameCanvas.curTurn == 2)
- shuffleUp();
- else
- shuffleDown();
- gameCanvas.moves += 1;
- if (gameMode == "endless")
- refill();
- else if (gameMode != "multiplayer")
- victoryCheck();
- if (gameMode == "multiplayer" && !gc.gameOver){
- betweenTurns = true;
- gameCanvas.swapPlayers();//signal, animate and call turnChange() when ready
- }
-}
-
-function floodFill(column,row,type)
-{
- if (board[index(column, row)] == null)
- return;
- var first = false;
- if (type == -1) {
- first = true;
- type = board[index(column,row)].type;
-
- // Flood fill initialization
- fillFound = 0;
- floodBoard = new Array(maxIndex);
- }
- if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
- return;
- if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type))
- return;
- floodBoard[index(column, row)] = 1;
- floodFill(column + 1, row, type);
- floodFill(column - 1, row, type);
- floodFill(column, row + 1, type);
- floodFill(column, row - 1, type);
- if (first == true && fillFound == 0)
- return; // Can't remove single blocks
- board[index(column, row)].dying = true;
- board[index(column, row)] = null;
- fillFound += 1;
-}
-
-function shuffleDown()
-{
- // Fall down
- for (var column = 0; column < maxColumn; column++) {
- var fallDist = 0;
- for (var row = maxRow - 1; row >= 0; row--) {
- if (board[index(column,row)] == null) {
- fallDist += 1;
- } else {
- if (fallDist > 0) {
- var obj = board[index(column, row)];
- obj.y = (row + fallDist) * Settings.blockSize;
- board[index(column, row + fallDist)] = obj;
- board[index(column, row)] = null;
- }
- }
- }
- }
- // Fall to the left
- fallDist = 0;
- for (column = 0; column < maxColumn; column++) {
- if (board[index(column, maxRow - 1)] == null) {
- fallDist += 1;
- } else {
- if (fallDist > 0) {
- for (row = 0; row < maxRow; row++) {
- obj = board[index(column, row)];
- if (obj == null)
- continue;
- obj.x = (column - fallDist) * Settings.blockSize;
- board[index(column - fallDist,row)] = obj;
- board[index(column, row)] = null;
- }
- }
- }
- }
-}
-
-
-function shuffleUp()
-{
- // Fall up
- for (var column = 0; column < maxColumn; column++) {
- var fallDist = 0;
- for (var row = 0; row < maxRow; row++) {
- if (board[index(column,row)] == null) {
- fallDist += 1;
- } else {
- if (fallDist > 0) {
- var obj = board[index(column, row)];
- obj.y = (row - fallDist) * Settings.blockSize;
- board[index(column, row - fallDist)] = obj;
- board[index(column, row)] = null;
- }
- }
- }
- }
- // Fall to the left (or should it be right, so as to be left for P2?)
- fallDist = 0;
- for (column = 0; column < maxColumn; column++) {
- if (board[index(column, 0)] == null) {
- fallDist += 1;
- } else {
- if (fallDist > 0) {
- for (row = 0; row < maxRow; row++) {
- obj = board[index(column, row)];
- if (obj == null)
- continue;
- obj.x = (column - fallDist) * Settings.blockSize;
- board[index(column - fallDist,row)] = obj;
- board[index(column, row)] = null;
- }
- }
- }
- }
-}
-
-function turnChange()//called by ui outside
-{
- betweenTurns = false;
- if (gameCanvas.curTurn == 1){
- shuffleUp();
- gameCanvas.curTurn = 2;
- victoryCheck();
- }else{
- shuffleDown();
- gameCanvas.curTurn = 1;
- victoryCheck();
- }
-}
-
-function refill()
-{
- for (var column = 0; column < maxColumn; column++) {
- for (var row = 0; row < maxRow; row++) {
- if (board[index(column, row)] == null)
- createBlock(column, row);
- }
- }
-}
-
-function victoryCheck()
-{
- // Awards bonuses for no blocks left
- var deservesBonus = true;
- if (board[index(0,maxRow - 1)] != null || board[index(0,0)] != null)
- deservesBonus = false;
- // Checks for game over
- if (deservesBonus){
- if (gameCanvas.curTurn = 1)
- gameCanvas.score += 1000;
- else
- gameCanvas.score2 += 1000;
- }
- gameOver = deservesBonus;
- if (gameCanvas.curTurn == 1){
- if (!(floodMoveCheck(0, maxRow - 1, -1)))
- gameOver = true;
- }else{
- if (!(floodMoveCheck(0, 0, -1, true)))
- gameOver = true;
- }
- if (gameMode == "puzzle"){
- puzzleVictoryCheck(deservesBonus);//Takes it from here
- return;
- }
- if (gameOver) {
- var winnerScore = Math.max(gameCanvas.score, gameCanvas.score2);
- if (gameMode == "multiplayer"){
- gameCanvas.score = winnerScore;
- saveHighScore(gameCanvas.score2);
- }
- saveHighScore(gameCanvas.score);
- gameDuration = new Date() - gameDuration;
- gameCanvas.gameOver = true;
- }
-}
-
-// Only floods up and right, to see if it can find adjacent same-typed blocks
-function floodMoveCheck(column, row, type, goDownInstead)
-{
- if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
- return false;
- if (board[index(column, row)] == null)
- return false;
- var myType = board[index(column, row)].type;
- if (type == myType)
- return true;
- if (goDownInstead)
- return floodMoveCheck(column + 1, row, myType, goDownInstead) ||
- floodMoveCheck(column, row + 1, myType, goDownInstead);
- else
- return floodMoveCheck(column + 1, row, myType) ||
- floodMoveCheck(column, row - 1, myType);
-}
-
-function createBlock(column,row,type)
-{
- // Note that we don't wait for the component to become ready. This will
- // only work if the block QML is a local file. Otherwise the component will
- // not be ready immediately. There is a statusChanged signal on the
- // component you could use if you want to wait to load remote files.
- if (component.status == 1){
- if (type == undefined)
- type = Math.floor(Math.random() * types);
- if (type < 0 || type > 4) {
- console.log("Invalid type requested");//TODO: Is this triggered by custom levels much?
- return;
- }
- var dynamicObject = component.createObject(gameCanvas,
- {"type": type,
- "x": column*Settings.blockSize,
- "y": -1*Settings.blockSize,
- "width": Settings.blockSize,
- "height": Settings.blockSize,
- "particleSystem": gameCanvas.ps});
- if (dynamicObject == null){
- console.log("error creating block");
- console.log(component.errorString());
- return false;
- }
- dynamicObject.y = row*Settings.blockSize;
- dynamicObject.spawned = true;
-
- board[index(column,row)] = dynamicObject;
- }else{
- console.log("error loading block component");
- console.log(component.errorString());
- return false;
- }
- return true;
-}
-
-function showPuzzleError(str)
-{
- //TODO: Nice user visible UI?
- console.log(str);
-}
-
-function loadMap(map)
-{
- puzzlePath = map;
- var levelComp = Qt.createComponent(puzzlePath);
- if (levelComp.status != 1){
- console.log("Error loading level");
- showPuzzleError(levelComp.errorString());
- return;
- }
- puzzleLevel = levelComp.createObject();
- if (puzzleLevel == null || !puzzleLevel.startingGrid instanceof Array) {
- showPuzzleError("Bugger!");
- return;
- }
- gameCanvas.showPuzzleGoal(puzzleLevel.goalText);
- //showPuzzleGoal should call finishLoadingMap as the next thing it does, before handling more events
-}
-
-function finishLoadingMap()
-{
- for (var i in puzzleLevel.startingGrid)
- if (! (puzzleLevel.startingGrid[i] >= 0 && puzzleLevel.startingGrid[i] <= 9) )
- puzzleLevel.startingGrid[i] = 0;
- //TODO: Don't allow loading larger levels, leads to cheating
- while (puzzleLevel.startingGrid.length > maxIndex) puzzleLevel.startingGrid.shift();
- while (puzzleLevel.startingGrid.length < maxIndex) puzzleLevel.startingGrid.unshift(0);
- for (var i in puzzleLevel.startingGrid)
- if (puzzleLevel.startingGrid[i] > 0)
- createBlock(i % maxColumn, Math.floor(i / maxColumn), puzzleLevel.startingGrid[i] - 1);
-
- //### Experimental feature - allow levels to contain arbitrary QML scenes as well!
- //while (puzzleLevel.children.length)
- // puzzleLevel.children[0].parent = gameCanvas;
- gameDuration = new Date(); //Don't start until we finish loading
-}
-
-function puzzleVictoryCheck(clearedAll)//gameOver has also been set if no more moves
-{
- var won = true;
- var soFar = new Date() - gameDuration;
- if (puzzleLevel.scoreTarget != -1 && gameCanvas.score < puzzleLevel.scoreTarget){
- won = false;
- } if (puzzleLevel.scoreTarget != -1 && gameCanvas.score >= puzzleLevel.scoreTarget && !puzzleLevel.mustClear){
- gameOver = true;
- } if (puzzleLevel.timeTarget != -1 && soFar/1000.0 > puzzleLevel.timeTarget){
- gameOver = true;
- } if (puzzleLevel.moveTarget != -1 && gameCanvas.moves >= puzzleLevel.moveTarget){
- gameOver = true;
- } if (puzzleLevel.mustClear && gameOver && !clearedAll) {
- won = false;
- }
-
- if (gameOver) {
- gameCanvas.gameOver = true;
- gameCanvas.showPuzzleEnd(won);
-
- if (won) {
- // Store progress
- saveLevelHistory();
- }
- }
-}
-
-function getHighScore()
-{
- var db = Sql.LocalStorage.openDatabaseSync(
- "SameGame",
- "2.0",
- "SameGame Local Data",
- 100
- );
- db.transaction(
- function(tx) {
- tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(game TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
- // Only show results for the current grid size
- var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "'
- + maxColumn + "x" + maxRow + '" AND game = "' + gameMode + '" ORDER BY score desc');
- if (rs.rows.length > 0)
- gameCanvas.highScore = rs.rows.item(0).score;
- else
- gameCanvas.highScore = 0;
- }
- );
-}
-
-function saveHighScore(score)
-{
- // Offline storage
- var db = Sql.LocalStorage.openDatabaseSync(
- "SameGame",
- "2.0",
- "SameGame Local Data",
- 100
- );
- var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)";
- var data = [
- gameMode,
- score,
- maxColumn + "x" + maxRow,
- Math.floor(gameDuration / 1000)
- ];
- if (score >= gameCanvas.highScore)//Update UI field
- gameCanvas.highScore = score;
-
- db.transaction(
- function(tx) {
- tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(game TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
- tx.executeSql(dataStr, data);
- }
- );
-}
-
-function getLevelHistory()
-{
- var db = Sql.LocalStorage.openDatabaseSync(
- "SameGame",
- "2.0",
- "SameGame Local Data",
- 100
- );
- db.transaction(
- function(tx) {
- tx.executeSql('CREATE TABLE IF NOT EXISTS Puzzle(level TEXT, score NUMBER, moves NUMBER, time NUMBER)');
- var rs = tx.executeSql('SELECT * FROM Puzzle WHERE level = "' + puzzlePath + '" ORDER BY score desc');
- if (rs.rows.length > 0) {
- gameCanvas.puzzleWon = true;
- gameCanvas.highScore = rs.rows.item(0).score;
- } else {
- gameCanvas.puzzleWon = false;
- gameCanvas.highScore = 0;
- }
- }
- );
-}
-
-function saveLevelHistory()
-{
- var db = Sql.LocalStorage.openDatabaseSync(
- "SameGame",
- "2.0",
- "SameGame Local Data",
- 100
- );
- var dataStr = "INSERT INTO Puzzle VALUES(?, ?, ?, ?)";
- var data = [
- puzzlePath,
- gameCanvas.score,
- gameCanvas.moves,
- Math.floor(gameDuration / 1000)
- ];
- gameCanvas.puzzleWon = true;
-
- db.transaction(
- function(tx) {
- tx.executeSql('CREATE TABLE IF NOT EXISTS Puzzle(level TEXT, score NUMBER, moves NUMBER, time NUMBER)');
- tx.executeSql(dataStr, data);
- }
- );
-}
-
-function nuke() //For "Debug mode"
-{
- for (var row = 1; row <= 5; row++) {
- for (var col = 0; col < 5; col++) {
- if (board[index(col, maxRow - row)] != null) {
- board[index(col, maxRow - row)].dying = true;
- board[index(col, maxRow - row)] = null;
- }
- }
- }
- if (gameMode == "multiplayer" && gameCanvas.curTurn == 2)
- shuffleUp();
- else
- shuffleDown();
- if (gameMode == "endless")
- refill();
- else
- victoryCheck();
-}
diff --git a/basicsuite/qt5-launchpresentation/samegame/settings.js b/basicsuite/qt5-launchpresentation/samegame/settings.js
deleted file mode 100644
index e09dee9..0000000
--- a/basicsuite/qt5-launchpresentation/samegame/settings.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Research In Motion
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-.pragma library
-
-//This should be switched over once a proper QML settings API exists
-
-var menuDelay = 500
-
-var headerHeight = 20 // 70 on BB10
-var footerHeight = 44 // 100 on BB10
-
-var fontPixelSize = 14 // 55 on BB10
-
-var blockSize = 32 // 64 on BB10
-
-var toolButtonHeight = 32 // 64 on BB10
-
-var menuButtonSpacing = 0 // 15 on BB10
diff --git a/basicsuite/qt5-launchpresentation/title.txt b/basicsuite/qt5-launchpresentation/title.txt
deleted file mode 100644
index 19f15b6..0000000
--- a/basicsuite/qt5-launchpresentation/title.txt
+++ /dev/null
@@ -1 +0,0 @@
-040. Qt5 Launch Presentation
diff --git a/basicsuite/sensors/Accelbubble.qml b/basicsuite/sensors/Accelbubble.qml
index c5aeefc..fa42770 100644
--- a/basicsuite/sensors/Accelbubble.qml
+++ b/basicsuite/sensors/Accelbubble.qml
@@ -41,90 +41,97 @@
import QtQuick 2.0
import QtSensors 5.0
-Item {
- function calc() {
- if (xAnimation.running || yAnimation.running)
- return
+Rectangle {
+ id: area
+ color: "lightblue"
+ border.width: 1
+ border.color: "darkblue"
+ property real velocityX: 0
+ property real velocityY: 0
- var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * .8)
- var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * .8)
+ // Calculate effective rotation
+ function getRotation() {
+ var rot = rotation
+ var newParent = parent
- if (newX < 0)
+ while (newParent) {
+ rot += newParent.rotation
+ newParent = newParent.parent
+ }
+ return rot%360
+ }
+
+ function updatePosition() {
+ var actualRotation = getRotation();
+
+ // Transform accelerometer readings according
+ // to actual rotation of item
+ if (actualRotation == 0) {
+ velocityX -= accel.reading.x
+ velocityY += accel.reading.y
+ } else if (actualRotation == 90 || actualRotation == -270) {
+ velocityX += accel.reading.y
+ velocityY += accel.reading.x
+ } else if (actualRotation == 180 || actualRotation == -180) {
+ velocityX += accel.reading.x
+ velocityY -= accel.reading.y
+ } else if (actualRotation == 270 || actualRotation == -90) {
+ velocityX -= accel.reading.y
+ velocityY -= accel.reading.x
+ } else {
+ console.debug("The screen rotation of the device has to be a multiple of 90 degrees.")
+ }
+
+ velocityX *= 0.95
+ velocityY *= 0.95
+
+ var newX = bubble.x + velocityX
+ var newY = bubble.y + velocityY
+ var right = area.width - bubble.width
+ var bottom = area.height - bubble.height
+
+ if (newX < 0) {
newX = 0
- if (newY < 0)
+ velocityX = -velocityX * 0.9
+ }
+ if (newY < 0) {
newY = 0
+ velocityY = -velocityY * 0.9
+ }
- var right = field.width - bubble.width
- var bottom = field.height - bubble.height
-
- if (newX > right)
+ if (newX > right) {
newX = right
- if (newY > bottom)
+ velocityX = -velocityX * 0.9
+ }
+ if (newY > bottom) {
newY = bottom
+ velocityY = -velocityY * 0.9
+ }
bubble.x = newX
bubble.y = newY
-
- yBehavior.enabled = true
- xBehavior.enabled = true
}
- Rectangle {
- id: field
- color: "lightblue"
- border.width: 1
- border.color: "darkblue"
- width: parent.width
- height: parent.height
- Accelerometer {
- id: accel
- active:true
- }
-
- Timer {
- interval: 100
- running: true
- repeat: true
- onTriggered: calc()
- }
+ Accelerometer {
+ id: accel
+ active:true
+ }
- Image {
- id: bubble
- source: "bluebubble.png"
- property real centerX: parent.width / 2
- property real centerY: parent.height / 2;
- property real bubbleCenter: bubble.width / 2
- x: centerX - bubbleCenter
- y: centerY - bubbleCenter
- smooth: true
+ Component.onCompleted: timer.running = true
- Behavior on y {
- id: yBehavior
- enabled: false
- SmoothedAnimation {
- id: yAnimation
- easing.type: Easing.Linear
- duration: 40
- onRunningChanged: calc()
- }
- }
- Behavior on x {
- id: xBehavior
- enabled: false
- SmoothedAnimation {
- id: xAnimation
- easing.type: Easing.Linear
- duration: 40
- onRunningChanged: calc()
- }
- }
- }
+ Timer {
+ id: timer
+ interval: 16
+ running: false
+ repeat: true
+ onTriggered: updatePosition()
}
- function calcPitch(x,y,z) {
- return Math.atan(y / Math.sqrt(x*x + z*z)) * 57.2957795;
- }
- function calcRoll(x,y,z) {
- return Math.atan(x / Math.sqrt(y*y + z*z)) * 57.2957795;
+ Image {
+ id: bubble
+ source: "bluebubble.png"
+ smooth: true
+ x: parent.width/2 - bubble.width/2
+ y: parent.height/2 - bubble.height/2
}
}
diff --git a/basicsuite/sensors/Light.qml b/basicsuite/sensors/Light.qml
index f997efd..24f3bd9 100644
--- a/basicsuite/sensors/Light.qml
+++ b/basicsuite/sensors/Light.qml
@@ -41,50 +41,47 @@
import QtQuick 2.0
import QtSensors 5.0
-Item {
- rotation: 180
- Rectangle {
- id: bg
- width: parent.width
- height: parent.height
- Text {
- id: illuminanceLevel
- anchors.horizontalCenter: parent.horizontalCenter
- font.pointSize: 26
- anchors.top: parent.top
- }
- Image {
- id: avatar
- anchors.top: illuminanceLevel.bottom
- anchors.topMargin: 30
- anchors.centerIn: parent
- }
+Rectangle {
+ id: bg
+ Image {
+ id: avatar
+ width: parent.width * 0.9
+ height: parent.height * 0.9
+ fillMode: Image.PreserveAspectFit
+ anchors.centerIn: parent
+ }
+ Text {
+ id: illuminanceLevel
+ font.pointSize: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 60
+ }
- AmbientLightSensor {
- active: true
- onReadingChanged: {
- if (reading.lightLevel === AmbientLightReading.Dark) {
- avatar.source = "3.png"
- bg.color = "midnightblue"
- } else if (reading.lightLevel === AmbientLightReading.Twilight
- || reading.lightLevel === AmbientLightReading.Light) {
- avatar.source = "2.png"
- bg.color = "steelblue"
- } else if (reading.lightLevel === AmbientLightReading.Bright
- || reading.lightLevel === AmbientLightReading.Sunny) {
- avatar.source = "1.png"
- bg.color = "yellow"
- } else {
- avatar.text = "Unknown light level"
- }
+ AmbientLightSensor {
+ active: true
+ onReadingChanged: {
+ if (reading.lightLevel === AmbientLightReading.Dark) {
+ avatar.source = "3.png"
+ bg.color = "#1947A3"
+ } else if (reading.lightLevel === AmbientLightReading.Twilight
+ || reading.lightLevel === AmbientLightReading.Light) {
+ avatar.source = "2.png"
+ bg.color = "steelblue"
+ } else if (reading.lightLevel === AmbientLightReading.Bright
+ || reading.lightLevel === AmbientLightReading.Sunny) {
+ avatar.source = "1.png"
+ bg.color = "#FFFF75"
+ } else {
+ avatar.text = "Unknown light level"
}
}
+ }
- LightSensor {
- active: true
- onReadingChanged: {
- illuminanceLevel.text = "Illuminance: " + reading.illuminance
- }
+ LightSensor {
+ active: true
+ onReadingChanged: {
+ illuminanceLevel.text = "Illuminance: " + reading.illuminance.toFixed(2);
}
}
}
diff --git a/basicsuite/sensors/exclude.txt b/basicsuite/sensors/exclude.txt
index e20e515..4d1d7ec 100644
--- a/basicsuite/sensors/exclude.txt
+++ b/basicsuite/sensors/exclude.txt
@@ -1 +1,8 @@
-android-beaglebone:android-iMX6:linux-iMX6:linux-raspberrypi:linux-beagleboard:linux-beaglebone
+android-beaglebone
+android-iMX6
+linux-iMX6
+linux-raspberrypi
+linux-beagleboard
+linux-beaglebone
+linux-imx6qsabresd
+linux-apalis-imx6
diff --git a/basicsuite/sensors/main.qml b/basicsuite/sensors/main.qml
index b5a1207..d6e0e9d 100644
--- a/basicsuite/sensors/main.qml
+++ b/basicsuite/sensors/main.qml
@@ -42,30 +42,30 @@ import QtQuick 2.0
import QtSensors 5.0
import QtSensors 5.0 as Sensors
-Item {
+Rectangle {
id: root
- width: 800
- height: 1280
+ anchors.fill: parent
Component {
id: sensorExample
Rectangle {
id: main
- width: root.height
- height: root.width
- rotation: 90
+ width: root.width
+ height: root.height
+ anchors.centerIn: parent
+ color: "blue"
border.width: 1
+ Accelbubble {
+ id: bubble
+ width: parent.width / 2
+ height: parent.height
+ }
Light {
- id: lys
- width: main.width
- height: main.height / 2
+ anchors.left: bubble.right
+ width: parent.width / 2
+ height: parent.height
}
- Accelbubble {
- width: main.width
- height: main.height / 2
- anchors.top: lys.bottom
- }
}
}
@@ -74,10 +74,14 @@ Item {
Rectangle {
width: root.width
height: root.height
+ color: "black"
Text {
- font.pixelSize: 22
+ font.pixelSize: 80
+ width: parent.width * 0.8
anchors.centerIn: parent
+ color: "white"
text: "It appears that this device doesn't provide the required sensors!"
+ wrapMode: Text.WordWrap
}
}
}
diff --git a/basicsuite/sensors/preview_l.jpg b/basicsuite/sensors/preview_l.jpg
index 7ce979d..d87d757 100644
--- a/basicsuite/sensors/preview_l.jpg
+++ b/basicsuite/sensors/preview_l.jpg
Binary files differ
diff --git a/basicsuite/shared/SharedMain.qml b/basicsuite/shared/SharedMain.qml
index 60a141b..98ca779 100644
--- a/basicsuite/shared/SharedMain.qml
+++ b/basicsuite/shared/SharedMain.qml
@@ -16,7 +16,7 @@
**
****************************************************************************/
import QtQuick 2.0
-import QtQuick.Enterprise.VirtualKeyboard 1.0
+import QtQuick.Enterprise.VirtualKeyboard 1.1
Item {
id: root
diff --git a/basicsuite/shared/engine.h b/basicsuite/shared/engine.h
index 1600fc6..43713c8 100644
--- a/basicsuite/shared/engine.h
+++ b/basicsuite/shared/engine.h
@@ -20,6 +20,8 @@
#include <QObject>
#include <QSize>
+#include <QString>
+#include <QUrl>
class QQmlEngine;
class QQuickItem;
@@ -36,6 +38,7 @@ class DummyEngine : public QObject
public:
explicit DummyEngine(QObject *parent = 0);
+ Q_INVOKABLE QUrl fromUserInput(const QString &userInput) { return QUrl::fromUserInput(userInput); }
Q_INVOKABLE int smallFontSize() const { return qMax<int>(m_dpcm * 0.4, 10); }
Q_INVOKABLE int fontSize() const { return qMax<int>(m_dpcm * 0.6, 14); }
Q_INVOKABLE int titleFontSize() const { return qMax<int>(m_dpcm * 0.9, 20); }
diff --git a/basicsuite/shared/main.cpp b/basicsuite/shared/main.cpp
index d33b09c..d5b203f 100644
--- a/basicsuite/shared/main.cpp
+++ b/basicsuite/shared/main.cpp
@@ -34,14 +34,27 @@
#include <QtQml/QQmlContext>
#include <QtQml/QQmlComponent>
-#include "engine.h"
+#if defined(USE_QTWEBENGINE)
+#include <qtwebengineglobal.h>
+#endif
+#include "engine.h"
int main(int argc, char **argv)
{
//qputenv("QT_IM_MODULE", QByteArray("qtvkb"));
QApplication app(argc, argv);
+
+
+#if defined(USE_QTWEBENGINE)
+ // This is currently needed by all QtWebEngine applications using the HW accelerated QQuickWebView.
+ // It enables sharing the QOpenGLContext of all QQuickWindows of the application.
+ // We have to do so until we expose a public API for it in Qt or choose to enable it
+ // by default earliest in Qt 5.4.0.
+ QWebEngine::initialize();
+#endif
+
QString path = app.applicationDirPath();
QPalette pal;
diff --git a/basicsuite/shared/shared.pri b/basicsuite/shared/shared.pri
index 8f66b7d..0d7392d 100644
--- a/basicsuite/shared/shared.pri
+++ b/basicsuite/shared/shared.pri
@@ -1,6 +1,11 @@
# widget dependecy is required by QtCharts demo
QT += quick widgets
+qtHaveModule(webengine) {
+ DEFINES += USE_QTWEBENGINE
+ QT += webengine
+}
+
DESTPATH = /data/user/$$TARGET
target.path = $$DESTPATH
diff --git a/basicsuite/textinput/TextArea.qml b/basicsuite/textinput/TextArea.qml
index 6832356..cf84689 100644
--- a/basicsuite/textinput/TextArea.qml
+++ b/basicsuite/textinput/TextArea.qml
@@ -40,6 +40,7 @@
****************************************************************************/
import QtQuick 2.0
+import QtQuick.Enterprise.VirtualKeyboard 1.1
TextBase {
id: textArea
@@ -64,8 +65,9 @@ TextBase {
TextEdit {
id: textEdit
- property alias enterKeyText: textArea.enterKeyText
- property alias enterKeyEnabled: textArea.enterKeyEnabled
+ EnterKeyAction.actionId: textArea.enterKeyAction
+ EnterKeyAction.label: textArea.enterKeyText
+ EnterKeyAction.enabled: textArea.enterKeyEnabled
y: 6
focus: true
@@ -77,7 +79,6 @@ TextBase {
selectionColor: Qt.rgba(1.0, 1.0, 1.0, 0.5)
selectedTextColor: Qt.rgba(0.0, 0.0, 0.0, 0.8)
anchors { left: parent.left; right: parent.right; margins: 12 }
-
onActiveFocusChanged: if (!activeFocus) deselect()
}
}
diff --git a/basicsuite/textinput/TextBase.qml b/basicsuite/textinput/TextBase.qml
index 916b3e2..0fcf294 100644
--- a/basicsuite/textinput/TextBase.qml
+++ b/basicsuite/textinput/TextBase.qml
@@ -40,6 +40,7 @@
****************************************************************************/
import QtQuick 2.0
+import QtQuick.Enterprise.VirtualKeyboard 1.1
FocusScope {
id: textBase
@@ -48,8 +49,9 @@ FocusScope {
property bool previewTextActive: !editor.activeFocus && text.length === 0
property int fontPixelSize: 32
property string previewText
+ property int enterKeyAction: EnterKeyAction.None
property string enterKeyText
- property bool enterKeyEnabled: enterKeyText.length === 0 || editor.text.length > 0 || editor.inputMethodComposing
+ property bool enterKeyEnabled: enterKeyAction === EnterKeyAction.None || editor.text.length > 0 || editor.inputMethodComposing
property alias mouseParent: mouseArea.parent
implicitHeight: editor.height + 12
diff --git a/basicsuite/textinput/TextField.qml b/basicsuite/textinput/TextField.qml
index e95ded7..f25dc49 100644
--- a/basicsuite/textinput/TextField.qml
+++ b/basicsuite/textinput/TextField.qml
@@ -40,6 +40,7 @@
****************************************************************************/
import QtQuick 2.0
+import QtQuick.Enterprise.VirtualKeyboard 1.1
TextBase {
id: textField
@@ -51,6 +52,7 @@ TextBase {
property alias inputMethodHints: textInput.inputMethodHints
property alias validator: textInput.validator
property alias echoMode: textInput.echoMode
+ property int passwordMaskDelay: 1000
editor: textInput
mouseParent: flickable
@@ -70,8 +72,9 @@ TextBase {
TextInput {
id: textInput
- property alias enterKeyText: textField.enterKeyText
- property alias enterKeyEnabled: textField.enterKeyEnabled
+ EnterKeyAction.actionId: textField.enterKeyAction
+ EnterKeyAction.label: textField.enterKeyText
+ EnterKeyAction.enabled: textField.enterKeyEnabled
y: 6
focus: true
@@ -83,6 +86,13 @@ TextBase {
selectedTextColor: Qt.rgba(0.0, 0.0, 0.0, 0.8)
width: Math.max(flickable.width, implicitWidth)-2
onActiveFocusChanged: if (!activeFocus) deselect()
+
+ Binding {
+ target: textInput
+ property: "passwordMaskDelay"
+ value: textField.passwordMaskDelay
+ when: textInput.hasOwnProperty("passwordMaskDelay")
+ }
}
}
}
diff --git a/basicsuite/textinput/main.qml b/basicsuite/textinput/main.qml
index 70455bf..db407c2 100644
--- a/basicsuite/textinput/main.qml
+++ b/basicsuite/textinput/main.qml
@@ -40,6 +40,7 @@
****************************************************************************/
import QtQuick 2.0
+import QtQuick.Enterprise.VirtualKeyboard 1.1
Flickable {
id: flickable
@@ -76,27 +77,63 @@ Flickable {
TextField {
width: parent.width
previewText: "One line field"
- enterKeyText: "Next"
+ enterKeyAction: EnterKeyAction.Next
onEnterKeyClicked: passwordField.focus = true
}
TextField {
id: passwordField
width: parent.width
- echoMode: TextInput.PasswordEchoOnEdit
+ echoMode: TextInput.Password
previewText: "Password field"
inputMethodHints: Qt.ImhNoAutoUppercase | Qt.ImhPreferLowercase | Qt.ImhSensitiveData | Qt.ImhNoPredictiveText
- enterKeyText: "Next"
- onEnterKeyClicked: numberField.focus = true
+ enterKeyAction: EnterKeyAction.Next
+ onEnterKeyClicked: upperCaseField.focus = true
}
TextField {
- id: numberField
+ id: upperCaseField
+
+ width: parent.width
+ previewText: "Upper case field"
+ inputMethodHints: Qt.ImhUppercaseOnly
+ enterKeyAction: EnterKeyAction.Next
+ onEnterKeyClicked: lowerCaseField.focus = true
+ }
+ TextField {
+ id: lowerCaseField
+
+ width: parent.width
+ previewText: "Lower case field"
+ inputMethodHints: Qt.ImhLowercaseOnly
+ enterKeyAction: EnterKeyAction.Next
+ onEnterKeyClicked: phoneNumberField.focus = true
+ }
+ TextField {
+ id: phoneNumberField
validator: RegExpValidator { regExp: /^[0-9\+\-\#\*\ ]{6,}$/ }
width: parent.width
previewText: "Phone number field"
inputMethodHints: Qt.ImhDialableCharactersOnly
- enterKeyText: "Next"
+ enterKeyAction: EnterKeyAction.Next
+ onEnterKeyClicked: formattedNumberField.focus = true
+ }
+ TextField {
+ id: formattedNumberField
+
+ width: parent.width
+ previewText: "Formatted number field"
+ inputMethodHints: Qt.ImhFormattedNumbersOnly
+ enterKeyAction: EnterKeyAction.Next
+ onEnterKeyClicked: digitsField.focus = true
+ }
+ TextField {
+ id: digitsField
+
+ width: parent.width
+ previewText: "Digits only field"
+ inputMethodHints: Qt.ImhDigitsOnly
+ enterKeyAction: EnterKeyAction.Next
onEnterKeyClicked: textArea.focus = true
}
TextArea {
diff --git a/basicsuite/textinput/preview_l.jpg b/basicsuite/textinput/preview_l.jpg
index 67a2917..7e453b8 100644
--- a/basicsuite/textinput/preview_l.jpg
+++ b/basicsuite/textinput/preview_l.jpg
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/particles/emitmask.qml b/basicsuite/webengine/ErrorPage.qml
index 1c3bade..daa25d0 100644
--- a/basicsuite/qt5-launchpresentation/particles/emitmask.qml
+++ b/basicsuite/webengine/ErrorPage.qml
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the QtWebEngine module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
@@ -38,39 +38,34 @@
**
****************************************************************************/
-import QtQuick 2.0
-import QtQuick.Particles 2.0
+import QtQuick 2.1
-Item {
+Rectangle {
+ id: errorPage
+ property alias mainMessage: errorMessage.text;
+ property bool displayingError: false;
+ anchors.fill: parent
+ color: "lightgray"
+ visible: displayingError
- width: 320
- height: 480
-
- ParticleSystem {
- width: 300
- height: 300
+ Rectangle {
+ color: "white"
anchors.centerIn: parent
+ height: parent.height / 3
+ width: Math.max(parent.width / 2, errorMessage.width + 20)
- ImageParticle {
- source: "particle.png"
- z: 2
- anchors.fill: parent
- color: "#4040ff"
- alpha: 0
- colorVariation: 0.1
+ border {
+ color: "dimgray"
+ width: 0.5
}
- Emitter {
- anchors.fill: parent
- emitRate: 6000
- lifeSpan: 720
- size: 10
- //! [0]
- shape: MaskShape {
- source: "starfish_mask.png"
- }
- //! [0]
+ radius: 20
+ Text {
+ id: errorMessage
+ color: "dimgray"
+ font.pixelSize: 20
+ anchors.centerIn: parent
}
-
}
+
}
diff --git a/basicsuite/webengine/content/csstetrahedron/index.html b/basicsuite/webengine/content/csstetrahedron/index.html
new file mode 100644
index 0000000..540890b
--- /dev/null
+++ b/basicsuite/webengine/content/csstetrahedron/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+ <title>A tetrahedron built with CSS 3D transforms</title>
+ <link rel="stylesheet" href="style.css" />
+</head>
+<body bgcolor="black">
+<div id="header"></div>
+<article id="viewport">
+ <section id="pyramid">
+ <div></div>
+ <div></div>
+ <div></div>
+ <div></div>
+ </section>
+</article>
+<script language="javascript">
+var container = document.getElementById("header");
+container.innerHTML = "<div style=\"font-family: monospace; font-size: 13px; margin: 5em auto 0px; padding: 2em; width: 600px; "
+ + "height 100px; text-align: center; background-color: rgb(238, 238, 238);\">" + navigator.userAgent + "</div>";
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/basicsuite/webengine/content/csstetrahedron/screenshot.png b/basicsuite/webengine/content/csstetrahedron/screenshot.png
new file mode 100644
index 0000000..1c1283f
--- /dev/null
+++ b/basicsuite/webengine/content/csstetrahedron/screenshot.png
Binary files differ
diff --git a/basicsuite/webengine/content/csstetrahedron/style.css b/basicsuite/webengine/content/csstetrahedron/style.css
new file mode 100644
index 0000000..70d872a
--- /dev/null
+++ b/basicsuite/webengine/content/csstetrahedron/style.css
@@ -0,0 +1,109 @@
+#pyramid {
+ position: relative;
+ margin: 0px auto;
+ height: 350px;
+ width: 100px;
+ -webkit-transform-style: preserve-3d;
+ -webkit-animation: spin 10s linear infinite;
+ -webkit-transform-origin: 116px 200px 116px;
+
+ -moz-transform-style: preserve-3d;
+ -moz-animation: spin 10s linear infinite;
+ -moz-transform-origin: 116px 200px 116px;
+
+ -ms-transform-style: preserve-3d;
+ -ms-animation: spin 10s linear infinite;
+ -ms-transform-origin: 116px 200px 116px;
+
+ transform-style: preserve-3d;
+ animation: spin 10s linear infinite;
+ transform-origin: 116px 200px 116px;
+
+}
+
+@-webkit-keyframes spin {
+ from {
+ -webkit-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
+ }
+ to {
+ -webkit-transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg);
+ }
+}
+
+@-moz-keyframes spin {
+ from {
+ -moz-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
+ }
+ to {
+ -moz-transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg);
+ }
+}
+
+@-ms-keyframes spin {
+ from {
+ -ms-transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
+ }
+ to {
+ -ms-transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg);
+ }
+}
+
+@keyframes spin {
+ from {
+ transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
+ }
+ to {
+ transform: rotateX(360deg) rotateY(360deg) rotateZ(360deg);
+ }
+}
+
+#pyramid > div {
+ position: absolute;
+ border-style: solid;
+ border-width: 200px 0 200px 346px;
+ -webkit-transform-origin: 0 0;
+ -moz-transform-origin: 0 0;
+ -ms-transform-origin: 0 0;
+ transform-origin: 0 0;
+}
+
+/* Put some text on each face */
+#pyramid > div:after {
+ position: absolute;
+ content: "QtWebEngine";
+ color: #fff;
+ left: -250px;
+ text-align: center;
+}
+
+#pyramid > div:first-child {
+ border-color: transparent transparent transparent rgba(40, 150, 10, 0.6);
+ -webkit-transform: rotateY(-19.5deg) rotateX(180deg) translateY(-400px);
+ -moz-transform: rotateY(-19.5deg) rotateX(180deg) translateY(-400px);
+ -ms-transform: rotateY(-19.5deg) rotateX(180deg) translateY(-400px);
+ transform: rotateY(-19.5deg) rotateX(180deg) translateY(-400px);
+}
+
+#pyramid > div:nth-child(2) {
+ border-color: transparent transparent transparent rgba(30, 120, 10, 0.6);
+ -webkit-transform: rotateY(90deg) rotateZ(60deg) rotateX(180deg) translateY(-400px);
+ -moz-transform: rotateY(90deg) rotateZ(60deg) rotateX(180deg) translateY(-400px);
+ -ms-transform: rotateY(90deg) rotateZ(60deg) rotateX(180deg) translateY(-400px);
+ transform: rotateY(90deg) rotateZ(60deg) rotateX(180deg) translateY(-400px);
+}
+
+#pyramid > div:nth-child(3) {
+ border-color: transparent transparent transparent rgba(20, 100, 10, 0.9);
+ -webkit-transform: rotateX(60deg) rotateY(19.5deg);
+ -moz-transform: rotateX(60deg) rotateY(19.5deg);
+ -ms-transform: rotateX(60deg) rotateY(19.5deg);
+ transform: rotateX(60deg) rotateY(19.5deg);
+}
+
+#pyramid > div:nth-child(4) {
+ border-color: transparent transparent transparent rgba(10, 80, 10, 0.8);
+ -webkit-transform: rotateX(-60deg) rotateY(19.5deg) translateX(-116px) translateY(-200px) translateZ(326px);
+ -moz-transform: rotateX(-60deg) rotateY(19.5deg) translateX(-116px) translateY(-200px) translateZ(326px);
+ -ms-transform: rotateX(-60deg) rotateY(19.5deg) translateX(-116px) translateY(-200px) translateZ(326px);
+ transform: rotateX(-60deg) rotateY(19.5deg) translateX(-116px) translateY(-200px) translateZ(326px);
+}
diff --git a/basicsuite/webengine/content/index.html b/basicsuite/webengine/content/index.html
new file mode 100644
index 0000000..fda8caa
--- /dev/null
+++ b/basicsuite/webengine/content/index.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset=utf-8 />
+ <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+ <title>Qt WebEngine Demo</title>
+ <style>
+ a, a:link, a:active, a:visited {
+ text-decoration:none;
+ font-family: "Helvetica";
+ font-size: 18px;
+ color: rgb(0,0,0)
+ }
+ .bookmark {
+ margin: 28px;
+ }
+ .example {
+ display: inline-block;
+ }
+ .example_image {
+ width: 300px;
+ height: 175px;
+ }
+ </style>
+ </head>
+ <body bgcolor="#AAAAAA">
+ <div style="text-align: center; padding-top: 100px;">
+ <div class="bookmark"><a href="http://qt.digia.com">http://qt.digia.com</a></div>
+ <div class="bookmark"><a href="http://qt-project.org/doc/qt-5">http://qt-project.org/doc/qt-5</a></div>
+ <div class="bookmark"><a href="http://www.google.com">http://www.google.com</a></div>
+<!-- <div class="example"><a href="../content/webgl/helloqt.html"><img class="example_image" src="../content/webgl/screenshot.png"></a></div> -->
+ <div class="example"><a href="../content/csstetrahedron/index.html"><img class="example_image" src="../content/csstetrahedron/screenshot.png"></a></div>
+ <div class="example"><a href="../content/rubiks/index.html"><img class="example_image" src="../content/rubiks/screenshot.png"></a></div>
+ <div class="example"><a href="../content/morphingcubes/index.html"><img class="example_image" src="../content/morphingcubes/screenshot.png"></a></div>
+ </div>
+ </body>
+</html>
diff --git a/basicsuite/webengine/content/morphingcubes/index.html b/basicsuite/webengine/content/morphingcubes/index.html
new file mode 100644
index 0000000..a5731f1
--- /dev/null
+++ b/basicsuite/webengine/content/morphingcubes/index.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+
+<html lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+ <title>Morphing Power Cubes</title>
+ <style type="text/css" media="screen">
+ body {
+ background-color: black;
+ color: white;
+ font-family: 'Lucida Grande', Verdana, Arial;
+ font-size: 12px;
+ background-image: -webkit-gradient(radial,
+ 50% 500, 1,
+ 50% 500, 400,
+ from(rgba(255, 255, 255, 0.3)),
+ to(rgba(255, 255, 255, 0)));
+ background-repeat: no-repeat;
+ }
+
+ #container {
+ width: 100%;
+ height: 700px;
+ -webkit-perspective: 800; /* For compatibility with iPhone 3.0, we leave off the units here */
+ -webkit-perspective-origin: 50% 225px;
+ }
+ #stage {
+ width: 100%;
+ height: 100%;
+ -webkit-transition: -webkit-transform 2s;
+ -webkit-transform-style: preserve-3d;
+ }
+
+ #shape {
+ position: relative;
+ top: 160px;
+ margin: 0 auto;
+ height: 200px;
+ width: 200px;
+ -webkit-transform-style: preserve-3d;
+ }
+
+ .plane {
+ position: absolute;
+ height: 200px;
+ width: 200px;
+ border: 1px solid white;
+ -webkit-border-radius: 12px;
+ -webkit-box-sizing: border-box;
+ text-align: center;
+ font-family: Times, serif;
+ font-size: 124pt;
+ color: black;
+ background-color: rgba(255, 255, 255, 0.6);
+ -webkit-transition: -webkit-transform 2s, opacity 2s;
+ -webkit-backface-visibility: hidden;
+ }
+
+ #shape.backfaces .plane {
+ -webkit-backface-visibility: visible;
+ }
+
+ #shape {
+ -webkit-animation: spin 8s infinite linear;
+ }
+
+ @-webkit-keyframes spin {
+ from { -webkit-transform: rotateY(0); }
+ to { -webkit-transform: rotateY(-360deg); }
+ }
+
+ /* ---------- cube styles ------------- */
+ .cube > .one {
+ opacity: 0.5;
+ -webkit-transform: scale3d(1.2, 1.2, 1.2) rotateX(90deg) translateZ(100px);
+ }
+
+ .cube > .two {
+ opacity: 0.5;
+ -webkit-transform: scale3d(1.2, 1.2, 1.2) translateZ(100px);
+ }
+
+ .cube > .three {
+ opacity: 0.5;
+ -webkit-transform: scale3d(1.2, 1.2, 1.2) rotateY(90deg) translateZ(100px);
+ }
+
+ .cube > .four {
+ opacity: 0.5;
+ -webkit-transform: scale3d(1.2, 1.2, 1.2) rotateY(180deg) translateZ(100px);
+ }
+
+ .cube > .five {
+ opacity: 0.5;
+ -webkit-transform: scale3d(1.2, 1.2, 1.2) rotateY(-90deg) translateZ(100px);
+ }
+
+ .cube > .six {
+ opacity: 0.5;
+ -webkit-transform: scale3d(1.2, 1.2, 1.2) rotateX(-90deg) translateZ(100px) rotate(180deg);
+ }
+
+
+ .cube > .seven {
+ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateX(90deg) translateZ(100px) rotate(180deg);
+ }
+
+ .cube > .eight {
+ -webkit-transform: scale3d(0.8, 0.8, 0.8) translateZ(100px);
+ }
+
+ .cube > .nine {
+ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(90deg) translateZ(100px);
+ }
+
+ .cube > .ten {
+ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(180deg) translateZ(100px);
+ }
+
+ .cube > .eleven {
+ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateY(-90deg) translateZ(100px);
+ }
+
+ .cube > .twelve {
+ -webkit-transform: scale3d(0.8, 0.8, 0.8) rotateX(-90deg) translateZ(100px);
+ }
+
+ /* ---------- ring styles ------------- */
+ .ring > .one {
+ -webkit-transform: translateZ(380px);
+ }
+
+ .ring > .two {
+ -webkit-transform: rotateY(30deg) translateZ(380px);
+ }
+
+ .ring > .three {
+ -webkit-transform: rotateY(60deg) translateZ(380px);
+ }
+
+ .ring > .four {
+ -webkit-transform: rotateY(90deg) translateZ(380px);
+ }
+
+ .ring > .five {
+ -webkit-transform: rotateY(120deg) translateZ(380px);
+ }
+
+ .ring > .six {
+ -webkit-transform: rotateY(150deg) translateZ(380px);
+ }
+
+ .ring > .seven {
+ -webkit-transform: rotateY(180deg) translateZ(380px);
+ }
+
+ .ring > .eight {
+ -webkit-transform: rotateY(210deg) translateZ(380px);
+ }
+
+ .ring > .nine {
+ -webkit-transform: rotateY(-120deg) translateZ(380px);
+ }
+
+ .ring > .ten {
+ -webkit-transform: rotateY(-90deg) translateZ(380px);
+ }
+
+ .ring > .eleven {
+ -webkit-transform: rotateY(300deg) translateZ(380px);
+ }
+
+ .ring > .twelve {
+ -webkit-transform: rotateY(330deg) translateZ(380px);
+ }
+
+ .controls {
+ width: 80%;
+ margin: 0 auto;
+ padding: 5px 20px;
+ -webkit-border-radius: 12px;
+ background-color: rgba(255, 255, 255, 0.5);
+ }
+ .controls > div {
+ margin: 10px;
+ }
+ </style>
+ <script type="text/javascript" charset="utf-8">
+ function hasClassName(inElement, inClassName)
+ {
+ var regExp = new RegExp('(?:^|\\s+)' + inClassName + '(?:\\s+|$)');
+ return regExp.test(inElement.className);
+ }
+
+ function addClassName(inElement, inClassName)
+ {
+ if (!hasClassName(inElement, inClassName))
+ inElement.className = [inElement.className, inClassName].join(' ');
+ }
+
+ function removeClassName(inElement, inClassName)
+ {
+ if (hasClassName(inElement, inClassName)) {
+ var regExp = new RegExp('(?:^|\\s+)' + inClassName + '(?:\\s+|$)', 'g');
+ var curClasses = inElement.className;
+ inElement.className = curClasses.replace(regExp, ' ');
+ }
+ }
+
+ function toggleClassName(inElement, inClassName)
+ {
+ if (hasClassName(inElement, inClassName))
+ removeClassName(inElement, inClassName);
+ else
+ addClassName(inElement, inClassName);
+ }
+ function toggleShape()
+ {
+ var shape = document.getElementById('shape');
+ if (hasClassName(shape, 'ring')) {
+ removeClassName(shape, 'ring');
+ addClassName(shape, 'cube');
+ } else {
+ removeClassName(shape, 'cube');
+ addClassName(shape, 'ring');
+ }
+ // Move the ring back in Z so it's not so in-your-face.
+ var stage = document.getElementById('stage');
+ if (hasClassName(shape, 'ring'))
+ stage.style.webkitTransform = 'translateZ(-200px)';
+ else
+ stage.style.webkitTransform = '';
+ }
+ function toggleBackfaces()
+ {
+ var backfacesVisible = document.getElementById('backfaces').checked;
+ var shape = document.getElementById('shape');
+ if (backfacesVisible)
+ addClassName(shape, 'backfaces');
+ else
+ removeClassName(shape, 'backfaces');
+ }
+ </script>
+</head>
+<body>
+
+ <div class="controls">
+ <h1>Animations, Transitions and 3D Transforms</h1>
+ <p>This demo shows some more interesting content using 3D transforms, animations and transitions.
+ Note that you can still select the text on the the elements, even while they are rotating. Transforms elements remain
+ fully interactive.</p>
+ <p>Click Toggle Shape to switch between nested cubes and one big ring. Note how the planes move smoothly to their new locations,
+ even while the whole shape is rotating. You can even interrupt this transition by clicking again, and they move back smoothly.</p>
+ <p>Toggle the Backfaces Visible checkbox to turn backfaces on and off using <code>-webkit-backface-visibility</code>.</p>
+ <div><button onclick="toggleShape()">Toggle Shape</button></div>
+ <div><input type="checkbox" id="backfaces" onclick="toggleBackfaces()" checked><label for="backfaces">Backfaces visible</label></div>
+ </div>
+
+ <div id="container">
+ <div id="stage">
+ <div id="shape" class="cube backfaces">
+ <div class="plane one">1</div>
+ <div class="plane two">2</div>
+ <div class="plane three">3</div>
+ <div class="plane four">4</div>
+ <div class="plane five">5</div>
+ <div class="plane six">6</div>
+ <div class="plane seven">7</div>
+ <div class="plane eight">8</div>
+ <div class="plane nine">9</div>
+ <div class="plane ten">10</div>
+ <div class="plane eleven">11</div>
+ <div class="plane twelve">12</div>
+ </div>
+ </div>
+ </div>
+ <div id="footer"></div>
+ <script language="javascript">
+ var container = document.getElementById("footer");
+ container.innerHTML = "<div style=\"font-family: monospace; font-size: 15px; margin: 0px auto 0px; padding: 2em; width: 600px; "
+ + "height 100px; text-align: center; color: black; background-color: rgb(238, 238, 238);\">" + navigator.userAgent + "</div>";
+ </script>
+</body>
+</html>
diff --git a/basicsuite/webengine/content/morphingcubes/screenshot.png b/basicsuite/webengine/content/morphingcubes/screenshot.png
new file mode 100644
index 0000000..9d36114
--- /dev/null
+++ b/basicsuite/webengine/content/morphingcubes/screenshot.png
Binary files differ
diff --git a/basicsuite/webengine/content/rubiks/css/style.css b/basicsuite/webengine/content/rubiks/css/style.css
new file mode 100644
index 0000000..a636bb0
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/css/style.css
@@ -0,0 +1,36 @@
+html, body {
+ height: 100%;
+ margin: 0px;
+}
+
+body {
+ background-color: #000;
+ color: white;
+ text-shadow: 0px 1px 1px black;
+ text-align: center;
+ font-family: sans-serif;
+}
+
+h1 {
+ text-align: center;
+ margin-top: 0px;
+ padding-top: 1em;
+}
+
+footer {
+ position: fixed;
+ text-align: center;
+ width: 100%;
+ left: 0px;
+ bottom: 3px;
+ font-size: 90%;
+}
+
+a {
+ color: white;
+}
+
+.face {
+ border: 2px solid black;
+ border-radius: 10px;
+}
diff --git a/basicsuite/webengine/content/rubiks/index.html b/basicsuite/webengine/content/rubiks/index.html
new file mode 100644
index 0000000..993b523
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/index.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<!--
+
+Copyright (c) 2012 Ondřej Žára http://ondras.zarovi.cz
+This demo is released under the BSD license:
+http://opensource.org/licenses/bsd-license.php
+
+-->
+
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>Rubik's cube :: CSS 3D Transformations demo</title>
+ <script src="js/oz.js"></script>
+ <script src="js/css3.oz.js"></script>
+ <script src="js/rubik.js"></script>
+ <script src="js/quaternion.js"></script>
+ <link rel="stylesheet" href="css/style.css" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="apple-mobile-web-app-capable" content="yes" />
+ </head>
+ <body onload="new Rubik()">
+ <h1>CSS 3D Rubik's cube</h1>
+ </body>
+</html>
diff --git a/basicsuite/webengine/content/rubiks/js/css3.oz.js b/basicsuite/webengine/content/rubiks/js/css3.oz.js
new file mode 100644
index 0000000..d8ad6d9
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/js/css3.oz.js
@@ -0,0 +1,28 @@
+OZ.CSS3 = {
+ getProperty: function(property) {
+ var prefix = this.getPrefix(this._normalize(property));
+ if (prefix === null) { return null; }
+ return (prefix ? "-" + prefix.toLowerCase() + "-" : "") + property;
+ },
+ set: function(node, prop, value) {
+ prop = this._normalize(prop);
+ var prefix = this.getPrefix(prop);
+ if (prefix === null) { return false; }
+ var p = (prefix ? prefix + prop.charAt(0).toUpperCase() + prop.substring(1) : prop);
+ node.style[p] = value;
+ return true;
+ },
+ getPrefix: function(property) {
+ var prefixes = ["", "ms", "Webkit", "O", "Moz"];
+ for (var i=0;i<prefixes.length;i++) {
+ var p = prefixes[i];
+ var prop = (p ? p + property.charAt(0).toUpperCase() + property.substring(1) : property);
+ if (prop in this._node.style) { return p; }
+ }
+ return null;
+ },
+ _normalize: function(property) {
+ return property.replace(/-([a-z])/g, function(match, letter) { return letter.toUpperCase(); });
+ },
+ _node: OZ.DOM.elm("div")
+}
diff --git a/basicsuite/webengine/content/rubiks/js/oz.js b/basicsuite/webengine/content/rubiks/js/oz.js
new file mode 100644
index 0000000..b821c04
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/js/oz.js
@@ -0,0 +1,334 @@
+/* (c) 2007 - now() Ondrej Zara, 1.7 */
+var OZ = {
+ $:function(x) { return typeof(x) == "string" ? document.getElementById(x) : x; },
+ select: function(x) { return document.querySelectorAll(x); },
+ opera:!!window.opera,
+ ie:!!document.attachEvent && !window.opera,
+ gecko:!!document.getAnonymousElementByAttribute,
+ webkit:!!navigator.userAgent.match(/webkit/i),
+ khtml:!!navigator.userAgent.match(/khtml/i) || !!navigator.userAgent.match(/konqueror/i),
+ Event:{
+ _id:0,
+ _byName:{},
+ _byID:{},
+ add:function(elm,event,cb) {
+ var id = OZ.Event._id++;
+ var element = OZ.$(elm);
+ var fnc = (element && element.attachEvent ? function() { return cb.apply(element,arguments); } : cb);
+ var rec = [element,event,fnc];
+ var parts = event.split(" ");
+ while (parts.length) {
+ var e = parts.pop();
+ if (element) {
+ if (element.addEventListener) {
+ element.addEventListener(e,fnc,false);
+ } else if (element.attachEvent) {
+ element.attachEvent("on"+e,fnc);
+ }
+ }
+ if (!(e in OZ.Event._byName)) { OZ.Event._byName[e] = {}; }
+ OZ.Event._byName[e][id] = rec;
+ }
+ OZ.Event._byID[id] = rec;
+ return id;
+ },
+ remove:function(id) {
+ var rec = OZ.Event._byID[id];
+ if (!rec) { return; }
+ var elm = rec[0];
+ var parts = rec[1].split(" ");
+ while (parts.length) {
+ var e = parts.pop();
+ if (elm) {
+ if (elm.removeEventListener) {
+ elm.removeEventListener(e,rec[2],false);
+ } else if (elm.detachEvent) {
+ elm.detachEvent("on"+e,rec[2]);
+ }
+ }
+ delete OZ.Event._byName[e][id];
+ }
+ delete OZ.Event._byID[id];
+ },
+ stop:function(e) { e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true; },
+ prevent:function(e) { e.preventDefault ? e.preventDefault() : e.returnValue = false; },
+ target:function(e) { return e.target || e.srcElement; }
+ },
+ Class:function() {
+ var c = function() {
+ var init = arguments.callee.prototype.init;
+ if (init) { init.apply(this,arguments); }
+ };
+ c.implement = function(parent) {
+ for (var p in parent.prototype) { this.prototype[p] = parent.prototype[p]; }
+ return this;
+ };
+ c.extend = function(parent) {
+ var tmp = function(){};
+ tmp.prototype = parent.prototype;
+ this.prototype = new tmp();
+ this.prototype.constructor = this;
+ return this;
+ };
+ c.prototype.bind = function(fnc) { return fnc.bind(this); };
+ c.prototype.dispatch = function(type, data) {
+ var obj = {
+ type:type,
+ target:this,
+ timeStamp:(new Date()).getTime(),
+ data:data
+ }
+ var tocall = [];
+ var list = OZ.Event._byName[type];
+ for (var id in list) {
+ var item = list[id];
+ if (!item[0] || item[0] == this) { tocall.push(item[2]); }
+ }
+ var len = tocall.length;
+ for (var i=0;i<len;i++) { tocall[i](obj); }
+ }
+ return c;
+ },
+ DOM:{
+ elm:function(name, opts) {
+ var elm = document.createElement(name);
+ for (var p in opts) {
+ var val = opts[p];
+ if (p == "class") { p = "className"; }
+ if (p in elm) { elm[p] = val; }
+ }
+ OZ.Style.set(elm, opts);
+ return elm;
+ },
+ text:function(str) { return document.createTextNode(str); },
+ clear:function(node) { while (node.firstChild) {node.removeChild(node.firstChild);} },
+ pos:function(elm) { /* relative to _viewport_ */
+ var cur = OZ.$(elm);
+ var html = cur.ownerDocument.documentElement;
+ var parent = cur.parentNode;
+ var x = y = 0;
+ if (cur == html) { return [x,y]; }
+ while (1) {
+ if (OZ.Style.get(cur,"position") == "fixed") {
+ x += cur.offsetLeft;
+ y += cur.offsetTop;
+ return [x,y];
+ }
+
+ if (OZ.opera && (parent == html || OZ.Style.get(cur,"display") != "block")) { } else {
+ x -= parent.scrollLeft;
+ y -= parent.scrollTop;
+ }
+ if (parent == cur.offsetParent || cur.parentNode == html) {
+ x += cur.offsetLeft;
+ y += cur.offsetTop;
+ cur = parent;
+ }
+
+ if (parent == html) { return [x,y]; }
+ parent = parent.parentNode;
+ }
+ },
+ scroll:function() {
+ var x = document.documentElement.scrollLeft || document.body.scrollLeft || 0;
+ var y = document.documentElement.scrollTop || document.body.scrollTop || 0;
+ return [x,y];
+ },
+ win:function(avail) {
+ return (avail ? [window.innerWidth,window.innerHeight] : [document.documentElement.clientWidth,document.documentElement.clientHeight]);
+ },
+ hasClass:function(node, className) {
+ var cn = OZ.$(node).className;
+ var arr = (cn ? cn.split(" ") : []);
+ return (arr.indexOf(className) != -1);
+ },
+ addClass:function(node,className) {
+ if (OZ.DOM.hasClass(node, className)) { return; }
+ var cn = OZ.$(node).className;
+ var arr = (cn ? cn.split(" ") : []);
+ arr.push(className);
+ OZ.$(node).className = arr.join(" ");
+ },
+ removeClass:function(node, className) {
+ if (!OZ.DOM.hasClass(node, className)) { return; }
+ var cn = OZ.$(node).className;
+ var arr = (cn ? cn.split(" ") : []);
+ var arr = arr.filter(function($){ return $ != className; });
+ OZ.$(node).className = arr.join(" ");
+ },
+ append:function() {
+ if (arguments.length == 1) {
+ var arr = arguments[0];
+ var root = OZ.$(arr[0]);
+ for (var i=1;i<arr.length;i++) { root.appendChild(OZ.$(arr[i])); }
+ } else for (var i=0;i<arguments.length;i++) { OZ.DOM.append(arguments[i]); }
+ }
+ },
+ Style:{
+ get:function(elm, prop) {
+ if (document.defaultView && document.defaultView.getComputedStyle) {
+ try {
+ var cs = elm.ownerDocument.defaultView.getComputedStyle(elm,"");
+ } catch(e) {
+ return false;
+ }
+ if (!cs) { return false; }
+ return cs[prop];
+ } else {
+ return elm.currentStyle[prop];
+ }
+ },
+ set:function(elm, obj) {
+ for (var p in obj) {
+ var val = obj[p];
+ if (p == "opacity" && OZ.ie) {
+ p = "filter";
+ val = "alpha(opacity="+Math.round(100*val)+")";
+ elm.style.zoom = 1;
+ } else if (p == "float") {
+ p = (OZ.ie ? "styleFloat" : "cssFloat");
+ }
+ if (p in elm.style) { elm.style[p] = val; }
+ }
+ }
+ },
+ Request:function(url, callback, options) {
+ var o = {data:false, method:"get", headers:{}, xml:false}
+ for (var p in options) { o[p] = options[p]; }
+ o.method = o.method.toUpperCase();
+
+ var xhr = false;
+ if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
+ else if (window.ActiveXObject) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
+ else { return false; }
+ xhr.open(o.method, url, true);
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState != 4) { return; }
+ if (!callback) { return; }
+ var data = (o.xml ? xhr.responseXML : xhr.responseText);
+ var headers = {};
+ var h = xhr.getAllResponseHeaders();
+ if (h) {
+ h = h.split(/[\r\n]/);
+ for (var i=0;i<h.length;i++) if (h[i]) {
+ var v = h[i].match(/^([^:]+): *(.*)$/);
+ headers[v[1]] = v[2];
+ }
+ }
+ callback(data,xhr.status,headers);
+ };
+ if (o.method == "POST") { xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); }
+ for (var p in o.headers) { xhr.setRequestHeader(p,o.headers[p]); }
+ xhr.send(o.data || null);
+ return xhr;
+ }
+}
+
+if (!Function.prototype.bind) {
+ Function.prototype.bind = function(thisObj) {
+ var fn = this;
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ return fn.apply(thisObj, args.concat(Array.prototype.slice.call(arguments)));
+ }
+ }
+};
+
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function(item, from) {
+ var len = this.length;
+ var i = from || 0;
+ if (i < 0) { i += len; }
+ for (;i<len;i++) {
+ if (i in this && this[i] === item) { return i; }
+ }
+ return -1;
+ }
+}
+if (!Array.indexOf) {
+ Array.indexOf = function(obj, item, from) { return Array.prototype.indexOf.call(obj, item, from); }
+}
+
+if (!Array.prototype.lastIndexOf) {
+ Array.prototype.lastIndexOf = function(item, from) {
+ var len = this.length;
+ var i = from || len-1;
+ if (i < 0) { i += len; }
+ for (;i>-1;i--) {
+ if (i in this && this[i] === item) { return i; }
+ }
+ return -1;
+ }
+}
+if (!Array.lastIndexOf) {
+ Array.lastIndexOf = function(obj, item, from) { return Array.prototype.lastIndexOf.call(obj, item, from); }
+}
+
+if (!Array.prototype.forEach) {
+ Array.prototype.forEach = function(cb, _this) {
+ var len = this.length;
+ for (var i=0;i<len;i++) {
+ if (i in this) { cb.call(_this, this[i], i, this); }
+ }
+ }
+}
+if (!Array.forEach) {
+ Array.forEach = function(obj, cb, _this) { Array.prototype.forEach.call(obj, cb, _this); }
+}
+
+if (!Array.prototype.every) {
+ Array.prototype.every = function(cb, _this) {
+ var len = this.length;
+ for (var i=0;i<len;i++) {
+ if (i in this && !cb.call(_this, this[i], i, this)) { return false; }
+ }
+ return true;
+ }
+}
+if (!Array.every) {
+ Array.every = function(obj, cb, _this) { return Array.prototype.every.call(obj, cb, _this); }
+}
+
+if (!Array.prototype.some) {
+ Array.prototype.some = function(cb, _this) {
+ var len = this.length;
+ for (var i=0;i<len;i++) {
+ if (i in this && cb.call(_this, this[i], i, this)) { return true; }
+ }
+ return false;
+ }
+}
+if (!Array.some) {
+ Array.some = function(obj, cb, _this) { return Array.prototype.some.call(obj, cb, _this); }
+}
+
+if (!Array.prototype.map) {
+ Array.prototype.map = function(cb, _this) {
+ var len = this.length;
+ var res = new Array(len);
+ for (var i=0;i<len;i++) {
+ if (i in this) { res[i] = cb.call(_this, this[i], i, this); }
+ }
+ return res;
+ }
+}
+if (!Array.map) {
+ Array.map = function(obj, cb, _this) { return Array.prototype.map.call(obj, cb, _this); }
+}
+
+if (!Array.prototype.filter) {
+ Array.prototype.filter = function(cb, _this) {
+ var len = this.length;
+ var res = [];
+ for (var i=0;i<len;i++) {
+ if (i in this) {
+ var val = this[i];
+ if (cb.call(_this, val, i, this)) { res.push(val); }
+ }
+ }
+ return res;
+ }
+}
+if (!Array.filter) {
+ Array.filter = function(obj, cb, _this) { return Array.prototype.filter.call(obj, cb, _this); }
+}
diff --git a/basicsuite/webengine/content/rubiks/js/quaternion.js b/basicsuite/webengine/content/rubiks/js/quaternion.js
new file mode 100644
index 0000000..a44cfea
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/js/quaternion.js
@@ -0,0 +1,78 @@
+var Quaternion = OZ.Class();
+
+Quaternion.fromRotation = function(axis, angle) {
+ var DEG2RAD = Math.PI/180;
+ var a = angle * DEG2RAD;
+
+ var sin = Math.sin(a/2);
+ var cos = Math.cos(a/2);
+
+ return new this(
+ axis[0]*sin, axis[1]*sin, axis[2]*sin,
+ cos
+ );
+}
+
+Quaternion.fromUnit = function() {
+ return new this(0, 0, 0, 1);
+}
+
+Quaternion.prototype.init = function(x, y, z, w) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.w = w;
+}
+
+Quaternion.prototype.normalize = function() {
+ var norm = Math.sqrt(this.x*this.x + this.y*this.y + this.z*this.z + this.w*this.w);
+ return new this.constructor(this.x/norm, this.y/norm, this.z/norm, this.w/norm);
+}
+
+Quaternion.prototype.conjugate = function() {
+ return new this.constructor(-this.x, -this.y, -this.z, this.w);
+}
+
+Quaternion.prototype.toString = function() {
+ return [this.x, this.y, this.z, this.w].toString(", ");
+}
+
+Quaternion.prototype.multiply = function(q) {
+ var p = this;
+
+ var x = p.w*q.x + p.x*q.w + p.y*q.z - p.z*q.y;
+ var y = p.w*q.y + p.y*q.w + p.z*q.x - p.x*q.z;
+ var z = p.w*q.z + p.z*q.w + p.x*q.y - p.y*q.x;
+ var w = p.w*q.w - p.x*q.x - p.y*q.y - p.z*q.z;
+
+ return new this.constructor(x, y, z, w);
+}
+
+Quaternion.prototype.toAxis = function() {
+ return [this.x, this.y, this.z];
+}
+
+Quaternion.prototype.toAngle = function() {
+ var RAD2DEG = 180/Math.PI;
+ return RAD2DEG * 2 * Math.acos(this.w);
+}
+
+Quaternion.prototype.toRotation = function() {
+ var axis = this.toAxis();
+ var angle = this.toAngle();
+ return "rotate3d(" + axis[0].toFixed(10) + "," + axis[1].toFixed(10) + "," + axis[2].toFixed(10) + "," + angle.toFixed(10) + "deg)";
+}
+
+Quaternion.prototype.toRotations = function() {
+ var RAD2DEG = 180/Math.PI;
+
+ var x = RAD2DEG * Math.atan2(2*(this.w*this.x + this.y*this.z), 1 - 2*(this.x*this.x + this.y*this.y));
+ var y = RAD2DEG * Math.asin(2*(this.w*this.y - this.x*this.z));
+ var z = RAD2DEG * Math.atan2(2*(this.w*this.z + this.x*this.y), 1 - 2*(this.y*this.y + this.z*this.z));
+
+ if (x < 0) { x += 360; }
+ if (y < 0) { y += 360; }
+ if (z < 0) { z += 360; }
+
+ return "rotateX(" + x.toFixed(10) + "deg) rotateY(" + y.toFixed(10) + "deg) rotate(" + z.toFixed(10) + "deg)";
+}
diff --git a/basicsuite/webengine/content/rubiks/js/rubik.js b/basicsuite/webengine/content/rubiks/js/rubik.js
new file mode 100644
index 0000000..4e6cf28
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/js/rubik.js
@@ -0,0 +1,492 @@
+Array.prototype.clone = function() {
+ var c = [];
+ var len = this.length;
+ for (var i=0;i<len;i++) { c.push(this[i]); }
+ return c;
+}
+
+Array.prototype.random = function() {
+ return this[Math.floor(Math.random()*this.length)];
+}
+
+var Face = OZ.Class();
+Face.SIZE = 100;
+Face.LEFT = 0;
+Face.RIGHT = 1;
+Face.TOP = 2;
+Face.BOTTOM = 3;
+Face.FRONT = 4;
+Face.BACK = 5;
+
+Face.ROTATION = [
+ [Face.TOP, Face.FRONT, Face.BOTTOM, Face.BACK].reverse(),
+ [Face.LEFT, Face.BACK, Face.RIGHT, Face.FRONT].reverse(),
+ [Face.LEFT, Face.BOTTOM, Face.RIGHT, Face.TOP].reverse()
+];
+
+Face.prototype.init = function(cube, type) {
+ this._cube = cube;
+ this._type = type;
+ this._color = null;
+ this._node = OZ.DOM.elm("div", {className:"face face"+type, width:Face.SIZE+"px", height:Face.SIZE+"px", position:"absolute", left:"0px", top:"0px"});
+ OZ.CSS3.set(this._node, "box-sizing", "border-box");
+// OZ.CSS3.set(this._node, "backface-visibility", "hidden");
+
+ switch (type) {
+ case Face.LEFT:
+ OZ.CSS3.set(this._node, "transform-origin", "100% 50%");
+ OZ.CSS3.set(this._node, "transform", "translate3d(-"+Face.SIZE+"px, 0px, 0px) rotateY(-90deg)");
+ break;
+ case Face.RIGHT:
+ OZ.CSS3.set(this._node, "transform-origin", "0% 50%");
+ OZ.CSS3.set(this._node, "transform", "translate3d("+Face.SIZE+"px, 0px, 0px) rotateY(90deg)");
+ break;
+ case Face.TOP:
+ OZ.CSS3.set(this._node, "transform-origin", "50% 100%");
+ OZ.CSS3.set(this._node, "transform", "translate3d(0px, -"+Face.SIZE+"px, 0px) rotateX(90deg)");
+ break;
+ case Face.BOTTOM:
+ OZ.CSS3.set(this._node, "transform-origin", "50% 0%");
+ OZ.CSS3.set(this._node, "transform", "translate3d(0px, "+Face.SIZE+"px, 0px) rotateX(-90deg)");
+ break;
+ case Face.FRONT:
+ break;
+ case Face.BACK:
+ OZ.CSS3.set(this._node, "transform", "translate3d(0px, 0px, -"+Face.SIZE+"px) rotateY(180deg)");
+ break;
+ }
+}
+
+Face.prototype.getCube = function() {
+ return this._cube;
+}
+
+Face.prototype.getNode = function() {
+ return this._node;
+}
+
+Face.prototype.getType = function() {
+ return this._type;
+}
+
+Face.prototype.setColor = function(color) {
+ this._color = color;
+ this._node.style.backgroundColor = color;
+}
+
+Face.prototype.getColor = function() {
+ return this._color;
+}
+
+var Cube = OZ.Class();
+Cube.prototype.init = function(position) {
+ this._rotation = null;
+ this._position = position;
+ this._node = OZ.DOM.elm("div", {className:"cube", position:"absolute", width:Face.SIZE+"px", height:Face.SIZE+"px"});
+ this._faces = {};
+ this._tmpFaces = {};
+ OZ.CSS3.set(this._node, "transform-style", "preserve-3d");
+
+ this._update();
+}
+
+Cube.prototype.getFaces = function() {
+ return this._faces;
+}
+
+Cube.prototype.setFace = function(type, color) {
+ if (!(type in this._faces)) {
+ var face = new Face(this, type);
+ this._node.appendChild(face.getNode());
+ this._faces[type] = face;
+ }
+ this._faces[type].setColor(color);
+}
+
+Cube.prototype.setRotation = function(rotation) {
+ this._rotation = rotation;
+ this._update();
+}
+
+Cube.prototype.complete = function() {
+ for (var i=0;i<6;i++) {
+ if (i in this._faces) { continue; }
+ this.addFace(i, "black");
+ }
+}
+
+Cube.prototype.prepareColorChange = function(sourceCube, rotation) {
+ this._tmpFaces = {};
+ var sourceFaces = sourceCube.getFaces();
+ for (var p in sourceFaces) {
+ var sourceType = parseInt(p);
+ var targetType = this._rotateType(sourceType, rotation);
+ this._tmpFaces[targetType] = sourceFaces[sourceType].getColor();
+ }
+}
+
+Cube.prototype.commitColorChange = function() {
+// var parent = this._node.parentNode;
+// parent.removeChild(this._node);
+
+ OZ.DOM.clear(this._node);
+ this._faces = {};
+ for (var p in this._tmpFaces) {
+ var type = parseInt(p);
+ this.setFace(type, this._tmpFaces[p]);
+ }
+ this._tmpFaces = {};
+
+ this._rotation = null;
+ this._update();
+// parent.appendChild(this._node);
+}
+
+Cube.prototype._rotateType = function(type, rotation) {
+ for (var i=0;i<3;i++) {
+ if (!rotation[i]) { continue; }
+ var faces = Face.ROTATION[i];
+ var index = faces.indexOf(type);
+ if (index == -1) { continue; } /* no rotation available */
+ index = (index + rotation[i] + faces.length) % faces.length;
+ return faces[index];
+ }
+
+ return type;
+}
+
+Cube.prototype._update = function() {
+ var transform = "";
+ transform += "translate3d("+(-Face.SIZE/2)+"px, "+(-Face.SIZE/2)+"px, "+(-Face.SIZE/2)+"px) ";
+ if (this._rotation) { transform += this._rotation + " "; }
+
+ var half = Math.floor(Rubik.SIZE/2);
+ var x = this._position[0];
+ var y = this._position[1];
+ var z = -this._position[2];
+ x -= half;
+ y -= half;
+ z += half + 1/2;
+ transform += "translate3d("+(x*Face.SIZE)+"px, "+(y*Face.SIZE)+"px, "+(z*Face.SIZE)+"px)";
+
+ var prop = OZ.CSS3.getProperty("transform");
+ var val = this._rotation ? prop + " 300ms" : "";
+ OZ.CSS3.set(this._node, "transition", val);
+
+ OZ.CSS3.set(this._node, "transform", transform);
+}
+
+Cube.prototype.getPosition = function() {
+ return this._position;
+}
+
+Cube.prototype.getNode = function() {
+ return this._node;
+}
+
+Cube.prototype.getFaces = function() {
+ return this._faces;
+}
+
+var Rubik = OZ.Class();
+Rubik.SIZE = 3;
+Rubik.prototype.init = function() {
+ this._cubes = [];
+ this._faces = [];
+ this._faceNodes = [];
+ this._help = {};
+ this._drag = {
+ ec: [],
+ mouse: [],
+ face: null
+ };
+
+ this._rotation = Quaternion.fromRotation([1, 0, 0], -35).multiply(Quaternion.fromRotation([0, 1, 0], 45));
+ this._node = OZ.DOM.elm("div", {position:"absolute", left:"50%", top:"55%", width:"0px", height:"0px"});
+ document.body.appendChild(this._node);
+
+ OZ.CSS3.set(document.body, "perspective", "460px");
+ OZ.CSS3.set(this._node, "transform-style", "preserve-3d");
+
+ this._build();
+ this._update();
+ OZ.Event.add(document.body, "mousedown touchstart", this._dragStart.bind(this));
+
+ setTimeout(this.randomize.bind(this), 500);
+}
+
+Rubik.prototype.randomize = function() {
+ var remain = 10;
+ var cb = function() {
+ remain--;
+ if (remain > 0) {
+ this._rotateRandom();
+ } else {
+ OZ.Event.remove(e);
+
+ this._help.a = OZ.DOM.elm("p", {innerHTML:"Drag or swipe the background to rotate the whole cube."});
+ this._help.b = OZ.DOM.elm("p", {innerHTML:"Drag or swipe the cube to rotate its layers."});
+ document.body.appendChild(this._help.a);
+ document.body.appendChild(this._help.b);
+ OZ.CSS3.set(this._help.a, "transition", "opacity 500ms");
+ OZ.CSS3.set(this._help.b, "transition", "opacity 500ms");
+
+ }
+ }
+ var e = OZ.Event.add(null, "rotated", cb.bind(this));
+ this._rotateRandom();
+}
+
+Rubik.prototype._rotateRandom = function() {
+ var method = "_rotate" + ["X", "Y", "Z"].random();
+ var dir = [-1, 1].random();
+ var layer = Math.floor(Math.random()*Rubik.SIZE);
+ this[method](dir, layer);
+}
+
+Rubik.prototype._update = function() {
+ OZ.CSS3.set(this._node, "transform", "translateZ(" + (-Face.SIZE/2 - Face.SIZE) + "px) " + this._rotation.toRotation() + " translateZ("+(Face.SIZE/2)+"px)");
+}
+
+Rubik.prototype._eventToFace = function(e) {
+ if (document.elementFromPoint) {
+ e = (e.touches ? e.touches[0] : e);
+ var node = document.elementFromPoint(e.clientX, e.clientY);
+ } else {
+ var node = OZ.Event.target(e);
+ }
+ var index = this._faceNodes.indexOf(node);
+ if (index == -1) { return null; }
+ return this._faces[index];
+}
+
+Rubik.prototype._dragStart = function(e) {
+ this._faces = [];
+ this._faceNodes = [];
+ for (var i=0;i<this._cubes.length;i++) {
+ var faces = this._cubes[i].getFaces();
+ for (var p in faces) {
+ this._faces.push(faces[p]);
+ this._faceNodes.push(faces[p].getNode());
+ }
+ }
+
+ OZ.Event.prevent(e);
+ this._drag.face = this._eventToFace(e);
+ e = (e.touches ? e.touches[0] : e);
+ this._drag.mouse = [e.clientX, e.clientY];
+
+ this._drag.ec.push(OZ.Event.add(document.body, "mousemove touchmove", this._dragMove.bind(this)));
+ this._drag.ec.push(OZ.Event.add(document.body, "mouseup touchend", this._dragEnd.bind(this)));
+}
+
+Rubik.prototype._dragMove = function(e) {
+ if (e.touches && e.touches.length > 1) { return; }
+
+ if (this._drag.face) { /* check second face for rotation */
+ var thisFace = this._eventToFace(e);
+ if (!thisFace || thisFace == this._drag.face) { return; }
+ this._dragEnd();
+ this._rotate(this._drag.face, thisFace);
+ } else { /* rotate cube */
+ e = (e.touches ? e.touches[0] : e);
+ var mouse = [e.clientX, e.clientY];
+ var dx = mouse[0] - this._drag.mouse[0];
+ var dy = mouse[1] - this._drag.mouse[1];
+ var norm = Math.sqrt(dx*dx+dy*dy);
+ if (!norm) { return; }
+ var N = [-dy/norm, dx/norm];
+
+ this._drag.mouse = mouse;
+ this._rotation = Quaternion.fromRotation([N[0], N[1], 0], norm/2).multiply(this._rotation);
+ this._update();
+ }
+}
+
+Rubik.prototype._dragEnd = function(e) {
+ while (this._drag.ec.length) { OZ.Event.remove(this._drag.ec.pop()); }
+
+ if (!this._drag.face && this._help.a) {
+ this._help.a.style.opacity = 0;
+ this._help.a = null;
+ }
+}
+
+Rubik.prototype._rotate = function(face1, face2) {
+ var t1 = face1.getType();
+ var t2 = face2.getType();
+ var pos1 = face1.getCube().getPosition();
+ var pos2 = face2.getCube().getPosition();
+
+ /* find difference between cubes */
+ var diff = 0;
+ var diffIndex = -1;
+ for (var i=0;i<3;i++) {
+ var d = pos1[i]-pos2[i];
+ if (d) {
+ if (diffIndex != -1) { return; } /* different in >1 dimensions */
+ diff = (d > 0 ? 1 : -1);
+ diffIndex = i;
+ }
+ }
+
+ if (t1 == t2) { /* same face => diffIndex != -1 */
+ switch (t1) {
+ case Face.FRONT:
+ case Face.BACK:
+ var coef = (t1 == Face.FRONT ? 1 : -1);
+ if (diffIndex == 0) { this._rotateY(coef*diff, pos1[1]); } else { this._rotateX(coef*diff, pos1[0]); }
+ break;
+
+ case Face.LEFT:
+ case Face.RIGHT:
+ var coef = (t1 == Face.LEFT ? 1 : -1);
+ if (diffIndex == 2) { this._rotateY(-coef*diff, pos1[1]); } else { this._rotateZ(coef*diff, pos1[2]); }
+ break;
+
+ case Face.TOP:
+ case Face.BOTTOM:
+ var coef = (t1 == Face.TOP ? 1 : -1);
+ if (diffIndex == 0) { this._rotateZ(-coef*diff, pos1[2]); } else { this._rotateX(-coef*diff, pos1[0]); }
+ break;
+ }
+ return;
+ }
+
+ switch (t1) { /* different face => same cube, diffIndex == 1 */
+ case Face.FRONT:
+ case Face.BACK:
+ var coef = (t1 == Face.FRONT ? 1 : -1);
+ if (t2 == Face.LEFT) { this._rotateY(1 * coef, pos1[1]); }
+ if (t2 == Face.RIGHT) { this._rotateY(-1 * coef, pos1[1]); }
+ if (t2 == Face.TOP) { this._rotateX(1 * coef, pos1[0]); }
+ if (t2 == Face.BOTTOM) { this._rotateX(-1 * coef, pos1[0]); }
+ break;
+
+ case Face.LEFT:
+ case Face.RIGHT:
+ var coef = (t1 == Face.LEFT ? 1 : -1);
+ if (t2 == Face.FRONT) { this._rotateY(-1 * coef, pos1[1]); }
+ if (t2 == Face.BACK) { this._rotateY(1 * coef, pos1[1]); }
+ if (t2 == Face.TOP) { this._rotateZ(1 * coef, pos1[2]); }
+ if (t2 == Face.BOTTOM) { this._rotateZ(-1 * coef, pos1[2]); }
+ break;
+
+ case Face.TOP:
+ case Face.BOTTOM:
+ var coef = (t1 == Face.TOP ? 1 : -1);
+ if (t2 == Face.FRONT) { this._rotateX(-1 * coef, pos1[0]); }
+ if (t2 == Face.BACK) { this._rotateX(1 * coef, pos1[0]); }
+ if (t2 == Face.LEFT) { this._rotateZ(-1 * coef, pos1[2]); }
+ if (t2 == Face.RIGHT) { this._rotateZ(1 * coef, pos1[2]); }
+ break;
+ }
+
+}
+
+Rubik.prototype._rotateX = function(dir, layer) {
+ var cubes = [];
+ for (var i=0;i<Rubik.SIZE*Rubik.SIZE;i++) {
+ cubes.push(this._cubes[layer + i*Rubik.SIZE]);
+ }
+ this._rotateCubes(cubes, [dir, 0, 0]);
+}
+
+Rubik.prototype._rotateY = function(dir, layer) {
+ var cubes = [];
+ for (var i=0;i<Rubik.SIZE;i++) {
+ for (var j=0;j<Rubik.SIZE;j++) {
+ cubes.push(this._cubes[j + layer*Rubik.SIZE + i*Rubik.SIZE*Rubik.SIZE]);
+ }
+ }
+ this._rotateCubes(cubes, [0, -dir, 0]);
+}
+
+Rubik.prototype._rotateZ = function(dir, layer) {
+ var cubes = [];
+ var offset = layer * Rubik.SIZE * Rubik.SIZE;
+ for (var i=0;i<Rubik.SIZE*Rubik.SIZE;i++) {
+ cubes.push(this._cubes[offset+i]);
+ }
+ this._rotateCubes(cubes, [0, 0, dir]);
+}
+
+Rubik.prototype._rotateCubes = function(cubes, rotation) {
+ var suffixes = ["X", "Y", ""];
+
+ var prefix = OZ.CSS3.getPrefix("transition");
+ if (prefix === null) {
+ this._finalizeRotation(cubes, rotation);
+ } else {
+ var cb = function() {
+ OZ.Event.remove(e);
+ this._finalizeRotation(cubes, rotation);
+ }
+ var e = OZ.Event.add(document.body, "webkitTransitionEnd transitionend MSTransitionEnd oTransitionEnd", cb.bind(this));
+
+ var str = "";
+ for (var i=0;i<3;i++) {
+ if (!rotation[i]) { continue; }
+ str = "rotate" + suffixes[i] + "(" + (90*rotation[i]) + "deg)";
+ }
+ for (var i=0;i<cubes.length;i++) { cubes[i].setRotation(str); }
+ }
+
+}
+
+/**
+ * Remap colors
+ */
+Rubik.prototype._finalizeRotation = function(cubes, rotation) {
+ var direction = 0;
+ for (var i=0;i<3;i++) {
+ if (rotation[i]) { direction = rotation[i]; }
+ }
+
+ if (rotation[0]) { direction *= -1; } /* FIXME wtf */
+
+ var half = Math.floor(Rubik.SIZE/2);
+
+ for (var i=0;i<cubes.length;i++) {
+ var x = i % Rubik.SIZE - half;
+ var y = Math.floor(i / Rubik.SIZE) - half;
+
+ var source = [y*direction + half, -x*direction + half];
+ var sourceIndex = source[0] + Rubik.SIZE*source[1];
+
+ cubes[i].prepareColorChange(cubes[sourceIndex], rotation);
+ }
+
+ for (var i=0;i<cubes.length;i++) { cubes[i].commitColorChange(); }
+
+ setTimeout(function() {
+ if (this._help.b) {
+ this._help.b.style.opacity = 0;
+ this._help.b = null;
+ }
+
+ this.dispatch("rotated");
+ }.bind(this), 100);
+}
+
+Rubik.prototype._build = function() {
+ for (var z=0;z<Rubik.SIZE;z++) {
+ for (var y=0;y<Rubik.SIZE;y++) {
+ for (var x=0;x<Rubik.SIZE;x++) {
+ var cube = new Cube([x, y, z]);
+ this._cubes.push(cube);
+
+ if (z == 0) { cube.setFace(Face.FRONT, "red"); }
+ if (z == 2) { cube.setFace(Face.BACK, "blue"); }
+
+ if (x == 0) { cube.setFace(Face.LEFT, "green"); }
+ if (x == 2) { cube.setFace(Face.RIGHT, "yellow"); }
+
+ if (y == 0) { cube.setFace(Face.TOP, "cyan"); }
+ if (y == 2) { cube.setFace(Face.BOTTOM, "teal"); }
+ this._node.appendChild(cube.getNode());
+ }
+ }
+ }
+
+}
diff --git a/basicsuite/webengine/content/rubiks/screenshot.png b/basicsuite/webengine/content/rubiks/screenshot.png
new file mode 100644
index 0000000..45b0e37
--- /dev/null
+++ b/basicsuite/webengine/content/rubiks/screenshot.png
Binary files differ
diff --git a/basicsuite/webengine/content/webgl/helloqt.html b/basicsuite/webengine/content/webgl/helloqt.html
new file mode 100644
index 0000000..95f0a44
--- /dev/null
+++ b/basicsuite/webengine/content/webgl/helloqt.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
+ <style>
+ body {
+ margin: 0px;
+ overflow: hidden;
+ background-color: black;
+ }
+ canvas {
+/* -webkit-transform: scale3d(2.0, 2.0, 1.0);
+ -webkit-transform-origin: 0 0 0;
+ -moz-transform: scale3d(2.0, 2.0, 1.0);
+ -moz-transform-origin: 0 0 0;*/
+ }
+ </style>
+ </head>
+
+ <body>
+ <div id="container"></div>
+ <script src="three.min.js"></script>
+ <script id="vsChecker" type="x-shader/x-vertex">
+varying vec2 vUv;
+void main()
+{
+ vUv = uv;
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
+}
+ </script>
+ <script id="fsChecker" type="x-shader/x-fragment">
+varying vec2 vUv;
+uniform float dy;
+void main()
+{
+ vec3 c = vec3(0.0);
+ float x = 4.0 * vUv.x;
+ float y = 4.0 * vUv.y + dy;
+ if (fract(x) > 0.5 ^^ fract(y) > 0.5)
+ c = vec3(1.0);
+ gl_FragColor = vec4(c, 1.0);
+}
+ </script>
+ <script src="qtlogo.js"></script>
+ <script src="helloqt.js"></script>
+ </body>
+
+</html>
diff --git a/basicsuite/webengine/content/webgl/helloqt.js b/basicsuite/webengine/content/webgl/helloqt.js
new file mode 100644
index 0000000..b514628
--- /dev/null
+++ b/basicsuite/webengine/content/webgl/helloqt.js
@@ -0,0 +1,223 @@
+var shadow = false;
+
+var container = document.getElementById("container");
+var camera = null;
+var scene;
+var renderer;
+var cbTexture;
+var cbScene;
+var cbCamera;
+var cbUniforms = {
+ dy: { type: "f", value: 0 }
+};
+var cb;
+var logo;
+var spotlight;
+
+var viewSize = {
+ w: 0,
+ h: 0,
+ update: function () {
+ viewSize.w = window.innerWidth;// / 2;
+ viewSize.h = window.innerHeight;// / 2;
+ }
+};
+
+var onResize = function (event) {
+ viewSize.update();
+ if (!camera) {
+ camera = new THREE.PerspectiveCamera(60, viewSize.w / viewSize.h, 0.01, 100);
+ } else {
+ camera.aspect = viewSize.w / viewSize.h;
+ camera.updateProjectionMatrix();
+ }
+ renderer.setSize(viewSize.w, viewSize.h);
+};
+
+var setupCheckerboard = function () {
+ cbTexture = new THREE.WebGLRenderTarget(512, 512,
+ { minFilter: THREE.LinearFilter,
+ magFilter: THREE.LinearFilter,
+ format: THREE.RGBFormat });
+ cbScene = new THREE.Scene();
+ cbCamera = new THREE.OrthographicCamera(-1, 1, 1, -1, -100, 100);
+ var geom = new THREE.PlaneGeometry(2, 2);
+ var material = new THREE.ShaderMaterial({
+ uniforms: cbUniforms,
+ vertexShader: document.getElementById("vsChecker").textContent,
+ fragmentShader: document.getElementById("fsChecker").textContent
+ });
+ var mesh = new THREE.Mesh(geom, material);
+ cbScene.add(mesh);
+};
+
+var renderCheckerboard = function () {
+ cbUniforms.dy.value += 0.01;
+ renderer.render(cbScene, cbCamera, cbTexture, true);
+};
+
+var generateLogo = function () {
+ var geom = new THREE.Geometry();
+ var idx = 0;
+ for (var i = 0; i < qtlogo.length; i += 18) {
+ geom.vertices.push(new THREE.Vector3(qtlogo[i], qtlogo[i+1], qtlogo[i+2]));
+ var n1 = new THREE.Vector3(qtlogo[i+3], qtlogo[i+4], qtlogo[i+5]);
+ geom.vertices.push(new THREE.Vector3(qtlogo[i+6], qtlogo[i+7], qtlogo[i+8]));
+ var n2 = new THREE.Vector3(qtlogo[i+9], qtlogo[i+10], qtlogo[i+11]);
+ geom.vertices.push(new THREE.Vector3(qtlogo[i+12], qtlogo[i+13], qtlogo[i+14]));
+ var n3 = new THREE.Vector3(qtlogo[i+15], qtlogo[i+16], qtlogo[i+17]);
+ geom.faces.push(new THREE.Face3(idx, idx+1, idx+2, [n1, n2, n3]));
+ idx += 3;
+ }
+ return geom;
+};
+
+var setupScene = function () {
+ if (shadow)
+ renderer.shadowMapEnabled = true;
+
+ setupCheckerboard();
+ var geom = new THREE.PlaneGeometry(4, 4);
+ var material = new THREE.MeshPhongMaterial({ ambient: 0x060606,
+ color: 0x40B000,
+ specular: 0x03AA00,
+ shininess: 10,
+ map: cbTexture });
+ cb = new THREE.Mesh(geom, material);
+ if (shadow)
+ cb.receiveShadow = true;
+// cb.rotation.x = -Math.PI / 3;
+ scene.add(cb);
+
+ geom = generateLogo();
+ material = new THREE.MeshPhongMaterial({ ambient: 0x060606,
+ color: 0x40B000,
+ specular: 0x03AA00,
+ shininess: 10 });
+ logo = new THREE.Mesh(geom, material);
+ logo.position.z = 2;
+ logo.rotation.x = Math.PI;
+ if (shadow)
+ logo.castShadow = true;
+ scene.add(logo);
+
+ spotlight = new THREE.SpotLight(0xFFFFFF);
+ spotlight.position.set(0, 0.5, 4);
+ scene.add(spotlight);
+
+ if (shadow) {
+ spotlight.castShadow = true;
+ spotlight.shadowCameraNear = 0.01;
+ spotlight.shadowCameraFar = 100;
+ spotlight.shadowDarkness = 0.5;
+ spotlight.shadowMapWidth = 1024;
+ spotlight.shadowMapHeight = 1024;
+ }
+
+ camera.position.z = 4;
+};
+
+var render = function () {
+ requestAnimationFrame(render);
+ renderCheckerboard();
+ renderer.render(scene, camera);
+ logo.rotation.y += 0.01;
+};
+
+var pointerState = {
+ x: 0,
+ y: 0,
+ active: false,
+ touchId: 0
+};
+
+var onMouseDown = function (e) {
+ e.preventDefault();
+ if (pointerState.active)
+ return;
+
+ if (e.changedTouches) {
+ var t = e.changedTouches[0];
+ pointerState.touchId = t.identifier;
+ pointerState.x = t.clientX;
+ pointerState.y = t.clientY;
+ } else {
+ pointerState.x = e.clientX;
+ pointerState.y = e.clientY;
+ }
+ pointerState.active = true;
+};
+
+var onMouseUp = function (e) {
+ e.preventDefault();
+ if (!pointerState.active)
+ return;
+
+ if (e.changedTouches) {
+ for (var i = 0; i < e.changedTouches.length; ++i)
+ if (e.changedTouches[i].identifier == pointerState.touchId) {
+ pointerState.active = false;
+ break;
+ }
+ } else {
+ pointerState.active = false;
+ }
+};
+
+var onMouseMove = function (e) {
+ e.preventDefault();
+ if (!pointerState.active)
+ return;
+
+ var x, y;
+ if (e.changedTouches) {
+ for (var i = 0; i < e.changedTouches.length; ++i)
+ if (e.changedTouches[i].identifier == pointerState.touchId) {
+ x = e.changedTouches[i].clientX;
+ y = e.changedTouches[i].clientY;
+ break;
+ }
+ } else {
+ x = e.clientX;
+ y = e.clientY;
+ }
+ if (x === undefined)
+ return;
+
+ var dx = x - pointerState.x;
+ var dy = y - pointerState.y;
+ pointerState.x = x;
+ pointerState.y = y;
+ dx /= 100;
+ dy /= -100;
+ spotlight.target.position.set(spotlight.target.position.x + dx,
+ spotlight.target.position.y + dy,
+ 0);
+};
+
+var main = function () {
+ scene = new THREE.Scene();
+ try {
+ renderer = new THREE.WebGLRenderer({ antialias: false /*true*/ });
+ } catch (e) {
+ console.log("Could not create WebGLRenderer.");
+ container.innerHTML = noWebGLMessage= "<div style=\"font-family: monospace; font-size: 13px; margin: 5em auto 0px; padding: 2em; width: 400px; "
+ + "height 100px; text-align: center; background-color: rgb(238, 238, 238);\">WebGLRenderer could not be created.</div>";
+ return;
+ }
+
+ container.appendChild(renderer.domElement);
+ onResize();
+ window.addEventListener("resize", onResize);
+ window.addEventListener("mousedown", onMouseDown);
+ window.addEventListener("touchstart", onMouseDown);
+ window.addEventListener("mouseup", onMouseUp);
+ window.addEventListener("touchend", onMouseUp);
+ window.addEventListener("touchcancel", onMouseUp);
+ window.addEventListener("mousemove", onMouseMove);
+ window.addEventListener("touchmove", onMouseMove);
+ setupScene();
+ render();
+};
+
+main();
diff --git a/basicsuite/webengine/content/webgl/qtlogo.js b/basicsuite/webengine/content/webgl/qtlogo.js
new file mode 100644
index 0000000..e2eba96
--- /dev/null
+++ b/basicsuite/webengine/content/webgl/qtlogo.js
@@ -0,0 +1,2468 @@
+var qtlogo = [
+0.060000,-0.140000,-0.050000,0.000000,0.000000,-1.000000,
+-0.140000,0.060000,-0.050000,0.000000,0.000000,-1.000000,
+0.140000,-0.060000,-0.050000,0.000000,0.000000,-1.000000,
+-0.060000,0.140000,-0.050000,0.000000,0.000000,-1.000000,
+0.140000,-0.060000,-0.050000,0.000000,0.000000,-1.000000,
+-0.140000,0.060000,-0.050000,0.000000,0.000000,-1.000000,
+-0.140000,0.060000,0.050000,0.000000,0.000000,1.000000,
+0.060000,-0.140000,0.050000,0.000000,0.000000,1.000000,
+0.140000,-0.060000,0.050000,0.000000,0.000000,1.000000,
+0.140000,-0.060000,0.050000,0.000000,0.000000,1.000000,
+-0.060000,0.140000,0.050000,0.000000,0.000000,1.000000,
+-0.140000,0.060000,0.050000,0.000000,0.000000,1.000000,
+0.080000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.080000,-0.050000,0.000000,0.000000,-1.000000,
+0.300000,0.220000,-0.050000,0.000000,0.000000,-1.000000,
+0.220000,0.300000,-0.050000,0.000000,0.000000,-1.000000,
+0.300000,0.220000,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.080000,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.080000,0.050000,0.000000,0.000000,1.000000,
+0.080000,0.000000,0.050000,0.000000,0.000000,1.000000,
+0.300000,0.220000,0.050000,0.000000,0.000000,1.000000,
+0.300000,0.220000,0.050000,0.000000,0.000000,1.000000,
+0.220000,0.300000,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.080000,0.050000,0.000000,0.000000,1.000000,
+0.060000,-0.140000,0.050000,0.707107,-0.707107,0.000000,
+0.060000,-0.140000,-0.050000,0.707107,-0.707107,0.000000,
+0.140000,-0.060000,0.050000,0.707107,-0.707107,0.000000,
+0.140000,-0.060000,-0.050000,0.707107,-0.707107,0.000000,
+0.140000,-0.060000,0.050000,0.707107,-0.707107,0.000000,
+0.060000,-0.140000,-0.050000,0.707107,-0.707107,0.000000,
+0.140000,-0.060000,0.050000,0.707107,0.707107,0.000000,
+0.140000,-0.060000,-0.050000,0.707107,0.707107,0.000000,
+-0.060000,0.140000,0.050000,0.707107,0.707107,0.000000,
+-0.060000,0.140000,-0.050000,0.707107,0.707107,0.000000,
+-0.060000,0.140000,0.050000,0.707107,0.707107,0.000000,
+0.140000,-0.060000,-0.050000,0.707107,0.707107,0.000000,
+-0.060000,0.140000,0.050000,-0.707107,0.707107,0.000000,
+-0.060000,0.140000,-0.050000,-0.707107,0.707107,0.000000,
+-0.140000,0.060000,0.050000,-0.707107,0.707107,0.000000,
+-0.140000,0.060000,-0.050000,-0.707107,0.707107,0.000000,
+-0.140000,0.060000,0.050000,-0.707107,0.707107,0.000000,
+-0.060000,0.140000,-0.050000,-0.707107,0.707107,0.000000,
+-0.140000,0.060000,0.050000,-0.707107,-0.707107,0.000000,
+-0.140000,0.060000,-0.050000,-0.707107,-0.707107,0.000000,
+0.060000,-0.140000,0.050000,-0.707107,-0.707107,0.000000,
+0.060000,-0.140000,-0.050000,-0.707107,-0.707107,0.000000,
+0.060000,-0.140000,0.050000,-0.707107,-0.707107,0.000000,
+-0.140000,0.060000,-0.050000,-0.707107,-0.707107,0.000000,
+0.080000,0.000000,0.050000,0.707107,-0.707107,0.000000,
+0.080000,0.000000,-0.050000,0.707107,-0.707107,0.000000,
+0.300000,0.220000,0.050000,0.707107,-0.707107,0.000000,
+0.300000,0.220000,-0.050000,0.707107,-0.707107,0.000000,
+0.300000,0.220000,0.050000,0.707107,-0.707107,0.000000,
+0.080000,0.000000,-0.050000,0.707107,-0.707107,0.000000,
+0.300000,0.220000,0.050000,0.707107,0.707107,0.000000,
+0.300000,0.220000,-0.050000,0.707107,0.707107,0.000000,
+0.220000,0.300000,0.050000,0.707107,0.707107,0.000000,
+0.220000,0.300000,-0.050000,0.707107,0.707107,0.000000,
+0.220000,0.300000,0.050000,0.707107,0.707107,0.000000,
+0.300000,0.220000,-0.050000,0.707107,0.707107,0.000000,
+0.220000,0.300000,0.050000,-0.707107,0.707107,0.000000,
+0.220000,0.300000,-0.050000,-0.707107,0.707107,0.000000,
+0.000000,0.080000,0.050000,-0.707107,0.707107,0.000000,
+0.000000,0.080000,-0.050000,-0.707107,0.707107,0.000000,
+0.000000,0.080000,0.050000,-0.707107,0.707107,0.000000,
+0.220000,0.300000,-0.050000,-0.707107,0.707107,0.000000,
+0.000000,0.300000,-0.050000,0.000000,0.000000,-1.000000,
+0.018837,0.299408,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.200000,-0.050000,0.000000,0.000000,-1.000000,
+0.012558,0.199605,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.200000,-0.050000,0.000000,0.000000,-1.000000,
+0.018837,0.299408,-0.050000,0.000000,0.000000,-1.000000,
+0.018837,0.299408,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.300000,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.200000,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.200000,0.050000,0.000000,0.000000,1.000000,
+0.012558,0.199605,0.050000,0.000000,0.000000,1.000000,
+0.018837,0.299408,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.200000,0.050000,-0.031411,-0.999507,0.000000,
+0.000000,0.200000,-0.050000,-0.031411,-0.999507,0.000000,
+0.012558,0.199605,0.050000,-0.031411,-0.999507,0.000000,
+0.012558,0.199605,-0.050000,-0.031411,-0.999507,0.000000,
+0.012558,0.199605,0.050000,-0.031411,-0.999507,0.000000,
+0.000000,0.200000,-0.050000,-0.031411,-0.999507,0.000000,
+0.018837,0.299408,0.050000,0.031411,0.999507,0.000000,
+0.018837,0.299408,-0.050000,0.031411,0.999507,0.000000,
+0.000000,0.300000,0.050000,0.031411,0.999507,0.000000,
+0.000000,0.300000,-0.050000,0.031411,0.999507,0.000000,
+0.000000,0.300000,0.050000,0.031411,0.999507,0.000000,
+0.018837,0.299408,-0.050000,0.031411,0.999507,0.000000,
+0.018837,0.299408,-0.050000,0.000000,0.000000,-1.000000,
+0.037600,0.297634,-0.050000,0.000000,0.000000,-1.000000,
+0.012558,0.199605,-0.050000,0.000000,0.000000,-1.000000,
+0.025067,0.198423,-0.050000,0.000000,0.000000,-1.000000,
+0.012558,0.199605,-0.050000,0.000000,0.000000,-1.000000,
+0.037600,0.297634,-0.050000,0.000000,0.000000,-1.000000,
+0.037600,0.297634,0.050000,0.000000,0.000000,1.000000,
+0.018837,0.299408,0.050000,0.000000,0.000000,1.000000,
+0.012558,0.199605,0.050000,0.000000,0.000000,1.000000,
+0.012558,0.199605,0.050000,0.000000,0.000000,1.000000,
+0.025067,0.198423,0.050000,0.000000,0.000000,1.000000,
+0.037600,0.297634,0.050000,0.000000,0.000000,1.000000,
+0.012558,0.199605,0.050000,-0.094107,-0.995562,0.000000,
+0.012558,0.199605,-0.050000,-0.094107,-0.995562,0.000000,
+0.025067,0.198423,0.050000,-0.094107,-0.995562,0.000000,
+0.025067,0.198423,-0.050000,-0.094107,-0.995562,0.000000,
+0.025067,0.198423,0.050000,-0.094107,-0.995562,0.000000,
+0.012558,0.199605,-0.050000,-0.094107,-0.995562,0.000000,
+0.037600,0.297634,0.050000,0.094108,0.995562,0.000000,
+0.037600,0.297634,-0.050000,0.094108,0.995562,0.000000,
+0.018837,0.299408,0.050000,0.094108,0.995562,0.000000,
+0.018837,0.299408,-0.050000,0.094108,0.995562,0.000000,
+0.018837,0.299408,0.050000,0.094108,0.995562,0.000000,
+0.037600,0.297634,-0.050000,0.094108,0.995562,0.000000,
+0.037600,0.297634,-0.050000,0.000000,0.000000,-1.000000,
+0.056214,0.294686,-0.050000,0.000000,0.000000,-1.000000,
+0.025067,0.198423,-0.050000,0.000000,0.000000,-1.000000,
+0.037476,0.196457,-0.050000,0.000000,0.000000,-1.000000,
+0.025067,0.198423,-0.050000,0.000000,0.000000,-1.000000,
+0.056214,0.294686,-0.050000,0.000000,0.000000,-1.000000,
+0.056214,0.294686,0.050000,0.000000,0.000000,1.000000,
+0.037600,0.297634,0.050000,0.000000,0.000000,1.000000,
+0.025067,0.198423,0.050000,0.000000,0.000000,1.000000,
+0.025067,0.198423,0.050000,0.000000,0.000000,1.000000,
+0.037476,0.196457,0.050000,0.000000,0.000000,1.000000,
+0.056214,0.294686,0.050000,0.000000,0.000000,1.000000,
+0.025067,0.198423,0.050000,-0.156436,-0.987688,0.000000,
+0.025067,0.198423,-0.050000,-0.156436,-0.987688,0.000000,
+0.037476,0.196457,0.050000,-0.156436,-0.987688,0.000000,
+0.037476,0.196457,-0.050000,-0.156436,-0.987688,0.000000,
+0.037476,0.196457,0.050000,-0.156436,-0.987688,0.000000,
+0.025067,0.198423,-0.050000,-0.156436,-0.987688,0.000000,
+0.056214,0.294686,0.050000,0.156435,0.987688,0.000000,
+0.056214,0.294686,-0.050000,0.156435,0.987688,0.000000,
+0.037600,0.297634,0.050000,0.156435,0.987688,0.000000,
+0.037600,0.297634,-0.050000,0.156435,0.987688,0.000000,
+0.037600,0.297634,0.050000,0.156435,0.987688,0.000000,
+0.056214,0.294686,-0.050000,0.156435,0.987688,0.000000,
+0.056214,0.294686,-0.050000,0.000000,0.000000,-1.000000,
+0.074607,0.290575,-0.050000,0.000000,0.000000,-1.000000,
+0.037476,0.196457,-0.050000,0.000000,0.000000,-1.000000,
+0.049738,0.193717,-0.050000,0.000000,0.000000,-1.000000,
+0.037476,0.196457,-0.050000,0.000000,0.000000,-1.000000,
+0.074607,0.290575,-0.050000,0.000000,0.000000,-1.000000,
+0.074607,0.290575,0.050000,0.000000,0.000000,1.000000,
+0.056214,0.294686,0.050000,0.000000,0.000000,1.000000,
+0.037476,0.196457,0.050000,0.000000,0.000000,1.000000,
+0.037476,0.196457,0.050000,0.000000,0.000000,1.000000,
+0.049738,0.193717,0.050000,0.000000,0.000000,1.000000,
+0.074607,0.290575,0.050000,0.000000,0.000000,1.000000,
+0.037476,0.196457,0.050000,-0.218143,-0.975917,0.000000,
+0.037476,0.196457,-0.050000,-0.218143,-0.975917,0.000000,
+0.049738,0.193717,0.050000,-0.218143,-0.975917,0.000000,
+0.049738,0.193717,-0.050000,-0.218143,-0.975917,0.000000,
+0.049738,0.193717,0.050000,-0.218143,-0.975917,0.000000,
+0.037476,0.196457,-0.050000,-0.218143,-0.975917,0.000000,
+0.074607,0.290575,0.050000,0.218142,0.975917,0.000000,
+0.074607,0.290575,-0.050000,0.218142,0.975917,0.000000,
+0.056214,0.294686,0.050000,0.218142,0.975917,0.000000,
+0.056214,0.294686,-0.050000,0.218142,0.975917,0.000000,
+0.056214,0.294686,0.050000,0.218142,0.975917,0.000000,
+0.074607,0.290575,-0.050000,0.218142,0.975917,0.000000,
+0.074607,0.290575,-0.050000,0.000000,0.000000,-1.000000,
+0.092705,0.285317,-0.050000,0.000000,0.000000,-1.000000,
+0.049738,0.193717,-0.050000,0.000000,0.000000,-1.000000,
+0.061803,0.190211,-0.050000,0.000000,0.000000,-1.000000,
+0.049738,0.193717,-0.050000,0.000000,0.000000,-1.000000,
+0.092705,0.285317,-0.050000,0.000000,0.000000,-1.000000,
+0.092705,0.285317,0.050000,0.000000,0.000000,1.000000,
+0.074607,0.290575,0.050000,0.000000,0.000000,1.000000,
+0.049738,0.193717,0.050000,0.000000,0.000000,1.000000,
+0.049738,0.193717,0.050000,0.000000,0.000000,1.000000,
+0.061803,0.190211,0.050000,0.000000,0.000000,1.000000,
+0.092705,0.285317,0.050000,0.000000,0.000000,1.000000,
+0.049738,0.193717,0.050000,-0.278990,-0.960294,0.000000,
+0.049738,0.193717,-0.050000,-0.278990,-0.960294,0.000000,
+0.061803,0.190211,0.050000,-0.278990,-0.960294,0.000000,
+0.061803,0.190211,-0.050000,-0.278990,-0.960294,0.000000,
+0.061803,0.190211,0.050000,-0.278990,-0.960294,0.000000,
+0.049738,0.193717,-0.050000,-0.278990,-0.960294,0.000000,
+0.092705,0.285317,0.050000,0.278991,0.960294,0.000000,
+0.092705,0.285317,-0.050000,0.278991,0.960294,0.000000,
+0.074607,0.290575,0.050000,0.278991,0.960294,0.000000,
+0.074607,0.290575,-0.050000,0.278991,0.960294,0.000000,
+0.074607,0.290575,0.050000,0.278991,0.960294,0.000000,
+0.092705,0.285317,-0.050000,0.278991,0.960294,0.000000,
+0.092705,0.285317,-0.050000,0.000000,0.000000,-1.000000,
+0.110437,0.278933,-0.050000,0.000000,0.000000,-1.000000,
+0.061803,0.190211,-0.050000,0.000000,0.000000,-1.000000,
+0.073625,0.185955,-0.050000,0.000000,0.000000,-1.000000,
+0.061803,0.190211,-0.050000,0.000000,0.000000,-1.000000,
+0.110437,0.278933,-0.050000,0.000000,0.000000,-1.000000,
+0.110437,0.278933,0.050000,0.000000,0.000000,1.000000,
+0.092705,0.285317,0.050000,0.000000,0.000000,1.000000,
+0.061803,0.190211,0.050000,0.000000,0.000000,1.000000,
+0.061803,0.190211,0.050000,0.000000,0.000000,1.000000,
+0.073625,0.185955,0.050000,0.000000,0.000000,1.000000,
+0.110437,0.278933,0.050000,0.000000,0.000000,1.000000,
+0.061803,0.190211,0.050000,-0.338738,-0.940881,0.000000,
+0.061803,0.190211,-0.050000,-0.338738,-0.940881,0.000000,
+0.073625,0.185955,0.050000,-0.338738,-0.940881,0.000000,
+0.073625,0.185955,-0.050000,-0.338738,-0.940881,0.000000,
+0.073625,0.185955,0.050000,-0.338738,-0.940881,0.000000,
+0.061803,0.190211,-0.050000,-0.338738,-0.940881,0.000000,
+0.110437,0.278933,0.050000,0.338738,0.940881,0.000000,
+0.110437,0.278933,-0.050000,0.338738,0.940881,0.000000,
+0.092705,0.285317,0.050000,0.338738,0.940881,0.000000,
+0.092705,0.285317,-0.050000,0.338738,0.940881,0.000000,
+0.092705,0.285317,0.050000,0.338738,0.940881,0.000000,
+0.110437,0.278933,-0.050000,0.338738,0.940881,0.000000,
+0.110437,0.278933,-0.050000,0.000000,0.000000,-1.000000,
+0.127734,0.271448,-0.050000,0.000000,0.000000,-1.000000,
+0.073625,0.185955,-0.050000,0.000000,0.000000,-1.000000,
+0.085156,0.180965,-0.050000,0.000000,0.000000,-1.000000,
+0.073625,0.185955,-0.050000,0.000000,0.000000,-1.000000,
+0.127734,0.271448,-0.050000,0.000000,0.000000,-1.000000,
+0.127734,0.271448,0.050000,0.000000,0.000000,1.000000,
+0.110437,0.278933,0.050000,0.000000,0.000000,1.000000,
+0.073625,0.185955,0.050000,0.000000,0.000000,1.000000,
+0.073625,0.185955,0.050000,0.000000,0.000000,1.000000,
+0.085156,0.180965,0.050000,0.000000,0.000000,1.000000,
+0.127734,0.271448,0.050000,0.000000,0.000000,1.000000,
+0.073625,0.185955,0.050000,-0.397148,-0.917754,0.000000,
+0.073625,0.185955,-0.050000,-0.397148,-0.917754,0.000000,
+0.085156,0.180965,0.050000,-0.397148,-0.917754,0.000000,
+0.085156,0.180965,-0.050000,-0.397148,-0.917754,0.000000,
+0.085156,0.180965,0.050000,-0.397148,-0.917754,0.000000,
+0.073625,0.185955,-0.050000,-0.397148,-0.917754,0.000000,
+0.127734,0.271448,0.050000,0.397148,0.917755,0.000000,
+0.127734,0.271448,-0.050000,0.397148,0.917755,0.000000,
+0.110437,0.278933,0.050000,0.397148,0.917755,0.000000,
+0.110437,0.278933,-0.050000,0.397148,0.917755,0.000000,
+0.110437,0.278933,0.050000,0.397148,0.917755,0.000000,
+0.127734,0.271448,-0.050000,0.397148,0.917755,0.000000,
+0.127734,0.271448,-0.050000,0.000000,0.000000,-1.000000,
+0.144526,0.262892,-0.050000,0.000000,0.000000,-1.000000,
+0.085156,0.180965,-0.050000,0.000000,0.000000,-1.000000,
+0.096351,0.175261,-0.050000,0.000000,0.000000,-1.000000,
+0.085156,0.180965,-0.050000,0.000000,0.000000,-1.000000,
+0.144526,0.262892,-0.050000,0.000000,0.000000,-1.000000,
+0.144526,0.262892,0.050000,0.000000,0.000000,1.000000,
+0.127734,0.271448,0.050000,0.000000,0.000000,1.000000,
+0.085156,0.180965,0.050000,0.000000,0.000000,1.000000,
+0.085156,0.180965,0.050000,0.000000,0.000000,1.000000,
+0.096351,0.175261,0.050000,0.000000,0.000000,1.000000,
+0.144526,0.262892,0.050000,0.000000,0.000000,1.000000,
+0.085156,0.180965,0.050000,-0.453990,-0.891007,0.000000,
+0.085156,0.180965,-0.050000,-0.453990,-0.891007,0.000000,
+0.096351,0.175261,0.050000,-0.453990,-0.891007,0.000000,
+0.096351,0.175261,-0.050000,-0.453990,-0.891007,0.000000,
+0.096351,0.175261,0.050000,-0.453990,-0.891007,0.000000,
+0.085156,0.180965,-0.050000,-0.453990,-0.891007,0.000000,
+0.144526,0.262892,0.050000,0.453991,0.891006,0.000000,
+0.144526,0.262892,-0.050000,0.453991,0.891006,0.000000,
+0.127734,0.271448,0.050000,0.453991,0.891006,0.000000,
+0.127734,0.271448,-0.050000,0.453991,0.891006,0.000000,
+0.127734,0.271448,0.050000,0.453991,0.891006,0.000000,
+0.144526,0.262892,-0.050000,0.453991,0.891006,0.000000,
+0.144526,0.262892,-0.050000,0.000000,0.000000,-1.000000,
+0.160748,0.253298,-0.050000,0.000000,0.000000,-1.000000,
+0.096351,0.175261,-0.050000,0.000000,0.000000,-1.000000,
+0.107165,0.168866,-0.050000,0.000000,0.000000,-1.000000,
+0.096351,0.175261,-0.050000,0.000000,0.000000,-1.000000,
+0.160748,0.253298,-0.050000,0.000000,0.000000,-1.000000,
+0.160748,0.253298,0.050000,0.000000,0.000000,1.000000,
+0.144526,0.262892,0.050000,0.000000,0.000000,1.000000,
+0.096351,0.175261,0.050000,0.000000,0.000000,1.000000,
+0.096351,0.175261,0.050000,0.000000,0.000000,1.000000,
+0.107165,0.168866,0.050000,0.000000,0.000000,1.000000,
+0.160748,0.253298,0.050000,0.000000,0.000000,1.000000,
+0.096351,0.175261,0.050000,-0.509041,-0.860742,0.000000,
+0.096351,0.175261,-0.050000,-0.509041,-0.860742,0.000000,
+0.107165,0.168866,0.050000,-0.509041,-0.860742,0.000000,
+0.107165,0.168866,-0.050000,-0.509041,-0.860742,0.000000,
+0.107165,0.168866,0.050000,-0.509041,-0.860742,0.000000,
+0.096351,0.175261,-0.050000,-0.509041,-0.860742,0.000000,
+0.160748,0.253298,0.050000,0.509041,0.860742,0.000000,
+0.160748,0.253298,-0.050000,0.509041,0.860742,0.000000,
+0.144526,0.262892,0.050000,0.509041,0.860742,0.000000,
+0.144526,0.262892,-0.050000,0.509041,0.860742,0.000000,
+0.144526,0.262892,0.050000,0.509041,0.860742,0.000000,
+0.160748,0.253298,-0.050000,0.509041,0.860742,0.000000,
+0.160748,0.253298,-0.050000,0.000000,0.000000,-1.000000,
+0.176336,0.242705,-0.050000,0.000000,0.000000,-1.000000,
+0.107165,0.168866,-0.050000,0.000000,0.000000,-1.000000,
+0.117557,0.161803,-0.050000,0.000000,0.000000,-1.000000,
+0.107165,0.168866,-0.050000,0.000000,0.000000,-1.000000,
+0.176336,0.242705,-0.050000,0.000000,0.000000,-1.000000,
+0.176336,0.242705,0.050000,0.000000,0.000000,1.000000,
+0.160748,0.253298,0.050000,0.000000,0.000000,1.000000,
+0.107165,0.168866,0.050000,0.000000,0.000000,1.000000,
+0.107165,0.168866,0.050000,0.000000,0.000000,1.000000,
+0.117557,0.161803,0.050000,0.000000,0.000000,1.000000,
+0.176336,0.242705,0.050000,0.000000,0.000000,1.000000,
+0.107165,0.168866,0.050000,-0.562083,-0.827081,0.000000,
+0.107165,0.168866,-0.050000,-0.562083,-0.827081,0.000000,
+0.117557,0.161803,0.050000,-0.562083,-0.827081,0.000000,
+0.117557,0.161803,-0.050000,-0.562083,-0.827081,0.000000,
+0.117557,0.161803,0.050000,-0.562083,-0.827081,0.000000,
+0.107165,0.168866,-0.050000,-0.562083,-0.827081,0.000000,
+0.176336,0.242705,0.050000,0.562084,0.827080,0.000000,
+0.176336,0.242705,-0.050000,0.562084,0.827080,0.000000,
+0.160748,0.253298,0.050000,0.562084,0.827080,0.000000,
+0.160748,0.253298,-0.050000,0.562084,0.827080,0.000000,
+0.160748,0.253298,0.050000,0.562084,0.827080,0.000000,
+0.176336,0.242705,-0.050000,0.562084,0.827080,0.000000,
+0.176336,0.242705,-0.050000,0.000000,0.000000,-1.000000,
+0.191227,0.231154,-0.050000,0.000000,0.000000,-1.000000,
+0.117557,0.161803,-0.050000,0.000000,0.000000,-1.000000,
+0.127485,0.154103,-0.050000,0.000000,0.000000,-1.000000,
+0.117557,0.161803,-0.050000,0.000000,0.000000,-1.000000,
+0.191227,0.231154,-0.050000,0.000000,0.000000,-1.000000,
+0.191227,0.231154,0.050000,0.000000,0.000000,1.000000,
+0.176336,0.242705,0.050000,0.000000,0.000000,1.000000,
+0.117557,0.161803,0.050000,0.000000,0.000000,1.000000,
+0.117557,0.161803,0.050000,0.000000,0.000000,1.000000,
+0.127485,0.154103,0.050000,0.000000,0.000000,1.000000,
+0.191227,0.231154,0.050000,0.000000,0.000000,1.000000,
+0.117557,0.161803,0.050000,-0.612907,-0.790155,0.000000,
+0.117557,0.161803,-0.050000,-0.612907,-0.790155,0.000000,
+0.127485,0.154103,0.050000,-0.612907,-0.790155,0.000000,
+0.127485,0.154103,-0.050000,-0.612907,-0.790155,0.000000,
+0.127485,0.154103,0.050000,-0.612907,-0.790155,0.000000,
+0.117557,0.161803,-0.050000,-0.612907,-0.790155,0.000000,
+0.191227,0.231154,0.050000,0.612907,0.790155,0.000000,
+0.191227,0.231154,-0.050000,0.612907,0.790155,0.000000,
+0.176336,0.242705,0.050000,0.612907,0.790155,0.000000,
+0.176336,0.242705,-0.050000,0.612907,0.790155,0.000000,
+0.176336,0.242705,0.050000,0.612907,0.790155,0.000000,
+0.191227,0.231154,-0.050000,0.612907,0.790155,0.000000,
+0.191227,0.231154,-0.050000,0.000000,0.000000,-1.000000,
+0.205364,0.218691,-0.050000,0.000000,0.000000,-1.000000,
+0.127485,0.154103,-0.050000,0.000000,0.000000,-1.000000,
+0.136909,0.145794,-0.050000,0.000000,0.000000,-1.000000,
+0.127485,0.154103,-0.050000,0.000000,0.000000,-1.000000,
+0.205364,0.218691,-0.050000,0.000000,0.000000,-1.000000,
+0.205364,0.218691,0.050000,0.000000,0.000000,1.000000,
+0.191227,0.231154,0.050000,0.000000,0.000000,1.000000,
+0.127485,0.154103,0.050000,0.000000,0.000000,1.000000,
+0.127485,0.154103,0.050000,0.000000,0.000000,1.000000,
+0.136909,0.145794,0.050000,0.000000,0.000000,1.000000,
+0.205364,0.218691,0.050000,0.000000,0.000000,1.000000,
+0.127485,0.154103,0.050000,-0.661312,-0.750111,0.000000,
+0.127485,0.154103,-0.050000,-0.661312,-0.750111,0.000000,
+0.136909,0.145794,0.050000,-0.661312,-0.750111,0.000000,
+0.136909,0.145794,-0.050000,-0.661312,-0.750111,0.000000,
+0.136909,0.145794,0.050000,-0.661312,-0.750111,0.000000,
+0.127485,0.154103,-0.050000,-0.661312,-0.750111,0.000000,
+0.205364,0.218691,0.050000,0.661312,0.750111,0.000000,
+0.205364,0.218691,-0.050000,0.661312,0.750111,0.000000,
+0.191227,0.231154,0.050000,0.661312,0.750111,0.000000,
+0.191227,0.231154,-0.050000,0.661312,0.750111,0.000000,
+0.191227,0.231154,0.050000,0.661312,0.750111,0.000000,
+0.205364,0.218691,-0.050000,0.661312,0.750111,0.000000,
+0.205364,0.218691,-0.050000,0.000000,0.000000,-1.000000,
+0.218691,0.205364,-0.050000,0.000000,0.000000,-1.000000,
+0.136909,0.145794,-0.050000,0.000000,0.000000,-1.000000,
+0.145794,0.136909,-0.050000,0.000000,0.000000,-1.000000,
+0.136909,0.145794,-0.050000,0.000000,0.000000,-1.000000,
+0.218691,0.205364,-0.050000,0.000000,0.000000,-1.000000,
+0.218691,0.205364,0.050000,0.000000,0.000000,1.000000,
+0.205364,0.218691,0.050000,0.000000,0.000000,1.000000,
+0.136909,0.145794,0.050000,0.000000,0.000000,1.000000,
+0.136909,0.145794,0.050000,0.000000,0.000000,1.000000,
+0.145794,0.136909,0.050000,0.000000,0.000000,1.000000,
+0.218691,0.205364,0.050000,0.000000,0.000000,1.000000,
+0.136909,0.145794,0.050000,-0.707107,-0.707107,0.000000,
+0.136909,0.145794,-0.050000,-0.707107,-0.707107,0.000000,
+0.145794,0.136909,0.050000,-0.707107,-0.707107,0.000000,
+0.145794,0.136909,-0.050000,-0.707107,-0.707107,0.000000,
+0.145794,0.136909,0.050000,-0.707107,-0.707107,0.000000,
+0.136909,0.145794,-0.050000,-0.707107,-0.707107,0.000000,
+0.218691,0.205364,0.050000,0.707107,0.707107,0.000000,
+0.218691,0.205364,-0.050000,0.707107,0.707107,0.000000,
+0.205364,0.218691,0.050000,0.707107,0.707107,0.000000,
+0.205364,0.218691,-0.050000,0.707107,0.707107,0.000000,
+0.205364,0.218691,0.050000,0.707107,0.707107,0.000000,
+0.218691,0.205364,-0.050000,0.707107,0.707107,0.000000,
+0.218691,0.205364,-0.050000,0.000000,0.000000,-1.000000,
+0.231154,0.191227,-0.050000,0.000000,0.000000,-1.000000,
+0.145794,0.136909,-0.050000,0.000000,0.000000,-1.000000,
+0.154103,0.127485,-0.050000,0.000000,0.000000,-1.000000,
+0.145794,0.136909,-0.050000,0.000000,0.000000,-1.000000,
+0.231154,0.191227,-0.050000,0.000000,0.000000,-1.000000,
+0.231154,0.191227,0.050000,0.000000,0.000000,1.000000,
+0.218691,0.205364,0.050000,0.000000,0.000000,1.000000,
+0.145794,0.136909,0.050000,0.000000,0.000000,1.000000,
+0.145794,0.136909,0.050000,0.000000,0.000000,1.000000,
+0.154103,0.127485,0.050000,0.000000,0.000000,1.000000,
+0.231154,0.191227,0.050000,0.000000,0.000000,1.000000,
+0.145794,0.136909,0.050000,-0.750111,-0.661312,0.000000,
+0.145794,0.136909,-0.050000,-0.750111,-0.661312,0.000000,
+0.154103,0.127485,0.050000,-0.750111,-0.661312,0.000000,
+0.154103,0.127485,-0.050000,-0.750111,-0.661312,0.000000,
+0.154103,0.127485,0.050000,-0.750111,-0.661312,0.000000,
+0.145794,0.136909,-0.050000,-0.750111,-0.661312,0.000000,
+0.231154,0.191227,0.050000,0.750111,0.661312,0.000000,
+0.231154,0.191227,-0.050000,0.750111,0.661312,0.000000,
+0.218691,0.205364,0.050000,0.750111,0.661312,0.000000,
+0.218691,0.205364,-0.050000,0.750111,0.661312,0.000000,
+0.218691,0.205364,0.050000,0.750111,0.661312,0.000000,
+0.231154,0.191227,-0.050000,0.750111,0.661312,0.000000,
+0.231154,0.191227,-0.050000,0.000000,0.000000,-1.000000,
+0.242705,0.176336,-0.050000,0.000000,0.000000,-1.000000,
+0.154103,0.127485,-0.050000,0.000000,0.000000,-1.000000,
+0.161803,0.117557,-0.050000,0.000000,0.000000,-1.000000,
+0.154103,0.127485,-0.050000,0.000000,0.000000,-1.000000,
+0.242705,0.176336,-0.050000,0.000000,0.000000,-1.000000,
+0.242705,0.176336,0.050000,0.000000,0.000000,1.000000,
+0.231154,0.191227,0.050000,0.000000,0.000000,1.000000,
+0.154103,0.127485,0.050000,0.000000,0.000000,1.000000,
+0.154103,0.127485,0.050000,0.000000,0.000000,1.000000,
+0.161803,0.117557,0.050000,0.000000,0.000000,1.000000,
+0.242705,0.176336,0.050000,0.000000,0.000000,1.000000,
+0.154103,0.127485,0.050000,-0.790155,-0.612907,0.000000,
+0.154103,0.127485,-0.050000,-0.790155,-0.612907,0.000000,
+0.161803,0.117557,0.050000,-0.790155,-0.612907,0.000000,
+0.161803,0.117557,-0.050000,-0.790155,-0.612907,0.000000,
+0.161803,0.117557,0.050000,-0.790155,-0.612907,0.000000,
+0.154103,0.127485,-0.050000,-0.790155,-0.612907,0.000000,
+0.242705,0.176336,0.050000,0.790155,0.612907,0.000000,
+0.242705,0.176336,-0.050000,0.790155,0.612907,0.000000,
+0.231154,0.191227,0.050000,0.790155,0.612907,0.000000,
+0.231154,0.191227,-0.050000,0.790155,0.612907,0.000000,
+0.231154,0.191227,0.050000,0.790155,0.612907,0.000000,
+0.242705,0.176336,-0.050000,0.790155,0.612907,0.000000,
+0.242705,0.176336,-0.050000,0.000000,0.000000,-1.000000,
+0.253298,0.160748,-0.050000,0.000000,0.000000,-1.000000,
+0.161803,0.117557,-0.050000,0.000000,0.000000,-1.000000,
+0.168866,0.107165,-0.050000,0.000000,0.000000,-1.000000,
+0.161803,0.117557,-0.050000,0.000000,0.000000,-1.000000,
+0.253298,0.160748,-0.050000,0.000000,0.000000,-1.000000,
+0.253298,0.160748,0.050000,0.000000,0.000000,1.000000,
+0.242705,0.176336,0.050000,0.000000,0.000000,1.000000,
+0.161803,0.117557,0.050000,0.000000,0.000000,1.000000,
+0.161803,0.117557,0.050000,0.000000,0.000000,1.000000,
+0.168866,0.107165,0.050000,0.000000,0.000000,1.000000,
+0.253298,0.160748,0.050000,0.000000,0.000000,1.000000,
+0.161803,0.117557,0.050000,-0.827081,-0.562083,0.000000,
+0.161803,0.117557,-0.050000,-0.827081,-0.562083,0.000000,
+0.168866,0.107165,0.050000,-0.827081,-0.562083,0.000000,
+0.168866,0.107165,-0.050000,-0.827081,-0.562083,0.000000,
+0.168866,0.107165,0.050000,-0.827081,-0.562083,0.000000,
+0.161803,0.117557,-0.050000,-0.827081,-0.562083,0.000000,
+0.253298,0.160748,0.050000,0.827080,0.562084,0.000000,
+0.253298,0.160748,-0.050000,0.827080,0.562084,0.000000,
+0.242705,0.176336,0.050000,0.827080,0.562084,0.000000,
+0.242705,0.176336,-0.050000,0.827080,0.562084,0.000000,
+0.242705,0.176336,0.050000,0.827080,0.562084,0.000000,
+0.253298,0.160748,-0.050000,0.827080,0.562084,0.000000,
+0.253298,0.160748,-0.050000,0.000000,0.000000,-1.000000,
+0.262892,0.144526,-0.050000,0.000000,0.000000,-1.000000,
+0.168866,0.107165,-0.050000,0.000000,0.000000,-1.000000,
+0.175261,0.096351,-0.050000,0.000000,0.000000,-1.000000,
+0.168866,0.107165,-0.050000,0.000000,0.000000,-1.000000,
+0.262892,0.144526,-0.050000,0.000000,0.000000,-1.000000,
+0.262892,0.144526,0.050000,0.000000,0.000000,1.000000,
+0.253298,0.160748,0.050000,0.000000,0.000000,1.000000,
+0.168866,0.107165,0.050000,0.000000,0.000000,1.000000,
+0.168866,0.107165,0.050000,0.000000,0.000000,1.000000,
+0.175261,0.096351,0.050000,0.000000,0.000000,1.000000,
+0.262892,0.144526,0.050000,0.000000,0.000000,1.000000,
+0.168866,0.107165,0.050000,-0.860742,-0.509041,0.000000,
+0.168866,0.107165,-0.050000,-0.860742,-0.509041,0.000000,
+0.175261,0.096351,0.050000,-0.860742,-0.509041,0.000000,
+0.175261,0.096351,-0.050000,-0.860742,-0.509041,0.000000,
+0.175261,0.096351,0.050000,-0.860742,-0.509041,0.000000,
+0.168866,0.107165,-0.050000,-0.860742,-0.509041,0.000000,
+0.262892,0.144526,0.050000,0.860742,0.509041,0.000000,
+0.262892,0.144526,-0.050000,0.860742,0.509041,0.000000,
+0.253298,0.160748,0.050000,0.860742,0.509041,0.000000,
+0.253298,0.160748,-0.050000,0.860742,0.509041,0.000000,
+0.253298,0.160748,0.050000,0.860742,0.509041,0.000000,
+0.262892,0.144526,-0.050000,0.860742,0.509041,0.000000,
+0.262892,0.144526,-0.050000,0.000000,0.000000,-1.000000,
+0.271448,0.127734,-0.050000,0.000000,0.000000,-1.000000,
+0.175261,0.096351,-0.050000,0.000000,0.000000,-1.000000,
+0.180965,0.085156,-0.050000,0.000000,0.000000,-1.000000,
+0.175261,0.096351,-0.050000,0.000000,0.000000,-1.000000,
+0.271448,0.127734,-0.050000,0.000000,0.000000,-1.000000,
+0.271448,0.127734,0.050000,0.000000,0.000000,1.000000,
+0.262892,0.144526,0.050000,0.000000,0.000000,1.000000,
+0.175261,0.096351,0.050000,0.000000,0.000000,1.000000,
+0.175261,0.096351,0.050000,0.000000,0.000000,1.000000,
+0.180965,0.085156,0.050000,0.000000,0.000000,1.000000,
+0.271448,0.127734,0.050000,0.000000,0.000000,1.000000,
+0.175261,0.096351,0.050000,-0.891007,-0.453991,0.000000,
+0.175261,0.096351,-0.050000,-0.891007,-0.453991,0.000000,
+0.180965,0.085156,0.050000,-0.891007,-0.453991,0.000000,
+0.180965,0.085156,-0.050000,-0.891007,-0.453991,0.000000,
+0.180965,0.085156,0.050000,-0.891007,-0.453991,0.000000,
+0.175261,0.096351,-0.050000,-0.891007,-0.453991,0.000000,
+0.271448,0.127734,0.050000,0.891006,0.453991,0.000000,
+0.271448,0.127734,-0.050000,0.891006,0.453991,0.000000,
+0.262892,0.144526,0.050000,0.891006,0.453991,0.000000,
+0.262892,0.144526,-0.050000,0.891006,0.453991,0.000000,
+0.262892,0.144526,0.050000,0.891006,0.453991,0.000000,
+0.271448,0.127734,-0.050000,0.891006,0.453991,0.000000,
+0.271448,0.127734,-0.050000,0.000000,0.000000,-1.000000,
+0.278933,0.110437,-0.050000,0.000000,0.000000,-1.000000,
+0.180965,0.085156,-0.050000,0.000000,0.000000,-1.000000,
+0.185955,0.073625,-0.050000,0.000000,0.000000,-1.000000,
+0.180965,0.085156,-0.050000,0.000000,0.000000,-1.000000,
+0.278933,0.110437,-0.050000,0.000000,0.000000,-1.000000,
+0.278933,0.110437,0.050000,0.000000,0.000000,1.000000,
+0.271448,0.127734,0.050000,0.000000,0.000000,1.000000,
+0.180965,0.085156,0.050000,0.000000,0.000000,1.000000,
+0.180965,0.085156,0.050000,0.000000,0.000000,1.000000,
+0.185955,0.073625,0.050000,0.000000,0.000000,1.000000,
+0.278933,0.110437,0.050000,0.000000,0.000000,1.000000,
+0.180965,0.085156,0.050000,-0.917755,-0.397148,0.000000,
+0.180965,0.085156,-0.050000,-0.917755,-0.397148,0.000000,
+0.185955,0.073625,0.050000,-0.917755,-0.397148,0.000000,
+0.185955,0.073625,-0.050000,-0.917755,-0.397148,0.000000,
+0.185955,0.073625,0.050000,-0.917755,-0.397148,0.000000,
+0.180965,0.085156,-0.050000,-0.917755,-0.397148,0.000000,
+0.278933,0.110437,0.050000,0.917755,0.397148,0.000000,
+0.278933,0.110437,-0.050000,0.917755,0.397148,0.000000,
+0.271448,0.127734,0.050000,0.917755,0.397148,0.000000,
+0.271448,0.127734,-0.050000,0.917755,0.397148,0.000000,
+0.271448,0.127734,0.050000,0.917755,0.397148,0.000000,
+0.278933,0.110437,-0.050000,0.917755,0.397148,0.000000,
+0.278933,0.110437,-0.050000,0.000000,0.000000,-1.000000,
+0.285317,0.092705,-0.050000,0.000000,0.000000,-1.000000,
+0.185955,0.073625,-0.050000,0.000000,0.000000,-1.000000,
+0.190211,0.061803,-0.050000,0.000000,0.000000,-1.000000,
+0.185955,0.073625,-0.050000,0.000000,0.000000,-1.000000,
+0.285317,0.092705,-0.050000,0.000000,0.000000,-1.000000,
+0.285317,0.092705,0.050000,0.000000,0.000000,1.000000,
+0.278933,0.110437,0.050000,0.000000,0.000000,1.000000,
+0.185955,0.073625,0.050000,0.000000,0.000000,1.000000,
+0.185955,0.073625,0.050000,0.000000,0.000000,1.000000,
+0.190211,0.061803,0.050000,0.000000,0.000000,1.000000,
+0.285317,0.092705,0.050000,0.000000,0.000000,1.000000,
+0.185955,0.073625,0.050000,-0.940881,-0.338738,0.000000,
+0.185955,0.073625,-0.050000,-0.940881,-0.338738,0.000000,
+0.190211,0.061803,0.050000,-0.940881,-0.338738,0.000000,
+0.190211,0.061803,-0.050000,-0.940881,-0.338738,0.000000,
+0.190211,0.061803,0.050000,-0.940881,-0.338738,0.000000,
+0.185955,0.073625,-0.050000,-0.940881,-0.338738,0.000000,
+0.285317,0.092705,0.050000,0.940881,0.338738,0.000000,
+0.285317,0.092705,-0.050000,0.940881,0.338738,0.000000,
+0.278933,0.110437,0.050000,0.940881,0.338738,0.000000,
+0.278933,0.110437,-0.050000,0.940881,0.338738,0.000000,
+0.278933,0.110437,0.050000,0.940881,0.338738,0.000000,
+0.285317,0.092705,-0.050000,0.940881,0.338738,0.000000,
+0.285317,0.092705,-0.050000,0.000000,0.000000,-1.000000,
+0.290575,0.074607,-0.050000,0.000000,0.000000,-1.000000,
+0.190211,0.061803,-0.050000,0.000000,0.000000,-1.000000,
+0.193717,0.049738,-0.050000,0.000000,0.000000,-1.000000,
+0.190211,0.061803,-0.050000,0.000000,0.000000,-1.000000,
+0.290575,0.074607,-0.050000,0.000000,0.000000,-1.000000,
+0.290575,0.074607,0.050000,0.000000,0.000000,1.000000,
+0.285317,0.092705,0.050000,0.000000,0.000000,1.000000,
+0.190211,0.061803,0.050000,0.000000,0.000000,1.000000,
+0.190211,0.061803,0.050000,0.000000,0.000000,1.000000,
+0.193717,0.049738,0.050000,0.000000,0.000000,1.000000,
+0.290575,0.074607,0.050000,0.000000,0.000000,1.000000,
+0.190211,0.061803,0.050000,-0.960294,-0.278991,0.000000,
+0.190211,0.061803,-0.050000,-0.960294,-0.278991,0.000000,
+0.193717,0.049738,0.050000,-0.960294,-0.278991,0.000000,
+0.193717,0.049738,-0.050000,-0.960294,-0.278991,0.000000,
+0.193717,0.049738,0.050000,-0.960294,-0.278991,0.000000,
+0.190211,0.061803,-0.050000,-0.960294,-0.278991,0.000000,
+0.290575,0.074607,0.050000,0.960294,0.278991,0.000000,
+0.290575,0.074607,-0.050000,0.960294,0.278991,0.000000,
+0.285317,0.092705,0.050000,0.960294,0.278991,0.000000,
+0.285317,0.092705,-0.050000,0.960294,0.278991,0.000000,
+0.285317,0.092705,0.050000,0.960294,0.278991,0.000000,
+0.290575,0.074607,-0.050000,0.960294,0.278991,0.000000,
+0.290575,0.074607,-0.050000,0.000000,0.000000,-1.000000,
+0.294686,0.056214,-0.050000,0.000000,0.000000,-1.000000,
+0.193717,0.049738,-0.050000,0.000000,0.000000,-1.000000,
+0.196457,0.037476,-0.050000,0.000000,0.000000,-1.000000,
+0.193717,0.049738,-0.050000,0.000000,0.000000,-1.000000,
+0.294686,0.056214,-0.050000,0.000000,0.000000,-1.000000,
+0.294686,0.056214,0.050000,0.000000,0.000000,1.000000,
+0.290575,0.074607,0.050000,0.000000,0.000000,1.000000,
+0.193717,0.049738,0.050000,0.000000,0.000000,1.000000,
+0.193717,0.049738,0.050000,0.000000,0.000000,1.000000,
+0.196457,0.037476,0.050000,0.000000,0.000000,1.000000,
+0.294686,0.056214,0.050000,0.000000,0.000000,1.000000,
+0.193717,0.049738,0.050000,-0.975917,-0.218143,0.000000,
+0.193717,0.049738,-0.050000,-0.975917,-0.218143,0.000000,
+0.196457,0.037476,0.050000,-0.975917,-0.218143,0.000000,
+0.196457,0.037476,-0.050000,-0.975917,-0.218143,0.000000,
+0.196457,0.037476,0.050000,-0.975917,-0.218143,0.000000,
+0.193717,0.049738,-0.050000,-0.975917,-0.218143,0.000000,
+0.294686,0.056214,0.050000,0.975917,0.218142,0.000000,
+0.294686,0.056214,-0.050000,0.975917,0.218142,0.000000,
+0.290575,0.074607,0.050000,0.975917,0.218142,0.000000,
+0.290575,0.074607,-0.050000,0.975917,0.218142,0.000000,
+0.290575,0.074607,0.050000,0.975917,0.218142,0.000000,
+0.294686,0.056214,-0.050000,0.975917,0.218142,0.000000,
+0.294686,0.056214,-0.050000,0.000000,0.000000,-1.000000,
+0.297634,0.037600,-0.050000,0.000000,0.000000,-1.000000,
+0.196457,0.037476,-0.050000,0.000000,0.000000,-1.000000,
+0.198423,0.025067,-0.050000,0.000000,0.000000,-1.000000,
+0.196457,0.037476,-0.050000,0.000000,0.000000,-1.000000,
+0.297634,0.037600,-0.050000,0.000000,0.000000,-1.000000,
+0.297634,0.037600,0.050000,0.000000,0.000000,1.000000,
+0.294686,0.056214,0.050000,0.000000,0.000000,1.000000,
+0.196457,0.037476,0.050000,0.000000,0.000000,1.000000,
+0.196457,0.037476,0.050000,0.000000,0.000000,1.000000,
+0.198423,0.025067,0.050000,0.000000,0.000000,1.000000,
+0.297634,0.037600,0.050000,0.000000,0.000000,1.000000,
+0.196457,0.037476,0.050000,-0.987688,-0.156436,0.000000,
+0.196457,0.037476,-0.050000,-0.987688,-0.156436,0.000000,
+0.198423,0.025067,0.050000,-0.987688,-0.156436,0.000000,
+0.198423,0.025067,-0.050000,-0.987688,-0.156436,0.000000,
+0.198423,0.025067,0.050000,-0.987688,-0.156436,0.000000,
+0.196457,0.037476,-0.050000,-0.987688,-0.156436,0.000000,
+0.297634,0.037600,0.050000,0.987688,0.156435,0.000000,
+0.297634,0.037600,-0.050000,0.987688,0.156435,0.000000,
+0.294686,0.056214,0.050000,0.987688,0.156435,0.000000,
+0.294686,0.056214,-0.050000,0.987688,0.156435,0.000000,
+0.294686,0.056214,0.050000,0.987688,0.156435,0.000000,
+0.297634,0.037600,-0.050000,0.987688,0.156435,0.000000,
+0.297634,0.037600,-0.050000,0.000000,0.000000,-1.000000,
+0.299408,0.018837,-0.050000,0.000000,0.000000,-1.000000,
+0.198423,0.025067,-0.050000,0.000000,0.000000,-1.000000,
+0.199605,0.012558,-0.050000,0.000000,0.000000,-1.000000,
+0.198423,0.025067,-0.050000,0.000000,0.000000,-1.000000,
+0.299408,0.018837,-0.050000,0.000000,0.000000,-1.000000,
+0.299408,0.018837,0.050000,0.000000,0.000000,1.000000,
+0.297634,0.037600,0.050000,0.000000,0.000000,1.000000,
+0.198423,0.025067,0.050000,0.000000,0.000000,1.000000,
+0.198423,0.025067,0.050000,0.000000,0.000000,1.000000,
+0.199605,0.012558,0.050000,0.000000,0.000000,1.000000,
+0.299408,0.018837,0.050000,0.000000,0.000000,1.000000,
+0.198423,0.025067,0.050000,-0.995562,-0.094107,0.000000,
+0.198423,0.025067,-0.050000,-0.995562,-0.094107,0.000000,
+0.199605,0.012558,0.050000,-0.995562,-0.094107,0.000000,
+0.199605,0.012558,-0.050000,-0.995562,-0.094107,0.000000,
+0.199605,0.012558,0.050000,-0.995562,-0.094107,0.000000,
+0.198423,0.025067,-0.050000,-0.995562,-0.094107,0.000000,
+0.299408,0.018837,0.050000,0.995562,0.094108,0.000000,
+0.299408,0.018837,-0.050000,0.995562,0.094108,0.000000,
+0.297634,0.037600,0.050000,0.995562,0.094108,0.000000,
+0.297634,0.037600,-0.050000,0.995562,0.094108,0.000000,
+0.297634,0.037600,0.050000,0.995562,0.094108,0.000000,
+0.299408,0.018837,-0.050000,0.995562,0.094108,0.000000,
+0.299408,0.018837,-0.050000,0.000000,0.000000,-1.000000,
+0.300000,-0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.199605,0.012558,-0.050000,0.000000,0.000000,-1.000000,
+0.200000,-0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.199605,0.012558,-0.050000,0.000000,0.000000,-1.000000,
+0.300000,-0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.300000,-0.000000,0.050000,0.000000,0.000000,1.000000,
+0.299408,0.018837,0.050000,0.000000,0.000000,1.000000,
+0.199605,0.012558,0.050000,0.000000,0.000000,1.000000,
+0.199605,0.012558,0.050000,0.000000,0.000000,1.000000,
+0.200000,-0.000000,0.050000,0.000000,0.000000,1.000000,
+0.300000,-0.000000,0.050000,0.000000,0.000000,1.000000,
+0.199605,0.012558,0.050000,-0.999507,-0.031411,0.000000,
+0.199605,0.012558,-0.050000,-0.999507,-0.031411,0.000000,
+0.200000,-0.000000,0.050000,-0.999507,-0.031411,0.000000,
+0.200000,-0.000000,-0.050000,-0.999507,-0.031411,0.000000,
+0.200000,-0.000000,0.050000,-0.999507,-0.031411,0.000000,
+0.199605,0.012558,-0.050000,-0.999507,-0.031411,0.000000,
+0.300000,-0.000000,0.050000,0.999507,0.031411,0.000000,
+0.300000,-0.000000,-0.050000,0.999507,0.031411,0.000000,
+0.299408,0.018837,0.050000,0.999507,0.031411,0.000000,
+0.299408,0.018837,-0.050000,0.999507,0.031411,0.000000,
+0.299408,0.018837,0.050000,0.999507,0.031411,0.000000,
+0.300000,-0.000000,-0.050000,0.999507,0.031411,0.000000,
+0.300000,-0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.299408,-0.018837,-0.050000,0.000000,0.000000,-1.000000,
+0.200000,-0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.199605,-0.012558,-0.050000,0.000000,0.000000,-1.000000,
+0.200000,-0.000000,-0.050000,0.000000,0.000000,-1.000000,
+0.299408,-0.018837,-0.050000,0.000000,0.000000,-1.000000,
+0.299408,-0.018837,0.050000,0.000000,0.000000,1.000000,
+0.300000,-0.000000,0.050000,0.000000,0.000000,1.000000,
+0.200000,-0.000000,0.050000,0.000000,0.000000,1.000000,
+0.200000,-0.000000,0.050000,0.000000,0.000000,1.000000,
+0.199605,-0.012558,0.050000,0.000000,0.000000,1.000000,
+0.299408,-0.018837,0.050000,0.000000,0.000000,1.000000,
+0.200000,-0.000000,0.050000,-0.999507,0.031411,0.000000,
+0.200000,-0.000000,-0.050000,-0.999507,0.031411,0.000000,
+0.199605,-0.012558,0.050000,-0.999507,0.031411,0.000000,
+0.199605,-0.012558,-0.050000,-0.999507,0.031411,0.000000,
+0.199605,-0.012558,0.050000,-0.999507,0.031411,0.000000,
+0.200000,-0.000000,-0.050000,-0.999507,0.031411,0.000000,
+0.299408,-0.018837,0.050000,0.999507,-0.031411,0.000000,
+0.299408,-0.018837,-0.050000,0.999507,-0.031411,0.000000,
+0.300000,-0.000000,0.050000,0.999507,-0.031411,0.000000,
+0.300000,-0.000000,-0.050000,0.999507,-0.031411,0.000000,
+0.300000,-0.000000,0.050000,0.999507,-0.031411,0.000000,
+0.299408,-0.018837,-0.050000,0.999507,-0.031411,0.000000,
+0.299408,-0.018837,-0.050000,0.000000,0.000000,-1.000000,
+0.297634,-0.037600,-0.050000,0.000000,0.000000,-1.000000,
+0.199605,-0.012558,-0.050000,0.000000,0.000000,-1.000000,
+0.198423,-0.025067,-0.050000,0.000000,0.000000,-1.000000,
+0.199605,-0.012558,-0.050000,0.000000,0.000000,-1.000000,
+0.297634,-0.037600,-0.050000,0.000000,0.000000,-1.000000,
+0.297634,-0.037600,0.050000,0.000000,0.000000,1.000000,
+0.299408,-0.018837,0.050000,0.000000,0.000000,1.000000,
+0.199605,-0.012558,0.050000,0.000000,0.000000,1.000000,
+0.199605,-0.012558,0.050000,0.000000,0.000000,1.000000,
+0.198423,-0.025067,0.050000,0.000000,0.000000,1.000000,
+0.297634,-0.037600,0.050000,0.000000,0.000000,1.000000,
+0.199605,-0.012558,0.050000,-0.995562,0.094107,0.000000,
+0.199605,-0.012558,-0.050000,-0.995562,0.094107,0.000000,
+0.198423,-0.025067,0.050000,-0.995562,0.094107,0.000000,
+0.198423,-0.025067,-0.050000,-0.995562,0.094107,0.000000,
+0.198423,-0.025067,0.050000,-0.995562,0.094107,0.000000,
+0.199605,-0.012558,-0.050000,-0.995562,0.094107,0.000000,
+0.297634,-0.037600,0.050000,0.995562,-0.094108,0.000000,
+0.297634,-0.037600,-0.050000,0.995562,-0.094108,0.000000,
+0.299408,-0.018837,0.050000,0.995562,-0.094108,0.000000,
+0.299408,-0.018837,-0.050000,0.995562,-0.094108,0.000000,
+0.299408,-0.018837,0.050000,0.995562,-0.094108,0.000000,
+0.297634,-0.037600,-0.050000,0.995562,-0.094108,0.000000,
+0.297634,-0.037600,-0.050000,0.000000,0.000000,-1.000000,
+0.294686,-0.056214,-0.050000,0.000000,0.000000,-1.000000,
+0.198423,-0.025067,-0.050000,0.000000,0.000000,-1.000000,
+0.196457,-0.037476,-0.050000,0.000000,0.000000,-1.000000,
+0.198423,-0.025067,-0.050000,0.000000,0.000000,-1.000000,
+0.294686,-0.056214,-0.050000,0.000000,0.000000,-1.000000,
+0.294686,-0.056214,0.050000,0.000000,0.000000,1.000000,
+0.297634,-0.037600,0.050000,0.000000,0.000000,1.000000,
+0.198423,-0.025067,0.050000,0.000000,0.000000,1.000000,
+0.198423,-0.025067,0.050000,0.000000,0.000000,1.000000,
+0.196457,-0.037476,0.050000,0.000000,0.000000,1.000000,
+0.294686,-0.056214,0.050000,0.000000,0.000000,1.000000,
+0.198423,-0.025067,0.050000,-0.987688,0.156436,0.000000,
+0.198423,-0.025067,-0.050000,-0.987688,0.156436,0.000000,
+0.196457,-0.037476,0.050000,-0.987688,0.156436,0.000000,
+0.196457,-0.037476,-0.050000,-0.987688,0.156436,0.000000,
+0.196457,-0.037476,0.050000,-0.987688,0.156436,0.000000,
+0.198423,-0.025067,-0.050000,-0.987688,0.156436,0.000000,
+0.294686,-0.056214,0.050000,0.987688,-0.156435,0.000000,
+0.294686,-0.056214,-0.050000,0.987688,-0.156435,0.000000,
+0.297634,-0.037600,0.050000,0.987688,-0.156435,0.000000,
+0.297634,-0.037600,-0.050000,0.987688,-0.156435,0.000000,
+0.297634,-0.037600,0.050000,0.987688,-0.156435,0.000000,
+0.294686,-0.056214,-0.050000,0.987688,-0.156435,0.000000,
+0.294686,-0.056214,-0.050000,0.000000,0.000000,-1.000000,
+0.290575,-0.074607,-0.050000,0.000000,0.000000,-1.000000,
+0.196457,-0.037476,-0.050000,0.000000,0.000000,-1.000000,
+0.193717,-0.049738,-0.050000,0.000000,0.000000,-1.000000,
+0.196457,-0.037476,-0.050000,0.000000,0.000000,-1.000000,
+0.290575,-0.074607,-0.050000,0.000000,0.000000,-1.000000,
+0.290575,-0.074607,0.050000,0.000000,0.000000,1.000000,
+0.294686,-0.056214,0.050000,0.000000,0.000000,1.000000,
+0.196457,-0.037476,0.050000,0.000000,0.000000,1.000000,
+0.196457,-0.037476,0.050000,0.000000,0.000000,1.000000,
+0.193717,-0.049738,0.050000,0.000000,0.000000,1.000000,
+0.290575,-0.074607,0.050000,0.000000,0.000000,1.000000,
+0.196457,-0.037476,0.050000,-0.975917,0.218143,0.000000,
+0.196457,-0.037476,-0.050000,-0.975917,0.218143,0.000000,
+0.193717,-0.049738,0.050000,-0.975917,0.218143,0.000000,
+0.193717,-0.049738,-0.050000,-0.975917,0.218143,0.000000,
+0.193717,-0.049738,0.050000,-0.975917,0.218143,0.000000,
+0.196457,-0.037476,-0.050000,-0.975917,0.218143,0.000000,
+0.290575,-0.074607,0.050000,0.975917,-0.218142,0.000000,
+0.290575,-0.074607,-0.050000,0.975917,-0.218142,0.000000,
+0.294686,-0.056214,0.050000,0.975917,-0.218142,0.000000,
+0.294686,-0.056214,-0.050000,0.975917,-0.218142,0.000000,
+0.294686,-0.056214,0.050000,0.975917,-0.218142,0.000000,
+0.290575,-0.074607,-0.050000,0.975917,-0.218142,0.000000,
+0.290575,-0.074607,-0.050000,0.000000,0.000000,-1.000000,
+0.285317,-0.092705,-0.050000,0.000000,0.000000,-1.000000,
+0.193717,-0.049738,-0.050000,0.000000,0.000000,-1.000000,
+0.190211,-0.061803,-0.050000,0.000000,0.000000,-1.000000,
+0.193717,-0.049738,-0.050000,0.000000,0.000000,-1.000000,
+0.285317,-0.092705,-0.050000,0.000000,0.000000,-1.000000,
+0.285317,-0.092705,0.050000,0.000000,0.000000,1.000000,
+0.290575,-0.074607,0.050000,0.000000,0.000000,1.000000,
+0.193717,-0.049738,0.050000,0.000000,0.000000,1.000000,
+0.193717,-0.049738,0.050000,0.000000,0.000000,1.000000,
+0.190211,-0.061803,0.050000,0.000000,0.000000,1.000000,
+0.285317,-0.092705,0.050000,0.000000,0.000000,1.000000,
+0.193717,-0.049738,0.050000,-0.960294,0.278991,0.000000,
+0.193717,-0.049738,-0.050000,-0.960294,0.278991,0.000000,
+0.190211,-0.061803,0.050000,-0.960294,0.278991,0.000000,
+0.190211,-0.061803,-0.050000,-0.960294,0.278991,0.000000,
+0.190211,-0.061803,0.050000,-0.960294,0.278991,0.000000,
+0.193717,-0.049738,-0.050000,-0.960294,0.278991,0.000000,
+0.285317,-0.092705,0.050000,0.960293,-0.278993,0.000000,
+0.285317,-0.092705,-0.050000,0.960293,-0.278993,0.000000,
+0.290575,-0.074607,0.050000,0.960293,-0.278993,0.000000,
+0.290575,-0.074607,-0.050000,0.960293,-0.278993,0.000000,
+0.290575,-0.074607,0.050000,0.960293,-0.278993,0.000000,
+0.285317,-0.092705,-0.050000,0.960293,-0.278993,0.000000,
+0.285317,-0.092705,-0.050000,0.000000,0.000000,-1.000000,
+0.278933,-0.110437,-0.050000,0.000000,0.000000,-1.000000,
+0.190211,-0.061803,-0.050000,0.000000,0.000000,-1.000000,
+0.185955,-0.073625,-0.050000,0.000000,0.000000,-1.000000,
+0.190211,-0.061803,-0.050000,0.000000,0.000000,-1.000000,
+0.278933,-0.110437,-0.050000,0.000000,0.000000,-1.000000,
+0.278933,-0.110437,0.050000,0.000000,0.000000,1.000000,
+0.285317,-0.092705,0.050000,0.000000,0.000000,1.000000,
+0.190211,-0.061803,0.050000,0.000000,0.000000,1.000000,
+0.190211,-0.061803,0.050000,0.000000,0.000000,1.000000,
+0.185955,-0.073625,0.050000,0.000000,0.000000,1.000000,
+0.278933,-0.110437,0.050000,0.000000,0.000000,1.000000,
+0.190211,-0.061803,0.050000,-0.940881,0.338738,0.000000,
+0.190211,-0.061803,-0.050000,-0.940881,0.338738,0.000000,
+0.185955,-0.073625,0.050000,-0.940881,0.338738,0.000000,
+0.185955,-0.073625,-0.050000,-0.940881,0.338738,0.000000,
+0.185955,-0.073625,0.050000,-0.940881,0.338738,0.000000,
+0.190211,-0.061803,-0.050000,-0.940881,0.338738,0.000000,
+0.278933,-0.110437,0.050000,0.940881,-0.338737,0.000000,
+0.278933,-0.110437,-0.050000,0.940881,-0.338737,0.000000,
+0.285317,-0.092705,0.050000,0.940881,-0.338737,0.000000,
+0.285317,-0.092705,-0.050000,0.940881,-0.338737,0.000000,
+0.285317,-0.092705,0.050000,0.940881,-0.338737,0.000000,
+0.278933,-0.110437,-0.050000,0.940881,-0.338737,0.000000,
+0.278933,-0.110437,-0.050000,0.000000,0.000000,-1.000000,
+0.271448,-0.127734,-0.050000,0.000000,0.000000,-1.000000,
+0.185955,-0.073625,-0.050000,0.000000,0.000000,-1.000000,
+0.180965,-0.085156,-0.050000,0.000000,0.000000,-1.000000,
+0.185955,-0.073625,-0.050000,0.000000,0.000000,-1.000000,
+0.271448,-0.127734,-0.050000,0.000000,0.000000,-1.000000,
+0.271448,-0.127734,0.050000,0.000000,0.000000,1.000000,
+0.278933,-0.110437,0.050000,0.000000,0.000000,1.000000,
+0.185955,-0.073625,0.050000,0.000000,0.000000,1.000000,
+0.185955,-0.073625,0.050000,0.000000,0.000000,1.000000,
+0.180965,-0.085156,0.050000,0.000000,0.000000,1.000000,
+0.271448,-0.127734,0.050000,0.000000,0.000000,1.000000,
+0.185955,-0.073625,0.050000,-0.917755,0.397148,0.000000,
+0.185955,-0.073625,-0.050000,-0.917755,0.397148,0.000000,
+0.180965,-0.085156,0.050000,-0.917755,0.397148,0.000000,
+0.180965,-0.085156,-0.050000,-0.917755,0.397148,0.000000,
+0.180965,-0.085156,0.050000,-0.917755,0.397148,0.000000,
+0.185955,-0.073625,-0.050000,-0.917755,0.397148,0.000000,
+0.271448,-0.127734,0.050000,0.917754,-0.397148,0.000000,
+0.271448,-0.127734,-0.050000,0.917754,-0.397148,0.000000,
+0.278933,-0.110437,0.050000,0.917754,-0.397148,0.000000,
+0.278933,-0.110437,-0.050000,0.917754,-0.397148,0.000000,
+0.278933,-0.110437,0.050000,0.917754,-0.397148,0.000000,
+0.271448,-0.127734,-0.050000,0.917754,-0.397148,0.000000,
+0.271448,-0.127734,-0.050000,0.000000,0.000000,-1.000000,
+0.262892,-0.144526,-0.050000,0.000000,0.000000,-1.000000,
+0.180965,-0.085156,-0.050000,0.000000,0.000000,-1.000000,
+0.175261,-0.096351,-0.050000,0.000000,0.000000,-1.000000,
+0.180965,-0.085156,-0.050000,0.000000,0.000000,-1.000000,
+0.262892,-0.144526,-0.050000,0.000000,0.000000,-1.000000,
+0.262892,-0.144526,0.050000,0.000000,0.000000,1.000000,
+0.271448,-0.127734,0.050000,0.000000,0.000000,1.000000,
+0.180965,-0.085156,0.050000,0.000000,0.000000,1.000000,
+0.180965,-0.085156,0.050000,0.000000,0.000000,1.000000,
+0.175261,-0.096351,0.050000,0.000000,0.000000,1.000000,
+0.262892,-0.144526,0.050000,0.000000,0.000000,1.000000,
+0.180965,-0.085156,0.050000,-0.891007,0.453991,0.000000,
+0.180965,-0.085156,-0.050000,-0.891007,0.453991,0.000000,
+0.175261,-0.096351,0.050000,-0.891007,0.453991,0.000000,
+0.175261,-0.096351,-0.050000,-0.891007,0.453991,0.000000,
+0.175261,-0.096351,0.050000,-0.891007,0.453991,0.000000,
+0.180965,-0.085156,-0.050000,-0.891007,0.453991,0.000000,
+0.262892,-0.144526,0.050000,0.891007,-0.453990,0.000000,
+0.262892,-0.144526,-0.050000,0.891007,-0.453990,0.000000,
+0.271448,-0.127734,0.050000,0.891007,-0.453990,0.000000,
+0.271448,-0.127734,-0.050000,0.891007,-0.453990,0.000000,
+0.271448,-0.127734,0.050000,0.891007,-0.453990,0.000000,
+0.262892,-0.144526,-0.050000,0.891007,-0.453990,0.000000,
+0.262892,-0.144526,-0.050000,0.000000,0.000000,-1.000000,
+0.253298,-0.160748,-0.050000,0.000000,0.000000,-1.000000,
+0.175261,-0.096351,-0.050000,0.000000,0.000000,-1.000000,
+0.168866,-0.107165,-0.050000,0.000000,0.000000,-1.000000,
+0.175261,-0.096351,-0.050000,0.000000,0.000000,-1.000000,
+0.253298,-0.160748,-0.050000,0.000000,0.000000,-1.000000,
+0.253298,-0.160748,0.050000,0.000000,0.000000,1.000000,
+0.262892,-0.144526,0.050000,0.000000,0.000000,1.000000,
+0.175261,-0.096351,0.050000,0.000000,0.000000,1.000000,
+0.175261,-0.096351,0.050000,0.000000,0.000000,1.000000,
+0.168866,-0.107165,0.050000,0.000000,0.000000,1.000000,
+0.253298,-0.160748,0.050000,0.000000,0.000000,1.000000,
+0.175261,-0.096351,0.050000,-0.860742,0.509041,0.000000,
+0.175261,-0.096351,-0.050000,-0.860742,0.509041,0.000000,
+0.168866,-0.107165,0.050000,-0.860742,0.509041,0.000000,
+0.168866,-0.107165,-0.050000,-0.860742,0.509041,0.000000,
+0.168866,-0.107165,0.050000,-0.860742,0.509041,0.000000,
+0.175261,-0.096351,-0.050000,-0.860742,0.509041,0.000000,
+0.253298,-0.160748,0.050000,0.860742,-0.509041,0.000000,
+0.253298,-0.160748,-0.050000,0.860742,-0.509041,0.000000,
+0.262892,-0.144526,0.050000,0.860742,-0.509041,0.000000,
+0.262892,-0.144526,-0.050000,0.860742,-0.509041,0.000000,
+0.262892,-0.144526,0.050000,0.860742,-0.509041,0.000000,
+0.253298,-0.160748,-0.050000,0.860742,-0.509041,0.000000,
+0.253298,-0.160748,-0.050000,0.000000,0.000000,-1.000000,
+0.242705,-0.176336,-0.050000,0.000000,0.000000,-1.000000,
+0.168866,-0.107165,-0.050000,0.000000,0.000000,-1.000000,
+0.161803,-0.117557,-0.050000,0.000000,0.000000,-1.000000,
+0.168866,-0.107165,-0.050000,0.000000,0.000000,-1.000000,
+0.242705,-0.176336,-0.050000,0.000000,0.000000,-1.000000,
+0.242705,-0.176336,0.050000,0.000000,0.000000,1.000000,
+0.253298,-0.160748,0.050000,0.000000,0.000000,1.000000,
+0.168866,-0.107165,0.050000,0.000000,0.000000,1.000000,
+0.168866,-0.107165,0.050000,0.000000,0.000000,1.000000,
+0.161803,-0.117557,0.050000,0.000000,0.000000,1.000000,
+0.242705,-0.176336,0.050000,0.000000,0.000000,1.000000,
+0.168866,-0.107165,0.050000,-0.827080,0.562084,0.000000,
+0.168866,-0.107165,-0.050000,-0.827080,0.562084,0.000000,
+0.161803,-0.117557,0.050000,-0.827080,0.562084,0.000000,
+0.161803,-0.117557,-0.050000,-0.827080,0.562084,0.000000,
+0.161803,-0.117557,0.050000,-0.827080,0.562084,0.000000,
+0.168866,-0.107165,-0.050000,-0.827080,0.562084,0.000000,
+0.242705,-0.176336,0.050000,0.827080,-0.562084,0.000000,
+0.242705,-0.176336,-0.050000,0.827080,-0.562084,0.000000,
+0.253298,-0.160748,0.050000,0.827080,-0.562084,0.000000,
+0.253298,-0.160748,-0.050000,0.827080,-0.562084,0.000000,
+0.253298,-0.160748,0.050000,0.827080,-0.562084,0.000000,
+0.242705,-0.176336,-0.050000,0.827080,-0.562084,0.000000,
+0.242705,-0.176336,-0.050000,0.000000,0.000000,-1.000000,
+0.231154,-0.191227,-0.050000,0.000000,0.000000,-1.000000,
+0.161803,-0.117557,-0.050000,0.000000,0.000000,-1.000000,
+0.154103,-0.127485,-0.050000,0.000000,0.000000,-1.000000,
+0.161803,-0.117557,-0.050000,0.000000,0.000000,-1.000000,
+0.231154,-0.191227,-0.050000,0.000000,0.000000,-1.000000,
+0.231154,-0.191227,0.050000,0.000000,0.000000,1.000000,
+0.242705,-0.176336,0.050000,0.000000,0.000000,1.000000,
+0.161803,-0.117557,0.050000,0.000000,0.000000,1.000000,
+0.161803,-0.117557,0.050000,0.000000,0.000000,1.000000,
+0.154103,-0.127485,0.050000,0.000000,0.000000,1.000000,
+0.231154,-0.191227,0.050000,0.000000,0.000000,1.000000,
+0.161803,-0.117557,0.050000,-0.790155,0.612907,0.000000,
+0.161803,-0.117557,-0.050000,-0.790155,0.612907,0.000000,
+0.154103,-0.127485,0.050000,-0.790155,0.612907,0.000000,
+0.154103,-0.127485,-0.050000,-0.790155,0.612907,0.000000,
+0.154103,-0.127485,0.050000,-0.790155,0.612907,0.000000,
+0.161803,-0.117557,-0.050000,-0.790155,0.612907,0.000000,
+0.231154,-0.191227,0.050000,0.790156,-0.612906,0.000000,
+0.231154,-0.191227,-0.050000,0.790156,-0.612906,0.000000,
+0.242705,-0.176336,0.050000,0.790156,-0.612906,0.000000,
+0.242705,-0.176336,-0.050000,0.790156,-0.612906,0.000000,
+0.242705,-0.176336,0.050000,0.790156,-0.612906,0.000000,
+0.231154,-0.191227,-0.050000,0.790156,-0.612906,0.000000,
+0.231154,-0.191227,-0.050000,0.000000,0.000000,-1.000000,
+0.218691,-0.205364,-0.050000,0.000000,0.000000,-1.000000,
+0.154103,-0.127485,-0.050000,0.000000,0.000000,-1.000000,
+0.145794,-0.136909,-0.050000,0.000000,0.000000,-1.000000,
+0.154103,-0.127485,-0.050000,0.000000,0.000000,-1.000000,
+0.218691,-0.205364,-0.050000,0.000000,0.000000,-1.000000,
+0.218691,-0.205364,0.050000,0.000000,0.000000,1.000000,
+0.231154,-0.191227,0.050000,0.000000,0.000000,1.000000,
+0.154103,-0.127485,0.050000,0.000000,0.000000,1.000000,
+0.154103,-0.127485,0.050000,0.000000,0.000000,1.000000,
+0.145794,-0.136909,0.050000,0.000000,0.000000,1.000000,
+0.218691,-0.205364,0.050000,0.000000,0.000000,1.000000,
+0.154103,-0.127485,0.050000,-0.750111,0.661312,0.000000,
+0.154103,-0.127485,-0.050000,-0.750111,0.661312,0.000000,
+0.145794,-0.136909,0.050000,-0.750111,0.661312,0.000000,
+0.145794,-0.136909,-0.050000,-0.750111,0.661312,0.000000,
+0.145794,-0.136909,0.050000,-0.750111,0.661312,0.000000,
+0.154103,-0.127485,-0.050000,-0.750111,0.661312,0.000000,
+0.218691,-0.205364,0.050000,0.750111,-0.661312,0.000000,
+0.218691,-0.205364,-0.050000,0.750111,-0.661312,0.000000,
+0.231154,-0.191227,0.050000,0.750111,-0.661312,0.000000,
+0.231154,-0.191227,-0.050000,0.750111,-0.661312,0.000000,
+0.231154,-0.191227,0.050000,0.750111,-0.661312,0.000000,
+0.218691,-0.205364,-0.050000,0.750111,-0.661312,0.000000,
+0.218691,-0.205364,-0.050000,0.000000,0.000000,-1.000000,
+0.205364,-0.218691,-0.050000,0.000000,0.000000,-1.000000,
+0.145794,-0.136909,-0.050000,0.000000,0.000000,-1.000000,
+0.136909,-0.145794,-0.050000,0.000000,0.000000,-1.000000,
+0.145794,-0.136909,-0.050000,0.000000,0.000000,-1.000000,
+0.205364,-0.218691,-0.050000,0.000000,0.000000,-1.000000,
+0.205364,-0.218691,0.050000,0.000000,0.000000,1.000000,
+0.218691,-0.205364,0.050000,0.000000,0.000000,1.000000,
+0.145794,-0.136909,0.050000,0.000000,0.000000,1.000000,
+0.145794,-0.136909,0.050000,0.000000,0.000000,1.000000,
+0.136909,-0.145794,0.050000,0.000000,0.000000,1.000000,
+0.205364,-0.218691,0.050000,0.000000,0.000000,1.000000,
+0.145794,-0.136909,0.050000,-0.707106,0.707107,0.000000,
+0.145794,-0.136909,-0.050000,-0.707106,0.707107,0.000000,
+0.136909,-0.145794,0.050000,-0.707106,0.707107,0.000000,
+0.136909,-0.145794,-0.050000,-0.707106,0.707107,0.000000,
+0.136909,-0.145794,0.050000,-0.707106,0.707107,0.000000,
+0.145794,-0.136909,-0.050000,-0.707106,0.707107,0.000000,
+0.205364,-0.218691,0.050000,0.707106,-0.707108,0.000000,
+0.205364,-0.218691,-0.050000,0.707106,-0.707108,0.000000,
+0.218691,-0.205364,0.050000,0.707106,-0.707108,0.000000,
+0.218691,-0.205364,-0.050000,0.707106,-0.707108,0.000000,
+0.218691,-0.205364,0.050000,0.707106,-0.707108,0.000000,
+0.205364,-0.218691,-0.050000,0.707106,-0.707108,0.000000,
+0.205364,-0.218691,-0.050000,0.000000,0.000000,-1.000000,
+0.191227,-0.231154,-0.050000,0.000000,0.000000,-1.000000,
+0.136909,-0.145794,-0.050000,0.000000,0.000000,-1.000000,
+0.127485,-0.154103,-0.050000,0.000000,0.000000,-1.000000,
+0.136909,-0.145794,-0.050000,0.000000,0.000000,-1.000000,
+0.191227,-0.231154,-0.050000,0.000000,0.000000,-1.000000,
+0.191227,-0.231154,0.050000,0.000000,0.000000,1.000000,
+0.205364,-0.218691,0.050000,0.000000,0.000000,1.000000,
+0.136909,-0.145794,0.050000,0.000000,0.000000,1.000000,
+0.136909,-0.145794,0.050000,0.000000,0.000000,1.000000,
+0.127485,-0.154103,0.050000,0.000000,0.000000,1.000000,
+0.191227,-0.231154,0.050000,0.000000,0.000000,1.000000,
+0.136909,-0.145794,0.050000,-0.661313,0.750110,0.000000,
+0.136909,-0.145794,-0.050000,-0.661313,0.750110,0.000000,
+0.127485,-0.154103,0.050000,-0.661313,0.750110,0.000000,
+0.127485,-0.154103,-0.050000,-0.661313,0.750110,0.000000,
+0.127485,-0.154103,0.050000,-0.661313,0.750110,0.000000,
+0.136909,-0.145794,-0.050000,-0.661313,0.750110,0.000000,
+0.191227,-0.231154,0.050000,0.661312,-0.750111,0.000000,
+0.191227,-0.231154,-0.050000,0.661312,-0.750111,0.000000,
+0.205364,-0.218691,0.050000,0.661312,-0.750111,0.000000,
+0.205364,-0.218691,-0.050000,0.661312,-0.750111,0.000000,
+0.205364,-0.218691,0.050000,0.661312,-0.750111,0.000000,
+0.191227,-0.231154,-0.050000,0.661312,-0.750111,0.000000,
+0.191227,-0.231154,-0.050000,0.000000,0.000000,-1.000000,
+0.176336,-0.242705,-0.050000,0.000000,0.000000,-1.000000,
+0.127485,-0.154103,-0.050000,0.000000,0.000000,-1.000000,
+0.117557,-0.161803,-0.050000,0.000000,0.000000,-1.000000,
+0.127485,-0.154103,-0.050000,0.000000,0.000000,-1.000000,
+0.176336,-0.242705,-0.050000,0.000000,0.000000,-1.000000,
+0.176336,-0.242705,0.050000,0.000000,0.000000,1.000000,
+0.191227,-0.231154,0.050000,0.000000,0.000000,1.000000,
+0.127485,-0.154103,0.050000,0.000000,0.000000,1.000000,
+0.127485,-0.154103,0.050000,0.000000,0.000000,1.000000,
+0.117557,-0.161803,0.050000,0.000000,0.000000,1.000000,
+0.176336,-0.242705,0.050000,0.000000,0.000000,1.000000,
+0.127485,-0.154103,0.050000,-0.612907,0.790155,0.000000,
+0.127485,-0.154103,-0.050000,-0.612907,0.790155,0.000000,
+0.117557,-0.161803,0.050000,-0.612907,0.790155,0.000000,
+0.117557,-0.161803,-0.050000,-0.612907,0.790155,0.000000,
+0.117557,-0.161803,0.050000,-0.612907,0.790155,0.000000,
+0.127485,-0.154103,-0.050000,-0.612907,0.790155,0.000000,
+0.176336,-0.242705,0.050000,0.612907,-0.790155,0.000000,
+0.176336,-0.242705,-0.050000,0.612907,-0.790155,0.000000,
+0.191227,-0.231154,0.050000,0.612907,-0.790155,0.000000,
+0.191227,-0.231154,-0.050000,0.612907,-0.790155,0.000000,
+0.191227,-0.231154,0.050000,0.612907,-0.790155,0.000000,
+0.176336,-0.242705,-0.050000,0.612907,-0.790155,0.000000,
+0.176336,-0.242705,-0.050000,0.000000,0.000000,-1.000000,
+0.160748,-0.253298,-0.050000,0.000000,0.000000,-1.000000,
+0.117557,-0.161803,-0.050000,0.000000,0.000000,-1.000000,
+0.107165,-0.168866,-0.050000,0.000000,0.000000,-1.000000,
+0.117557,-0.161803,-0.050000,0.000000,0.000000,-1.000000,
+0.160748,-0.253298,-0.050000,0.000000,0.000000,-1.000000,
+0.160748,-0.253298,0.050000,0.000000,0.000000,1.000000,
+0.176336,-0.242705,0.050000,0.000000,0.000000,1.000000,
+0.117557,-0.161803,0.050000,0.000000,0.000000,1.000000,
+0.117557,-0.161803,0.050000,0.000000,0.000000,1.000000,
+0.107165,-0.168866,0.050000,0.000000,0.000000,1.000000,
+0.160748,-0.253298,0.050000,0.000000,0.000000,1.000000,
+0.117557,-0.161803,0.050000,-0.562084,0.827080,0.000000,
+0.117557,-0.161803,-0.050000,-0.562084,0.827080,0.000000,
+0.107165,-0.168866,0.050000,-0.562084,0.827080,0.000000,
+0.107165,-0.168866,-0.050000,-0.562084,0.827080,0.000000,
+0.107165,-0.168866,0.050000,-0.562084,0.827080,0.000000,
+0.117557,-0.161803,-0.050000,-0.562084,0.827080,0.000000,
+0.160748,-0.253298,0.050000,0.562084,-0.827080,0.000000,
+0.160748,-0.253298,-0.050000,0.562084,-0.827080,0.000000,
+0.176336,-0.242705,0.050000,0.562084,-0.827080,0.000000,
+0.176336,-0.242705,-0.050000,0.562084,-0.827080,0.000000,
+0.176336,-0.242705,0.050000,0.562084,-0.827080,0.000000,
+0.160748,-0.253298,-0.050000,0.562084,-0.827080,0.000000,
+0.160748,-0.253298,-0.050000,0.000000,0.000000,-1.000000,
+0.144526,-0.262892,-0.050000,0.000000,0.000000,-1.000000,
+0.107165,-0.168866,-0.050000,0.000000,0.000000,-1.000000,
+0.096351,-0.175261,-0.050000,0.000000,0.000000,-1.000000,
+0.107165,-0.168866,-0.050000,0.000000,0.000000,-1.000000,
+0.144526,-0.262892,-0.050000,0.000000,0.000000,-1.000000,
+0.144526,-0.262892,0.050000,0.000000,0.000000,1.000000,
+0.160748,-0.253298,0.050000,0.000000,0.000000,1.000000,
+0.107165,-0.168866,0.050000,0.000000,0.000000,1.000000,
+0.107165,-0.168866,0.050000,0.000000,0.000000,1.000000,
+0.096351,-0.175261,0.050000,0.000000,0.000000,1.000000,
+0.144526,-0.262892,0.050000,0.000000,0.000000,1.000000,
+0.107165,-0.168866,0.050000,-0.509041,0.860742,0.000000,
+0.107165,-0.168866,-0.050000,-0.509041,0.860742,0.000000,
+0.096351,-0.175261,0.050000,-0.509041,0.860742,0.000000,
+0.096351,-0.175261,-0.050000,-0.509041,0.860742,0.000000,
+0.096351,-0.175261,0.050000,-0.509041,0.860742,0.000000,
+0.107165,-0.168866,-0.050000,-0.509041,0.860742,0.000000,
+0.144526,-0.262892,0.050000,0.509042,-0.860742,0.000000,
+0.144526,-0.262892,-0.050000,0.509042,-0.860742,0.000000,
+0.160748,-0.253298,0.050000,0.509042,-0.860742,0.000000,
+0.160748,-0.253298,-0.050000,0.509042,-0.860742,0.000000,
+0.160748,-0.253298,0.050000,0.509042,-0.860742,0.000000,
+0.144526,-0.262892,-0.050000,0.509042,-0.860742,0.000000,
+0.144526,-0.262892,-0.050000,0.000000,0.000000,-1.000000,
+0.127734,-0.271448,-0.050000,0.000000,0.000000,-1.000000,
+0.096351,-0.175261,-0.050000,0.000000,0.000000,-1.000000,
+0.085156,-0.180965,-0.050000,0.000000,0.000000,-1.000000,
+0.096351,-0.175261,-0.050000,0.000000,0.000000,-1.000000,
+0.127734,-0.271448,-0.050000,0.000000,0.000000,-1.000000,
+0.127734,-0.271448,0.050000,0.000000,0.000000,1.000000,
+0.144526,-0.262892,0.050000,0.000000,0.000000,1.000000,
+0.096351,-0.175261,0.050000,0.000000,0.000000,1.000000,
+0.096351,-0.175261,0.050000,0.000000,0.000000,1.000000,
+0.085156,-0.180965,0.050000,0.000000,0.000000,1.000000,
+0.127734,-0.271448,0.050000,0.000000,0.000000,1.000000,
+0.096351,-0.175261,0.050000,-0.453991,0.891007,0.000000,
+0.096351,-0.175261,-0.050000,-0.453991,0.891007,0.000000,
+0.085156,-0.180965,0.050000,-0.453991,0.891007,0.000000,
+0.085156,-0.180965,-0.050000,-0.453991,0.891007,0.000000,
+0.085156,-0.180965,0.050000,-0.453991,0.891007,0.000000,
+0.096351,-0.175261,-0.050000,-0.453991,0.891007,0.000000,
+0.127734,-0.271448,0.050000,0.453990,-0.891007,0.000000,
+0.127734,-0.271448,-0.050000,0.453990,-0.891007,0.000000,
+0.144526,-0.262892,0.050000,0.453990,-0.891007,0.000000,
+0.144526,-0.262892,-0.050000,0.453990,-0.891007,0.000000,
+0.144526,-0.262892,0.050000,0.453990,-0.891007,0.000000,
+0.127734,-0.271448,-0.050000,0.453990,-0.891007,0.000000,
+0.127734,-0.271448,-0.050000,0.000000,0.000000,-1.000000,
+0.110437,-0.278933,-0.050000,0.000000,0.000000,-1.000000,
+0.085156,-0.180965,-0.050000,0.000000,0.000000,-1.000000,
+0.073625,-0.185955,-0.050000,0.000000,0.000000,-1.000000,
+0.085156,-0.180965,-0.050000,0.000000,0.000000,-1.000000,
+0.110437,-0.278933,-0.050000,0.000000,0.000000,-1.000000,
+0.110437,-0.278933,0.050000,0.000000,0.000000,1.000000,
+0.127734,-0.271448,0.050000,0.000000,0.000000,1.000000,
+0.085156,-0.180965,0.050000,0.000000,0.000000,1.000000,
+0.085156,-0.180965,0.050000,0.000000,0.000000,1.000000,
+0.073625,-0.185955,0.050000,0.000000,0.000000,1.000000,
+0.110437,-0.278933,0.050000,0.000000,0.000000,1.000000,
+0.085156,-0.180965,0.050000,-0.397148,0.917754,0.000000,
+0.085156,-0.180965,-0.050000,-0.397148,0.917754,0.000000,
+0.073625,-0.185955,0.050000,-0.397148,0.917754,0.000000,
+0.073625,-0.185955,-0.050000,-0.397148,0.917754,0.000000,
+0.073625,-0.185955,0.050000,-0.397148,0.917754,0.000000,
+0.085156,-0.180965,-0.050000,-0.397148,0.917754,0.000000,
+0.110437,-0.278933,0.050000,0.397149,-0.917754,0.000000,
+0.110437,-0.278933,-0.050000,0.397149,-0.917754,0.000000,
+0.127734,-0.271448,0.050000,0.397149,-0.917754,0.000000,
+0.127734,-0.271448,-0.050000,0.397149,-0.917754,0.000000,
+0.127734,-0.271448,0.050000,0.397149,-0.917754,0.000000,
+0.110437,-0.278933,-0.050000,0.397149,-0.917754,0.000000,
+0.110437,-0.278933,-0.050000,0.000000,0.000000,-1.000000,
+0.092705,-0.285317,-0.050000,0.000000,0.000000,-1.000000,
+0.073625,-0.185955,-0.050000,0.000000,0.000000,-1.000000,
+0.061803,-0.190211,-0.050000,0.000000,0.000000,-1.000000,
+0.073625,-0.185955,-0.050000,0.000000,0.000000,-1.000000,
+0.092705,-0.285317,-0.050000,0.000000,0.000000,-1.000000,
+0.092705,-0.285317,0.050000,0.000000,0.000000,1.000000,
+0.110437,-0.278933,0.050000,0.000000,0.000000,1.000000,
+0.073625,-0.185955,0.050000,0.000000,0.000000,1.000000,
+0.073625,-0.185955,0.050000,0.000000,0.000000,1.000000,
+0.061803,-0.190211,0.050000,0.000000,0.000000,1.000000,
+0.092705,-0.285317,0.050000,0.000000,0.000000,1.000000,
+0.073625,-0.185955,0.050000,-0.338737,0.940881,0.000000,
+0.073625,-0.185955,-0.050000,-0.338737,0.940881,0.000000,
+0.061803,-0.190211,0.050000,-0.338737,0.940881,0.000000,
+0.061803,-0.190211,-0.050000,-0.338737,0.940881,0.000000,
+0.061803,-0.190211,0.050000,-0.338737,0.940881,0.000000,
+0.073625,-0.185955,-0.050000,-0.338737,0.940881,0.000000,
+0.092705,-0.285317,0.050000,0.338737,-0.940881,0.000000,
+0.092705,-0.285317,-0.050000,0.338737,-0.940881,0.000000,
+0.110437,-0.278933,0.050000,0.338737,-0.940881,0.000000,
+0.110437,-0.278933,-0.050000,0.338737,-0.940881,0.000000,
+0.110437,-0.278933,0.050000,0.338737,-0.940881,0.000000,
+0.092705,-0.285317,-0.050000,0.338737,-0.940881,0.000000,
+0.092705,-0.285317,-0.050000,0.000000,0.000000,-1.000000,
+0.074607,-0.290575,-0.050000,0.000000,0.000000,-1.000000,
+0.061803,-0.190211,-0.050000,0.000000,0.000000,-1.000000,
+0.049738,-0.193717,-0.050000,0.000000,0.000000,-1.000000,
+0.061803,-0.190211,-0.050000,0.000000,0.000000,-1.000000,
+0.074607,-0.290575,-0.050000,0.000000,0.000000,-1.000000,
+0.074607,-0.290575,0.050000,0.000000,0.000000,1.000000,
+0.092705,-0.285317,0.050000,0.000000,0.000000,1.000000,
+0.061803,-0.190211,0.050000,0.000000,0.000000,1.000000,
+0.061803,-0.190211,0.050000,0.000000,0.000000,1.000000,
+0.049738,-0.193717,0.050000,0.000000,0.000000,1.000000,
+0.074607,-0.290575,0.050000,0.000000,0.000000,1.000000,
+0.061803,-0.190211,0.050000,-0.278991,0.960294,0.000000,
+0.061803,-0.190211,-0.050000,-0.278991,0.960294,0.000000,
+0.049738,-0.193717,0.050000,-0.278991,0.960294,0.000000,
+0.049738,-0.193717,-0.050000,-0.278991,0.960294,0.000000,
+0.049738,-0.193717,0.050000,-0.278991,0.960294,0.000000,
+0.061803,-0.190211,-0.050000,-0.278991,0.960294,0.000000,
+0.074607,-0.290575,0.050000,0.278993,-0.960293,0.000000,
+0.074607,-0.290575,-0.050000,0.278993,-0.960293,0.000000,
+0.092705,-0.285317,0.050000,0.278993,-0.960293,0.000000,
+0.092705,-0.285317,-0.050000,0.278993,-0.960293,0.000000,
+0.092705,-0.285317,0.050000,0.278993,-0.960293,0.000000,
+0.074607,-0.290575,-0.050000,0.278993,-0.960293,0.000000,
+0.074607,-0.290575,-0.050000,0.000000,0.000000,-1.000000,
+0.056214,-0.294686,-0.050000,0.000000,0.000000,-1.000000,
+0.049738,-0.193717,-0.050000,0.000000,0.000000,-1.000000,
+0.037476,-0.196457,-0.050000,0.000000,0.000000,-1.000000,
+0.049738,-0.193717,-0.050000,0.000000,0.000000,-1.000000,
+0.056214,-0.294686,-0.050000,0.000000,0.000000,-1.000000,
+0.056214,-0.294686,0.050000,0.000000,0.000000,1.000000,
+0.074607,-0.290575,0.050000,0.000000,0.000000,1.000000,
+0.049738,-0.193717,0.050000,0.000000,0.000000,1.000000,
+0.049738,-0.193717,0.050000,0.000000,0.000000,1.000000,
+0.037476,-0.196457,0.050000,0.000000,0.000000,1.000000,
+0.056214,-0.294686,0.050000,0.000000,0.000000,1.000000,
+0.049738,-0.193717,0.050000,-0.218143,0.975917,0.000000,
+0.049738,-0.193717,-0.050000,-0.218143,0.975917,0.000000,
+0.037476,-0.196457,0.050000,-0.218143,0.975917,0.000000,
+0.037476,-0.196457,-0.050000,-0.218143,0.975917,0.000000,
+0.037476,-0.196457,0.050000,-0.218143,0.975917,0.000000,
+0.049738,-0.193717,-0.050000,-0.218143,0.975917,0.000000,
+0.056214,-0.294686,0.050000,0.218142,-0.975917,0.000000,
+0.056214,-0.294686,-0.050000,0.218142,-0.975917,0.000000,
+0.074607,-0.290575,0.050000,0.218142,-0.975917,0.000000,
+0.074607,-0.290575,-0.050000,0.218142,-0.975917,0.000000,
+0.074607,-0.290575,0.050000,0.218142,-0.975917,0.000000,
+0.056214,-0.294686,-0.050000,0.218142,-0.975917,0.000000,
+0.056214,-0.294686,-0.050000,0.000000,0.000000,-1.000000,
+0.037600,-0.297634,-0.050000,0.000000,0.000000,-1.000000,
+0.037476,-0.196457,-0.050000,0.000000,0.000000,-1.000000,
+0.025067,-0.198423,-0.050000,0.000000,0.000000,-1.000000,
+0.037476,-0.196457,-0.050000,0.000000,0.000000,-1.000000,
+0.037600,-0.297634,-0.050000,0.000000,0.000000,-1.000000,
+0.037600,-0.297634,0.050000,0.000000,0.000000,1.000000,
+0.056214,-0.294686,0.050000,0.000000,0.000000,1.000000,
+0.037476,-0.196457,0.050000,0.000000,0.000000,1.000000,
+0.037476,-0.196457,0.050000,0.000000,0.000000,1.000000,
+0.025067,-0.198423,0.050000,0.000000,0.000000,1.000000,
+0.037600,-0.297634,0.050000,0.000000,0.000000,1.000000,
+0.037476,-0.196457,0.050000,-0.156436,0.987688,0.000000,
+0.037476,-0.196457,-0.050000,-0.156436,0.987688,0.000000,
+0.025067,-0.198423,0.050000,-0.156436,0.987688,0.000000,
+0.025067,-0.198423,-0.050000,-0.156436,0.987688,0.000000,
+0.025067,-0.198423,0.050000,-0.156436,0.987688,0.000000,
+0.037476,-0.196457,-0.050000,-0.156436,0.987688,0.000000,
+0.037600,-0.297634,0.050000,0.156435,-0.987688,0.000000,
+0.037600,-0.297634,-0.050000,0.156435,-0.987688,0.000000,
+0.056214,-0.294686,0.050000,0.156435,-0.987688,0.000000,
+0.056214,-0.294686,-0.050000,0.156435,-0.987688,0.000000,
+0.056214,-0.294686,0.050000,0.156435,-0.987688,0.000000,
+0.037600,-0.297634,-0.050000,0.156435,-0.987688,0.000000,
+0.037600,-0.297634,-0.050000,0.000000,0.000000,-1.000000,
+0.018837,-0.299408,-0.050000,0.000000,0.000000,-1.000000,
+0.025067,-0.198423,-0.050000,0.000000,0.000000,-1.000000,
+0.012558,-0.199605,-0.050000,0.000000,0.000000,-1.000000,
+0.025067,-0.198423,-0.050000,0.000000,0.000000,-1.000000,
+0.018837,-0.299408,-0.050000,0.000000,0.000000,-1.000000,
+0.018837,-0.299408,0.050000,0.000000,0.000000,1.000000,
+0.037600,-0.297634,0.050000,0.000000,0.000000,1.000000,
+0.025067,-0.198423,0.050000,0.000000,0.000000,1.000000,
+0.025067,-0.198423,0.050000,0.000000,0.000000,1.000000,
+0.012558,-0.199605,0.050000,0.000000,0.000000,1.000000,
+0.018837,-0.299408,0.050000,0.000000,0.000000,1.000000,
+0.025067,-0.198423,0.050000,-0.094107,0.995562,0.000000,
+0.025067,-0.198423,-0.050000,-0.094107,0.995562,0.000000,
+0.012558,-0.199605,0.050000,-0.094107,0.995562,0.000000,
+0.012558,-0.199605,-0.050000,-0.094107,0.995562,0.000000,
+0.012558,-0.199605,0.050000,-0.094107,0.995562,0.000000,
+0.025067,-0.198423,-0.050000,-0.094107,0.995562,0.000000,
+0.018837,-0.299408,0.050000,0.094108,-0.995562,0.000000,
+0.018837,-0.299408,-0.050000,0.094108,-0.995562,0.000000,
+0.037600,-0.297634,0.050000,0.094108,-0.995562,0.000000,
+0.037600,-0.297634,-0.050000,0.094108,-0.995562,0.000000,
+0.037600,-0.297634,0.050000,0.094108,-0.995562,0.000000,
+0.018837,-0.299408,-0.050000,0.094108,-0.995562,0.000000,
+0.018837,-0.299408,-0.050000,0.000000,0.000000,-1.000000,
+-0.000000,-0.300000,-0.050000,0.000000,0.000000,-1.000000,
+0.012558,-0.199605,-0.050000,0.000000,0.000000,-1.000000,
+-0.000000,-0.200000,-0.050000,0.000000,0.000000,-1.000000,
+0.012558,-0.199605,-0.050000,0.000000,0.000000,-1.000000,
+-0.000000,-0.300000,-0.050000,0.000000,0.000000,-1.000000,
+-0.000000,-0.300000,0.050000,0.000000,0.000000,1.000000,
+0.018837,-0.299408,0.050000,0.000000,0.000000,1.000000,
+0.012558,-0.199605,0.050000,0.000000,0.000000,1.000000,
+0.012558,-0.199605,0.050000,0.000000,0.000000,1.000000,
+-0.000000,-0.200000,0.050000,0.000000,0.000000,1.000000,
+-0.000000,-0.300000,0.050000,0.000000,0.000000,1.000000,
+0.012558,-0.199605,0.050000,-0.031411,0.999507,0.000000,
+0.012558,-0.199605,-0.050000,-0.031411,0.999507,0.000000,
+-0.000000,-0.200000,0.050000,-0.031411,0.999507,0.000000,
+-0.000000,-0.200000,-0.050000,-0.031411,0.999507,0.000000,
+-0.000000,-0.200000,0.050000,-0.031411,0.999507,0.000000,
+0.012558,-0.199605,-0.050000,-0.031411,0.999507,0.000000,
+-0.000000,-0.300000,0.050000,0.031411,-0.999507,0.000000,
+-0.000000,-0.300000,-0.050000,0.031411,-0.999507,0.000000,
+0.018837,-0.299408,0.050000,0.031411,-0.999507,0.000000,
+0.018837,-0.299408,-0.050000,0.031411,-0.999507,0.000000,
+0.018837,-0.299408,0.050000,0.031411,-0.999507,0.000000,
+-0.000000,-0.300000,-0.050000,0.031411,-0.999507,0.000000,
+-0.000000,-0.300000,-0.050000,0.000000,0.000000,-1.000000,
+-0.018837,-0.299408,-0.050000,0.000000,0.000000,-1.000000,
+-0.000000,-0.200000,-0.050000,0.000000,0.000000,-1.000000,
+-0.012558,-0.199605,-0.050000,0.000000,0.000000,-1.000000,
+-0.000000,-0.200000,-0.050000,0.000000,0.000000,-1.000000,
+-0.018837,-0.299408,-0.050000,0.000000,0.000000,-1.000000,
+-0.018837,-0.299408,0.050000,0.000000,0.000000,1.000000,
+-0.000000,-0.300000,0.050000,0.000000,0.000000,1.000000,
+-0.000000,-0.200000,0.050000,0.000000,0.000000,1.000000,
+-0.000000,-0.200000,0.050000,0.000000,0.000000,1.000000,
+-0.012558,-0.199605,0.050000,0.000000,0.000000,1.000000,
+-0.018837,-0.299408,0.050000,0.000000,0.000000,1.000000,
+-0.000000,-0.200000,0.050000,0.031411,0.999507,0.000000,
+-0.000000,-0.200000,-0.050000,0.031411,0.999507,0.000000,
+-0.012558,-0.199605,0.050000,0.031411,0.999507,0.000000,
+-0.012558,-0.199605,-0.050000,0.031411,0.999507,0.000000,
+-0.012558,-0.199605,0.050000,0.031411,0.999507,0.000000,
+-0.000000,-0.200000,-0.050000,0.031411,0.999507,0.000000,
+-0.018837,-0.299408,0.050000,-0.031411,-0.999507,0.000000,
+-0.018837,-0.299408,-0.050000,-0.031411,-0.999507,0.000000,
+-0.000000,-0.300000,0.050000,-0.031411,-0.999507,0.000000,
+-0.000000,-0.300000,-0.050000,-0.031411,-0.999507,0.000000,
+-0.000000,-0.300000,0.050000,-0.031411,-0.999507,0.000000,
+-0.018837,-0.299408,-0.050000,-0.031411,-0.999507,0.000000,
+-0.018837,-0.299408,-0.050000,0.000000,0.000000,-1.000000,
+-0.037600,-0.297634,-0.050000,0.000000,0.000000,-1.000000,
+-0.012558,-0.199605,-0.050000,0.000000,0.000000,-1.000000,
+-0.025067,-0.198423,-0.050000,0.000000,0.000000,-1.000000,
+-0.012558,-0.199605,-0.050000,0.000000,0.000000,-1.000000,
+-0.037600,-0.297634,-0.050000,0.000000,0.000000,-1.000000,
+-0.037600,-0.297634,0.050000,0.000000,0.000000,1.000000,
+-0.018837,-0.299408,0.050000,0.000000,0.000000,1.000000,
+-0.012558,-0.199605,0.050000,0.000000,0.000000,1.000000,
+-0.012558,-0.199605,0.050000,0.000000,0.000000,1.000000,
+-0.025067,-0.198423,0.050000,0.000000,0.000000,1.000000,
+-0.037600,-0.297634,0.050000,0.000000,0.000000,1.000000,
+-0.012558,-0.199605,0.050000,0.094108,0.995562,0.000000,
+-0.012558,-0.199605,-0.050000,0.094108,0.995562,0.000000,
+-0.025067,-0.198423,0.050000,0.094108,0.995562,0.000000,
+-0.025067,-0.198423,-0.050000,0.094108,0.995562,0.000000,
+-0.025067,-0.198423,0.050000,0.094108,0.995562,0.000000,
+-0.012558,-0.199605,-0.050000,0.094108,0.995562,0.000000,
+-0.037600,-0.297634,0.050000,-0.094108,-0.995562,0.000000,
+-0.037600,-0.297634,-0.050000,-0.094108,-0.995562,0.000000,
+-0.018837,-0.299408,0.050000,-0.094108,-0.995562,0.000000,
+-0.018837,-0.299408,-0.050000,-0.094108,-0.995562,0.000000,
+-0.018837,-0.299408,0.050000,-0.094108,-0.995562,0.000000,
+-0.037600,-0.297634,-0.050000,-0.094108,-0.995562,0.000000,
+-0.037600,-0.297634,-0.050000,0.000000,0.000000,-1.000000,
+-0.056214,-0.294686,-0.050000,0.000000,0.000000,-1.000000,
+-0.025067,-0.198423,-0.050000,0.000000,0.000000,-1.000000,
+-0.037476,-0.196457,-0.050000,0.000000,0.000000,-1.000000,
+-0.025067,-0.198423,-0.050000,0.000000,0.000000,-1.000000,
+-0.056214,-0.294686,-0.050000,0.000000,0.000000,-1.000000,
+-0.056214,-0.294686,0.050000,0.000000,0.000000,1.000000,
+-0.037600,-0.297634,0.050000,0.000000,0.000000,1.000000,
+-0.025067,-0.198423,0.050000,0.000000,0.000000,1.000000,
+-0.025067,-0.198423,0.050000,0.000000,0.000000,1.000000,
+-0.037476,-0.196457,0.050000,0.000000,0.000000,1.000000,
+-0.056214,-0.294686,0.050000,0.000000,0.000000,1.000000,
+-0.025067,-0.198423,0.050000,0.156435,0.987688,0.000000,
+-0.025067,-0.198423,-0.050000,0.156435,0.987688,0.000000,
+-0.037476,-0.196457,0.050000,0.156435,0.987688,0.000000,
+-0.037476,-0.196457,-0.050000,0.156435,0.987688,0.000000,
+-0.037476,-0.196457,0.050000,0.156435,0.987688,0.000000,
+-0.025067,-0.198423,-0.050000,0.156435,0.987688,0.000000,
+-0.056214,-0.294686,0.050000,-0.156434,-0.987688,0.000000,
+-0.056214,-0.294686,-0.050000,-0.156434,-0.987688,0.000000,
+-0.037600,-0.297634,0.050000,-0.156434,-0.987688,0.000000,
+-0.037600,-0.297634,-0.050000,-0.156434,-0.987688,0.000000,
+-0.037600,-0.297634,0.050000,-0.156434,-0.987688,0.000000,
+-0.056214,-0.294686,-0.050000,-0.156434,-0.987688,0.000000,
+-0.056214,-0.294686,-0.050000,0.000000,0.000000,-1.000000,
+-0.074607,-0.290575,-0.050000,0.000000,0.000000,-1.000000,
+-0.037476,-0.196457,-0.050000,0.000000,0.000000,-1.000000,
+-0.049738,-0.193717,-0.050000,0.000000,0.000000,-1.000000,
+-0.037476,-0.196457,-0.050000,0.000000,0.000000,-1.000000,
+-0.074607,-0.290575,-0.050000,0.000000,0.000000,-1.000000,
+-0.074607,-0.290575,0.050000,0.000000,0.000000,1.000000,
+-0.056214,-0.294686,0.050000,0.000000,0.000000,1.000000,
+-0.037476,-0.196457,0.050000,0.000000,0.000000,1.000000,
+-0.037476,-0.196457,0.050000,0.000000,0.000000,1.000000,
+-0.049738,-0.193717,0.050000,0.000000,0.000000,1.000000,
+-0.074607,-0.290575,0.050000,0.000000,0.000000,1.000000,
+-0.037476,-0.196457,0.050000,0.218144,0.975917,0.000000,
+-0.037476,-0.196457,-0.050000,0.218144,0.975917,0.000000,
+-0.049738,-0.193717,0.050000,0.218144,0.975917,0.000000,
+-0.049738,-0.193717,-0.050000,0.218144,0.975917,0.000000,
+-0.049738,-0.193717,0.050000,0.218144,0.975917,0.000000,
+-0.037476,-0.196457,-0.050000,0.218144,0.975917,0.000000,
+-0.074607,-0.290575,0.050000,-0.218143,-0.975917,0.000000,
+-0.074607,-0.290575,-0.050000,-0.218143,-0.975917,0.000000,
+-0.056214,-0.294686,0.050000,-0.218143,-0.975917,0.000000,
+-0.056214,-0.294686,-0.050000,-0.218143,-0.975917,0.000000,
+-0.056214,-0.294686,0.050000,-0.218143,-0.975917,0.000000,
+-0.074607,-0.290575,-0.050000,-0.218143,-0.975917,0.000000,
+-0.074607,-0.290575,-0.050000,0.000000,0.000000,-1.000000,
+-0.092705,-0.285317,-0.050000,0.000000,0.000000,-1.000000,
+-0.049738,-0.193717,-0.050000,0.000000,0.000000,-1.000000,
+-0.061803,-0.190211,-0.050000,0.000000,0.000000,-1.000000,
+-0.049738,-0.193717,-0.050000,0.000000,0.000000,-1.000000,
+-0.092705,-0.285317,-0.050000,0.000000,0.000000,-1.000000,
+-0.092705,-0.285317,0.050000,0.000000,0.000000,1.000000,
+-0.074607,-0.290575,0.050000,0.000000,0.000000,1.000000,
+-0.049738,-0.193717,0.050000,0.000000,0.000000,1.000000,
+-0.049738,-0.193717,0.050000,0.000000,0.000000,1.000000,
+-0.061803,-0.190211,0.050000,0.000000,0.000000,1.000000,
+-0.092705,-0.285317,0.050000,0.000000,0.000000,1.000000,
+-0.049738,-0.193717,0.050000,0.278990,0.960294,0.000000,
+-0.049738,-0.193717,-0.050000,0.278990,0.960294,0.000000,
+-0.061803,-0.190211,0.050000,0.278990,0.960294,0.000000,
+-0.061803,-0.190211,-0.050000,0.278990,0.960294,0.000000,
+-0.061803,-0.190211,0.050000,0.278990,0.960294,0.000000,
+-0.049738,-0.193717,-0.050000,0.278990,0.960294,0.000000,
+-0.092705,-0.285317,0.050000,-0.278991,-0.960294,0.000000,
+-0.092705,-0.285317,-0.050000,-0.278991,-0.960294,0.000000,
+-0.074607,-0.290575,0.050000,-0.278991,-0.960294,0.000000,
+-0.074607,-0.290575,-0.050000,-0.278991,-0.960294,0.000000,
+-0.074607,-0.290575,0.050000,-0.278991,-0.960294,0.000000,
+-0.092705,-0.285317,-0.050000,-0.278991,-0.960294,0.000000,
+-0.092705,-0.285317,-0.050000,0.000000,0.000000,-1.000000,
+-0.110437,-0.278933,-0.050000,0.000000,0.000000,-1.000000,
+-0.061803,-0.190211,-0.050000,0.000000,0.000000,-1.000000,
+-0.073625,-0.185955,-0.050000,0.000000,0.000000,-1.000000,
+-0.061803,-0.190211,-0.050000,0.000000,0.000000,-1.000000,
+-0.110437,-0.278933,-0.050000,0.000000,0.000000,-1.000000,
+-0.110437,-0.278933,0.050000,0.000000,0.000000,1.000000,
+-0.092705,-0.285317,0.050000,0.000000,0.000000,1.000000,
+-0.061803,-0.190211,0.050000,0.000000,0.000000,1.000000,
+-0.061803,-0.190211,0.050000,0.000000,0.000000,1.000000,
+-0.073625,-0.185955,0.050000,0.000000,0.000000,1.000000,
+-0.110437,-0.278933,0.050000,0.000000,0.000000,1.000000,
+-0.061803,-0.190211,0.050000,0.338738,0.940881,0.000000,
+-0.061803,-0.190211,-0.050000,0.338738,0.940881,0.000000,
+-0.073625,-0.185955,0.050000,0.338738,0.940881,0.000000,
+-0.073625,-0.185955,-0.050000,0.338738,0.940881,0.000000,
+-0.073625,-0.185955,0.050000,0.338738,0.940881,0.000000,
+-0.061803,-0.190211,-0.050000,0.338738,0.940881,0.000000,
+-0.110437,-0.278933,0.050000,-0.338738,-0.940881,0.000000,
+-0.110437,-0.278933,-0.050000,-0.338738,-0.940881,0.000000,
+-0.092705,-0.285317,0.050000,-0.338738,-0.940881,0.000000,
+-0.092705,-0.285317,-0.050000,-0.338738,-0.940881,0.000000,
+-0.092705,-0.285317,0.050000,-0.338738,-0.940881,0.000000,
+-0.110437,-0.278933,-0.050000,-0.338738,-0.940881,0.000000,
+-0.110437,-0.278933,-0.050000,0.000000,0.000000,-1.000000,
+-0.127734,-0.271448,-0.050000,0.000000,0.000000,-1.000000,
+-0.073625,-0.185955,-0.050000,0.000000,0.000000,-1.000000,
+-0.085156,-0.180965,-0.050000,0.000000,0.000000,-1.000000,
+-0.073625,-0.185955,-0.050000,0.000000,0.000000,-1.000000,
+-0.127734,-0.271448,-0.050000,0.000000,0.000000,-1.000000,
+-0.127734,-0.271448,0.050000,0.000000,0.000000,1.000000,
+-0.110437,-0.278933,0.050000,0.000000,0.000000,1.000000,
+-0.073625,-0.185955,0.050000,0.000000,0.000000,1.000000,
+-0.073625,-0.185955,0.050000,0.000000,0.000000,1.000000,
+-0.085156,-0.180965,0.050000,0.000000,0.000000,1.000000,
+-0.127734,-0.271448,0.050000,0.000000,0.000000,1.000000,
+-0.073625,-0.185955,0.050000,0.397148,0.917755,0.000000,
+-0.073625,-0.185955,-0.050000,0.397148,0.917755,0.000000,
+-0.085156,-0.180965,0.050000,0.397148,0.917755,0.000000,
+-0.085156,-0.180965,-0.050000,0.397148,0.917755,0.000000,
+-0.085156,-0.180965,0.050000,0.397148,0.917755,0.000000,
+-0.073625,-0.185955,-0.050000,0.397148,0.917755,0.000000,
+-0.127734,-0.271448,0.050000,-0.397148,-0.917755,0.000000,
+-0.127734,-0.271448,-0.050000,-0.397148,-0.917755,0.000000,
+-0.110437,-0.278933,0.050000,-0.397148,-0.917755,0.000000,
+-0.110437,-0.278933,-0.050000,-0.397148,-0.917755,0.000000,
+-0.110437,-0.278933,0.050000,-0.397148,-0.917755,0.000000,
+-0.127734,-0.271448,-0.050000,-0.397148,-0.917755,0.000000,
+-0.127734,-0.271448,-0.050000,0.000000,0.000000,-1.000000,
+-0.144526,-0.262892,-0.050000,0.000000,0.000000,-1.000000,
+-0.085156,-0.180965,-0.050000,0.000000,0.000000,-1.000000,
+-0.096351,-0.175261,-0.050000,0.000000,0.000000,-1.000000,
+-0.085156,-0.180965,-0.050000,0.000000,0.000000,-1.000000,
+-0.144526,-0.262892,-0.050000,0.000000,0.000000,-1.000000,
+-0.144526,-0.262892,0.050000,0.000000,0.000000,1.000000,
+-0.127734,-0.271448,0.050000,0.000000,0.000000,1.000000,
+-0.085156,-0.180965,0.050000,0.000000,0.000000,1.000000,
+-0.085156,-0.180965,0.050000,0.000000,0.000000,1.000000,
+-0.096351,-0.175261,0.050000,0.000000,0.000000,1.000000,
+-0.144526,-0.262892,0.050000,0.000000,0.000000,1.000000,
+-0.085156,-0.180965,0.050000,0.453991,0.891007,0.000000,
+-0.085156,-0.180965,-0.050000,0.453991,0.891007,0.000000,
+-0.096351,-0.175261,0.050000,0.453991,0.891007,0.000000,
+-0.096351,-0.175261,-0.050000,0.453991,0.891007,0.000000,
+-0.096351,-0.175261,0.050000,0.453991,0.891007,0.000000,
+-0.085156,-0.180965,-0.050000,0.453991,0.891007,0.000000,
+-0.144526,-0.262892,0.050000,-0.453991,-0.891006,0.000000,
+-0.144526,-0.262892,-0.050000,-0.453991,-0.891006,0.000000,
+-0.127734,-0.271448,0.050000,-0.453991,-0.891006,0.000000,
+-0.127734,-0.271448,-0.050000,-0.453991,-0.891006,0.000000,
+-0.127734,-0.271448,0.050000,-0.453991,-0.891006,0.000000,
+-0.144526,-0.262892,-0.050000,-0.453991,-0.891006,0.000000,
+-0.144526,-0.262892,-0.050000,0.000000,0.000000,-1.000000,
+-0.160748,-0.253298,-0.050000,0.000000,0.000000,-1.000000,
+-0.096351,-0.175261,-0.050000,0.000000,0.000000,-1.000000,
+-0.107165,-0.168866,-0.050000,0.000000,0.000000,-1.000000,
+-0.096351,-0.175261,-0.050000,0.000000,0.000000,-1.000000,
+-0.160748,-0.253298,-0.050000,0.000000,0.000000,-1.000000,
+-0.160748,-0.253298,0.050000,0.000000,0.000000,1.000000,
+-0.144526,-0.262892,0.050000,0.000000,0.000000,1.000000,
+-0.096351,-0.175261,0.050000,0.000000,0.000000,1.000000,
+-0.096351,-0.175261,0.050000,0.000000,0.000000,1.000000,
+-0.107165,-0.168866,0.050000,0.000000,0.000000,1.000000,
+-0.160748,-0.253298,0.050000,0.000000,0.000000,1.000000,
+-0.096351,-0.175261,0.050000,0.509042,0.860742,0.000000,
+-0.096351,-0.175261,-0.050000,0.509042,0.860742,0.000000,
+-0.107165,-0.168866,0.050000,0.509042,0.860742,0.000000,
+-0.107165,-0.168866,-0.050000,0.509042,0.860742,0.000000,
+-0.107165,-0.168866,0.050000,0.509042,0.860742,0.000000,
+-0.096351,-0.175261,-0.050000,0.509042,0.860742,0.000000,
+-0.160748,-0.253298,0.050000,-0.509042,-0.860742,0.000000,
+-0.160748,-0.253298,-0.050000,-0.509042,-0.860742,0.000000,
+-0.144526,-0.262892,0.050000,-0.509042,-0.860742,0.000000,
+-0.144526,-0.262892,-0.050000,-0.509042,-0.860742,0.000000,
+-0.144526,-0.262892,0.050000,-0.509042,-0.860742,0.000000,
+-0.160748,-0.253298,-0.050000,-0.509042,-0.860742,0.000000,
+-0.160748,-0.253298,-0.050000,0.000000,0.000000,-1.000000,
+-0.176336,-0.242705,-0.050000,0.000000,0.000000,-1.000000,
+-0.107165,-0.168866,-0.050000,0.000000,0.000000,-1.000000,
+-0.117557,-0.161803,-0.050000,0.000000,0.000000,-1.000000,
+-0.107165,-0.168866,-0.050000,0.000000,0.000000,-1.000000,
+-0.176336,-0.242705,-0.050000,0.000000,0.000000,-1.000000,
+-0.176336,-0.242705,0.050000,0.000000,0.000000,1.000000,
+-0.160748,-0.253298,0.050000,0.000000,0.000000,1.000000,
+-0.107165,-0.168866,0.050000,0.000000,0.000000,1.000000,
+-0.107165,-0.168866,0.050000,0.000000,0.000000,1.000000,
+-0.117557,-0.161803,0.050000,0.000000,0.000000,1.000000,
+-0.176336,-0.242705,0.050000,0.000000,0.000000,1.000000,
+-0.107165,-0.168866,0.050000,0.562083,0.827081,0.000000,
+-0.107165,-0.168866,-0.050000,0.562083,0.827081,0.000000,
+-0.117557,-0.161803,0.050000,0.562083,0.827081,0.000000,
+-0.117557,-0.161803,-0.050000,0.562083,0.827081,0.000000,
+-0.117557,-0.161803,0.050000,0.562083,0.827081,0.000000,
+-0.107165,-0.168866,-0.050000,0.562083,0.827081,0.000000,
+-0.176336,-0.242705,0.050000,-0.562083,-0.827081,0.000000,
+-0.176336,-0.242705,-0.050000,-0.562083,-0.827081,0.000000,
+-0.160748,-0.253298,0.050000,-0.562083,-0.827081,0.000000,
+-0.160748,-0.253298,-0.050000,-0.562083,-0.827081,0.000000,
+-0.160748,-0.253298,0.050000,-0.562083,-0.827081,0.000000,
+-0.176336,-0.242705,-0.050000,-0.562083,-0.827081,0.000000,
+-0.176336,-0.242705,-0.050000,0.000000,0.000000,-1.000000,
+-0.191227,-0.231154,-0.050000,0.000000,0.000000,-1.000000,
+-0.117557,-0.161803,-0.050000,0.000000,0.000000,-1.000000,
+-0.127485,-0.154103,-0.050000,0.000000,0.000000,-1.000000,
+-0.117557,-0.161803,-0.050000,0.000000,0.000000,-1.000000,
+-0.191227,-0.231154,-0.050000,0.000000,0.000000,-1.000000,
+-0.191227,-0.231154,0.050000,0.000000,0.000000,1.000000,
+-0.176336,-0.242705,0.050000,0.000000,0.000000,1.000000,
+-0.117557,-0.161803,0.050000,0.000000,0.000000,1.000000,
+-0.117557,-0.161803,0.050000,0.000000,0.000000,1.000000,
+-0.127485,-0.154103,0.050000,0.000000,0.000000,1.000000,
+-0.191227,-0.231154,0.050000,0.000000,0.000000,1.000000,
+-0.117557,-0.161803,0.050000,0.612907,0.790155,0.000000,
+-0.117557,-0.161803,-0.050000,0.612907,0.790155,0.000000,
+-0.127485,-0.154103,0.050000,0.612907,0.790155,0.000000,
+-0.127485,-0.154103,-0.050000,0.612907,0.790155,0.000000,
+-0.127485,-0.154103,0.050000,0.612907,0.790155,0.000000,
+-0.117557,-0.161803,-0.050000,0.612907,0.790155,0.000000,
+-0.191227,-0.231154,0.050000,-0.612908,-0.790155,0.000000,
+-0.191227,-0.231154,-0.050000,-0.612908,-0.790155,0.000000,
+-0.176336,-0.242705,0.050000,-0.612908,-0.790155,0.000000,
+-0.176336,-0.242705,-0.050000,-0.612908,-0.790155,0.000000,
+-0.176336,-0.242705,0.050000,-0.612908,-0.790155,0.000000,
+-0.191227,-0.231154,-0.050000,-0.612908,-0.790155,0.000000,
+-0.191227,-0.231154,-0.050000,0.000000,0.000000,-1.000000,
+-0.205364,-0.218691,-0.050000,0.000000,0.000000,-1.000000,
+-0.127485,-0.154103,-0.050000,0.000000,0.000000,-1.000000,
+-0.136909,-0.145794,-0.050000,0.000000,0.000000,-1.000000,
+-0.127485,-0.154103,-0.050000,0.000000,0.000000,-1.000000,
+-0.205364,-0.218691,-0.050000,0.000000,0.000000,-1.000000,
+-0.205364,-0.218691,0.050000,0.000000,0.000000,1.000000,
+-0.191227,-0.231154,0.050000,0.000000,0.000000,1.000000,
+-0.127485,-0.154103,0.050000,0.000000,0.000000,1.000000,
+-0.127485,-0.154103,0.050000,0.000000,0.000000,1.000000,
+-0.136909,-0.145794,0.050000,0.000000,0.000000,1.000000,
+-0.205364,-0.218691,0.050000,0.000000,0.000000,1.000000,
+-0.127485,-0.154103,0.050000,0.661312,0.750111,0.000000,
+-0.127485,-0.154103,-0.050000,0.661312,0.750111,0.000000,
+-0.136909,-0.145794,0.050000,0.661312,0.750111,0.000000,
+-0.136909,-0.145794,-0.050000,0.661312,0.750111,0.000000,
+-0.136909,-0.145794,0.050000,0.661312,0.750111,0.000000,
+-0.127485,-0.154103,-0.050000,0.661312,0.750111,0.000000,
+-0.205364,-0.218691,0.050000,-0.661312,-0.750111,0.000000,
+-0.205364,-0.218691,-0.050000,-0.661312,-0.750111,0.000000,
+-0.191227,-0.231154,0.050000,-0.661312,-0.750111,0.000000,
+-0.191227,-0.231154,-0.050000,-0.661312,-0.750111,0.000000,
+-0.191227,-0.231154,0.050000,-0.661312,-0.750111,0.000000,
+-0.205364,-0.218691,-0.050000,-0.661312,-0.750111,0.000000,
+-0.205364,-0.218691,-0.050000,0.000000,0.000000,-1.000000,
+-0.218691,-0.205364,-0.050000,0.000000,0.000000,-1.000000,
+-0.136909,-0.145794,-0.050000,0.000000,0.000000,-1.000000,
+-0.145794,-0.136909,-0.050000,0.000000,0.000000,-1.000000,
+-0.136909,-0.145794,-0.050000,0.000000,0.000000,-1.000000,
+-0.218691,-0.205364,-0.050000,0.000000,0.000000,-1.000000,
+-0.218691,-0.205364,0.050000,0.000000,0.000000,1.000000,
+-0.205364,-0.218691,0.050000,0.000000,0.000000,1.000000,
+-0.136909,-0.145794,0.050000,0.000000,0.000000,1.000000,
+-0.136909,-0.145794,0.050000,0.000000,0.000000,1.000000,
+-0.145794,-0.136909,0.050000,0.000000,0.000000,1.000000,
+-0.218691,-0.205364,0.050000,0.000000,0.000000,1.000000,
+-0.136909,-0.145794,0.050000,0.707107,0.707107,0.000000,
+-0.136909,-0.145794,-0.050000,0.707107,0.707107,0.000000,
+-0.145794,-0.136909,0.050000,0.707107,0.707107,0.000000,
+-0.145794,-0.136909,-0.050000,0.707107,0.707107,0.000000,
+-0.145794,-0.136909,0.050000,0.707107,0.707107,0.000000,
+-0.136909,-0.145794,-0.050000,0.707107,0.707107,0.000000,
+-0.218691,-0.205364,0.050000,-0.707107,-0.707106,0.000000,
+-0.218691,-0.205364,-0.050000,-0.707107,-0.707106,0.000000,
+-0.205364,-0.218691,0.050000,-0.707107,-0.707106,0.000000,
+-0.205364,-0.218691,-0.050000,-0.707107,-0.707106,0.000000,
+-0.205364,-0.218691,0.050000,-0.707107,-0.707106,0.000000,
+-0.218691,-0.205364,-0.050000,-0.707107,-0.707106,0.000000,
+-0.218691,-0.205364,-0.050000,0.000000,0.000000,-1.000000,
+-0.231154,-0.191227,-0.050000,0.000000,0.000000,-1.000000,
+-0.145794,-0.136909,-0.050000,0.000000,0.000000,-1.000000,
+-0.154103,-0.127485,-0.050000,0.000000,0.000000,-1.000000,
+-0.145794,-0.136909,-0.050000,0.000000,0.000000,-1.000000,
+-0.231154,-0.191227,-0.050000,0.000000,0.000000,-1.000000,
+-0.231154,-0.191227,0.050000,0.000000,0.000000,1.000000,
+-0.218691,-0.205364,0.050000,0.000000,0.000000,1.000000,
+-0.145794,-0.136909,0.050000,0.000000,0.000000,1.000000,
+-0.145794,-0.136909,0.050000,0.000000,0.000000,1.000000,
+-0.154103,-0.127485,0.050000,0.000000,0.000000,1.000000,
+-0.231154,-0.191227,0.050000,0.000000,0.000000,1.000000,
+-0.145794,-0.136909,0.050000,0.750111,0.661312,0.000000,
+-0.145794,-0.136909,-0.050000,0.750111,0.661312,0.000000,
+-0.154103,-0.127485,0.050000,0.750111,0.661312,0.000000,
+-0.154103,-0.127485,-0.050000,0.750111,0.661312,0.000000,
+-0.154103,-0.127485,0.050000,0.750111,0.661312,0.000000,
+-0.145794,-0.136909,-0.050000,0.750111,0.661312,0.000000,
+-0.231154,-0.191227,0.050000,-0.750111,-0.661312,0.000000,
+-0.231154,-0.191227,-0.050000,-0.750111,-0.661312,0.000000,
+-0.218691,-0.205364,0.050000,-0.750111,-0.661312,0.000000,
+-0.218691,-0.205364,-0.050000,-0.750111,-0.661312,0.000000,
+-0.218691,-0.205364,0.050000,-0.750111,-0.661312,0.000000,
+-0.231154,-0.191227,-0.050000,-0.750111,-0.661312,0.000000,
+-0.231154,-0.191227,-0.050000,0.000000,0.000000,-1.000000,
+-0.242705,-0.176336,-0.050000,0.000000,0.000000,-1.000000,
+-0.154103,-0.127485,-0.050000,0.000000,0.000000,-1.000000,
+-0.161803,-0.117557,-0.050000,0.000000,0.000000,-1.000000,
+-0.154103,-0.127485,-0.050000,0.000000,0.000000,-1.000000,
+-0.242705,-0.176336,-0.050000,0.000000,0.000000,-1.000000,
+-0.242705,-0.176336,0.050000,0.000000,0.000000,1.000000,
+-0.231154,-0.191227,0.050000,0.000000,0.000000,1.000000,
+-0.154103,-0.127485,0.050000,0.000000,0.000000,1.000000,
+-0.154103,-0.127485,0.050000,0.000000,0.000000,1.000000,
+-0.161803,-0.117557,0.050000,0.000000,0.000000,1.000000,
+-0.242705,-0.176336,0.050000,0.000000,0.000000,1.000000,
+-0.154103,-0.127485,0.050000,0.790155,0.612907,0.000000,
+-0.154103,-0.127485,-0.050000,0.790155,0.612907,0.000000,
+-0.161803,-0.117557,0.050000,0.790155,0.612907,0.000000,
+-0.161803,-0.117557,-0.050000,0.790155,0.612907,0.000000,
+-0.161803,-0.117557,0.050000,0.790155,0.612907,0.000000,
+-0.154103,-0.127485,-0.050000,0.790155,0.612907,0.000000,
+-0.242705,-0.176336,0.050000,-0.790155,-0.612908,0.000000,
+-0.242705,-0.176336,-0.050000,-0.790155,-0.612908,0.000000,
+-0.231154,-0.191227,0.050000,-0.790155,-0.612908,0.000000,
+-0.231154,-0.191227,-0.050000,-0.790155,-0.612908,0.000000,
+-0.231154,-0.191227,0.050000,-0.790155,-0.612908,0.000000,
+-0.242705,-0.176336,-0.050000,-0.790155,-0.612908,0.000000,
+-0.242705,-0.176336,-0.050000,0.000000,0.000000,-1.000000,
+-0.253298,-0.160748,-0.050000,0.000000,0.000000,-1.000000,
+-0.161803,-0.117557,-0.050000,0.000000,0.000000,-1.000000,
+-0.168866,-0.107165,-0.050000,0.000000,0.000000,-1.000000,
+-0.161803,-0.117557,-0.050000,0.000000,0.000000,-1.000000,
+-0.253298,-0.160748,-0.050000,0.000000,0.000000,-1.000000,
+-0.253298,-0.160748,0.050000,0.000000,0.000000,1.000000,
+-0.242705,-0.176336,0.050000,0.000000,0.000000,1.000000,
+-0.161803,-0.117557,0.050000,0.000000,0.000000,1.000000,
+-0.161803,-0.117557,0.050000,0.000000,0.000000,1.000000,
+-0.168866,-0.107165,0.050000,0.000000,0.000000,1.000000,
+-0.253298,-0.160748,0.050000,0.000000,0.000000,1.000000,
+-0.161803,-0.117557,0.050000,0.827080,0.562083,0.000000,
+-0.161803,-0.117557,-0.050000,0.827080,0.562083,0.000000,
+-0.168866,-0.107165,0.050000,0.827080,0.562083,0.000000,
+-0.168866,-0.107165,-0.050000,0.827080,0.562083,0.000000,
+-0.168866,-0.107165,0.050000,0.827080,0.562083,0.000000,
+-0.161803,-0.117557,-0.050000,0.827080,0.562083,0.000000,
+-0.253298,-0.160748,0.050000,-0.827081,-0.562083,0.000000,
+-0.253298,-0.160748,-0.050000,-0.827081,-0.562083,0.000000,
+-0.242705,-0.176336,0.050000,-0.827081,-0.562083,0.000000,
+-0.242705,-0.176336,-0.050000,-0.827081,-0.562083,0.000000,
+-0.242705,-0.176336,0.050000,-0.827081,-0.562083,0.000000,
+-0.253298,-0.160748,-0.050000,-0.827081,-0.562083,0.000000,
+-0.253298,-0.160748,-0.050000,0.000000,0.000000,-1.000000,
+-0.262892,-0.144526,-0.050000,0.000000,0.000000,-1.000000,
+-0.168866,-0.107165,-0.050000,0.000000,0.000000,-1.000000,
+-0.175261,-0.096351,-0.050000,0.000000,0.000000,-1.000000,
+-0.168866,-0.107165,-0.050000,0.000000,0.000000,-1.000000,
+-0.262892,-0.144526,-0.050000,0.000000,0.000000,-1.000000,
+-0.262892,-0.144526,0.050000,0.000000,0.000000,1.000000,
+-0.253298,-0.160748,0.050000,0.000000,0.000000,1.000000,
+-0.168866,-0.107165,0.050000,0.000000,0.000000,1.000000,
+-0.168866,-0.107165,0.050000,0.000000,0.000000,1.000000,
+-0.175261,-0.096351,0.050000,0.000000,0.000000,1.000000,
+-0.262892,-0.144526,0.050000,0.000000,0.000000,1.000000,
+-0.168866,-0.107165,0.050000,0.860742,0.509042,0.000000,
+-0.168866,-0.107165,-0.050000,0.860742,0.509042,0.000000,
+-0.175261,-0.096351,0.050000,0.860742,0.509042,0.000000,
+-0.175261,-0.096351,-0.050000,0.860742,0.509042,0.000000,
+-0.175261,-0.096351,0.050000,0.860742,0.509042,0.000000,
+-0.168866,-0.107165,-0.050000,0.860742,0.509042,0.000000,
+-0.262892,-0.144526,0.050000,-0.860742,-0.509042,0.000000,
+-0.262892,-0.144526,-0.050000,-0.860742,-0.509042,0.000000,
+-0.253298,-0.160748,0.050000,-0.860742,-0.509042,0.000000,
+-0.253298,-0.160748,-0.050000,-0.860742,-0.509042,0.000000,
+-0.253298,-0.160748,0.050000,-0.860742,-0.509042,0.000000,
+-0.262892,-0.144526,-0.050000,-0.860742,-0.509042,0.000000,
+-0.262892,-0.144526,-0.050000,0.000000,0.000000,-1.000000,
+-0.271448,-0.127734,-0.050000,0.000000,0.000000,-1.000000,
+-0.175261,-0.096351,-0.050000,0.000000,0.000000,-1.000000,
+-0.180965,-0.085156,-0.050000,0.000000,0.000000,-1.000000,
+-0.175261,-0.096351,-0.050000,0.000000,0.000000,-1.000000,
+-0.271448,-0.127734,-0.050000,0.000000,0.000000,-1.000000,
+-0.271448,-0.127734,0.050000,0.000000,0.000000,1.000000,
+-0.262892,-0.144526,0.050000,0.000000,0.000000,1.000000,
+-0.175261,-0.096351,0.050000,0.000000,0.000000,1.000000,
+-0.175261,-0.096351,0.050000,0.000000,0.000000,1.000000,
+-0.180965,-0.085156,0.050000,0.000000,0.000000,1.000000,
+-0.271448,-0.127734,0.050000,0.000000,0.000000,1.000000,
+-0.175261,-0.096351,0.050000,0.891006,0.453991,0.000000,
+-0.175261,-0.096351,-0.050000,0.891006,0.453991,0.000000,
+-0.180965,-0.085156,0.050000,0.891006,0.453991,0.000000,
+-0.180965,-0.085156,-0.050000,0.891006,0.453991,0.000000,
+-0.180965,-0.085156,0.050000,0.891006,0.453991,0.000000,
+-0.175261,-0.096351,-0.050000,0.891006,0.453991,0.000000,
+-0.271448,-0.127734,0.050000,-0.891006,-0.453991,0.000000,
+-0.271448,-0.127734,-0.050000,-0.891006,-0.453991,0.000000,
+-0.262892,-0.144526,0.050000,-0.891006,-0.453991,0.000000,
+-0.262892,-0.144526,-0.050000,-0.891006,-0.453991,0.000000,
+-0.262892,-0.144526,0.050000,-0.891006,-0.453991,0.000000,
+-0.271448,-0.127734,-0.050000,-0.891006,-0.453991,0.000000,
+-0.271448,-0.127734,-0.050000,0.000000,0.000000,-1.000000,
+-0.278933,-0.110437,-0.050000,0.000000,0.000000,-1.000000,
+-0.180965,-0.085156,-0.050000,0.000000,0.000000,-1.000000,
+-0.185955,-0.073625,-0.050000,0.000000,0.000000,-1.000000,
+-0.180965,-0.085156,-0.050000,0.000000,0.000000,-1.000000,
+-0.278933,-0.110437,-0.050000,0.000000,0.000000,-1.000000,
+-0.278933,-0.110437,0.050000,0.000000,0.000000,1.000000,
+-0.271448,-0.127734,0.050000,0.000000,0.000000,1.000000,
+-0.180965,-0.085156,0.050000,0.000000,0.000000,1.000000,
+-0.180965,-0.085156,0.050000,0.000000,0.000000,1.000000,
+-0.185955,-0.073625,0.050000,0.000000,0.000000,1.000000,
+-0.278933,-0.110437,0.050000,0.000000,0.000000,1.000000,
+-0.180965,-0.085156,0.050000,0.917755,0.397147,0.000000,
+-0.180965,-0.085156,-0.050000,0.917755,0.397147,0.000000,
+-0.185955,-0.073625,0.050000,0.917755,0.397147,0.000000,
+-0.185955,-0.073625,-0.050000,0.917755,0.397147,0.000000,
+-0.185955,-0.073625,0.050000,0.917755,0.397147,0.000000,
+-0.180965,-0.085156,-0.050000,0.917755,0.397147,0.000000,
+-0.278933,-0.110437,0.050000,-0.917755,-0.397148,0.000000,
+-0.278933,-0.110437,-0.050000,-0.917755,-0.397148,0.000000,
+-0.271448,-0.127734,0.050000,-0.917755,-0.397148,0.000000,
+-0.271448,-0.127734,-0.050000,-0.917755,-0.397148,0.000000,
+-0.271448,-0.127734,0.050000,-0.917755,-0.397148,0.000000,
+-0.278933,-0.110437,-0.050000,-0.917755,-0.397148,0.000000,
+-0.278933,-0.110437,-0.050000,0.000000,0.000000,-1.000000,
+-0.285317,-0.092705,-0.050000,0.000000,0.000000,-1.000000,
+-0.185955,-0.073625,-0.050000,0.000000,0.000000,-1.000000,
+-0.190211,-0.061803,-0.050000,0.000000,0.000000,-1.000000,
+-0.185955,-0.073625,-0.050000,0.000000,0.000000,-1.000000,
+-0.285317,-0.092705,-0.050000,0.000000,0.000000,-1.000000,
+-0.285317,-0.092705,0.050000,0.000000,0.000000,1.000000,
+-0.278933,-0.110437,0.050000,0.000000,0.000000,1.000000,
+-0.185955,-0.073625,0.050000,0.000000,0.000000,1.000000,
+-0.185955,-0.073625,0.050000,0.000000,0.000000,1.000000,
+-0.190211,-0.061803,0.050000,0.000000,0.000000,1.000000,
+-0.285317,-0.092705,0.050000,0.000000,0.000000,1.000000,
+-0.185955,-0.073625,0.050000,0.940881,0.338738,0.000000,
+-0.185955,-0.073625,-0.050000,0.940881,0.338738,0.000000,
+-0.190211,-0.061803,0.050000,0.940881,0.338738,0.000000,
+-0.190211,-0.061803,-0.050000,0.940881,0.338738,0.000000,
+-0.190211,-0.061803,0.050000,0.940881,0.338738,0.000000,
+-0.185955,-0.073625,-0.050000,0.940881,0.338738,0.000000,
+-0.285317,-0.092705,0.050000,-0.940881,-0.338738,0.000000,
+-0.285317,-0.092705,-0.050000,-0.940881,-0.338738,0.000000,
+-0.278933,-0.110437,0.050000,-0.940881,-0.338738,0.000000,
+-0.278933,-0.110437,-0.050000,-0.940881,-0.338738,0.000000,
+-0.278933,-0.110437,0.050000,-0.940881,-0.338738,0.000000,
+-0.285317,-0.092705,-0.050000,-0.940881,-0.338738,0.000000,
+-0.285317,-0.092705,-0.050000,0.000000,0.000000,-1.000000,
+-0.290575,-0.074607,-0.050000,0.000000,0.000000,-1.000000,
+-0.190211,-0.061803,-0.050000,0.000000,0.000000,-1.000000,
+-0.193717,-0.049738,-0.050000,0.000000,0.000000,-1.000000,
+-0.190211,-0.061803,-0.050000,0.000000,0.000000,-1.000000,
+-0.290575,-0.074607,-0.050000,0.000000,0.000000,-1.000000,
+-0.290575,-0.074607,0.050000,0.000000,0.000000,1.000000,
+-0.285317,-0.092705,0.050000,0.000000,0.000000,1.000000,
+-0.190211,-0.061803,0.050000,0.000000,0.000000,1.000000,
+-0.190211,-0.061803,0.050000,0.000000,0.000000,1.000000,
+-0.193717,-0.049738,0.050000,0.000000,0.000000,1.000000,
+-0.290575,-0.074607,0.050000,0.000000,0.000000,1.000000,
+-0.190211,-0.061803,0.050000,0.960294,0.278991,0.000000,
+-0.190211,-0.061803,-0.050000,0.960294,0.278991,0.000000,
+-0.193717,-0.049738,0.050000,0.960294,0.278991,0.000000,
+-0.193717,-0.049738,-0.050000,0.960294,0.278991,0.000000,
+-0.193717,-0.049738,0.050000,0.960294,0.278991,0.000000,
+-0.190211,-0.061803,-0.050000,0.960294,0.278991,0.000000,
+-0.290575,-0.074607,0.050000,-0.960293,-0.278993,0.000000,
+-0.290575,-0.074607,-0.050000,-0.960293,-0.278993,0.000000,
+-0.285317,-0.092705,0.050000,-0.960293,-0.278993,0.000000,
+-0.285317,-0.092705,-0.050000,-0.960293,-0.278993,0.000000,
+-0.285317,-0.092705,0.050000,-0.960293,-0.278993,0.000000,
+-0.290575,-0.074607,-0.050000,-0.960293,-0.278993,0.000000,
+-0.290575,-0.074607,-0.050000,0.000000,0.000000,-1.000000,
+-0.294686,-0.056214,-0.050000,0.000000,0.000000,-1.000000,
+-0.193717,-0.049738,-0.050000,0.000000,0.000000,-1.000000,
+-0.196457,-0.037476,-0.050000,0.000000,0.000000,-1.000000,
+-0.193717,-0.049738,-0.050000,0.000000,0.000000,-1.000000,
+-0.294686,-0.056214,-0.050000,0.000000,0.000000,-1.000000,
+-0.294686,-0.056214,0.050000,0.000000,0.000000,1.000000,
+-0.290575,-0.074607,0.050000,0.000000,0.000000,1.000000,
+-0.193717,-0.049738,0.050000,0.000000,0.000000,1.000000,
+-0.193717,-0.049738,0.050000,0.000000,0.000000,1.000000,
+-0.196457,-0.037476,0.050000,0.000000,0.000000,1.000000,
+-0.294686,-0.056214,0.050000,0.000000,0.000000,1.000000,
+-0.193717,-0.049738,0.050000,0.975917,0.218143,0.000000,
+-0.193717,-0.049738,-0.050000,0.975917,0.218143,0.000000,
+-0.196457,-0.037476,0.050000,0.975917,0.218143,0.000000,
+-0.196457,-0.037476,-0.050000,0.975917,0.218143,0.000000,
+-0.196457,-0.037476,0.050000,0.975917,0.218143,0.000000,
+-0.193717,-0.049738,-0.050000,0.975917,0.218143,0.000000,
+-0.294686,-0.056214,0.050000,-0.975917,-0.218142,0.000000,
+-0.294686,-0.056214,-0.050000,-0.975917,-0.218142,0.000000,
+-0.290575,-0.074607,0.050000,-0.975917,-0.218142,0.000000,
+-0.290575,-0.074607,-0.050000,-0.975917,-0.218142,0.000000,
+-0.290575,-0.074607,0.050000,-0.975917,-0.218142,0.000000,
+-0.294686,-0.056214,-0.050000,-0.975917,-0.218142,0.000000,
+-0.294686,-0.056214,-0.050000,0.000000,0.000000,-1.000000,
+-0.297634,-0.037600,-0.050000,0.000000,0.000000,-1.000000,
+-0.196457,-0.037476,-0.050000,0.000000,0.000000,-1.000000,
+-0.198423,-0.025067,-0.050000,0.000000,0.000000,-1.000000,
+-0.196457,-0.037476,-0.050000,0.000000,0.000000,-1.000000,
+-0.297634,-0.037600,-0.050000,0.000000,0.000000,-1.000000,
+-0.297634,-0.037600,0.050000,0.000000,0.000000,1.000000,
+-0.294686,-0.056214,0.050000,0.000000,0.000000,1.000000,
+-0.196457,-0.037476,0.050000,0.000000,0.000000,1.000000,
+-0.196457,-0.037476,0.050000,0.000000,0.000000,1.000000,
+-0.198423,-0.025067,0.050000,0.000000,0.000000,1.000000,
+-0.297634,-0.037600,0.050000,0.000000,0.000000,1.000000,
+-0.196457,-0.037476,0.050000,0.987688,0.156436,0.000000,
+-0.196457,-0.037476,-0.050000,0.987688,0.156436,0.000000,
+-0.198423,-0.025067,0.050000,0.987688,0.156436,0.000000,
+-0.198423,-0.025067,-0.050000,0.987688,0.156436,0.000000,
+-0.198423,-0.025067,0.050000,0.987688,0.156436,0.000000,
+-0.196457,-0.037476,-0.050000,0.987688,0.156436,0.000000,
+-0.297634,-0.037600,0.050000,-0.987688,-0.156435,0.000000,
+-0.297634,-0.037600,-0.050000,-0.987688,-0.156435,0.000000,
+-0.294686,-0.056214,0.050000,-0.987688,-0.156435,0.000000,
+-0.294686,-0.056214,-0.050000,-0.987688,-0.156435,0.000000,
+-0.294686,-0.056214,0.050000,-0.987688,-0.156435,0.000000,
+-0.297634,-0.037600,-0.050000,-0.987688,-0.156435,0.000000,
+-0.297634,-0.037600,-0.050000,0.000000,0.000000,-1.000000,
+-0.299408,-0.018837,-0.050000,0.000000,0.000000,-1.000000,
+-0.198423,-0.025067,-0.050000,0.000000,0.000000,-1.000000,
+-0.199605,-0.012558,-0.050000,0.000000,0.000000,-1.000000,
+-0.198423,-0.025067,-0.050000,0.000000,0.000000,-1.000000,
+-0.299408,-0.018837,-0.050000,0.000000,0.000000,-1.000000,
+-0.299408,-0.018837,0.050000,0.000000,0.000000,1.000000,
+-0.297634,-0.037600,0.050000,0.000000,0.000000,1.000000,
+-0.198423,-0.025067,0.050000,0.000000,0.000000,1.000000,
+-0.198423,-0.025067,0.050000,0.000000,0.000000,1.000000,
+-0.199605,-0.012558,0.050000,0.000000,0.000000,1.000000,
+-0.299408,-0.018837,0.050000,0.000000,0.000000,1.000000,
+-0.198423,-0.025067,0.050000,0.995562,0.094107,0.000000,
+-0.198423,-0.025067,-0.050000,0.995562,0.094107,0.000000,
+-0.199605,-0.012558,0.050000,0.995562,0.094107,0.000000,
+-0.199605,-0.012558,-0.050000,0.995562,0.094107,0.000000,
+-0.199605,-0.012558,0.050000,0.995562,0.094107,0.000000,
+-0.198423,-0.025067,-0.050000,0.995562,0.094107,0.000000,
+-0.299408,-0.018837,0.050000,-0.995562,-0.094108,0.000000,
+-0.299408,-0.018837,-0.050000,-0.995562,-0.094108,0.000000,
+-0.297634,-0.037600,0.050000,-0.995562,-0.094108,0.000000,
+-0.297634,-0.037600,-0.050000,-0.995562,-0.094108,0.000000,
+-0.297634,-0.037600,0.050000,-0.995562,-0.094108,0.000000,
+-0.299408,-0.018837,-0.050000,-0.995562,-0.094108,0.000000,
+-0.299408,-0.018837,-0.050000,0.000000,0.000000,-1.000000,
+-0.300000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+-0.199605,-0.012558,-0.050000,0.000000,0.000000,-1.000000,
+-0.200000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+-0.199605,-0.012558,-0.050000,0.000000,0.000000,-1.000000,
+-0.300000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+-0.300000,0.000000,0.050000,0.000000,0.000000,1.000000,
+-0.299408,-0.018837,0.050000,0.000000,0.000000,1.000000,
+-0.199605,-0.012558,0.050000,0.000000,0.000000,1.000000,
+-0.199605,-0.012558,0.050000,0.000000,0.000000,1.000000,
+-0.200000,0.000000,0.050000,0.000000,0.000000,1.000000,
+-0.300000,0.000000,0.050000,0.000000,0.000000,1.000000,
+-0.199605,-0.012558,0.050000,0.999507,0.031411,0.000000,
+-0.199605,-0.012558,-0.050000,0.999507,0.031411,0.000000,
+-0.200000,0.000000,0.050000,0.999507,0.031411,0.000000,
+-0.200000,0.000000,-0.050000,0.999507,0.031411,0.000000,
+-0.200000,0.000000,0.050000,0.999507,0.031411,0.000000,
+-0.199605,-0.012558,-0.050000,0.999507,0.031411,0.000000,
+-0.300000,0.000000,0.050000,-0.999507,-0.031411,0.000000,
+-0.300000,0.000000,-0.050000,-0.999507,-0.031411,0.000000,
+-0.299408,-0.018837,0.050000,-0.999507,-0.031411,0.000000,
+-0.299408,-0.018837,-0.050000,-0.999507,-0.031411,0.000000,
+-0.299408,-0.018837,0.050000,-0.999507,-0.031411,0.000000,
+-0.300000,0.000000,-0.050000,-0.999507,-0.031411,0.000000,
+-0.300000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+-0.299408,0.018837,-0.050000,0.000000,0.000000,-1.000000,
+-0.200000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+-0.199605,0.012558,-0.050000,0.000000,0.000000,-1.000000,
+-0.200000,0.000000,-0.050000,0.000000,0.000000,-1.000000,
+-0.299408,0.018837,-0.050000,0.000000,0.000000,-1.000000,
+-0.299408,0.018837,0.050000,0.000000,0.000000,1.000000,
+-0.300000,0.000000,0.050000,0.000000,0.000000,1.000000,
+-0.200000,0.000000,0.050000,0.000000,0.000000,1.000000,
+-0.200000,0.000000,0.050000,0.000000,0.000000,1.000000,
+-0.199605,0.012558,0.050000,0.000000,0.000000,1.000000,
+-0.299408,0.018837,0.050000,0.000000,0.000000,1.000000,
+-0.200000,0.000000,0.050000,0.999507,-0.031411,0.000000,
+-0.200000,0.000000,-0.050000,0.999507,-0.031411,0.000000,
+-0.199605,0.012558,0.050000,0.999507,-0.031411,0.000000,
+-0.199605,0.012558,-0.050000,0.999507,-0.031411,0.000000,
+-0.199605,0.012558,0.050000,0.999507,-0.031411,0.000000,
+-0.200000,0.000000,-0.050000,0.999507,-0.031411,0.000000,
+-0.299408,0.018837,0.050000,-0.999507,0.031411,0.000000,
+-0.299408,0.018837,-0.050000,-0.999507,0.031411,0.000000,
+-0.300000,0.000000,0.050000,-0.999507,0.031411,0.000000,
+-0.300000,0.000000,-0.050000,-0.999507,0.031411,0.000000,
+-0.300000,0.000000,0.050000,-0.999507,0.031411,0.000000,
+-0.299408,0.018837,-0.050000,-0.999507,0.031411,0.000000,
+-0.299408,0.018837,-0.050000,0.000000,0.000000,-1.000000,
+-0.297634,0.037600,-0.050000,0.000000,0.000000,-1.000000,
+-0.199605,0.012558,-0.050000,0.000000,0.000000,-1.000000,
+-0.198423,0.025067,-0.050000,0.000000,0.000000,-1.000000,
+-0.199605,0.012558,-0.050000,0.000000,0.000000,-1.000000,
+-0.297634,0.037600,-0.050000,0.000000,0.000000,-1.000000,
+-0.297634,0.037600,0.050000,0.000000,0.000000,1.000000,
+-0.299408,0.018837,0.050000,0.000000,0.000000,1.000000,
+-0.199605,0.012558,0.050000,0.000000,0.000000,1.000000,
+-0.199605,0.012558,0.050000,0.000000,0.000000,1.000000,
+-0.198423,0.025067,0.050000,0.000000,0.000000,1.000000,
+-0.297634,0.037600,0.050000,0.000000,0.000000,1.000000,
+-0.199605,0.012558,0.050000,0.995562,-0.094107,0.000000,
+-0.199605,0.012558,-0.050000,0.995562,-0.094107,0.000000,
+-0.198423,0.025067,0.050000,0.995562,-0.094107,0.000000,
+-0.198423,0.025067,-0.050000,0.995562,-0.094107,0.000000,
+-0.198423,0.025067,0.050000,0.995562,-0.094107,0.000000,
+-0.199605,0.012558,-0.050000,0.995562,-0.094107,0.000000,
+-0.297634,0.037600,0.050000,-0.995562,0.094108,0.000000,
+-0.297634,0.037600,-0.050000,-0.995562,0.094108,0.000000,
+-0.299408,0.018837,0.050000,-0.995562,0.094108,0.000000,
+-0.299408,0.018837,-0.050000,-0.995562,0.094108,0.000000,
+-0.299408,0.018837,0.050000,-0.995562,0.094108,0.000000,
+-0.297634,0.037600,-0.050000,-0.995562,0.094108,0.000000,
+-0.297634,0.037600,-0.050000,0.000000,0.000000,-1.000000,
+-0.294686,0.056214,-0.050000,0.000000,0.000000,-1.000000,
+-0.198423,0.025067,-0.050000,0.000000,0.000000,-1.000000,
+-0.196457,0.037476,-0.050000,0.000000,0.000000,-1.000000,
+-0.198423,0.025067,-0.050000,0.000000,0.000000,-1.000000,
+-0.294686,0.056214,-0.050000,0.000000,0.000000,-1.000000,
+-0.294686,0.056214,0.050000,0.000000,0.000000,1.000000,
+-0.297634,0.037600,0.050000,0.000000,0.000000,1.000000,
+-0.198423,0.025067,0.050000,0.000000,0.000000,1.000000,
+-0.198423,0.025067,0.050000,0.000000,0.000000,1.000000,
+-0.196457,0.037476,0.050000,0.000000,0.000000,1.000000,
+-0.294686,0.056214,0.050000,0.000000,0.000000,1.000000,
+-0.198423,0.025067,0.050000,0.987688,-0.156436,0.000000,
+-0.198423,0.025067,-0.050000,0.987688,-0.156436,0.000000,
+-0.196457,0.037476,0.050000,0.987688,-0.156436,0.000000,
+-0.196457,0.037476,-0.050000,0.987688,-0.156436,0.000000,
+-0.196457,0.037476,0.050000,0.987688,-0.156436,0.000000,
+-0.198423,0.025067,-0.050000,0.987688,-0.156436,0.000000,
+-0.294686,0.056214,0.050000,-0.987688,0.156435,0.000000,
+-0.294686,0.056214,-0.050000,-0.987688,0.156435,0.000000,
+-0.297634,0.037600,0.050000,-0.987688,0.156435,0.000000,
+-0.297634,0.037600,-0.050000,-0.987688,0.156435,0.000000,
+-0.297634,0.037600,0.050000,-0.987688,0.156435,0.000000,
+-0.294686,0.056214,-0.050000,-0.987688,0.156435,0.000000,
+-0.294686,0.056214,-0.050000,0.000000,0.000000,-1.000000,
+-0.290575,0.074607,-0.050000,0.000000,0.000000,-1.000000,
+-0.196457,0.037476,-0.050000,0.000000,0.000000,-1.000000,
+-0.193717,0.049738,-0.050000,0.000000,0.000000,-1.000000,
+-0.196457,0.037476,-0.050000,0.000000,0.000000,-1.000000,
+-0.290575,0.074607,-0.050000,0.000000,0.000000,-1.000000,
+-0.290575,0.074607,0.050000,0.000000,0.000000,1.000000,
+-0.294686,0.056214,0.050000,0.000000,0.000000,1.000000,
+-0.196457,0.037476,0.050000,0.000000,0.000000,1.000000,
+-0.196457,0.037476,0.050000,0.000000,0.000000,1.000000,
+-0.193717,0.049738,0.050000,0.000000,0.000000,1.000000,
+-0.290575,0.074607,0.050000,0.000000,0.000000,1.000000,
+-0.196457,0.037476,0.050000,0.975917,-0.218143,0.000000,
+-0.196457,0.037476,-0.050000,0.975917,-0.218143,0.000000,
+-0.193717,0.049738,0.050000,0.975917,-0.218143,0.000000,
+-0.193717,0.049738,-0.050000,0.975917,-0.218143,0.000000,
+-0.193717,0.049738,0.050000,0.975917,-0.218143,0.000000,
+-0.196457,0.037476,-0.050000,0.975917,-0.218143,0.000000,
+-0.290575,0.074607,0.050000,-0.975917,0.218143,0.000000,
+-0.290575,0.074607,-0.050000,-0.975917,0.218143,0.000000,
+-0.294686,0.056214,0.050000,-0.975917,0.218143,0.000000,
+-0.294686,0.056214,-0.050000,-0.975917,0.218143,0.000000,
+-0.294686,0.056214,0.050000,-0.975917,0.218143,0.000000,
+-0.290575,0.074607,-0.050000,-0.975917,0.218143,0.000000,
+-0.290575,0.074607,-0.050000,0.000000,0.000000,-1.000000,
+-0.285317,0.092705,-0.050000,0.000000,0.000000,-1.000000,
+-0.193717,0.049738,-0.050000,0.000000,0.000000,-1.000000,
+-0.190211,0.061803,-0.050000,0.000000,0.000000,-1.000000,
+-0.193717,0.049738,-0.050000,0.000000,0.000000,-1.000000,
+-0.285317,0.092705,-0.050000,0.000000,0.000000,-1.000000,
+-0.285317,0.092705,0.050000,0.000000,0.000000,1.000000,
+-0.290575,0.074607,0.050000,0.000000,0.000000,1.000000,
+-0.193717,0.049738,0.050000,0.000000,0.000000,1.000000,
+-0.193717,0.049738,0.050000,0.000000,0.000000,1.000000,
+-0.190211,0.061803,0.050000,0.000000,0.000000,1.000000,
+-0.285317,0.092705,0.050000,0.000000,0.000000,1.000000,
+-0.193717,0.049738,0.050000,0.960294,-0.278991,0.000000,
+-0.193717,0.049738,-0.050000,0.960294,-0.278991,0.000000,
+-0.190211,0.061803,0.050000,0.960294,-0.278991,0.000000,
+-0.190211,0.061803,-0.050000,0.960294,-0.278991,0.000000,
+-0.190211,0.061803,0.050000,0.960294,-0.278991,0.000000,
+-0.193717,0.049738,-0.050000,0.960294,-0.278991,0.000000,
+-0.285317,0.092705,0.050000,-0.960294,0.278991,0.000000,
+-0.285317,0.092705,-0.050000,-0.960294,0.278991,0.000000,
+-0.290575,0.074607,0.050000,-0.960294,0.278991,0.000000,
+-0.290575,0.074607,-0.050000,-0.960294,0.278991,0.000000,
+-0.290575,0.074607,0.050000,-0.960294,0.278991,0.000000,
+-0.285317,0.092705,-0.050000,-0.960294,0.278991,0.000000,
+-0.285317,0.092705,-0.050000,0.000000,0.000000,-1.000000,
+-0.278933,0.110437,-0.050000,0.000000,0.000000,-1.000000,
+-0.190211,0.061803,-0.050000,0.000000,0.000000,-1.000000,
+-0.185955,0.073625,-0.050000,0.000000,0.000000,-1.000000,
+-0.190211,0.061803,-0.050000,0.000000,0.000000,-1.000000,
+-0.278933,0.110437,-0.050000,0.000000,0.000000,-1.000000,
+-0.278933,0.110437,0.050000,0.000000,0.000000,1.000000,
+-0.285317,0.092705,0.050000,0.000000,0.000000,1.000000,
+-0.190211,0.061803,0.050000,0.000000,0.000000,1.000000,
+-0.190211,0.061803,0.050000,0.000000,0.000000,1.000000,
+-0.185955,0.073625,0.050000,0.000000,0.000000,1.000000,
+-0.278933,0.110437,0.050000,0.000000,0.000000,1.000000,
+-0.190211,0.061803,0.050000,0.940881,-0.338738,0.000000,
+-0.190211,0.061803,-0.050000,0.940881,-0.338738,0.000000,
+-0.185955,0.073625,0.050000,0.940881,-0.338738,0.000000,
+-0.185955,0.073625,-0.050000,0.940881,-0.338738,0.000000,
+-0.185955,0.073625,0.050000,0.940881,-0.338738,0.000000,
+-0.190211,0.061803,-0.050000,0.940881,-0.338738,0.000000,
+-0.278933,0.110437,0.050000,-0.940881,0.338738,0.000000,
+-0.278933,0.110437,-0.050000,-0.940881,0.338738,0.000000,
+-0.285317,0.092705,0.050000,-0.940881,0.338738,0.000000,
+-0.285317,0.092705,-0.050000,-0.940881,0.338738,0.000000,
+-0.285317,0.092705,0.050000,-0.940881,0.338738,0.000000,
+-0.278933,0.110437,-0.050000,-0.940881,0.338738,0.000000,
+-0.278933,0.110437,-0.050000,0.000000,0.000000,-1.000000,
+-0.271448,0.127734,-0.050000,0.000000,0.000000,-1.000000,
+-0.185955,0.073625,-0.050000,0.000000,0.000000,-1.000000,
+-0.180965,0.085156,-0.050000,0.000000,0.000000,-1.000000,
+-0.185955,0.073625,-0.050000,0.000000,0.000000,-1.000000,
+-0.271448,0.127734,-0.050000,0.000000,0.000000,-1.000000,
+-0.271448,0.127734,0.050000,0.000000,0.000000,1.000000,
+-0.278933,0.110437,0.050000,0.000000,0.000000,1.000000,
+-0.185955,0.073625,0.050000,0.000000,0.000000,1.000000,
+-0.185955,0.073625,0.050000,0.000000,0.000000,1.000000,
+-0.180965,0.085156,0.050000,0.000000,0.000000,1.000000,
+-0.271448,0.127734,0.050000,0.000000,0.000000,1.000000,
+-0.185955,0.073625,0.050000,0.917755,-0.397147,0.000000,
+-0.185955,0.073625,-0.050000,0.917755,-0.397147,0.000000,
+-0.180965,0.085156,0.050000,0.917755,-0.397147,0.000000,
+-0.180965,0.085156,-0.050000,0.917755,-0.397147,0.000000,
+-0.180965,0.085156,0.050000,0.917755,-0.397147,0.000000,
+-0.185955,0.073625,-0.050000,0.917755,-0.397147,0.000000,
+-0.271448,0.127734,0.050000,-0.917755,0.397148,0.000000,
+-0.271448,0.127734,-0.050000,-0.917755,0.397148,0.000000,
+-0.278933,0.110437,0.050000,-0.917755,0.397148,0.000000,
+-0.278933,0.110437,-0.050000,-0.917755,0.397148,0.000000,
+-0.278933,0.110437,0.050000,-0.917755,0.397148,0.000000,
+-0.271448,0.127734,-0.050000,-0.917755,0.397148,0.000000,
+-0.271448,0.127734,-0.050000,0.000000,0.000000,-1.000000,
+-0.262892,0.144526,-0.050000,0.000000,0.000000,-1.000000,
+-0.180965,0.085156,-0.050000,0.000000,0.000000,-1.000000,
+-0.175261,0.096351,-0.050000,0.000000,0.000000,-1.000000,
+-0.180965,0.085156,-0.050000,0.000000,0.000000,-1.000000,
+-0.262892,0.144526,-0.050000,0.000000,0.000000,-1.000000,
+-0.262892,0.144526,0.050000,0.000000,0.000000,1.000000,
+-0.271448,0.127734,0.050000,0.000000,0.000000,1.000000,
+-0.180965,0.085156,0.050000,0.000000,0.000000,1.000000,
+-0.180965,0.085156,0.050000,0.000000,0.000000,1.000000,
+-0.175261,0.096351,0.050000,0.000000,0.000000,1.000000,
+-0.262892,0.144526,0.050000,0.000000,0.000000,1.000000,
+-0.180965,0.085156,0.050000,0.891006,-0.453991,0.000000,
+-0.180965,0.085156,-0.050000,0.891006,-0.453991,0.000000,
+-0.175261,0.096351,0.050000,0.891006,-0.453991,0.000000,
+-0.175261,0.096351,-0.050000,0.891006,-0.453991,0.000000,
+-0.175261,0.096351,0.050000,0.891006,-0.453991,0.000000,
+-0.180965,0.085156,-0.050000,0.891006,-0.453991,0.000000,
+-0.262892,0.144526,0.050000,-0.891006,0.453991,0.000000,
+-0.262892,0.144526,-0.050000,-0.891006,0.453991,0.000000,
+-0.271448,0.127734,0.050000,-0.891006,0.453991,0.000000,
+-0.271448,0.127734,-0.050000,-0.891006,0.453991,0.000000,
+-0.271448,0.127734,0.050000,-0.891006,0.453991,0.000000,
+-0.262892,0.144526,-0.050000,-0.891006,0.453991,0.000000,
+-0.262892,0.144526,-0.050000,0.000000,0.000000,-1.000000,
+-0.253298,0.160748,-0.050000,0.000000,0.000000,-1.000000,
+-0.175261,0.096351,-0.050000,0.000000,0.000000,-1.000000,
+-0.168866,0.107165,-0.050000,0.000000,0.000000,-1.000000,
+-0.175261,0.096351,-0.050000,0.000000,0.000000,-1.000000,
+-0.253298,0.160748,-0.050000,0.000000,0.000000,-1.000000,
+-0.253298,0.160748,0.050000,0.000000,0.000000,1.000000,
+-0.262892,0.144526,0.050000,0.000000,0.000000,1.000000,
+-0.175261,0.096351,0.050000,0.000000,0.000000,1.000000,
+-0.175261,0.096351,0.050000,0.000000,0.000000,1.000000,
+-0.168866,0.107165,0.050000,0.000000,0.000000,1.000000,
+-0.253298,0.160748,0.050000,0.000000,0.000000,1.000000,
+-0.175261,0.096351,0.050000,0.860742,-0.509042,0.000000,
+-0.175261,0.096351,-0.050000,0.860742,-0.509042,0.000000,
+-0.168866,0.107165,0.050000,0.860742,-0.509042,0.000000,
+-0.168866,0.107165,-0.050000,0.860742,-0.509042,0.000000,
+-0.168866,0.107165,0.050000,0.860742,-0.509042,0.000000,
+-0.175261,0.096351,-0.050000,0.860742,-0.509042,0.000000,
+-0.253298,0.160748,0.050000,-0.860742,0.509041,0.000000,
+-0.253298,0.160748,-0.050000,-0.860742,0.509041,0.000000,
+-0.262892,0.144526,0.050000,-0.860742,0.509041,0.000000,
+-0.262892,0.144526,-0.050000,-0.860742,0.509041,0.000000,
+-0.262892,0.144526,0.050000,-0.860742,0.509041,0.000000,
+-0.253298,0.160748,-0.050000,-0.860742,0.509041,0.000000,
+-0.253298,0.160748,-0.050000,0.000000,0.000000,-1.000000,
+-0.242705,0.176336,-0.050000,0.000000,0.000000,-1.000000,
+-0.168866,0.107165,-0.050000,0.000000,0.000000,-1.000000,
+-0.161803,0.117557,-0.050000,0.000000,0.000000,-1.000000,
+-0.168866,0.107165,-0.050000,0.000000,0.000000,-1.000000,
+-0.242705,0.176336,-0.050000,0.000000,0.000000,-1.000000,
+-0.242705,0.176336,0.050000,0.000000,0.000000,1.000000,
+-0.253298,0.160748,0.050000,0.000000,0.000000,1.000000,
+-0.168866,0.107165,0.050000,0.000000,0.000000,1.000000,
+-0.168866,0.107165,0.050000,0.000000,0.000000,1.000000,
+-0.161803,0.117557,0.050000,0.000000,0.000000,1.000000,
+-0.242705,0.176336,0.050000,0.000000,0.000000,1.000000,
+-0.168866,0.107165,0.050000,0.827080,-0.562083,0.000000,
+-0.168866,0.107165,-0.050000,0.827080,-0.562083,0.000000,
+-0.161803,0.117557,0.050000,0.827080,-0.562083,0.000000,
+-0.161803,0.117557,-0.050000,0.827080,-0.562083,0.000000,
+-0.161803,0.117557,0.050000,0.827080,-0.562083,0.000000,
+-0.168866,0.107165,-0.050000,0.827080,-0.562083,0.000000,
+-0.242705,0.176336,0.050000,-0.827081,0.562083,0.000000,
+-0.242705,0.176336,-0.050000,-0.827081,0.562083,0.000000,
+-0.253298,0.160748,0.050000,-0.827081,0.562083,0.000000,
+-0.253298,0.160748,-0.050000,-0.827081,0.562083,0.000000,
+-0.253298,0.160748,0.050000,-0.827081,0.562083,0.000000,
+-0.242705,0.176336,-0.050000,-0.827081,0.562083,0.000000,
+-0.242705,0.176336,-0.050000,0.000000,0.000000,-1.000000,
+-0.231154,0.191227,-0.050000,0.000000,0.000000,-1.000000,
+-0.161803,0.117557,-0.050000,0.000000,0.000000,-1.000000,
+-0.154103,0.127485,-0.050000,0.000000,0.000000,-1.000000,
+-0.161803,0.117557,-0.050000,0.000000,0.000000,-1.000000,
+-0.231154,0.191227,-0.050000,0.000000,0.000000,-1.000000,
+-0.231154,0.191227,0.050000,0.000000,0.000000,1.000000,
+-0.242705,0.176336,0.050000,0.000000,0.000000,1.000000,
+-0.161803,0.117557,0.050000,0.000000,0.000000,1.000000,
+-0.161803,0.117557,0.050000,0.000000,0.000000,1.000000,
+-0.154103,0.127485,0.050000,0.000000,0.000000,1.000000,
+-0.231154,0.191227,0.050000,0.000000,0.000000,1.000000,
+-0.161803,0.117557,0.050000,0.790155,-0.612906,0.000000,
+-0.161803,0.117557,-0.050000,0.790155,-0.612906,0.000000,
+-0.154103,0.127485,0.050000,0.790155,-0.612906,0.000000,
+-0.154103,0.127485,-0.050000,0.790155,-0.612906,0.000000,
+-0.154103,0.127485,0.050000,0.790155,-0.612906,0.000000,
+-0.161803,0.117557,-0.050000,0.790155,-0.612906,0.000000,
+-0.231154,0.191227,0.050000,-0.790155,0.612907,0.000000,
+-0.231154,0.191227,-0.050000,-0.790155,0.612907,0.000000,
+-0.242705,0.176336,0.050000,-0.790155,0.612907,0.000000,
+-0.242705,0.176336,-0.050000,-0.790155,0.612907,0.000000,
+-0.242705,0.176336,0.050000,-0.790155,0.612907,0.000000,
+-0.231154,0.191227,-0.050000,-0.790155,0.612907,0.000000,
+-0.231154,0.191227,-0.050000,0.000000,0.000000,-1.000000,
+-0.218691,0.205364,-0.050000,0.000000,0.000000,-1.000000,
+-0.154103,0.127485,-0.050000,0.000000,0.000000,-1.000000,
+-0.145794,0.136909,-0.050000,0.000000,0.000000,-1.000000,
+-0.154103,0.127485,-0.050000,0.000000,0.000000,-1.000000,
+-0.218691,0.205364,-0.050000,0.000000,0.000000,-1.000000,
+-0.218691,0.205364,0.050000,0.000000,0.000000,1.000000,
+-0.231154,0.191227,0.050000,0.000000,0.000000,1.000000,
+-0.154103,0.127485,0.050000,0.000000,0.000000,1.000000,
+-0.154103,0.127485,0.050000,0.000000,0.000000,1.000000,
+-0.145794,0.136909,0.050000,0.000000,0.000000,1.000000,
+-0.218691,0.205364,0.050000,0.000000,0.000000,1.000000,
+-0.154103,0.127485,0.050000,0.750111,-0.661311,0.000000,
+-0.154103,0.127485,-0.050000,0.750111,-0.661311,0.000000,
+-0.145794,0.136909,0.050000,0.750111,-0.661311,0.000000,
+-0.145794,0.136909,-0.050000,0.750111,-0.661311,0.000000,
+-0.145794,0.136909,0.050000,0.750111,-0.661311,0.000000,
+-0.154103,0.127485,-0.050000,0.750111,-0.661311,0.000000,
+-0.218691,0.205364,0.050000,-0.750111,0.661312,0.000000,
+-0.218691,0.205364,-0.050000,-0.750111,0.661312,0.000000,
+-0.231154,0.191227,0.050000,-0.750111,0.661312,0.000000,
+-0.231154,0.191227,-0.050000,-0.750111,0.661312,0.000000,
+-0.231154,0.191227,0.050000,-0.750111,0.661312,0.000000,
+-0.218691,0.205364,-0.050000,-0.750111,0.661312,0.000000,
+-0.218691,0.205364,-0.050000,0.000000,0.000000,-1.000000,
+-0.205364,0.218691,-0.050000,0.000000,0.000000,-1.000000,
+-0.145794,0.136909,-0.050000,0.000000,0.000000,-1.000000,
+-0.136909,0.145794,-0.050000,0.000000,0.000000,-1.000000,
+-0.145794,0.136909,-0.050000,0.000000,0.000000,-1.000000,
+-0.205364,0.218691,-0.050000,0.000000,0.000000,-1.000000,
+-0.205364,0.218691,0.050000,0.000000,0.000000,1.000000,
+-0.218691,0.205364,0.050000,0.000000,0.000000,1.000000,
+-0.145794,0.136909,0.050000,0.000000,0.000000,1.000000,
+-0.145794,0.136909,0.050000,0.000000,0.000000,1.000000,
+-0.136909,0.145794,0.050000,0.000000,0.000000,1.000000,
+-0.205364,0.218691,0.050000,0.000000,0.000000,1.000000,
+-0.145794,0.136909,0.050000,0.707107,-0.707107,0.000000,
+-0.145794,0.136909,-0.050000,0.707107,-0.707107,0.000000,
+-0.136909,0.145794,0.050000,0.707107,-0.707107,0.000000,
+-0.136909,0.145794,-0.050000,0.707107,-0.707107,0.000000,
+-0.136909,0.145794,0.050000,0.707107,-0.707107,0.000000,
+-0.145794,0.136909,-0.050000,0.707107,-0.707107,0.000000,
+-0.205364,0.218691,0.050000,-0.707107,0.707107,0.000000,
+-0.205364,0.218691,-0.050000,-0.707107,0.707107,0.000000,
+-0.218691,0.205364,0.050000,-0.707107,0.707107,0.000000,
+-0.218691,0.205364,-0.050000,-0.707107,0.707107,0.000000,
+-0.218691,0.205364,0.050000,-0.707107,0.707107,0.000000,
+-0.205364,0.218691,-0.050000,-0.707107,0.707107,0.000000,
+-0.205364,0.218691,-0.050000,0.000000,0.000000,-1.000000,
+-0.191227,0.231154,-0.050000,0.000000,0.000000,-1.000000,
+-0.136909,0.145794,-0.050000,0.000000,0.000000,-1.000000,
+-0.127485,0.154103,-0.050000,0.000000,0.000000,-1.000000,
+-0.136909,0.145794,-0.050000,0.000000,0.000000,-1.000000,
+-0.191227,0.231154,-0.050000,0.000000,0.000000,-1.000000,
+-0.191227,0.231154,0.050000,0.000000,0.000000,1.000000,
+-0.205364,0.218691,0.050000,0.000000,0.000000,1.000000,
+-0.136909,0.145794,0.050000,0.000000,0.000000,1.000000,
+-0.136909,0.145794,0.050000,0.000000,0.000000,1.000000,
+-0.127485,0.154103,0.050000,0.000000,0.000000,1.000000,
+-0.191227,0.231154,0.050000,0.000000,0.000000,1.000000,
+-0.136909,0.145794,0.050000,0.661311,-0.750111,0.000000,
+-0.136909,0.145794,-0.050000,0.661311,-0.750111,0.000000,
+-0.127485,0.154103,0.050000,0.661311,-0.750111,0.000000,
+-0.127485,0.154103,-0.050000,0.661311,-0.750111,0.000000,
+-0.127485,0.154103,0.050000,0.661311,-0.750111,0.000000,
+-0.136909,0.145794,-0.050000,0.661311,-0.750111,0.000000,
+-0.191227,0.231154,0.050000,-0.661312,0.750111,0.000000,
+-0.191227,0.231154,-0.050000,-0.661312,0.750111,0.000000,
+-0.205364,0.218691,0.050000,-0.661312,0.750111,0.000000,
+-0.205364,0.218691,-0.050000,-0.661312,0.750111,0.000000,
+-0.205364,0.218691,0.050000,-0.661312,0.750111,0.000000,
+-0.191227,0.231154,-0.050000,-0.661312,0.750111,0.000000,
+-0.191227,0.231154,-0.050000,0.000000,0.000000,-1.000000,
+-0.176336,0.242705,-0.050000,0.000000,0.000000,-1.000000,
+-0.127485,0.154103,-0.050000,0.000000,0.000000,-1.000000,
+-0.117557,0.161803,-0.050000,0.000000,0.000000,-1.000000,
+-0.127485,0.154103,-0.050000,0.000000,0.000000,-1.000000,
+-0.176336,0.242705,-0.050000,0.000000,0.000000,-1.000000,
+-0.176336,0.242705,0.050000,0.000000,0.000000,1.000000,
+-0.191227,0.231154,0.050000,0.000000,0.000000,1.000000,
+-0.127485,0.154103,0.050000,0.000000,0.000000,1.000000,
+-0.127485,0.154103,0.050000,0.000000,0.000000,1.000000,
+-0.117557,0.161803,0.050000,0.000000,0.000000,1.000000,
+-0.176336,0.242705,0.050000,0.000000,0.000000,1.000000,
+-0.127485,0.154103,0.050000,0.612907,-0.790155,0.000000,
+-0.127485,0.154103,-0.050000,0.612907,-0.790155,0.000000,
+-0.117557,0.161803,0.050000,0.612907,-0.790155,0.000000,
+-0.117557,0.161803,-0.050000,0.612907,-0.790155,0.000000,
+-0.117557,0.161803,0.050000,0.612907,-0.790155,0.000000,
+-0.127485,0.154103,-0.050000,0.612907,-0.790155,0.000000,
+-0.176336,0.242705,0.050000,-0.612907,0.790155,0.000000,
+-0.176336,0.242705,-0.050000,-0.612907,0.790155,0.000000,
+-0.191227,0.231154,0.050000,-0.612907,0.790155,0.000000,
+-0.191227,0.231154,-0.050000,-0.612907,0.790155,0.000000,
+-0.191227,0.231154,0.050000,-0.612907,0.790155,0.000000,
+-0.176336,0.242705,-0.050000,-0.612907,0.790155,0.000000,
+-0.176336,0.242705,-0.050000,0.000000,0.000000,-1.000000,
+-0.160748,0.253298,-0.050000,0.000000,0.000000,-1.000000,
+-0.117557,0.161803,-0.050000,0.000000,0.000000,-1.000000,
+-0.107165,0.168866,-0.050000,0.000000,0.000000,-1.000000,
+-0.117557,0.161803,-0.050000,0.000000,0.000000,-1.000000,
+-0.160748,0.253298,-0.050000,0.000000,0.000000,-1.000000,
+-0.160748,0.253298,0.050000,0.000000,0.000000,1.000000,
+-0.176336,0.242705,0.050000,0.000000,0.000000,1.000000,
+-0.117557,0.161803,0.050000,0.000000,0.000000,1.000000,
+-0.117557,0.161803,0.050000,0.000000,0.000000,1.000000,
+-0.107165,0.168866,0.050000,0.000000,0.000000,1.000000,
+-0.160748,0.253298,0.050000,0.000000,0.000000,1.000000,
+-0.117557,0.161803,0.050000,0.562083,-0.827081,0.000000,
+-0.117557,0.161803,-0.050000,0.562083,-0.827081,0.000000,
+-0.107165,0.168866,0.050000,0.562083,-0.827081,0.000000,
+-0.107165,0.168866,-0.050000,0.562083,-0.827081,0.000000,
+-0.107165,0.168866,0.050000,0.562083,-0.827081,0.000000,
+-0.117557,0.161803,-0.050000,0.562083,-0.827081,0.000000,
+-0.160748,0.253298,0.050000,-0.562083,0.827081,0.000000,
+-0.160748,0.253298,-0.050000,-0.562083,0.827081,0.000000,
+-0.176336,0.242705,0.050000,-0.562083,0.827081,0.000000,
+-0.176336,0.242705,-0.050000,-0.562083,0.827081,0.000000,
+-0.176336,0.242705,0.050000,-0.562083,0.827081,0.000000,
+-0.160748,0.253298,-0.050000,-0.562083,0.827081,0.000000,
+-0.160748,0.253298,-0.050000,0.000000,0.000000,-1.000000,
+-0.144526,0.262892,-0.050000,0.000000,0.000000,-1.000000,
+-0.107165,0.168866,-0.050000,0.000000,0.000000,-1.000000,
+-0.096351,0.175261,-0.050000,0.000000,0.000000,-1.000000,
+-0.107165,0.168866,-0.050000,0.000000,0.000000,-1.000000,
+-0.144526,0.262892,-0.050000,0.000000,0.000000,-1.000000,
+-0.144526,0.262892,0.050000,0.000000,0.000000,1.000000,
+-0.160748,0.253298,0.050000,0.000000,0.000000,1.000000,
+-0.107165,0.168866,0.050000,0.000000,0.000000,1.000000,
+-0.107165,0.168866,0.050000,0.000000,0.000000,1.000000,
+-0.096351,0.175261,0.050000,0.000000,0.000000,1.000000,
+-0.144526,0.262892,0.050000,0.000000,0.000000,1.000000,
+-0.107165,0.168866,0.050000,0.509042,-0.860742,0.000000,
+-0.107165,0.168866,-0.050000,0.509042,-0.860742,0.000000,
+-0.096351,0.175261,0.050000,0.509042,-0.860742,0.000000,
+-0.096351,0.175261,-0.050000,0.509042,-0.860742,0.000000,
+-0.096351,0.175261,0.050000,0.509042,-0.860742,0.000000,
+-0.107165,0.168866,-0.050000,0.509042,-0.860742,0.000000,
+-0.144526,0.262892,0.050000,-0.509042,0.860742,0.000000,
+-0.144526,0.262892,-0.050000,-0.509042,0.860742,0.000000,
+-0.160748,0.253298,0.050000,-0.509042,0.860742,0.000000,
+-0.160748,0.253298,-0.050000,-0.509042,0.860742,0.000000,
+-0.160748,0.253298,0.050000,-0.509042,0.860742,0.000000,
+-0.144526,0.262892,-0.050000,-0.509042,0.860742,0.000000,
+-0.144526,0.262892,-0.050000,0.000000,0.000000,-1.000000,
+-0.127734,0.271448,-0.050000,0.000000,0.000000,-1.000000,
+-0.096351,0.175261,-0.050000,0.000000,0.000000,-1.000000,
+-0.085156,0.180965,-0.050000,0.000000,0.000000,-1.000000,
+-0.096351,0.175261,-0.050000,0.000000,0.000000,-1.000000,
+-0.127734,0.271448,-0.050000,0.000000,0.000000,-1.000000,
+-0.127734,0.271448,0.050000,0.000000,0.000000,1.000000,
+-0.144526,0.262892,0.050000,0.000000,0.000000,1.000000,
+-0.096351,0.175261,0.050000,0.000000,0.000000,1.000000,
+-0.096351,0.175261,0.050000,0.000000,0.000000,1.000000,
+-0.085156,0.180965,0.050000,0.000000,0.000000,1.000000,
+-0.127734,0.271448,0.050000,0.000000,0.000000,1.000000,
+-0.096351,0.175261,0.050000,0.453990,-0.891007,0.000000,
+-0.096351,0.175261,-0.050000,0.453990,-0.891007,0.000000,
+-0.085156,0.180965,0.050000,0.453990,-0.891007,0.000000,
+-0.085156,0.180965,-0.050000,0.453990,-0.891007,0.000000,
+-0.085156,0.180965,0.050000,0.453990,-0.891007,0.000000,
+-0.096351,0.175261,-0.050000,0.453990,-0.891007,0.000000,
+-0.127734,0.271448,0.050000,-0.453991,0.891006,0.000000,
+-0.127734,0.271448,-0.050000,-0.453991,0.891006,0.000000,
+-0.144526,0.262892,0.050000,-0.453991,0.891006,0.000000,
+-0.144526,0.262892,-0.050000,-0.453991,0.891006,0.000000,
+-0.144526,0.262892,0.050000,-0.453991,0.891006,0.000000,
+-0.127734,0.271448,-0.050000,-0.453991,0.891006,0.000000,
+-0.127734,0.271448,-0.050000,0.000000,0.000000,-1.000000,
+-0.110437,0.278933,-0.050000,0.000000,0.000000,-1.000000,
+-0.085156,0.180965,-0.050000,0.000000,0.000000,-1.000000,
+-0.073625,0.185955,-0.050000,0.000000,0.000000,-1.000000,
+-0.085156,0.180965,-0.050000,0.000000,0.000000,-1.000000,
+-0.110437,0.278933,-0.050000,0.000000,0.000000,-1.000000,
+-0.110437,0.278933,0.050000,0.000000,0.000000,1.000000,
+-0.127734,0.271448,0.050000,0.000000,0.000000,1.000000,
+-0.085156,0.180965,0.050000,0.000000,0.000000,1.000000,
+-0.085156,0.180965,0.050000,0.000000,0.000000,1.000000,
+-0.073625,0.185955,0.050000,0.000000,0.000000,1.000000,
+-0.110437,0.278933,0.050000,0.000000,0.000000,1.000000,
+-0.085156,0.180965,0.050000,0.397148,-0.917754,0.000000,
+-0.085156,0.180965,-0.050000,0.397148,-0.917754,0.000000,
+-0.073625,0.185955,0.050000,0.397148,-0.917754,0.000000,
+-0.073625,0.185955,-0.050000,0.397148,-0.917754,0.000000,
+-0.073625,0.185955,0.050000,0.397148,-0.917754,0.000000,
+-0.085156,0.180965,-0.050000,0.397148,-0.917754,0.000000,
+-0.110437,0.278933,0.050000,-0.397148,0.917755,0.000000,
+-0.110437,0.278933,-0.050000,-0.397148,0.917755,0.000000,
+-0.127734,0.271448,0.050000,-0.397148,0.917755,0.000000,
+-0.127734,0.271448,-0.050000,-0.397148,0.917755,0.000000,
+-0.127734,0.271448,0.050000,-0.397148,0.917755,0.000000,
+-0.110437,0.278933,-0.050000,-0.397148,0.917755,0.000000,
+-0.110437,0.278933,-0.050000,0.000000,0.000000,-1.000000,
+-0.092705,0.285317,-0.050000,0.000000,0.000000,-1.000000,
+-0.073625,0.185955,-0.050000,0.000000,0.000000,-1.000000,
+-0.061803,0.190211,-0.050000,0.000000,0.000000,-1.000000,
+-0.073625,0.185955,-0.050000,0.000000,0.000000,-1.000000,
+-0.092705,0.285317,-0.050000,0.000000,0.000000,-1.000000,
+-0.092705,0.285317,0.050000,0.000000,0.000000,1.000000,
+-0.110437,0.278933,0.050000,0.000000,0.000000,1.000000,
+-0.073625,0.185955,0.050000,0.000000,0.000000,1.000000,
+-0.073625,0.185955,0.050000,0.000000,0.000000,1.000000,
+-0.061803,0.190211,0.050000,0.000000,0.000000,1.000000,
+-0.092705,0.285317,0.050000,0.000000,0.000000,1.000000,
+-0.073625,0.185955,0.050000,0.338738,-0.940881,0.000000,
+-0.073625,0.185955,-0.050000,0.338738,-0.940881,0.000000,
+-0.061803,0.190211,0.050000,0.338738,-0.940881,0.000000,
+-0.061803,0.190211,-0.050000,0.338738,-0.940881,0.000000,
+-0.061803,0.190211,0.050000,0.338738,-0.940881,0.000000,
+-0.073625,0.185955,-0.050000,0.338738,-0.940881,0.000000,
+-0.092705,0.285317,0.050000,-0.338738,0.940881,0.000000,
+-0.092705,0.285317,-0.050000,-0.338738,0.940881,0.000000,
+-0.110437,0.278933,0.050000,-0.338738,0.940881,0.000000,
+-0.110437,0.278933,-0.050000,-0.338738,0.940881,0.000000,
+-0.110437,0.278933,0.050000,-0.338738,0.940881,0.000000,
+-0.092705,0.285317,-0.050000,-0.338738,0.940881,0.000000,
+-0.092705,0.285317,-0.050000,0.000000,0.000000,-1.000000,
+-0.074607,0.290575,-0.050000,0.000000,0.000000,-1.000000,
+-0.061803,0.190211,-0.050000,0.000000,0.000000,-1.000000,
+-0.049738,0.193717,-0.050000,0.000000,0.000000,-1.000000,
+-0.061803,0.190211,-0.050000,0.000000,0.000000,-1.000000,
+-0.074607,0.290575,-0.050000,0.000000,0.000000,-1.000000,
+-0.074607,0.290575,0.050000,0.000000,0.000000,1.000000,
+-0.092705,0.285317,0.050000,0.000000,0.000000,1.000000,
+-0.061803,0.190211,0.050000,0.000000,0.000000,1.000000,
+-0.061803,0.190211,0.050000,0.000000,0.000000,1.000000,
+-0.049738,0.193717,0.050000,0.000000,0.000000,1.000000,
+-0.074607,0.290575,0.050000,0.000000,0.000000,1.000000,
+-0.061803,0.190211,0.050000,0.278990,-0.960294,0.000000,
+-0.061803,0.190211,-0.050000,0.278990,-0.960294,0.000000,
+-0.049738,0.193717,0.050000,0.278990,-0.960294,0.000000,
+-0.049738,0.193717,-0.050000,0.278990,-0.960294,0.000000,
+-0.049738,0.193717,0.050000,0.278990,-0.960294,0.000000,
+-0.061803,0.190211,-0.050000,0.278990,-0.960294,0.000000,
+-0.074607,0.290575,0.050000,-0.278991,0.960294,0.000000,
+-0.074607,0.290575,-0.050000,-0.278991,0.960294,0.000000,
+-0.092705,0.285317,0.050000,-0.278991,0.960294,0.000000,
+-0.092705,0.285317,-0.050000,-0.278991,0.960294,0.000000,
+-0.092705,0.285317,0.050000,-0.278991,0.960294,0.000000,
+-0.074607,0.290575,-0.050000,-0.278991,0.960294,0.000000,
+-0.074607,0.290575,-0.050000,0.000000,0.000000,-1.000000,
+-0.056214,0.294686,-0.050000,0.000000,0.000000,-1.000000,
+-0.049738,0.193717,-0.050000,0.000000,0.000000,-1.000000,
+-0.037476,0.196457,-0.050000,0.000000,0.000000,-1.000000,
+-0.049738,0.193717,-0.050000,0.000000,0.000000,-1.000000,
+-0.056214,0.294686,-0.050000,0.000000,0.000000,-1.000000,
+-0.056214,0.294686,0.050000,0.000000,0.000000,1.000000,
+-0.074607,0.290575,0.050000,0.000000,0.000000,1.000000,
+-0.049738,0.193717,0.050000,0.000000,0.000000,1.000000,
+-0.049738,0.193717,0.050000,0.000000,0.000000,1.000000,
+-0.037476,0.196457,0.050000,0.000000,0.000000,1.000000,
+-0.056214,0.294686,0.050000,0.000000,0.000000,1.000000,
+-0.049738,0.193717,0.050000,0.218144,-0.975917,0.000000,
+-0.049738,0.193717,-0.050000,0.218144,-0.975917,0.000000,
+-0.037476,0.196457,0.050000,0.218144,-0.975917,0.000000,
+-0.037476,0.196457,-0.050000,0.218144,-0.975917,0.000000,
+-0.037476,0.196457,0.050000,0.218144,-0.975917,0.000000,
+-0.049738,0.193717,-0.050000,0.218144,-0.975917,0.000000,
+-0.056214,0.294686,0.050000,-0.218143,0.975917,0.000000,
+-0.056214,0.294686,-0.050000,-0.218143,0.975917,0.000000,
+-0.074607,0.290575,0.050000,-0.218143,0.975917,0.000000,
+-0.074607,0.290575,-0.050000,-0.218143,0.975917,0.000000,
+-0.074607,0.290575,0.050000,-0.218143,0.975917,0.000000,
+-0.056214,0.294686,-0.050000,-0.218143,0.975917,0.000000,
+-0.056214,0.294686,-0.050000,0.000000,0.000000,-1.000000,
+-0.037600,0.297634,-0.050000,0.000000,0.000000,-1.000000,
+-0.037476,0.196457,-0.050000,0.000000,0.000000,-1.000000,
+-0.025067,0.198423,-0.050000,0.000000,0.000000,-1.000000,
+-0.037476,0.196457,-0.050000,0.000000,0.000000,-1.000000,
+-0.037600,0.297634,-0.050000,0.000000,0.000000,-1.000000,
+-0.037600,0.297634,0.050000,0.000000,0.000000,1.000000,
+-0.056214,0.294686,0.050000,0.000000,0.000000,1.000000,
+-0.037476,0.196457,0.050000,0.000000,0.000000,1.000000,
+-0.037476,0.196457,0.050000,0.000000,0.000000,1.000000,
+-0.025067,0.198423,0.050000,0.000000,0.000000,1.000000,
+-0.037600,0.297634,0.050000,0.000000,0.000000,1.000000,
+-0.037476,0.196457,0.050000,0.156435,-0.987688,0.000000,
+-0.037476,0.196457,-0.050000,0.156435,-0.987688,0.000000,
+-0.025067,0.198423,0.050000,0.156435,-0.987688,0.000000,
+-0.025067,0.198423,-0.050000,0.156435,-0.987688,0.000000,
+-0.025067,0.198423,0.050000,0.156435,-0.987688,0.000000,
+-0.037476,0.196457,-0.050000,0.156435,-0.987688,0.000000,
+-0.037600,0.297634,0.050000,-0.156434,0.987688,0.000000,
+-0.037600,0.297634,-0.050000,-0.156434,0.987688,0.000000,
+-0.056214,0.294686,0.050000,-0.156434,0.987688,0.000000,
+-0.056214,0.294686,-0.050000,-0.156434,0.987688,0.000000,
+-0.056214,0.294686,0.050000,-0.156434,0.987688,0.000000,
+-0.037600,0.297634,-0.050000,-0.156434,0.987688,0.000000,
+-0.037600,0.297634,-0.050000,0.000000,0.000000,-1.000000,
+-0.018837,0.299408,-0.050000,0.000000,0.000000,-1.000000,
+-0.025067,0.198423,-0.050000,0.000000,0.000000,-1.000000,
+-0.012558,0.199605,-0.050000,0.000000,0.000000,-1.000000,
+-0.025067,0.198423,-0.050000,0.000000,0.000000,-1.000000,
+-0.018837,0.299408,-0.050000,0.000000,0.000000,-1.000000,
+-0.018837,0.299408,0.050000,0.000000,0.000000,1.000000,
+-0.037600,0.297634,0.050000,0.000000,0.000000,1.000000,
+-0.025067,0.198423,0.050000,0.000000,0.000000,1.000000,
+-0.025067,0.198423,0.050000,0.000000,0.000000,1.000000,
+-0.012558,0.199605,0.050000,0.000000,0.000000,1.000000,
+-0.018837,0.299408,0.050000,0.000000,0.000000,1.000000,
+-0.025067,0.198423,0.050000,0.094107,-0.995562,0.000000,
+-0.025067,0.198423,-0.050000,0.094107,-0.995562,0.000000,
+-0.012558,0.199605,0.050000,0.094107,-0.995562,0.000000,
+-0.012558,0.199605,-0.050000,0.094107,-0.995562,0.000000,
+-0.012558,0.199605,0.050000,0.094107,-0.995562,0.000000,
+-0.025067,0.198423,-0.050000,0.094107,-0.995562,0.000000,
+-0.018837,0.299408,0.050000,-0.094108,0.995562,0.000000,
+-0.018837,0.299408,-0.050000,-0.094108,0.995562,0.000000,
+-0.037600,0.297634,0.050000,-0.094108,0.995562,0.000000,
+-0.037600,0.297634,-0.050000,-0.094108,0.995562,0.000000,
+-0.037600,0.297634,0.050000,-0.094108,0.995562,0.000000,
+-0.018837,0.299408,-0.050000,-0.094108,0.995562,0.000000,
+-0.018837,0.299408,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.300000,-0.050000,0.000000,0.000000,-1.000000,
+-0.012558,0.199605,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.200000,-0.050000,0.000000,0.000000,-1.000000,
+-0.012558,0.199605,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.300000,-0.050000,0.000000,0.000000,-1.000000,
+0.000000,0.300000,0.050000,0.000000,0.000000,1.000000,
+-0.018837,0.299408,0.050000,0.000000,0.000000,1.000000,
+-0.012558,0.199605,0.050000,0.000000,0.000000,1.000000,
+-0.012558,0.199605,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.200000,0.050000,0.000000,0.000000,1.000000,
+0.000000,0.300000,0.050000,0.000000,0.000000,1.000000,
+-0.012558,0.199605,0.050000,0.031411,-0.999507,0.000000,
+-0.012558,0.199605,-0.050000,0.031411,-0.999507,0.000000,
+0.000000,0.200000,0.050000,0.031411,-0.999507,0.000000,
+0.000000,0.200000,-0.050000,0.031411,-0.999507,0.000000,
+0.000000,0.200000,0.050000,0.031411,-0.999507,0.000000,
+-0.012558,0.199605,-0.050000,0.031411,-0.999507,0.000000,
+0.000000,0.300000,0.050000,-0.031411,0.999507,0.000000,
+0.000000,0.300000,-0.050000,-0.031411,0.999507,0.000000,
+-0.018837,0.299408,0.050000,-0.031411,0.999507,0.000000,
+-0.018837,0.299408,-0.050000,-0.031411,0.999507,0.000000,
+-0.018837,0.299408,0.050000,-0.031411,0.999507,0.000000,
+0.000000,0.300000,-0.050000,-0.031411,0.999507,0.000000
+];
diff --git a/basicsuite/webengine/content/webgl/screenshot.png b/basicsuite/webengine/content/webgl/screenshot.png
new file mode 100644
index 0000000..388b45b
--- /dev/null
+++ b/basicsuite/webengine/content/webgl/screenshot.png
Binary files differ
diff --git a/basicsuite/webengine/content/webgl/three.min.js b/basicsuite/webengine/content/webgl/three.min.js
new file mode 100644
index 0000000..95b938c
--- /dev/null
+++ b/basicsuite/webengine/content/webgl/three.min.js
@@ -0,0 +1,737 @@
+// three.js / threejs.org/license
+'use strict';var THREE={REVISION:"67"};self.console=self.console||{info:function(){},log:function(){},debug:function(){},warn:function(){},error:function(){}};
+(function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c<b.length&&!self.requestAnimationFrame;++c)self.requestAnimationFrame=self[b[c]+"RequestAnimationFrame"],self.cancelAnimationFrame=self[b[c]+"CancelAnimationFrame"]||self[b[c]+"CancelRequestAnimationFrame"];void 0===self.requestAnimationFrame&&void 0!==self.setTimeout&&(self.requestAnimationFrame=function(b){var c=Date.now(),f=Math.max(0,16-(c-a)),g=self.setTimeout(function(){b(c+f)},f);a=c+f;return g});void 0===self.cancelAnimationFrame&&void 0!==
+self.clearTimeout&&(self.cancelAnimationFrame=function(a){self.clearTimeout(a)})})();THREE.CullFaceNone=0;THREE.CullFaceBack=1;THREE.CullFaceFront=2;THREE.CullFaceFrontBack=3;THREE.FrontFaceDirectionCW=0;THREE.FrontFaceDirectionCCW=1;THREE.BasicShadowMap=0;THREE.PCFShadowMap=1;THREE.PCFSoftShadowMap=2;THREE.FrontSide=0;THREE.BackSide=1;THREE.DoubleSide=2;THREE.NoShading=0;THREE.FlatShading=1;THREE.SmoothShading=2;THREE.NoColors=0;THREE.FaceColors=1;THREE.VertexColors=2;THREE.NoBlending=0;
+THREE.NormalBlending=1;THREE.AdditiveBlending=2;THREE.SubtractiveBlending=3;THREE.MultiplyBlending=4;THREE.CustomBlending=5;THREE.AddEquation=100;THREE.SubtractEquation=101;THREE.ReverseSubtractEquation=102;THREE.ZeroFactor=200;THREE.OneFactor=201;THREE.SrcColorFactor=202;THREE.OneMinusSrcColorFactor=203;THREE.SrcAlphaFactor=204;THREE.OneMinusSrcAlphaFactor=205;THREE.DstAlphaFactor=206;THREE.OneMinusDstAlphaFactor=207;THREE.DstColorFactor=208;THREE.OneMinusDstColorFactor=209;
+THREE.SrcAlphaSaturateFactor=210;THREE.MultiplyOperation=0;THREE.MixOperation=1;THREE.AddOperation=2;THREE.UVMapping=function(){};THREE.CubeReflectionMapping=function(){};THREE.CubeRefractionMapping=function(){};THREE.SphericalReflectionMapping=function(){};THREE.SphericalRefractionMapping=function(){};THREE.RepeatWrapping=1E3;THREE.ClampToEdgeWrapping=1001;THREE.MirroredRepeatWrapping=1002;THREE.NearestFilter=1003;THREE.NearestMipMapNearestFilter=1004;THREE.NearestMipMapLinearFilter=1005;
+THREE.LinearFilter=1006;THREE.LinearMipMapNearestFilter=1007;THREE.LinearMipMapLinearFilter=1008;THREE.UnsignedByteType=1009;THREE.ByteType=1010;THREE.ShortType=1011;THREE.UnsignedShortType=1012;THREE.IntType=1013;THREE.UnsignedIntType=1014;THREE.FloatType=1015;THREE.UnsignedShort4444Type=1016;THREE.UnsignedShort5551Type=1017;THREE.UnsignedShort565Type=1018;THREE.AlphaFormat=1019;THREE.RGBFormat=1020;THREE.RGBAFormat=1021;THREE.LuminanceFormat=1022;THREE.LuminanceAlphaFormat=1023;
+THREE.RGB_S3TC_DXT1_Format=2001;THREE.RGBA_S3TC_DXT1_Format=2002;THREE.RGBA_S3TC_DXT3_Format=2003;THREE.RGBA_S3TC_DXT5_Format=2004;THREE.Color=function(a){return 3===arguments.length?this.setRGB(arguments[0],arguments[1],arguments[2]):this.set(a)};
+THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,set:function(a){a instanceof THREE.Color?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){if(0===b)this.r=this.g=this.b=c;else{var d=function(a,b,c){0>c&&(c+=1);1<c&&(c-=1);return c<1/6?a+6*(b-a)*
+c:0.5>c?b:c<2/3?a+6*(b-a)*(2/3-c):a};b=0.5>=c?c*(1+b):c+b-c*b;c=2*c-b;this.r=d(c,b,a+1/3);this.g=d(c,b,a);this.b=d(c,b,a-1/3)}return this},setStyle:function(a){if(/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.test(a))return a=/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.exec(a),this.r=Math.min(255,parseInt(a[1],10))/255,this.g=Math.min(255,parseInt(a[2],10))/255,this.b=Math.min(255,parseInt(a[3],10))/255,this;if(/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.test(a))return a=/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.exec(a),this.r=
+Math.min(100,parseInt(a[1],10))/100,this.g=Math.min(100,parseInt(a[2],10))/100,this.b=Math.min(100,parseInt(a[3],10))/100,this;if(/^\#([0-9a-f]{6})$/i.test(a))return a=/^\#([0-9a-f]{6})$/i.exec(a),this.setHex(parseInt(a[1],16)),this;if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(a))return a=/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a),this.setHex(parseInt(a[1]+a[1]+a[2]+a[2]+a[3]+a[3],16)),this;if(/^(\w+)$/i.test(a))return this.setHex(THREE.ColorKeywords[a]),this},copy:function(a){this.r=a.r;this.g=
+a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},convertGammaToLinear:function(){var a=this.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 255*this.r<<16^255*this.g<<
+8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){a=a||{h:0,s:0,l:0};var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f,f=0.5>=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c-d)/k+(c<d?6:0);break;case c:g=(d-b)/k+2;break;case d:g=(b-c)/k+4}g/=6}a.h=g;a.s=f;a.l=h;return a},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(a,
+b,c){var d=this.getHSL();d.h+=a;d.s+=b;d.l+=c;this.setHSL(d.h,d.s,d.l);return this},add:function(a){this.r+=a.r;this.g+=a.g;this.b+=a.b;return this},addColors:function(a,b){this.r=a.r+b.r;this.g=a.g+b.g;this.b=a.b+b.b;return this},addScalar:function(a){this.r+=a;this.g+=a;this.b+=a;return this},multiply:function(a){this.r*=a.r;this.g*=a.g;this.b*=a.b;return this},multiplyScalar:function(a){this.r*=a;this.g*=a;this.b*=a;return this},lerp:function(a,b){this.r+=(a.r-this.r)*b;this.g+=(a.g-this.g)*b;
+this.b+=(a.b-this.b)*b;return this},equals:function(a){return a.r===this.r&&a.g===this.g&&a.b===this.b},fromArray:function(a){this.r=a[0];this.g=a[1];this.b=a[2];return this},toArray:function(){return[this.r,this.g,this.b]},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};
+THREE.ColorKeywords={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,
+darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,
+grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,
+lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,
+palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,
+tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};THREE.Quaternion=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1};
+THREE.Quaternion.prototype={constructor:THREE.Quaternion,_x:0,_y:0,_z:0,_w:0,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get w(){return this._w},set w(a){this._w=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;
+this._w=a._w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!1===a instanceof THREE.Euler)throw Error("ERROR: Quaternion's .setFromEuler() now expects a Euler rotation rather than a Vector3 and order. Please update your code.");var c=Math.cos(a._x/2),d=Math.cos(a._y/2),e=Math.cos(a._z/2),f=Math.sin(a._x/2),g=Math.sin(a._y/2),h=Math.sin(a._z/2);"XYZ"===a.order?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):"YXZ"===a.order?(this._x=f*d*e+c*g*h,
+this._y=c*g*e-f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):"ZXY"===a.order?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):"ZYX"===a.order?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):"YZX"===a.order?(this._x=f*d*e+c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e-f*g*h):"XZY"===a.order&&(this._x=f*d*e-c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e+f*g*h);if(!1!==b)this.onChangeCallback();return this},
+setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this._x=a.x*d;this._y=a.y*d;this._z=a.z*d;this._w=Math.cos(c);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6],b=b[10],l=c+f+b;0<l?(c=0.5/Math.sqrt(l+1),this._w=0.25/c,this._x=(k-g)*c,this._y=(d-h)*c,this._z=(e-a)*c):c>f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=0.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=
+(d-h)/c,this._x=(a+e)/c,this._y=0.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=0.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;this.normalize();return this}}(),inverse:function(){this.conjugate().normalize();
+return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==
+b?(console.warn("DEPRECATED: Quaternion's .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,l=b._w;this._x=c*l+f*g+d*k-e*h;this._y=d*l+f*h+e*g-c*k;this._z=e*l+f*k+c*h-d*g;this._w=f*l-c*g-d*h-e*k;this.onChangeCallback();return this},multiplyVector3:function(a){console.warn("DEPRECATED: Quaternion's .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");
+return a.applyQuaternion(this)},slerp:function(a,b){var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.acos(g),k=Math.sqrt(1-g*g);if(0.001>Math.abs(k))return this._w=0.5*(f+this._w),this._x=0.5*(c+this._x),this._y=0.5*(d+this._y),this._z=0.5*(e+this._z),this;g=Math.sin((1-b)*h)/k;h=Math.sin(b*h)/k;this._w=f*g+this._w*h;this._x=
+c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];this._w=a[3];this.onChangeCallback();return this},toArray:function(){return[this._x,this._y,this._z,this._w]},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){},clone:function(){return new THREE.Quaternion(this._x,this._y,
+this._z,this._w)}};THREE.Quaternion.slerp=function(a,b,c,d){return c.copy(a).slerp(b,d)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0};
+THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,
+b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=
+a.y;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){0!==a?(a=1/a,this.x*=a,this.y*=a):this.y=this.x=0;return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);return this},max:function(a){this.x<a.x&&(this.x=a.x);this.y<a.y&&(this.y=a.y);return this},
+clamp:function(a,b){this.x<a.x?this.x=a.x:this.x>b.x&&(this.x=b.x);this.y<a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector2,b=new THREE.Vector2);a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);
+return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},
+distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a){this.x=a[0];this.y=a[1];return this},toArray:function(){return[this.x,this.y]},clone:function(){return new THREE.Vector2(this.x,this.y)}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0};
+THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+
+a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),
+this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*
+b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===b instanceof THREE.Euler&&console.error("ERROR: Vector3's .applyEuler() now expects a Euler rotation rather than a Vector3 and order. Please update your code.");void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new THREE.Quaternion);this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),
+applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=
+(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,l=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-l*-f;this.y=k*a+b*-f+l*-e-h*-g;this.z=l*a+b*-g+h*-f-k*-e;return this},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;this.normalize();return this},
+divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){0!==a?(a=1/a,this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);return this},max:function(a){this.x<a.x&&(this.x=a.x);this.y<a.y&&(this.y=a.y);this.z<a.z&&(this.z=a.z);return this},clamp:function(a,b){this.x<a.x?this.x=a.x:this.x>b.x&&(this.x=b.x);this.y<a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);this.z<
+a.z?this.z=a.z:this.z>b.z&&(this.z=b.z);return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector3,b=new THREE.Vector3);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);
+return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+
+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},cross:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=
+d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=a.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(){var a,b;return function(c){void 0===a&&(a=new THREE.Vector3);a.copy(c).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new THREE.Vector3);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;
+return function(b){void 0===a&&(a=new THREE.Vector3);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/(this.length()*a.length());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},setEulerFromRotationMatrix:function(a,b){console.error("REMOVED: Vector3's setEulerFromRotationMatrix has been removed in favor of Euler.setFromRotationMatrix(), please update your code.")},
+setEulerFromQuaternion:function(a,b){console.error("REMOVED: Vector3's setEulerFromQuaternion: has been removed in favor of Euler.setFromQuaternion(), please update your code.")},getPositionFromMatrix:function(a){console.warn("DEPRECATED: Vector3's .getPositionFromMatrix() has been renamed to .setFromMatrixPosition(). Please update your code.");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn("DEPRECATED: Vector3's .getScaleFromMatrix() has been renamed to .setFromMatrixScale(). Please update your code.");
+return this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn("DEPRECATED: Vector3's .getColumnFromMatrix() has been renamed to .setFromMatrixColumn(). Please update your code.");return this.setFromMatrixColumn(a,b)},setFromMatrixPosition:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14];return this},setFromMatrixScale:function(a){var b=this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length();
+a=this.set(a.elements[8],a.elements[9],a.elements[10]).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){var c=4*a,d=b.elements;this.x=d[c];this.y=d[c+1];this.z=d[c+2];return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];return this},toArray:function(){return[this.x,this.y,this.z]},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};
+THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;
+case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},
+addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},
+applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){0!==a?(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a):(this.z=this.y=this.x=0,this.w=1);return this},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,
+this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var l=a[10];if(0.01>Math.abs(d-g)&&0.01>Math.abs(f-c)&&0.01>Math.abs(k-b)){if(0.1>Math.abs(d+g)&&0.1>Math.abs(f+c)&&0.1>Math.abs(k+b)&&0.1>Math.abs(e+h+l-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>l?0.01>e?(b=0,d=c=0.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>l?0.01>
+h?(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):0.01>l?(c=b=0.707106781,d=0):(d=Math.sqrt(l),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));0.001>Math.abs(a)&&(a=1);this.x=(b-k)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+l-1)/2);return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);this.w>a.w&&(this.w=a.w);return this},max:function(a){this.x<a.x&&(this.x=a.x);this.y<a.y&&(this.y=
+a.y);this.z<a.z&&(this.z=a.z);this.w<a.w&&(this.w=a.w);return this},clamp:function(a,b){this.x<a.x?this.x=a.x:this.x>b.x&&(this.x=b.x);this.y<a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);this.z<a.z?this.z=a.z:this.z>b.z&&(this.z=b.z);this.w<a.w?this.w=a.w:this.w>b.w&&(this.w=b.w);return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new THREE.Vector4,b=new THREE.Vector4);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=
+Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):
+Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},
+setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];this.w=a[3];return this},toArray:function(){return[this.x,this.y,this.z,this.w]},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,
+this.w)}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ";
+THREE.Euler.prototype={constructor:THREE.Euler,_x:0,_y:0,_z:0,_order:THREE.Euler.DefaultOrder,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},set order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},copy:function(a){this._x=
+a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b){var c=THREE.Math.clamp,d=a.elements,e=d[0],f=d[4],g=d[8],h=d[1],k=d[5],l=d[9],n=d[2],q=d[6],d=d[10];b=b||this._order;"XYZ"===b?(this._y=Math.asin(c(g,-1,1)),0.99999>Math.abs(g)?(this._x=Math.atan2(-l,d),this._z=Math.atan2(-f,e)):(this._x=Math.atan2(q,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-c(l,-1,1)),0.99999>Math.abs(l)?(this._y=Math.atan2(g,d),this._z=Math.atan2(h,k)):
+(this._y=Math.atan2(-n,e),this._z=0)):"ZXY"===b?(this._x=Math.asin(c(q,-1,1)),0.99999>Math.abs(q)?(this._y=Math.atan2(-n,d),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,e))):"ZYX"===b?(this._y=Math.asin(-c(n,-1,1)),0.99999>Math.abs(n)?(this._x=Math.atan2(q,d),this._z=Math.atan2(h,e)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"===b?(this._z=Math.asin(c(h,-1,1)),0.99999>Math.abs(h)?(this._x=Math.atan2(-l,k),this._y=Math.atan2(-n,e)):(this._x=0,this._y=Math.atan2(g,d))):"XZY"===b?(this._z=
+Math.asin(-c(f,-1,1)),0.99999>Math.abs(f)?(this._x=Math.atan2(q,k),this._y=Math.atan2(g,e)):(this._x=Math.atan2(-l,d),this._y=0)):console.warn("WARNING: Euler.setFromRotationMatrix() given unsupported order: "+b);this._order=b;this.onChangeCallback();return this},setFromQuaternion:function(a,b,c){var d=THREE.Math.clamp,e=a.x*a.x,f=a.y*a.y,g=a.z*a.z,h=a.w*a.w;b=b||this._order;"XYZ"===b?(this._x=Math.atan2(2*(a.x*a.w-a.y*a.z),h-e-f+g),this._y=Math.asin(d(2*(a.x*a.z+a.y*a.w),-1,1)),this._z=Math.atan2(2*
+(a.z*a.w-a.x*a.y),h+e-f-g)):"YXZ"===b?(this._x=Math.asin(d(2*(a.x*a.w-a.y*a.z),-1,1)),this._y=Math.atan2(2*(a.x*a.z+a.y*a.w),h-e-f+g),this._z=Math.atan2(2*(a.x*a.y+a.z*a.w),h-e+f-g)):"ZXY"===b?(this._x=Math.asin(d(2*(a.x*a.w+a.y*a.z),-1,1)),this._y=Math.atan2(2*(a.y*a.w-a.z*a.x),h-e-f+g),this._z=Math.atan2(2*(a.z*a.w-a.x*a.y),h-e+f-g)):"ZYX"===b?(this._x=Math.atan2(2*(a.x*a.w+a.z*a.y),h-e-f+g),this._y=Math.asin(d(2*(a.y*a.w-a.x*a.z),-1,1)),this._z=Math.atan2(2*(a.x*a.y+a.z*a.w),h+e-f-g)):"YZX"===
+b?(this._x=Math.atan2(2*(a.x*a.w-a.z*a.y),h-e+f-g),this._y=Math.atan2(2*(a.y*a.w-a.x*a.z),h+e-f-g),this._z=Math.asin(d(2*(a.x*a.y+a.z*a.w),-1,1))):"XZY"===b?(this._x=Math.atan2(2*(a.x*a.w+a.y*a.z),h-e+f-g),this._y=Math.atan2(2*(a.x*a.z+a.y*a.w),h+e-f-g),this._z=Math.asin(d(2*(a.z*a.w-a.x*a.y),-1,1))):console.warn("WARNING: Euler.setFromQuaternion() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);
+this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(){return[this._x,this._y,this._z,this._order]},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){},clone:function(){return new THREE.Euler(this._x,this._y,this._z,this._order)}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3};
+THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(0.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,
+b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);
+this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)},clone:function(){return(new THREE.Line3).copy(this)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)};
+THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0<a.length){var b=a[0];this.min.copy(b);this.max.copy(b);for(var c=1,d=a.length;c<d;c++)b=a[c],b.x<this.min.x?this.min.x=b.x:b.x>this.max.x&&(this.max.x=b.x),b.y<this.min.y?this.min.y=b.y:b.y>this.max.y&&(this.max.y=b.y)}else this.makeEmpty();return this},setFromCenterAndSize:function(){var a=new THREE.Vector2;return function(b,c){var d=a.copy(c).multiplyScalar(0.5);
+this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},empty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},center:function(a){return(a||new THREE.Vector2).addVectors(this.min,this.max).multiplyScalar(0.5)},size:function(a){return(a||new THREE.Vector2).subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);
+this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a,b){return(b||new THREE.Vector2).set((a.x-this.min.x)/(this.max.x-this.min.x),
+(a.y-this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);
+return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box2).copy(this)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};
+THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},addPoint:function(a){a.x<this.min.x?this.min.x=a.x:a.x>this.max.x&&(this.max.x=a.x);a.y<this.min.y?this.min.y=a.y:a.y>this.max.y&&(this.max.y=a.y);a.z<this.min.z?this.min.z=a.z:a.z>this.max.z&&(this.max.z=a.z);return this},setFromPoints:function(a){if(0<a.length){var b=a[0];this.min.copy(b);this.max.copy(b);for(var b=1,c=a.length;b<c;b++)this.addPoint(a[b])}else this.makeEmpty();return this},
+setFromCenterAndSize:function(){var a=new THREE.Vector3;return function(b,c){var d=a.copy(c).multiplyScalar(0.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),setFromObject:function(){var a=new THREE.Vector3;return function(b){var c=this;b.updateMatrixWorld(!0);this.makeEmpty();b.traverse(function(b){if(void 0!==b.geometry&&void 0!==b.geometry.vertices)for(var e=b.geometry.vertices,f=0,g=e.length;f<g;f++)a.copy(e[f]),a.applyMatrix4(b.matrixWorld),c.expandByPoint(a)});return this}}(),
+copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},empty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},center:function(a){return(a||new THREE.Vector3).addVectors(this.min,this.max).multiplyScalar(0.5)},size:function(a){return(a||new THREE.Vector3).subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);
+this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y||a.z<this.min.z||a.z>this.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a,
+b){return(b||new THREE.Vector3).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y||a.max.z<this.min.z||a.min.z>this.max.z?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,
+this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=0.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];
+return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();
+this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box3).copy(this)}};THREE.Matrix3=function(a,b,c,d,e,f,g,h,k){var l=this.elements=new Float32Array(9);l[0]=void 0!==a?a:1;l[3]=b||0;l[6]=c||0;l[1]=d||0;l[4]=void 0!==e?e:1;l[7]=f||0;l[2]=g||0;l[5]=h||0;l[8]=void 0!==k?k:1};
+THREE.Matrix3.prototype={constructor:THREE.Matrix3,set:function(a,b,c,d,e,f,g,h,k){var l=this.elements;l[0]=a;l[3]=b;l[6]=c;l[1]=d;l[4]=e;l[7]=f;l[2]=g;l[5]=h;l[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},multiplyVector3:function(a){console.warn("DEPRECATED: Matrix3's .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},
+multiplyVector3Array:function(a){console.warn("DEPRECATED: Matrix3's .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var a=new THREE.Vector3;return function(b,c,d){void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=3)a.x=b[c],a.y=b[c+1],a.z=b[c+2],a.applyMatrix3(this),b[c]=a.x,b[c+1]=a.y,b[c+2]=a.z;return b}}(),multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=
+a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],k=a[7],a=a[8];return b*f*a-b*g*k-c*e*a+c*g*h+d*e*k-d*f*h},getInverse:function(a,b){var c=a.elements,d=this.elements;d[0]=c[10]*c[5]-c[6]*c[9];d[1]=-c[10]*c[1]+c[2]*c[9];d[2]=c[6]*c[1]-c[2]*c[5];d[3]=-c[10]*c[4]+c[6]*c[8];d[4]=c[10]*c[0]-c[2]*c[8];d[5]=-c[6]*c[0]+c[2]*c[4];d[6]=c[9]*c[4]-c[5]*c[8];d[7]=-c[9]*c[0]+c[1]*c[8];d[8]=c[5]*c[0]-
+c[1]*c[4];c=c[0]*d[0]+c[1]*d[3]+c[2]*d[6];if(0===c){if(b)throw Error("Matrix3.getInverse(): can't invert matrix, determinant is 0");console.warn("Matrix3.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/c);return this},transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},flattenToArrayOffset:function(a,b){var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];
+a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a},getNormalMatrix:function(a){this.getInverse(a).transpose();return this},transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]]},clone:function(){var a=this.elements;return new THREE.Matrix3(a[0],
+a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8])}};THREE.Matrix4=function(a,b,c,d,e,f,g,h,k,l,n,q,p,s,t,r){var v=this.elements=new Float32Array(16);v[0]=void 0!==a?a:1;v[4]=b||0;v[8]=c||0;v[12]=d||0;v[1]=e||0;v[5]=void 0!==f?f:1;v[9]=g||0;v[13]=h||0;v[2]=k||0;v[6]=l||0;v[10]=void 0!==n?n:1;v[14]=q||0;v[3]=p||0;v[7]=s||0;v[11]=t||0;v[15]=void 0!==r?r:1};
+THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,k,l,n,q,p,s,t,r){var v=this.elements;v[0]=a;v[4]=b;v[8]=c;v[12]=d;v[1]=e;v[5]=f;v[9]=g;v[13]=h;v[2]=k;v[6]=l;v[10]=n;v[14]=q;v[3]=p;v[7]=s;v[11]=t;v[15]=r;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.elements.set(a.elements);return this},extractPosition:function(a){console.warn("DEPRECATED: Matrix4's .extractPosition() has been renamed to .copyPosition().");
+return this.copyPosition(a)},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractRotation:function(){var a=new THREE.Vector3;return function(b){var c=this.elements;b=b.elements;var d=1/a.set(b[0],b[1],b[2]).length(),e=1/a.set(b[4],b[5],b[6]).length(),f=1/a.set(b[8],b[9],b[10]).length();c[0]=b[0]*d;c[1]=b[1]*d;c[2]=b[2]*d;c[4]=b[4]*e;c[5]=b[5]*e;c[6]=b[6]*e;c[8]=b[8]*f;c[9]=b[9]*f;c[10]=b[10]*f;return this}}(),makeRotationFromEuler:function(a){!1===
+a instanceof THREE.Euler&&console.error("ERROR: Matrix's .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order. Please update your code.");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,l=c*h,n=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+l*d;b[5]=a-n*d;b[9]=-c*g;b[2]=n-a*d;b[6]=l+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,l=d*h,n=d*e,b[0]=a+n*c,b[4]=l*c-k,b[8]=
+f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-l,b[6]=n+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,l=d*h,n=d*e,b[0]=a-n*c,b[4]=-f*e,b[8]=l+k*c,b[1]=k+l*c,b[5]=f*h,b[9]=n-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,l=c*h,n=c*e,b[0]=g*h,b[4]=l*d-k,b[8]=a*d+n,b[1]=g*e,b[5]=n*d+a,b[9]=k*d-l,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,l=c*g,n=c*d,b[0]=g*h,b[4]=n-a*e,b[8]=l*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+l,b[10]=a-n*e):"XZY"===a.order&&(a=f*g,k=f*d,l=c*g,n=c*d,b[0]=
+g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+n,b[5]=f*h,b[9]=k*e-l,b[2]=l*e-k,b[6]=c*h,b[10]=n*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},setRotationFromQuaternion:function(a){console.warn("DEPRECATED: Matrix4's .setRotationFromQuaternion() has been deprecated in favor of makeRotationFromQuaternion. Please update your code.");return this.makeRotationFromQuaternion(a)},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var l=c*
+h,c=c*k,n=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(n+e);b[4]=l-f;b[8]=c+h;b[1]=l+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+n);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f){var g=this.elements;c.subVectors(d,e).normalize();0===c.length()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.length()&&(c.x+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=
+a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==b?(console.warn("DEPRECATED: Matrix4's .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],l=c[1],n=c[5],q=c[9],p=c[13],s=c[2],t=c[6],r=c[10],v=c[14],w=c[3],u=c[7],y=c[11],
+c=c[15],L=d[0],x=d[4],N=d[8],J=d[12],B=d[1],K=d[5],A=d[9],G=d[13],D=d[2],C=d[6],F=d[10],z=d[14],H=d[3],E=d[7],Q=d[11],d=d[15];e[0]=f*L+g*B+h*D+k*H;e[4]=f*x+g*K+h*C+k*E;e[8]=f*N+g*A+h*F+k*Q;e[12]=f*J+g*G+h*z+k*d;e[1]=l*L+n*B+q*D+p*H;e[5]=l*x+n*K+q*C+p*E;e[9]=l*N+n*A+q*F+p*Q;e[13]=l*J+n*G+q*z+p*d;e[2]=s*L+t*B+r*D+v*H;e[6]=s*x+t*K+r*C+v*E;e[10]=s*N+t*A+r*F+v*Q;e[14]=s*J+t*G+r*z+v*d;e[3]=w*L+u*B+y*D+c*H;e[7]=w*x+u*K+y*C+c*E;e[11]=w*N+u*A+y*F+c*Q;e[15]=w*J+u*G+y*z+c*d;return this},multiplyToArray:function(a,
+b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},multiplyVector3:function(a){console.warn("DEPRECATED: Matrix4's .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.");
+return a.applyProjection(this)},multiplyVector4:function(a){console.warn("DEPRECATED: Matrix4's .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("DEPRECATED: Matrix4's .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var a=new THREE.Vector3;return function(b,c,d){void 0===c&&(c=0);
+void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=3)a.x=b[c],a.y=b[c+1],a.z=b[c+2],a.applyMatrix4(this),b[c]=a.x,b[c+1]=a.y,b[c+2]=a.z;return b}}(),rotateAxis:function(a){console.warn("DEPRECATED: Matrix4's .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("DEPRECATED: Matrix4's .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},determinant:function(){var a=
+this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],l=a[2],n=a[6],q=a[10],p=a[14];return a[3]*(+e*h*n-d*k*n-e*g*q+c*k*q+d*g*p-c*h*p)+a[7]*(+b*h*p-b*k*q+e*f*q-d*f*p+d*k*l-e*h*l)+a[11]*(+b*k*n-b*g*p-e*f*n+c*f*p+e*g*l-c*k*l)+a[15]*(-d*g*l-b*h*n+b*g*q+d*f*n-c*f*q+c*h*l)},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},flattenToArrayOffset:function(a,
+b){var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a},getPosition:function(){var a=new THREE.Vector3;return function(){console.warn("DEPRECATED: Matrix4's .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");var b=this.elements;return a.set(b[12],b[13],b[14])}}(),setPosition:function(a){var b=
+this.elements;b[12]=a.x;b[13]=a.y;b[14]=a.z;return this},getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[4],g=d[8],h=d[12],k=d[1],l=d[5],n=d[9],q=d[13],p=d[2],s=d[6],t=d[10],r=d[14],v=d[3],w=d[7],u=d[11],d=d[15];c[0]=n*r*w-q*t*w+q*s*u-l*r*u-n*s*d+l*t*d;c[4]=h*t*w-g*r*w-h*s*u+f*r*u+g*s*d-f*t*d;c[8]=g*q*w-h*n*w+h*l*u-f*q*u-g*l*d+f*n*d;c[12]=h*n*s-g*q*s-h*l*t+f*q*t+g*l*r-f*n*r;c[1]=q*t*v-n*r*v-q*p*u+k*r*u+n*p*d-k*t*d;c[5]=g*r*v-h*t*v+h*p*u-e*r*u-g*p*d+e*t*d;c[9]=h*n*v-g*q*v-h*k*
+u+e*q*u+g*k*d-e*n*d;c[13]=g*q*p-h*n*p+h*k*t-e*q*t-g*k*r+e*n*r;c[2]=l*r*v-q*s*v+q*p*w-k*r*w-l*p*d+k*s*d;c[6]=h*s*v-f*r*v-h*p*w+e*r*w+f*p*d-e*s*d;c[10]=f*q*v-h*l*v+h*k*w-e*q*w-f*k*d+e*l*d;c[14]=h*l*p-f*q*p-h*k*s+e*q*s+f*k*r-e*l*r;c[3]=n*s*v-l*t*v-n*p*w+k*t*w+l*p*u-k*s*u;c[7]=f*t*v-g*s*v+g*p*w-e*t*w-f*p*u+e*s*u;c[11]=g*l*v-f*n*v-g*k*w+e*n*w+f*k*u-e*l*u;c[15]=f*n*p-g*l*p+g*k*s-e*n*s-f*k*t+e*l*t;c=e*c[0]+k*c[4]+p*c[8]+v*c[12];if(0==c){if(b)throw Error("Matrix4.getInverse(): can't invert matrix, determinant is 0");
+console.warn("Matrix4.getInverse(): can't invert matrix, determinant is 0");this.identity();return this}this.multiplyScalar(1/c);return this},translate:function(a){console.warn("DEPRECATED: Matrix4's .translate() has been removed.")},rotateX:function(a){console.warn("DEPRECATED: Matrix4's .rotateX() has been removed.")},rotateY:function(a){console.warn("DEPRECATED: Matrix4's .rotateY() has been removed.")},rotateZ:function(a){console.warn("DEPRECATED: Matrix4's .rotateZ() has been removed.")},rotateByAxis:function(a,
+b){console.warn("DEPRECATED: Matrix4's .rotateByAxis() has been removed.")},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],Math.max(a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10])))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},
+makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,k=e*f,l=e*g;this.set(k*f+c,k*g-d*h,k*h+d*g,0,k*g+d*h,l*g+c,l*h-d*f,0,k*h-
+d*g,l*h+d*f,e*h*h+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},compose:function(a,b,c){this.makeRotationFromQuaternion(b);this.scale(c);this.setPosition(a);return this},decompose:function(){var a=new THREE.Vector3,b=new THREE.Matrix4;return function(c,d,e){var f=this.elements,g=a.set(f[0],f[1],f[2]).length(),h=a.set(f[4],f[5],f[6]).length(),k=a.set(f[8],f[9],f[10]).length();0>this.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);
+c=1/g;var f=1/h,l=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=l;b.elements[9]*=l;b.elements[10]*=l;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,
+b,c,d){a=c*Math.tan(THREE.Math.degToRad(0.5*a));var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=b-a,k=c-d,l=f-e;g[0]=2/h;g[4]=0;g[8]=0;g[12]=-((b+a)/h);g[1]=0;g[5]=2/k;g[9]=0;g[13]=-((c+d)/k);g[2]=0;g[6]=0;g[10]=-2/l;g[14]=-((f+e)/l);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},fromArray:function(a){this.elements.set(a);return this},toArray:function(){var a=this.elements;return[a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10],a[11],
+a[12],a[13],a[14],a[15]]},clone:function(){var a=this.elements;return new THREE.Matrix4(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15])}};THREE.Ray=function(a,b){this.origin=void 0!==a?a:new THREE.Vector3;this.direction=void 0!==b?b:new THREE.Vector3};
+THREE.Ray.prototype={constructor:THREE.Ray,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){return(b||new THREE.Vector3).copy(this.direction).multiplyScalar(a).add(this.origin)},recast:function(){var a=new THREE.Vector3;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new THREE.Vector3;c.subVectors(a,this.origin);
+var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceTo(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceTo(b)}}(),distanceSqToSegment:function(a,b,c,d){var e=a.clone().add(b).multiplyScalar(0.5),f=b.clone().sub(a).normalize(),g=0.5*a.distanceTo(b),
+h=this.origin.clone().sub(e);a=-this.direction.dot(f);b=h.dot(this.direction);var k=-h.dot(f),l=h.lengthSq(),n=Math.abs(1-a*a),q,p;0<=n?(h=a*k-b,q=a*b-k,p=g*n,0<=h?q>=-p?q<=p?(g=1/n,h*=g,q*=g,a=h*(h+a*q+2*b)+q*(a*h+q+2*k)+l):(q=g,h=Math.max(0,-(a*q+b)),a=-h*h+q*(q+2*k)+l):(q=-g,h=Math.max(0,-(a*q+b)),a=-h*h+q*(q+2*k)+l):q<=-p?(h=Math.max(0,-(-a*g+b)),q=0<h?-g:Math.min(Math.max(-g,-k),g),a=-h*h+q*(q+2*k)+l):q<=p?(h=0,q=Math.min(Math.max(-g,-k),g),a=q*(q+2*k)+l):(h=Math.max(0,-(a*g+b)),q=0<h?g:Math.min(Math.max(-g,
+-k),g),a=-h*h+q*(q+2*k)+l)):(q=0<a?-g:g,h=Math.max(0,-(a*q+b)),a=-h*h+q*(q+2*k)+l);c&&c.copy(this.direction.clone().multiplyScalar(h).add(this.origin));d&&d.copy(f.clone().multiplyScalar(q).add(e));return a},isIntersectionSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},isIntersectionPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0==b)return 0==a.distanceToPoint(this.origin)?
+0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},isIntersectionBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;var h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=
+a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(f<d||d!==d)d=f;0<=g?(e=(a.min.z-h.z)*g,g*=a.max.z-h.z):(e=(a.max.z-h.z)*g,g*=a.min.z-h.z);if(c>g||e>d)return null;if(e>c||c!==c)c=e;if(g<d||d!==d)d=g;return 0>d?null:this.at(0<=c?c:d,b)},intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0<
+f){if(h)return null;h=1}else if(0>f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)},
+clone:function(){return(new THREE.Ray).copy(this)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0};
+THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,g=b.length;f<g;f++)e=Math.max(e,d.distanceToSquared(b[f]));this.radius=Math.sqrt(e);return this}}(),copy:function(a){this.center.copy(a.center);this.radius=a.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=
+this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);
+return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new THREE.Sphere).copy(this)}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]};
+THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],l=c[7],n=c[8],q=c[9],p=c[10],s=c[11],t=c[12],r=c[13],v=c[14],c=c[15];b[0].setComponents(f-a,l-g,s-n,c-t).normalize();b[1].setComponents(f+
+a,l+g,s+n,c+t).normalize();b[2].setComponents(f+d,l+h,s+q,c+r).normalize();b[3].setComponents(f-d,l-h,s-q,c-r).normalize();b[4].setComponents(f-e,l-k,s-p,c-v).normalize();b[5].setComponents(f+e,l+k,s+p,c+v).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,
+c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},intersectsBox:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c){for(var d=this.planes,e=0;6>e;e++){var f=d[e];a.x=0<f.normal.x?c.min.x:c.max.x;b.x=0<f.normal.x?c.max.x:c.min.x;a.y=0<f.normal.y?c.min.y:c.max.y;b.y=0<f.normal.y?c.max.y:c.min.y;a.z=0<f.normal.z?c.min.z:c.max.z;b.z=0<f.normal.z?c.max.z:c.min.z;var g=f.distanceToPoint(a),f=f.distanceToPoint(b);if(0>g&&0>f)return!1}return!0}}(),
+containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0},clone:function(){return(new THREE.Frustum).copy(this)}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0};
+THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,
+c);return this}}(),copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,
+b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},isIntersectionLine:function(a){var b=this.distanceToPoint(a.start);a=this.distanceToPoint(a.end);return 0>b&&0<a||0>a&&0<b},intersectLine:function(){var a=new THREE.Vector3;return function(b,c){var d=c||new THREE.Vector3,e=b.delta(a),f=this.normal.dot(e);if(0==f){if(0==this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1<f?void 0:d.copy(e).multiplyScalar(f).add(b.start)}}(),
+coplanarPoint:function(a){return(a||new THREE.Vector3).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Matrix3;return function(d,e){var f=e||c.getNormalMatrix(d),f=a.copy(this.normal).applyMatrix3(f),g=this.coplanarPoint(b);g.applyMatrix4(d);this.setFromNormalAndCoplanarPoint(f,g);return this}}(),translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&
+a.constant==this.constant},clone:function(){return(new THREE.Plane).copy(this)}};THREE.Math={generateUUID:function(){var a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),b=Array(36),c=0,d;return function(){for(var e=0;36>e;e++)8==e||13==e||18==e||23==e?b[e]="-":14==e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19==e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return a<b?b:a>c?c:a},clampBottom:function(a,b){return a<b?b:a},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},smoothstep:function(a,b,c){if(a<=
+b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0<a?1:0},degToRad:function(){var a=Math.PI/180;return function(b){return b*
+a}}(),radToDeg:function(){var a=180/Math.PI;return function(b){return b*a}}(),isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a}};THREE.Spline=function(a){function b(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,n,q,p;this.initFromArray=function(a){this.points=[];for(var b=0;b<a.length;b++)this.points[b]={x:a[b][0],y:a[b][1],z:a[b][2]}};this.getPoint=function(a){e=(this.points.length-1)*a;f=Math.floor(e);g=e-f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:
+f+2;l=this.points[c[0]];n=this.points[c[1]];q=this.points[c[2]];p=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,n.x,q.x,p.x,g,h,k);d.y=b(l.y,n.y,q.y,p.y,g,h,k);d.z=b(l.z,n.z,q.z,p.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a<c;a++)b=this.points[a],d[a]=[b.x,b.y,b.z];return d};this.getLength=function(a){var b,c,d,e=b=b=0,f=new THREE.Vector3,g=new THREE.Vector3,h=[],k=0;h[0]=0;a||(a=100);c=this.points.length*a;f.copy(this.points[0]);for(a=1;a<c;a++)b=
+a/c,d=this.getPoint(b),g.copy(d),k+=g.distanceTo(f),f.copy(d),b*=this.points.length-1,b=Math.floor(b),b!=e&&(h[b]=k,e=b);h[h.length]=k;return{chunks:h,total:k}};this.reparametrizeByArcLength=function(a){var b,c,d,e,f,g,h=[],k=new THREE.Vector3,l=this.getLength();h.push(k.copy(this.points[0]).clone());for(b=1;b<this.points.length;b++){c=l.chunks[b]-l.chunks[b-1];g=Math.ceil(a*c/l.total);e=(b-1)/(this.points.length-1);f=b/(this.points.length-1);for(c=1;c<g-1;c++)d=e+1/g*c*(f-e),d=this.getPoint(d),h.push(k.copy(d).clone());
+h.push(k.copy(this.points[b]).clone())}this.points=h}};THREE.Triangle=function(a,b,c){this.a=void 0!==a?a:new THREE.Vector3;this.b=void 0!==b?b:new THREE.Vector3;this.c=void 0!==c?c:new THREE.Vector3};THREE.Triangle.normal=function(){var a=new THREE.Vector3;return function(b,c,d,e){e=e||new THREE.Vector3;e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0<b?e.multiplyScalar(1/Math.sqrt(b)):e.set(0,0,0)}}();
+THREE.Triangle.barycoordFromPoint=function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f,g,h){a.subVectors(g,e);b.subVectors(f,e);c.subVectors(d,e);d=a.dot(a);e=a.dot(b);f=a.dot(c);var k=b.dot(b);g=b.dot(c);var l=d*k-e*e;h=h||new THREE.Vector3;if(0==l)return h.set(-2,-1,-1);l=1/l;k=(k*f-e*g)*l;d=(d*g-e*f)*l;return h.set(1-k-d,d,k)}}();
+THREE.Triangle.containsPoint=function(){var a=new THREE.Vector3;return function(b,c,d,e){b=THREE.Triangle.barycoordFromPoint(b,c,d,e,a);return 0<=b.x&&0<=b.y&&1>=b.x+b.y}}();
+THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return 0.5*a.cross(b).length()}}(),midpoint:function(a){return(a||
+new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)},
+clone:function(){return(new THREE.Triangle).copy(this)}};THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};THREE.Clock=function(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1};
+THREE.Clock.prototype={constructor:THREE.Clock,start:function(){this.oldTime=this.startTime=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now();this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now(),
+a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a}};THREE.EventDispatcher=function(){};
+THREE.EventDispatcher.prototype={constructor:THREE.EventDispatcher,apply:function(a){a.addEventListener=THREE.EventDispatcher.prototype.addEventListener;a.hasEventListener=THREE.EventDispatcher.prototype.hasEventListener;a.removeEventListener=THREE.EventDispatcher.prototype.removeEventListener;a.dispatchEvent=THREE.EventDispatcher.prototype.dispatchEvent},addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&&
+c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners[a];if(void 0!==c){var d=c.indexOf(b);-1!==d&&c.splice(d,1)}}},dispatchEvent:function(a){if(void 0!==this._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;for(var c=[],d=b.length,e=0;e<d;e++)c[e]=b[e];for(e=0;e<d;e++)c[e].call(this,a)}}}};(function(a){a.Raycaster=function(b,c,d,e){this.ray=new a.Ray(b,c);this.near=d||0;this.far=e||Infinity};var b=new a.Sphere,c=new a.Ray;new a.Plane;new a.Vector3;var d=new a.Vector3,e=new a.Matrix4,f=function(a,b){return a.distance-b.distance},g=new a.Vector3,h=new a.Vector3,k=new a.Vector3,l=function(f,n,s){if(f instanceof a.Sprite){d.setFromMatrixPosition(f.matrixWorld);var t=n.ray.distanceToPoint(d);if(t>f.scale.x)return s;s.push({distance:t,point:f.position,face:null,object:f})}else if(f instanceof
+a.LOD)d.setFromMatrixPosition(f.matrixWorld),t=n.ray.origin.distanceTo(d),l(f.getObjectForDistance(t),n,s);else if(f instanceof a.Mesh){var r=f.geometry;null===r.boundingSphere&&r.computeBoundingSphere();b.copy(r.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===n.ray.isIntersectionSphere(b))return s;e.getInverse(f.matrixWorld);c.copy(n.ray).applyMatrix4(e);if(null!==r.boundingBox&&!1===c.isIntersectionBox(r.boundingBox))return s;if(r instanceof a.BufferGeometry){var v=f.material;if(void 0===
+v)return s;var w=r.attributes,u,y,L=n.precision;if(void 0!==w.index){var x=w.index.array,N=w.position.array,J=r.offsets;0===J.length&&(J=[{start:0,count:N.length,index:0}]);for(var B=0,K=J.length;B<K;++B)for(var w=J[B].start,A=J[B].index,r=w,G=w+J[B].count;r<G;r+=3){w=A+x[r];u=A+x[r+1];y=A+x[r+2];g.set(N[3*w],N[3*w+1],N[3*w+2]);h.set(N[3*u],N[3*u+1],N[3*u+2]);k.set(N[3*y],N[3*y+1],N[3*y+2]);var D=v.side===a.BackSide?c.intersectTriangle(k,h,g,!0):c.intersectTriangle(g,h,k,v.side!==a.DoubleSide);null!==
+D&&(D.applyMatrix4(f.matrixWorld),t=n.ray.origin.distanceTo(D),t<L||t<n.near||t>n.far||s.push({distance:t,point:D,indices:[w,u,y],face:null,faceIndex:null,object:f}))}}else for(N=w.position.array,r=0,G=w.position.array.length;r<G;r+=3)w=r,u=r+1,y=r+2,g.set(N[3*w],N[3*w+1],N[3*w+2]),h.set(N[3*u],N[3*u+1],N[3*u+2]),k.set(N[3*y],N[3*y+1],N[3*y+2]),D=v.side===a.BackSide?c.intersectTriangle(k,h,g,!0):c.intersectTriangle(g,h,k,v.side!==a.DoubleSide),null!==D&&(D.applyMatrix4(f.matrixWorld),t=n.ray.origin.distanceTo(D),
+t<L||t<n.near||t>n.far||s.push({distance:t,point:D,indices:[w,u,y],face:null,faceIndex:null,object:f}))}else if(r instanceof a.Geometry)for(N=f.material instanceof a.MeshFaceMaterial,J=!0===N?f.material.materials:null,L=n.precision,x=r.vertices,B=0,K=r.faces.length;B<K;B++)if(A=r.faces[B],v=!0===N?J[A.materialIndex]:f.material,void 0!==v){w=x[A.a];u=x[A.b];y=x[A.c];if(!0===v.morphTargets){t=r.morphTargets;D=f.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);k.set(0,0,0);for(var G=0,C=t.length;G<C;G++){var F=
+D[G];if(0!==F){var z=t[G].vertices;g.x+=(z[A.a].x-w.x)*F;g.y+=(z[A.a].y-w.y)*F;g.z+=(z[A.a].z-w.z)*F;h.x+=(z[A.b].x-u.x)*F;h.y+=(z[A.b].y-u.y)*F;h.z+=(z[A.b].z-u.z)*F;k.x+=(z[A.c].x-y.x)*F;k.y+=(z[A.c].y-y.y)*F;k.z+=(z[A.c].z-y.z)*F}}g.add(w);h.add(u);k.add(y);w=g;u=h;y=k}D=v.side===a.BackSide?c.intersectTriangle(y,u,w,!0):c.intersectTriangle(w,u,y,v.side!==a.DoubleSide);null!==D&&(D.applyMatrix4(f.matrixWorld),t=n.ray.origin.distanceTo(D),t<L||t<n.near||t>n.far||s.push({distance:t,point:D,face:A,
+faceIndex:B,object:f}))}}else if(f instanceof a.Line){L=n.linePrecision;v=L*L;r=f.geometry;null===r.boundingSphere&&r.computeBoundingSphere();b.copy(r.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===n.ray.isIntersectionSphere(b))return s;e.getInverse(f.matrixWorld);c.copy(n.ray).applyMatrix4(e);if(r instanceof a.Geometry)for(x=r.vertices,L=x.length,w=new a.Vector3,u=new a.Vector3,y=f.type===a.LineStrip?1:2,r=0;r<L-1;r+=y)c.distanceSqToSegment(x[r],x[r+1],u,w)>v||(t=c.origin.distanceTo(u),t<
+n.near||t>n.far||s.push({distance:t,point:w.clone().applyMatrix4(f.matrixWorld),face:null,faceIndex:null,object:f}))}},n=function(a,b,c){a=a.getDescendants();for(var d=0,e=a.length;d<e;d++)l(a[d],b,c)};a.Raycaster.prototype.precision=1E-4;a.Raycaster.prototype.linePrecision=1;a.Raycaster.prototype.set=function(a,b){this.ray.set(a,b)};a.Raycaster.prototype.intersectObject=function(a,b){var c=[];!0===b&&n(a,this,c);l(a,this,c);c.sort(f);return c};a.Raycaster.prototype.intersectObjects=function(a,b){for(var c=
+[],d=0,e=a.length;d<e;d++)l(a[d],this,c),!0===b&&n(a[d],this,c);c.sort(f);return c}})(THREE);THREE.Object3D=function(){this.id=THREE.Object3DIdCount++;this.uuid=THREE.Math.generateUUID();this.name="";this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;var a=this;Object.defineProperties(this,{rotation:{enumerable:!0,value:(new THREE.Euler).onChange(function(){a.quaternion.setFromEuler(a.rotation,!1)})},quaternion:{enumerable:!0,value:(new THREE.Quaternion).onChange(function(){a.rotation.setFromQuaternion(a.quaternion,void 0,!1)})},scale:{enumerable:!0,
+value:new THREE.Vector3(1,1,1)}});this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixAutoUpdate=!0;this.matrixWorldNeedsUpdate=!1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.userData={}};
+THREE.Object3D.prototype={constructor:THREE.Object3D,get eulerOrder(){console.warn("DEPRECATED: Object3D's .eulerOrder has been moved to Object3D's .rotation.order.");return this.rotation.order},set eulerOrder(a){console.warn("DEPRECATED: Object3D's .eulerOrder has been moved to Object3D's .rotation.order.");this.rotation.order=a},get useQuaternion(){console.warn("DEPRECATED: Object3D's .useQuaternion has been removed. The library now uses quaternions by default.")},set useQuaternion(a){console.warn("DEPRECATED: Object3D's .useQuaternion has been removed. The library now uses quaternions by default.")},
+applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},setRotationFromQuaternion:function(a){this.quaternion.copy(a)},rotateOnAxis:function(){var a=new THREE.Quaternion;return function(b,c){a.setFromAxisAngle(b,
+c);this.quaternion.multiply(a);return this}}(),rotateX:function(){var a=new THREE.Vector3(1,0,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateY:function(){var a=new THREE.Vector3(0,1,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateZ:function(){var a=new THREE.Vector3(0,0,1);return function(b){return this.rotateOnAxis(a,b)}}(),translateOnAxis:function(){var a=new THREE.Vector3;return function(b,c){a.copy(b);a.applyQuaternion(this.quaternion);this.position.add(a.multiplyScalar(c));
+return this}}(),translate:function(a,b){console.warn("DEPRECATED: Object3D's .translate() has been removed. Use .translateOnAxis( axis, distance ) instead. Note args have been changed.");return this.translateOnAxis(b,a)},translateX:function(){var a=new THREE.Vector3(1,0,0);return function(b){return this.translateOnAxis(a,b)}}(),translateY:function(){var a=new THREE.Vector3(0,1,0);return function(b){return this.translateOnAxis(a,b)}}(),translateZ:function(){var a=new THREE.Vector3(0,0,1);return function(b){return this.translateOnAxis(a,
+b)}}(),localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var a=new THREE.Matrix4;return function(b){return b.applyMatrix4(a.getInverse(this.matrixWorld))}}(),lookAt:function(){var a=new THREE.Matrix4;return function(b){a.lookAt(b,this.position,this.up);this.quaternion.setFromRotationMatrix(a)}}(),add:function(a){if(a===this)console.warn("THREE.Object3D.add: An object can't be added as a child of itself.");else if(a instanceof THREE.Object3D){void 0!==a.parent&&
+a.parent.remove(a);a.parent=this;a.dispatchEvent({type:"added"});this.children.push(a);for(var b=this;void 0!==b.parent;)b=b.parent;void 0!==b&&b instanceof THREE.Scene&&b.__addObject(a)}},remove:function(a){var b=this.children.indexOf(a);if(-1!==b){a.parent=void 0;a.dispatchEvent({type:"removed"});this.children.splice(b,1);for(b=this;void 0!==b.parent;)b=b.parent;void 0!==b&&b instanceof THREE.Scene&&b.__removeObject(a)}},traverse:function(a){a(this);for(var b=0,c=this.children.length;b<c;b++)this.children[b].traverse(a)},
+getObjectById:function(a,b){for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c];if(e.id===a||!0===b&&(e=e.getObjectById(a,b),void 0!==e))return e}},getObjectByName:function(a,b){for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c];if(e.name===a||!0===b&&(e=e.getObjectByName(a,b),void 0!==e))return e}},getChildByName:function(a,b){console.warn("DEPRECATED: Object3D's .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(a,b)},getDescendants:function(a){void 0===
+a&&(a=[]);Array.prototype.push.apply(a,this.children);for(var b=0,c=this.children.length;b<c;b++)this.children[b].getDescendants(a);return a},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)void 0===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),
+this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b<c;b++)this.children[b].updateMatrixWorld(a)},clone:function(a,b){void 0===a&&(a=new THREE.Object3D);void 0===b&&(b=!0);a.name=this.name;a.up.copy(this.up);a.position.copy(this.position);a.quaternion.copy(this.quaternion);a.scale.copy(this.scale);a.renderDepth=this.renderDepth;a.rotationAutoUpdate=this.rotationAutoUpdate;a.matrix.copy(this.matrix);a.matrixWorld.copy(this.matrixWorld);a.matrixAutoUpdate=this.matrixAutoUpdate;a.matrixWorldNeedsUpdate=
+this.matrixWorldNeedsUpdate;a.visible=this.visible;a.castShadow=this.castShadow;a.receiveShadow=this.receiveShadow;a.frustumCulled=this.frustumCulled;a.userData=JSON.parse(JSON.stringify(this.userData));if(!0===b)for(var c=0;c<this.children.length;c++)a.add(this.children[c].clone());return a}};THREE.EventDispatcher.prototype.apply(THREE.Object3D.prototype);THREE.Object3DIdCount=0;THREE.Projector=function(){function a(){if(n===p){var a=new THREE.RenderableVertex;q.push(a);p++;n++;return a}return q[n++]}function b(){if(t===v){var a=new THREE.RenderableFace;r.push(a);v++;t++;return a}return r[t++]}function c(){if(u===L){var a=new THREE.RenderableLine;y.push(a);L++;u++;return a}return y[u++]}function d(a,b){return a.z!==b.z?b.z-a.z:a.id!==b.id?a.id-b.id:0}function e(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&0>f||0>g&&
+0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d<c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var f,g,h=[],k=0,l,n,q=[],p=0,s,t,r=[],v=0,w,u,y=[],L=0,x,N,J=[],B=0,K={objects:[],lights:[],elements:[]},A=new THREE.Vector3,G=new THREE.Vector3,D=new THREE.Vector3,C=new THREE.Vector3,F=new THREE.Vector4,z=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),H=new THREE.Box3,E=Array(3),Q=new THREE.Matrix4,Y=
+new THREE.Matrix4,U,la=new THREE.Matrix4,W=new THREE.Matrix3,R=new THREE.Frustum,I=new THREE.Vector4,da=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);Y.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(Y)};this.unprojectVector=function(){var a=new THREE.Matrix4;return function(b,c){a.getInverse(c.projectionMatrix);Y.multiplyMatrices(c.matrixWorld,a);return b.applyProjection(Y)}}();this.pickingRay=function(a,b){a.z=
+-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a,c)};var V=function(a){if(!1!==a.visible){if(a instanceof THREE.Light)K.lights.push(a);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Sprite)if(!1===a.frustumCulled||!0===R.intersectsObject(a)){if(g===k){var b=new THREE.RenderableObject;h.push(b);k++;g++;f=b}else f=h[g++];f.id=a.id;f.object=a;null!==a.renderDepth?f.z=a.renderDepth:
+(C.setFromMatrixPosition(a.matrixWorld),C.applyProjection(Y),f.z=C.z);K.objects.push(f)}for(var b=0,c=a.children.length;b<c;b++)V(a.children[b])}},X=new function(){var d=[],e=[],f=null,g=null,h=new THREE.Matrix3,k=function(a){var b=a.positionWorld,c=a.positionScreen;b.copy(a.position).applyMatrix4(U);c.copy(b).applyMatrix4(Y);b=1/c.w;c.x*=b;c.y*=b;c.z*=b;a.visible=-1<=c.x&&1>=c.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z},n=function(a,b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;E[0]=a.positionScreen;
+E[1]=b.positionScreen;E[2]=c.positionScreen;return z.isIntersectionBox(H.setFromPoints(E))},r=function(a,b,c){return 0>(c.positionScreen.x-a.positionScreen.x)*(b.positionScreen.y-a.positionScreen.y)-(c.positionScreen.y-a.positionScreen.y)*(b.positionScreen.x-a.positionScreen.x)};return{setObject:function(a){f=a;g=f.material;h.getNormalMatrix(f.matrixWorld);d.length=0;e.length=0},projectVertex:k,checkTriangleVisibility:n,checkBackfaceCulling:r,pushVertex:function(b,c,d){l=a();l.position.set(b,c,d);
+k(l)},pushNormal:function(a,b,c){d.push(a,b,c)},pushUv:function(a,b){e.push(a,b)},pushLine:function(a,b){var d=q[a],e=q[b];w=c();w.id=f.id;w.v1.copy(d);w.v2.copy(e);w.z=(d.positionScreen.z+e.positionScreen.z)/2;w.material=f.material;K.elements.push(w)},pushTriangle:function(a,c,k){var l=q[a],p=q[c],t=q[k];if(!1!==n(l,p,t)&&(g.side===THREE.DoubleSide||!0===r(l,p,t))){s=b();s.id=f.id;s.v1.copy(l);s.v2.copy(p);s.v3.copy(t);s.z=(l.positionScreen.z+p.positionScreen.z+t.positionScreen.z)/3;for(l=0;3>l;l++)p=
+3*arguments[l],t=s.vertexNormalsModel[l],t.set(d[p],d[p+1],d[p+2]),t.applyMatrix3(h).normalize(),p=2*arguments[l],s.uvs[l].set(e[p],e[p+1]);s.vertexNormalsLength=3;s.material=f.material;K.elements.push(s)}}}};this.projectScene=function(f,h,k,l){var r,p,v,y,L,C,z,E;N=u=t=0;K.elements.length=0;!0===f.autoUpdate&&f.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();Q.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));Y.multiplyMatrices(h.projectionMatrix,Q);R.setFromMatrix(Y);g=0;K.objects.length=
+0;K.lights.length=0;V(f);!0===k&&K.objects.sort(d);f=0;for(k=K.objects.length;f<k;f++)if(r=K.objects[f].object,p=r.geometry,X.setObject(r),U=r.matrixWorld,n=0,r instanceof THREE.Mesh)if(p instanceof THREE.BufferGeometry){if(C=p.attributes,r=p.offsets,void 0!==C.position){z=C.position.array;p=0;for(y=z.length;p<y;p+=3)X.pushVertex(z[p],z[p+1],z[p+2]);if(void 0!==C.normal)for(E=C.normal.array,p=0,y=E.length;p<y;p+=3)X.pushNormal(E[p],E[p+1],E[p+2]);if(void 0!==C.uv)for(E=C.uv.array,p=0,y=E.length;p<
+y;p+=2)X.pushUv(E[p],E[p+1]);if(void 0!==C.index)if(C=C.index.array,0<r.length)for(f=0;f<r.length;f++)for(y=r[f],z=y.index,p=y.start,y=y.start+y.count;p<y;p+=3)X.pushTriangle(C[p]+z,C[p+1]+z,C[p+2]+z);else for(p=0,y=C.length;p<y;p+=3)X.pushTriangle(C[p],C[p+1],C[p+2]);else for(p=0,y=z.length/3;p<y;p+=3)X.pushTriangle(p,p+1,p+2)}}else{if(p instanceof THREE.Geometry){v=p.vertices;y=p.faces;C=p.faceVertexUvs[0];W.getNormalMatrix(U);z=r.material instanceof THREE.MeshFaceMaterial;E=!0===z?r.material:null;
+for(var H=0,Fa=v.length;H<Fa;H++){var ia=v[H];X.pushVertex(ia.x,ia.y,ia.z)}H=0;for(Fa=y.length;H<Fa;H++){v=y[H];var ma=!0===z?E.materials[v.materialIndex]:r.material;if(void 0!==ma){var ya=ma.side,ia=q[v.a],Z=q[v.b],qa=q[v.c];if(!0===ma.morphTargets){L=p.morphTargets;var ua=r.morphTargetInfluences,Ca=ia.position,va=Z.position,Da=qa.position;A.set(0,0,0);G.set(0,0,0);D.set(0,0,0);for(var Ja=0,ja=L.length;Ja<ja;Ja++){var ra=ua[Ja];if(0!==ra){var Ka=L[Ja].vertices;A.x+=(Ka[v.a].x-Ca.x)*ra;A.y+=(Ka[v.a].y-
+Ca.y)*ra;A.z+=(Ka[v.a].z-Ca.z)*ra;G.x+=(Ka[v.b].x-va.x)*ra;G.y+=(Ka[v.b].y-va.y)*ra;G.z+=(Ka[v.b].z-va.z)*ra;D.x+=(Ka[v.c].x-Da.x)*ra;D.y+=(Ka[v.c].y-Da.y)*ra;D.z+=(Ka[v.c].z-Da.z)*ra}}ia.position.add(A);Z.position.add(G);qa.position.add(D);X.projectVertex(ia);X.projectVertex(Z);X.projectVertex(qa)}if(!1!==X.checkTriangleVisibility(ia,Z,qa)){ua=X.checkBackfaceCulling(ia,Z,qa);if(ya!==THREE.DoubleSide){if(ya===THREE.FrontSide&&!1===ua)continue;if(ya===THREE.BackSide&&!0===ua)continue}s=b();s.id=r.id;
+s.v1.copy(ia);s.v2.copy(Z);s.v3.copy(qa);s.normalModel.copy(v.normal);!1!==ua||ya!==THREE.BackSide&&ya!==THREE.DoubleSide||s.normalModel.negate();s.normalModel.applyMatrix3(W).normalize();L=v.vertexNormals;Ca=0;for(va=Math.min(L.length,3);Ca<va;Ca++)Da=s.vertexNormalsModel[Ca],Da.copy(L[Ca]),!1!==ua||ya!==THREE.BackSide&&ya!==THREE.DoubleSide||Da.negate(),Da.applyMatrix3(W).normalize();s.vertexNormalsLength=L.length;ya=C[H];if(void 0!==ya)for(L=0;3>L;L++)s.uvs[L].copy(ya[L]);s.color=v.color;s.material=
+ma;s.z=(ia.positionScreen.z+Z.positionScreen.z+qa.positionScreen.z)/3;K.elements.push(s)}}}}}else if(r instanceof THREE.Line)if(p instanceof THREE.BufferGeometry){if(C=p.attributes,void 0!==C.position){z=C.position.array;p=0;for(y=z.length;p<y;p+=3)X.pushVertex(z[p],z[p+1],z[p+2]);if(void 0!==C.index)for(C=C.index.array,p=0,y=C.length;p<y;p+=2)X.pushLine(C[p],C[p+1]);else for(p=0,y=z.length/3-1;p<y;p++)X.pushLine(p,p+1)}}else{if(p instanceof THREE.Geometry&&(la.multiplyMatrices(Y,U),v=r.geometry.vertices,
+0!==v.length))for(ia=a(),ia.positionScreen.copy(v[0]).applyMatrix4(la),p=r.type===THREE.LinePieces?2:1,H=1,Fa=v.length;H<Fa;H++)ia=a(),ia.positionScreen.copy(v[H]).applyMatrix4(la),0<(H+1)%p||(Z=q[n-2],I.copy(ia.positionScreen),da.copy(Z.positionScreen),!0===e(I,da)&&(I.multiplyScalar(1/I.w),da.multiplyScalar(1/da.w),w=c(),w.id=r.id,w.v1.positionScreen.copy(I),w.v2.positionScreen.copy(da),w.z=Math.max(I.z,da.z),w.material=r.material,r.material.vertexColors===THREE.VertexColors&&(w.vertexColors[0].copy(r.geometry.colors[H]),
+w.vertexColors[1].copy(r.geometry.colors[H-1])),K.elements.push(w)))}else r instanceof THREE.Sprite&&(F.set(U.elements[12],U.elements[13],U.elements[14],1),F.applyMatrix4(Y),p=1/F.w,F.z*=p,-1<=F.z&&1>=F.z&&(N===B?(y=new THREE.RenderableSprite,J.push(y),B++,N++,x=y):x=J[N++],x.id=r.id,x.x=F.x*p,x.y=F.y*p,x.z=F.z,x.object=r,x.rotation=r.rotation,x.scale.x=r.scale.x*Math.abs(x.x-(F.x+h.projectionMatrix.elements[0])/(F.w+h.projectionMatrix.elements[12])),x.scale.y=r.scale.y*Math.abs(x.y-(F.y+h.projectionMatrix.elements[5])/
+(F.w+h.projectionMatrix.elements[13])),x.material=r.material,K.elements.push(x)));!0===l&&K.elements.sort(d);return K}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0};
+THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;b<c;b++)a.vertexNormals[b]=this.vertexNormals[b].clone();b=0;for(c=this.vertexColors.length;b<c;b++)a.vertexColors[b]=this.vertexColors[b].clone();b=0;for(c=this.vertexTangents.length;b<c;b++)a.vertexTangents[b]=this.vertexTangents[b].clone();return a}};THREE.Face4=function(a,b,c,d,e,f,g){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new THREE.Face3(a,b,c,e,f,g)};THREE.BufferAttribute=function(){};
+THREE.BufferAttribute.prototype={constructor:THREE.BufferAttribute,get length(){return this.array.length},set:function(a){this.array.set(a)},setX:function(a,b){this.array[a*this.itemSize]=b},setY:function(a,b){this.array[a*this.itemSize+1]=b},setZ:function(a,b){this.array[a*this.itemSize+2]=b},setXY:function(a,b,c){a*=this.itemSize;this.array[a]=b;this.array[a+1]=c},setXYZ:function(a,b,c,d){a*=this.itemSize;this.array[a]=b;this.array[a+1]=c;this.array[a+2]=d},setXYZW:function(a,b,c,d,e){a*=this.itemSize;
+this.array[a]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e}};THREE.Int8Attribute=function(a,b){this.array=new Int8Array(a*b);this.itemSize=b};THREE.Int8Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Uint8Attribute=function(a,b){this.array=new Uint8Array(a*b);this.itemSize=b};THREE.Uint8Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Uint8ClampedAttribute=function(a,b){this.array=new Uint8ClampedArray(a*b);this.itemSize=b};
+THREE.Uint8ClampedAttribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Int16Attribute=function(a,b){this.array=new Int16Array(a*b);this.itemSize=b};THREE.Int16Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Uint16Attribute=function(a,b){this.array=new Uint16Array(a*b);this.itemSize=b};THREE.Uint16Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Int32Attribute=function(a,b){this.array=new Int32Array(a*b);this.itemSize=b};
+THREE.Int32Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Uint32Attribute=function(a,b){this.array=new Uint32Array(a*b);this.itemSize=b};THREE.Uint32Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Float32Attribute=function(a,b){this.array=new Float32Array(a*b);this.itemSize=b};THREE.Float32Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.Float64Attribute=function(a,b){this.array=new Float64Array(a*b);this.itemSize=b};
+THREE.Float64Attribute.prototype=Object.create(THREE.BufferAttribute.prototype);THREE.BufferGeometry=function(){this.id=THREE.GeometryIdCount++;this.uuid=THREE.Math.generateUUID();this.name="";this.attributes={};this.offsets=this.drawcalls=[];this.boundingSphere=this.boundingBox=null};
+THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,addAttribute:function(a,b,c){!1===b instanceof THREE.BufferAttribute?(console.warn("DEPRECATED: BufferGeometry's addAttribute() now expects ( name, attribute )."),this.attributes[a]={array:b,itemSize:c}):this.attributes[a]=b},getAttribute:function(a){return this.attributes[a]},addDrawCall:function(a,b,c){this.drawcalls.push({start:a,count:b,index:void 0!==c?c:0})},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToVector3Array(b.array),
+b.needsUpdate=!0);b=this.attributes.normal;void 0!==b&&((new THREE.Matrix3).getNormalMatrix(a).applyToVector3Array(b.array),b.needsUpdate=!0)},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3);var a=this.attributes.position.array;if(a){var b=this.boundingBox;3<=a.length&&(b.min.x=b.max.x=a[0],b.min.y=b.max.y=a[1],b.min.z=b.max.z=a[2]);for(var c=3,d=a.length;c<d;c+=3){var e=a[c],f=a[c+1],g=a[c+2];e<b.min.x?b.min.x=e:e>b.max.x&&(b.max.x=e);f<b.min.y?b.min.y=f:
+f>b.max.y&&(b.max.y=f);g<b.min.z?b.min.z=g:g>b.max.z&&(b.max.z=g)}}if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){var a=new THREE.Box3,b=new THREE.Vector3;return function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);var c=this.attributes.position.array;if(c){a.makeEmpty();for(var d=this.boundingSphere.center,e=0,f=c.length;e<f;e+=3)b.set(c[e],c[e+1],c[e+2]),a.addPoint(b);a.center(d);for(var g=0,
+e=0,f=c.length;e<f;e+=3)b.set(c[e],c[e+1],c[e+2]),g=Math.max(g,d.distanceToSquared(b));this.boundingSphere.radius=Math.sqrt(g)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){if(this.attributes.position){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a)};else for(a=0,b=this.attributes.normal.array.length;a<b;a++)this.attributes.normal.array[a]=0;var e=this.attributes.position.array,
+f=this.attributes.normal.array,g,h,k,l,n,q,p=new THREE.Vector3,s=new THREE.Vector3,t=new THREE.Vector3,r=new THREE.Vector3,v=new THREE.Vector3;if(this.attributes.index){var w=this.attributes.index.array,u=0<this.offsets.length?this.offsets:[{start:0,count:w.length,index:0}];c=0;for(d=u.length;c<d;++c){b=u[c].start;g=u[c].count;var y=u[c].index;a=b;for(b+=g;a<b;a+=3)g=y+w[a],h=y+w[a+1],k=y+w[a+2],l=e[3*g],n=e[3*g+1],q=e[3*g+2],p.set(l,n,q),l=e[3*h],n=e[3*h+1],q=e[3*h+2],s.set(l,n,q),l=e[3*k],n=e[3*
+k+1],q=e[3*k+2],t.set(l,n,q),r.subVectors(t,s),v.subVectors(p,s),r.cross(v),f[3*g]+=r.x,f[3*g+1]+=r.y,f[3*g+2]+=r.z,f[3*h]+=r.x,f[3*h+1]+=r.y,f[3*h+2]+=r.z,f[3*k]+=r.x,f[3*k+1]+=r.y,f[3*k+2]+=r.z}}else for(a=0,b=e.length;a<b;a+=9)l=e[a],n=e[a+1],q=e[a+2],p.set(l,n,q),l=e[a+3],n=e[a+4],q=e[a+5],s.set(l,n,q),l=e[a+6],n=e[a+7],q=e[a+8],t.set(l,n,q),r.subVectors(t,s),v.subVectors(p,s),r.cross(v),f[a]=r.x,f[a+1]=r.y,f[a+2]=r.z,f[a+3]=r.x,f[a+4]=r.y,f[a+5]=r.z,f[a+6]=r.x,f[a+7]=r.y,f[a+8]=r.z;this.normalizeNormals();
+this.normalsNeedUpdate=!0}},computeTangents:function(){function a(a,b,c){q=d[3*a];p=d[3*a+1];s=d[3*a+2];t=d[3*b];r=d[3*b+1];v=d[3*b+2];w=d[3*c];u=d[3*c+1];y=d[3*c+2];L=f[2*a];x=f[2*a+1];N=f[2*b];J=f[2*b+1];B=f[2*c];K=f[2*c+1];A=t-q;G=w-q;D=r-p;C=u-p;F=v-s;z=y-s;H=N-L;E=B-L;Q=J-x;Y=K-x;U=1/(H*Y-E*Q);la.set((Y*A-Q*G)*U,(Y*D-Q*C)*U,(Y*F-Q*z)*U);W.set((H*G-E*A)*U,(H*C-E*D)*U,(H*z-E*F)*U);k[a].add(la);k[b].add(la);k[c].add(la);l[a].add(W);l[b].add(W);l[c].add(W)}function b(a){fa.x=e[3*a];fa.y=e[3*a+1];
+fa.z=e[3*a+2];za.copy(fa);Ea=k[a];wa.copy(Ea);wa.sub(fa.multiplyScalar(fa.dot(Ea))).normalize();Ha.crossVectors(za,Ea);Ga=Ha.dot(l[a]);Ia=0>Ga?-1:1;h[4*a]=wa.x;h[4*a+1]=wa.y;h[4*a+2]=wa.z;h[4*a+3]=Ia}if(void 0===this.attributes.index||void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var c=this.attributes.index.array,d=this.attributes.position.array,
+e=this.attributes.normal.array,f=this.attributes.uv.array,g=d.length/3;void 0===this.attributes.tangent&&(this.attributes.tangent={itemSize:4,array:new Float32Array(4*g)});for(var h=this.attributes.tangent.array,k=[],l=[],n=0;n<g;n++)k[n]=new THREE.Vector3,l[n]=new THREE.Vector3;var q,p,s,t,r,v,w,u,y,L,x,N,J,B,K,A,G,D,C,F,z,H,E,Q,Y,U,la=new THREE.Vector3,W=new THREE.Vector3,R,I,da,V,X,P=this.offsets,n=0;for(I=P.length;n<I;++n){R=P[n].start;da=P[n].count;var ga=P[n].index,g=R;for(R+=da;g<R;g+=3)da=
+ga+c[g],V=ga+c[g+1],X=ga+c[g+2],a(da,V,X)}var wa=new THREE.Vector3,Ha=new THREE.Vector3,fa=new THREE.Vector3,za=new THREE.Vector3,Ia,Ea,Ga,n=0;for(I=P.length;n<I;++n)for(R=P[n].start,da=P[n].count,ga=P[n].index,g=R,R+=da;g<R;g+=3)da=ga+c[g],V=ga+c[g+1],X=ga+c[g+2],b(da),b(V),b(X)}},computeOffsets:function(a){var b=a;void 0===a&&(b=65535);Date.now();a=this.attributes.index.array;for(var c=this.attributes.position.array,d=a.length/3,e=new Uint16Array(a.length),f=0,g=0,h=[{start:0,count:0,index:0}],
+k=h[0],l=0,n=0,q=new Int32Array(6),p=new Int32Array(c.length),s=new Int32Array(c.length),t=0;t<c.length;t++)p[t]=-1,s[t]=-1;for(c=0;c<d;c++){for(var r=n=0;3>r;r++)t=a[3*c+r],-1==p[t]?(q[2*r]=t,q[2*r+1]=-1,n++):p[t]<k.index?(q[2*r]=t,q[2*r+1]=-1,l++):(q[2*r]=t,q[2*r+1]=p[t]);if(g+n>k.index+b)for(k={start:f,count:0,index:g},h.push(k),n=0;6>n;n+=2)r=q[n+1],-1<r&&r<k.index&&(q[n+1]=-1);for(n=0;6>n;n+=2)t=q[n],r=q[n+1],-1===r&&(r=g++),p[t]=r,s[r]=t,e[f++]=r-k.index,k.count++}this.reorderBuffers(e,s,g);
+return this.offsets=h},merge:function(){console.log("BufferGeometry.merge(): TODO")},normalizeNormals:function(){for(var a=this.attributes.normal.array,b,c,d,e=0,f=a.length;e<f;e+=3)b=a[e],c=a[e+1],d=a[e+2],b=1/Math.sqrt(b*b+c*c+d*d),a[e]*=b,a[e+1]*=b,a[e+2]*=b},reorderBuffers:function(a,b,c){var d={},e=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],f;for(f in this.attributes)if("index"!=f)for(var g=this.attributes[f].array,h=0,k=e.length;h<
+k;h++){var l=e[h];if(g instanceof l){d[f]=new l(this.attributes[f].itemSize*c);break}}for(e=0;e<c;e++)for(f in g=b[e],this.attributes)if("index"!=f)for(var h=this.attributes[f].array,k=this.attributes[f].itemSize,l=d[f],n=0;n<k;n++)l[e*k+n]=h[g*k+n];this.attributes.index.array=a;for(f in this.attributes)"index"!=f&&(this.attributes[f].array=d[f],this.attributes[f].numItems=this.attributes[f].itemSize*c)},clone:function(){var a=new THREE.BufferGeometry,b=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,
+Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],c;for(c in this.attributes){for(var d=this.attributes[c],e=d.array,f={itemSize:d.itemSize,array:null},d=0,g=b.length;d<g;d++){var h=b[d];if(e instanceof h){f.array=new h(e);break}}a.attributes[c]=f}d=0;for(g=this.offsets.length;d<g;d++)b=this.offsets[d],a.offsets.push({start:b.start,index:b.index,count:b.count});return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.BufferGeometry.prototype);THREE.Geometry=function(){this.id=THREE.GeometryIdCount++;this.uuid=THREE.Math.generateUUID();this.name="";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1;this.dynamic=!0;this.buffersNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.tangentsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=
+this.elementsNeedUpdate=this.verticesNeedUpdate=!1};
+THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){for(var b=(new THREE.Matrix3).getNormalMatrix(a),c=0,d=this.vertices.length;c<d;c++)this.vertices[c].applyMatrix4(a);c=0;for(d=this.faces.length;c<d;c++){a=this.faces[c];a.normal.applyMatrix3(b).normalize();for(var e=0,f=a.vertexNormals.length;e<f;e++)a.vertexNormals[e].applyMatrix3(b).normalize()}this.boundingBox instanceof THREE.Box3&&this.computeBoundingBox();this.boundingSphere instanceof THREE.Sphere&&this.computeBoundingSphere()},
+computeFaceNormals:function(){for(var a=new THREE.Vector3,b=new THREE.Vector3,c=0,d=this.faces.length;c<d;c++){var e=this.faces[c],f=this.vertices[e.a],g=this.vertices[e.b];a.subVectors(this.vertices[e.c],g);b.subVectors(f,g);a.cross(b);a.normalize();e.normal.copy(a)}},computeVertexNormals:function(a){var b,c,d;d=Array(this.vertices.length);b=0;for(c=this.vertices.length;b<c;b++)d[b]=new THREE.Vector3;if(a){var e,f,g,h=new THREE.Vector3,k=new THREE.Vector3;new THREE.Vector3;new THREE.Vector3;new THREE.Vector3;
+a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=this.vertices[c.a],f=this.vertices[c.b],g=this.vertices[c.c],h.subVectors(g,f),k.subVectors(e,f),h.cross(k),d[c.a].add(h),d[c.b].add(h),d[c.c].add(h)}else for(a=0,b=this.faces.length;a<b;a++)c=this.faces[a],d[c.a].add(c.normal),d[c.b].add(c.normal),d[c.c].add(c.normal);b=0;for(c=this.vertices.length;b<c;b++)d[b].normalize();a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],c.vertexNormals[0]=d[c.a].clone(),c.vertexNormals[1]=d[c.b].clone(),c.vertexNormals[2]=
+d[c.c].clone()},computeMorphNormals:function(){var a,b,c,d,e;c=0;for(d=this.faces.length;c<d;c++)for(e=this.faces[c],e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone(),e.__originalVertexNormals||(e.__originalVertexNormals=[]),a=0,b=e.vertexNormals.length;a<b;a++)e.__originalVertexNormals[a]?e.__originalVertexNormals[a].copy(e.vertexNormals[a]):e.__originalVertexNormals[a]=e.vertexNormals[a].clone();var f=new THREE.Geometry;f.faces=this.faces;a=0;for(b=
+this.morphTargets.length;a<b;a++){if(!this.morphNormals[a]){this.morphNormals[a]={};this.morphNormals[a].faceNormals=[];this.morphNormals[a].vertexNormals=[];e=this.morphNormals[a].faceNormals;var g=this.morphNormals[a].vertexNormals,h,k;c=0;for(d=this.faces.length;c<d;c++)h=new THREE.Vector3,k={a:new THREE.Vector3,b:new THREE.Vector3,c:new THREE.Vector3},e.push(h),g.push(k)}g=this.morphNormals[a];f.vertices=this.morphTargets[a].vertices;f.computeFaceNormals();f.computeVertexNormals();c=0;for(d=this.faces.length;c<
+d;c++)e=this.faces[c],h=g.faceNormals[c],k=g.vertexNormals[c],h.copy(e.normal),k.a.copy(e.vertexNormals[0]),k.b.copy(e.vertexNormals[1]),k.c.copy(e.vertexNormals[2])}c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],e.normal=e.__originalFaceNormal,e.vertexNormals=e.__originalVertexNormals},computeTangents:function(){var a,b,c,d,e,f,g,h,k,l,n,q,p,s,t,r,v,w=[],u=[];c=new THREE.Vector3;var y=new THREE.Vector3,L=new THREE.Vector3,x=new THREE.Vector3,N=new THREE.Vector3;a=0;for(b=this.vertices.length;a<
+b;a++)w[a]=new THREE.Vector3,u[a]=new THREE.Vector3;a=0;for(b=this.faces.length;a<b;a++)e=this.faces[a],f=this.faceVertexUvs[0][a],d=e.a,v=e.b,e=e.c,g=this.vertices[d],h=this.vertices[v],k=this.vertices[e],l=f[0],n=f[1],q=f[2],f=h.x-g.x,p=k.x-g.x,s=h.y-g.y,t=k.y-g.y,h=h.z-g.z,g=k.z-g.z,k=n.x-l.x,r=q.x-l.x,n=n.y-l.y,l=q.y-l.y,q=1/(k*l-r*n),c.set((l*f-n*p)*q,(l*s-n*t)*q,(l*h-n*g)*q),y.set((k*p-r*f)*q,(k*t-r*s)*q,(k*g-r*h)*q),w[d].add(c),w[v].add(c),w[e].add(c),u[d].add(y),u[v].add(y),u[e].add(y);y=
+["a","b","c","d"];a=0;for(b=this.faces.length;a<b;a++)for(e=this.faces[a],c=0;c<Math.min(e.vertexNormals.length,3);c++)N.copy(e.vertexNormals[c]),d=e[y[c]],v=w[d],L.copy(v),L.sub(N.multiplyScalar(N.dot(v))).normalize(),x.crossVectors(e.vertexNormals[c],v),d=x.dot(u[d]),d=0>d?-1:1,e.vertexTangents[c]=new THREE.Vector4(L.x,L.y,L.z,d);this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;c<d;c++)0<c&&(a+=b[c].distanceTo(b[c-1])),this.lineDistances[c]=a},computeBoundingBox:function(){null===
+this.boundingBox&&(this.boundingBox=new THREE.Box3);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b,c){if(!1===a instanceof THREE.Geometry)console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",a);else{var d,e=this.vertices.length,f=this.vertices,g=a.vertices,h=this.faces,k=a.faces,l=this.faceVertexUvs[0];
+a=a.faceVertexUvs[0];void 0===c&&(c=0);void 0!==b&&(d=(new THREE.Matrix3).getNormalMatrix(b));for(var n=0,q=g.length;n<q;n++){var p=g[n].clone();void 0!==b&&p.applyMatrix4(b);f.push(p)}n=0;for(q=k.length;n<q;n++){var g=k[n],s,t=g.vertexNormals,r=g.vertexColors,p=new THREE.Face3(g.a+e,g.b+e,g.c+e);p.normal.copy(g.normal);void 0!==d&&p.normal.applyMatrix3(d).normalize();b=0;for(f=t.length;b<f;b++)s=t[b].clone(),void 0!==d&&s.applyMatrix3(d).normalize(),p.vertexNormals.push(s);p.color.copy(g.color);
+b=0;for(f=r.length;b<f;b++)s=r[b],p.vertexColors.push(s.clone());p.materialIndex=g.materialIndex+c;h.push(p)}n=0;for(q=a.length;n<q;n++)if(c=a[n],d=[],void 0!==c){b=0;for(f=c.length;b<f;b++)d.push(new THREE.Vector2(c[b].x,c[b].y));l.push(d)}}},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;f=0;for(g=this.vertices.length;f<g;f++)d=this.vertices[f],d=Math.round(d.x*e)+"_"+Math.round(d.y*e)+"_"+Math.round(d.z*e),void 0===a[d]?(a[d]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=
+c[a[d]];a=[];f=0;for(g=this.faces.length;f<g;f++)for(e=this.faces[f],e.a=c[e.a],e.b=c[e.b],e.c=c[e.c],e=[e.a,e.b,e.c],d=0;3>d;d++)if(e[d]==e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;c<g;c++)this.faceVertexUvs[c].splice(e,1);f=this.vertices.length-b.length;this.vertices=b;return f},makeGroups:function(){var a=0;return function(b,c){var d,e,f,g,h={},k=this.morphTargets.length,l=this.morphNormals.length;this.geometryGroups=
+{};d=0;for(e=this.faces.length;d<e;d++)f=this.faces[d],f=b?f.materialIndex:0,f in h||(h[f]={hash:f,counter:0}),g=h[f].hash+"_"+h[f].counter,g in this.geometryGroups||(this.geometryGroups[g]={faces3:[],materialIndex:f,vertices:0,numMorphTargets:k,numMorphNormals:l}),this.geometryGroups[g].vertices+3>c&&(h[f].counter+=1,g=h[f].hash+"_"+h[f].counter,g in this.geometryGroups||(this.geometryGroups[g]={faces3:[],materialIndex:f,vertices:0,numMorphTargets:k,numMorphNormals:l})),this.geometryGroups[g].faces3.push(d),
+this.geometryGroups[g].vertices+=3;this.geometryGroupsList=[];for(var n in this.geometryGroups)this.geometryGroups[n].id=a++,this.geometryGroupsList.push(this.geometryGroups[n])}}(),clone:function(){for(var a=new THREE.Geometry,b=this.vertices,c=0,d=b.length;c<d;c++)a.vertices.push(b[c].clone());b=this.faces;c=0;for(d=b.length;c<d;c++)a.faces.push(b[c].clone());b=this.faceVertexUvs[0];c=0;for(d=b.length;c<d;c++){for(var e=b[c],f=[],g=0,h=e.length;g<h;g++)f.push(new THREE.Vector2(e[g].x,e[g].y));a.faceVertexUvs[0].push(f)}return a},
+dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.Geometry.prototype);THREE.GeometryIdCount=0;THREE.Camera=function(){THREE.Object3D.call(this);this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=new THREE.Matrix4};THREE.Camera.prototype=Object.create(THREE.Object3D.prototype);THREE.Camera.prototype.lookAt=function(){var a=new THREE.Matrix4;return function(b){a.lookAt(this.position,b,this.up);this.quaternion.setFromRotationMatrix(a)}}();
+THREE.Camera.prototype.clone=function(a){void 0===a&&(a=new THREE.Camera);THREE.Object3D.prototype.clone.call(this,a);a.matrixWorldInverse.copy(this.matrixWorldInverse);a.projectionMatrix.copy(this.projectionMatrix);return a};THREE.OrthographicCamera=function(a,b,c,d,e,f){THREE.Camera.call(this);this.left=a;this.right=b;this.top=c;this.bottom=d;this.near=void 0!==e?e:0.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()};THREE.OrthographicCamera.prototype=Object.create(THREE.Camera.prototype);THREE.OrthographicCamera.prototype.updateProjectionMatrix=function(){this.projectionMatrix.makeOrthographic(this.left,this.right,this.top,this.bottom,this.near,this.far)};
+THREE.OrthographicCamera.prototype.clone=function(){var a=new THREE.OrthographicCamera;THREE.Camera.prototype.clone.call(this,a);a.left=this.left;a.right=this.right;a.top=this.top;a.bottom=this.bottom;a.near=this.near;a.far=this.far;return a};THREE.PerspectiveCamera=function(a,b,c,d){THREE.Camera.call(this);this.fov=void 0!==a?a:50;this.aspect=void 0!==b?b:1;this.near=void 0!==c?c:0.1;this.far=void 0!==d?d:2E3;this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype=Object.create(THREE.Camera.prototype);THREE.PerspectiveCamera.prototype.setLens=function(a,b){void 0===b&&(b=24);this.fov=2*THREE.Math.radToDeg(Math.atan(b/(2*a)));this.updateProjectionMatrix()};
+THREE.PerspectiveCamera.prototype.setViewOffset=function(a,b,c,d,e,f){this.fullWidth=a;this.fullHeight=b;this.x=c;this.y=d;this.width=e;this.height=f;this.updateProjectionMatrix()};
+THREE.PerspectiveCamera.prototype.updateProjectionMatrix=function(){if(this.fullWidth){var a=this.fullWidth/this.fullHeight,b=Math.tan(THREE.Math.degToRad(0.5*this.fov))*this.near,c=-b,d=a*c,a=Math.abs(a*b-d),c=Math.abs(b-c);this.projectionMatrix.makeFrustum(d+this.x*a/this.fullWidth,d+(this.x+this.width)*a/this.fullWidth,b-(this.y+this.height)*c/this.fullHeight,b-this.y*c/this.fullHeight,this.near,this.far)}else this.projectionMatrix.makePerspective(this.fov,this.aspect,this.near,this.far)};
+THREE.PerspectiveCamera.prototype.clone=function(){var a=new THREE.PerspectiveCamera;THREE.Camera.prototype.clone.call(this,a);a.fov=this.fov;a.aspect=this.aspect;a.near=this.near;a.far=this.far;return a};THREE.Light=function(a){THREE.Object3D.call(this);this.color=new THREE.Color(a)};THREE.Light.prototype=Object.create(THREE.Object3D.prototype);THREE.Light.prototype.clone=function(a){void 0===a&&(a=new THREE.Light);THREE.Object3D.prototype.clone.call(this,a);a.color.copy(this.color);return a};THREE.AmbientLight=function(a){THREE.Light.call(this,a)};THREE.AmbientLight.prototype=Object.create(THREE.Light.prototype);THREE.AmbientLight.prototype.clone=function(){var a=new THREE.AmbientLight;THREE.Light.prototype.clone.call(this,a);return a};THREE.AreaLight=function(a,b){THREE.Light.call(this,a);this.normal=new THREE.Vector3(0,-1,0);this.right=new THREE.Vector3(1,0,0);this.intensity=void 0!==b?b:1;this.height=this.width=1;this.constantAttenuation=1.5;this.linearAttenuation=0.5;this.quadraticAttenuation=0.1};THREE.AreaLight.prototype=Object.create(THREE.Light.prototype);THREE.DirectionalLight=function(a,b){THREE.Light.call(this,a);this.position.set(0,1,0);this.target=new THREE.Object3D;this.intensity=void 0!==b?b:1;this.onlyShadow=this.castShadow=!1;this.shadowCameraNear=50;this.shadowCameraFar=5E3;this.shadowCameraLeft=-500;this.shadowCameraTop=this.shadowCameraRight=500;this.shadowCameraBottom=-500;this.shadowCameraVisible=!1;this.shadowBias=0;this.shadowDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCascade=!1;this.shadowCascadeOffset=new THREE.Vector3(0,
+0,-1E3);this.shadowCascadeCount=2;this.shadowCascadeBias=[0,0,0];this.shadowCascadeWidth=[512,512,512];this.shadowCascadeHeight=[512,512,512];this.shadowCascadeNearZ=[-1,0.99,0.998];this.shadowCascadeFarZ=[0.99,0.998,1];this.shadowCascadeArray=[];this.shadowMatrix=this.shadowCamera=this.shadowMapSize=this.shadowMap=null};THREE.DirectionalLight.prototype=Object.create(THREE.Light.prototype);
+THREE.DirectionalLight.prototype.clone=function(){var a=new THREE.DirectionalLight;THREE.Light.prototype.clone.call(this,a);a.target=this.target.clone();a.intensity=this.intensity;a.castShadow=this.castShadow;a.onlyShadow=this.onlyShadow;a.shadowCameraNear=this.shadowCameraNear;a.shadowCameraFar=this.shadowCameraFar;a.shadowCameraLeft=this.shadowCameraLeft;a.shadowCameraRight=this.shadowCameraRight;a.shadowCameraTop=this.shadowCameraTop;a.shadowCameraBottom=this.shadowCameraBottom;a.shadowCameraVisible=
+this.shadowCameraVisible;a.shadowBias=this.shadowBias;a.shadowDarkness=this.shadowDarkness;a.shadowMapWidth=this.shadowMapWidth;a.shadowMapHeight=this.shadowMapHeight;a.shadowCascade=this.shadowCascade;a.shadowCascadeOffset.copy(this.shadowCascadeOffset);a.shadowCascadeCount=this.shadowCascadeCount;a.shadowCascadeBias=this.shadowCascadeBias.slice(0);a.shadowCascadeWidth=this.shadowCascadeWidth.slice(0);a.shadowCascadeHeight=this.shadowCascadeHeight.slice(0);a.shadowCascadeNearZ=this.shadowCascadeNearZ.slice(0);
+a.shadowCascadeFarZ=this.shadowCascadeFarZ.slice(0);return a};THREE.HemisphereLight=function(a,b,c){THREE.Light.call(this,a);this.position.set(0,100,0);this.groundColor=new THREE.Color(b);this.intensity=void 0!==c?c:1};THREE.HemisphereLight.prototype=Object.create(THREE.Light.prototype);THREE.HemisphereLight.prototype.clone=function(){var a=new THREE.HemisphereLight;THREE.Light.prototype.clone.call(this,a);a.groundColor.copy(this.groundColor);a.intensity=this.intensity;return a};THREE.PointLight=function(a,b,c){THREE.Light.call(this,a);this.intensity=void 0!==b?b:1;this.distance=void 0!==c?c:0};THREE.PointLight.prototype=Object.create(THREE.Light.prototype);THREE.PointLight.prototype.clone=function(){var a=new THREE.PointLight;THREE.Light.prototype.clone.call(this,a);a.intensity=this.intensity;a.distance=this.distance;return a};THREE.SpotLight=function(a,b,c,d,e){THREE.Light.call(this,a);this.position.set(0,1,0);this.target=new THREE.Object3D;this.intensity=void 0!==b?b:1;this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/3;this.exponent=void 0!==e?e:10;this.onlyShadow=this.castShadow=!1;this.shadowCameraNear=50;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowCameraVisible=!1;this.shadowBias=0;this.shadowDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowMatrix=this.shadowCamera=this.shadowMapSize=
+this.shadowMap=null};THREE.SpotLight.prototype=Object.create(THREE.Light.prototype);
+THREE.SpotLight.prototype.clone=function(){var a=new THREE.SpotLight;THREE.Light.prototype.clone.call(this,a);a.target=this.target.clone();a.intensity=this.intensity;a.distance=this.distance;a.angle=this.angle;a.exponent=this.exponent;a.castShadow=this.castShadow;a.onlyShadow=this.onlyShadow;a.shadowCameraNear=this.shadowCameraNear;a.shadowCameraFar=this.shadowCameraFar;a.shadowCameraFov=this.shadowCameraFov;a.shadowCameraVisible=this.shadowCameraVisible;a.shadowBias=this.shadowBias;a.shadowDarkness=
+this.shadowDarkness;a.shadowMapWidth=this.shadowMapWidth;a.shadowMapHeight=this.shadowMapHeight;return a};THREE.Cache=function(){this.files={}};THREE.Cache.prototype={constructor:THREE.Cache,add:function(a,b){this.files[a]=b},get:function(a){return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}};THREE.Loader=function(a){this.statusDomElement=(this.showStatus=a)?THREE.Loader.prototype.addStatusElement():null;this.imageLoader=new THREE.ImageLoader;this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}};
+THREE.Loader.prototype={constructor:THREE.Loader,crossOrigin:void 0,addStatusElement:function(){var a=document.createElement("div");a.style.position="absolute";a.style.right="0px";a.style.top="0px";a.style.fontSize="0.8em";a.style.textAlign="left";a.style.background="rgba(0,0,0,0.25)";a.style.color="#fff";a.style.width="120px";a.style.padding="0.5em 0.5em 0.5em 0.5em";a.style.zIndex=1E3;a.innerHTML="Loading ...";return a},updateProgress:function(a){var b="Loaded ",b=a.total?b+((100*a.loaded/a.total).toFixed(0)+
+"%"):b+((a.loaded/1024).toFixed(2)+" KB");this.statusDomElement.innerHTML=b},extractUrlBase:function(a){a=a.split("/");if(1===a.length)return"./";a.pop();return a.join("/")+"/"},initMaterials:function(a,b){for(var c=[],d=0;d<a.length;++d)c[d]=this.createMaterial(a[d],b);return c},needsTangents:function(a){for(var b=0,c=a.length;b<c;b++)if(a[b]instanceof THREE.ShaderMaterial)return!0;return!1},createMaterial:function(a,b){function c(a){a=Math.log(a)/Math.LN2;return Math.pow(2,Math.round(a))}function d(a,
+d,e,g,h,k,r){var v=/\.dds$/i.test(e),w=b+e;if(v){var u=THREE.ImageUtils.loadCompressedTexture(w);a[d]=u}else u=document.createElement("canvas"),a[d]=new THREE.Texture(u);a[d].sourceFile=e;g&&(a[d].repeat.set(g[0],g[1]),1!==g[0]&&(a[d].wrapS=THREE.RepeatWrapping),1!==g[1]&&(a[d].wrapT=THREE.RepeatWrapping));h&&a[d].offset.set(h[0],h[1]);k&&(e={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping},void 0!==e[k[0]]&&(a[d].wrapS=e[k[0]]),void 0!==e[k[1]]&&(a[d].wrapT=e[k[1]]));r&&(a[d].anisotropy=
+r);v||(u=a[d],f.imageLoader.crossOrigin=f.crossOrigin,f.imageLoader.load(w,function(a){if(!1===THREE.Math.isPowerOfTwo(a.width)||!1===THREE.Math.isPowerOfTwo(a.height)){var b=c(a.width),d=c(a.height);u.image.width=b;u.image.height=d;u.image.getContext("2d").drawImage(a,0,0,b,d)}else u.image=a;u.needsUpdate=!0}))}function e(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]}var f=this,g="MeshLambertMaterial",h={color:15658734,opacity:1,map:null,lightMap:null,normalMap:null,bumpMap:null,wireframe:!1};if(a.shading){var k=
+a.shading.toLowerCase();"phong"===k?g="MeshPhongMaterial":"basic"===k&&(g="MeshBasicMaterial")}void 0!==a.blending&&void 0!==THREE[a.blending]&&(h.blending=THREE[a.blending]);if(void 0!==a.transparent||1>a.opacity)h.transparent=a.transparent;void 0!==a.depthTest&&(h.depthTest=a.depthTest);void 0!==a.depthWrite&&(h.depthWrite=a.depthWrite);void 0!==a.visible&&(h.visible=a.visible);void 0!==a.flipSided&&(h.side=THREE.BackSide);void 0!==a.doubleSided&&(h.side=THREE.DoubleSide);void 0!==a.wireframe&&
+(h.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?h.vertexColors=THREE.FaceColors:a.vertexColors&&(h.vertexColors=THREE.VertexColors));a.colorDiffuse?h.color=e(a.colorDiffuse):a.DbgColor&&(h.color=a.DbgColor);a.colorSpecular&&(h.specular=e(a.colorSpecular));a.colorAmbient&&(h.ambient=e(a.colorAmbient));a.colorEmissive&&(h.emissive=e(a.colorEmissive));a.transparency&&(h.opacity=a.transparency);a.specularCoef&&(h.shininess=a.specularCoef);a.mapDiffuse&&b&&d(h,"map",a.mapDiffuse,
+a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&d(h,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&d(h,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&d(h,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&d(h,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,
+a.mapSpecularWrap,a.mapSpecularAnisotropy);a.mapBumpScale&&(h.bumpScale=a.mapBumpScale);a.mapNormal?(g=THREE.ShaderLib.normalmap,k=THREE.UniformsUtils.clone(g.uniforms),k.tNormal.value=h.normalMap,a.mapNormalFactor&&k.uNormalScale.value.set(a.mapNormalFactor,a.mapNormalFactor),h.map&&(k.tDiffuse.value=h.map,k.enableDiffuse.value=!0),h.specularMap&&(k.tSpecular.value=h.specularMap,k.enableSpecular.value=!0),h.lightMap&&(k.tAO.value=h.lightMap,k.enableAO.value=!0),k.diffuse.value.setHex(h.color),k.specular.value.setHex(h.specular),
+k.ambient.value.setHex(h.ambient),k.shininess.value=h.shininess,void 0!==h.opacity&&(k.opacity.value=h.opacity),g=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:k,lights:!0,fog:!0}),h.transparent&&(g.transparent=!0)):g=new THREE[g](h);void 0!==a.DbgName&&(g.name=a.DbgName);return g}};THREE.XHRLoader=function(a){this.cache=new THREE.Cache;this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
+THREE.XHRLoader.prototype={constructor:THREE.XHRLoader,load:function(a,b,c,d){var e=this,f=e.cache.get(a);void 0!==f?b(f):(f=new XMLHttpRequest,void 0!==b&&f.addEventListener("load",function(c){e.cache.add(a,c.target.responseText);b(c.target.responseText);e.manager.itemEnd(a)},!1),void 0!==c&&f.addEventListener("progress",function(a){c(a)},!1),void 0!==d&&f.addEventListener("error",function(a){d(a)},!1),void 0!==this.crossOrigin&&(f.crossOrigin=this.crossOrigin),f.open("GET",a,!0),f.send(null),e.manager.itemStart(a))},
+setCrossOrigin:function(a){this.crossOrigin=a}};THREE.ImageLoader=function(a){this.cache=new THREE.Cache;this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
+THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,load:function(a,b,c,d){var e=this,f=e.cache.get(a);if(void 0!==f)b(f);else return f=document.createElement("img"),void 0!==b&&f.addEventListener("load",function(c){e.cache.add(a,this);b(this);e.manager.itemEnd(a)},!1),void 0!==c&&f.addEventListener("progress",function(a){c(a)},!1),void 0!==d&&f.addEventListener("error",function(a){d(a)},!1),void 0!==this.crossOrigin&&(f.crossOrigin=this.crossOrigin),f.src=a,e.manager.itemStart(a),f},setCrossOrigin:function(a){this.crossOrigin=
+a}};THREE.JSONLoader=function(a){THREE.Loader.call(this,a);this.withCredentials=!1};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);THREE.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"===typeof c?c:this.extractUrlBase(a);this.onLoadStart();this.loadAjaxJSON(this,a,b,c)};
+THREE.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,g=0;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var h=JSON.parse(f.responseText);if(void 0!==h.metadata&&"scene"===h.metadata.type){console.error('THREE.JSONLoader: "'+b+'" seems to be a Scene. Use THREE.SceneLoader instead.');return}h=a.parse(h,d);c(h.geometry,h.materials)}else console.error('THREE.JSONLoader: "'+b+'" seems to be unreachable or the file is empty.');
+a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load \""+b+'" ('+f.status+")");else f.readyState===f.LOADING?e&&(0===g&&(g=f.getResponseHeader("Content-Length")),e({total:g,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&void 0!==e&&(g=f.getResponseHeader("Content-Length"))};f.open("GET",b,!0);f.withCredentials=this.withCredentials;f.send(null)};
+THREE.JSONLoader.prototype.parse=function(a,b){var c=new THREE.Geometry,d=void 0!==a.scale?1/a.scale:1;(function(b){var d,g,h,k,l,n,q,p,s,t,r,v,w,u=a.faces;n=a.vertices;var y=a.normals,L=a.colors,x=0;if(void 0!==a.uvs){for(d=0;d<a.uvs.length;d++)a.uvs[d].length&&x++;for(d=0;d<x;d++)c.faceVertexUvs[d]=[]}k=0;for(l=n.length;k<l;)d=new THREE.Vector3,d.x=n[k++]*b,d.y=n[k++]*b,d.z=n[k++]*b,c.vertices.push(d);k=0;for(l=u.length;k<l;)if(b=u[k++],s=b&1,h=b&2,d=b&8,q=b&16,t=b&32,n=b&64,b&=128,s){s=new THREE.Face3;
+s.a=u[k];s.b=u[k+1];s.c=u[k+3];r=new THREE.Face3;r.a=u[k+1];r.b=u[k+2];r.c=u[k+3];k+=4;h&&(h=u[k++],s.materialIndex=h,r.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<x;d++)for(v=a.uvs[d],c.faceVertexUvs[d][h]=[],c.faceVertexUvs[d][h+1]=[],g=0;4>g;g++)p=u[k++],w=v[2*p],p=v[2*p+1],w=new THREE.Vector2(w,p),2!==g&&c.faceVertexUvs[d][h].push(w),0!==g&&c.faceVertexUvs[d][h+1].push(w);q&&(q=3*u[k++],s.normal.set(y[q++],y[q++],y[q]),r.normal.copy(s.normal));if(t)for(d=0;4>d;d++)q=3*u[k++],t=new THREE.Vector3(y[q++],
+y[q++],y[q]),2!==d&&s.vertexNormals.push(t),0!==d&&r.vertexNormals.push(t);n&&(n=u[k++],n=L[n],s.color.setHex(n),r.color.setHex(n));if(b)for(d=0;4>d;d++)n=u[k++],n=L[n],2!==d&&s.vertexColors.push(new THREE.Color(n)),0!==d&&r.vertexColors.push(new THREE.Color(n));c.faces.push(s);c.faces.push(r)}else{s=new THREE.Face3;s.a=u[k++];s.b=u[k++];s.c=u[k++];h&&(h=u[k++],s.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<x;d++)for(v=a.uvs[d],c.faceVertexUvs[d][h]=[],g=0;3>g;g++)p=u[k++],w=v[2*p],p=v[2*p+1],
+w=new THREE.Vector2(w,p),c.faceVertexUvs[d][h].push(w);q&&(q=3*u[k++],s.normal.set(y[q++],y[q++],y[q]));if(t)for(d=0;3>d;d++)q=3*u[k++],t=new THREE.Vector3(y[q++],y[q++],y[q]),s.vertexNormals.push(t);n&&(n=u[k++],s.color.setHex(L[n]));if(b)for(d=0;3>d;d++)n=u[k++],s.vertexColors.push(new THREE.Color(L[n]));c.faces.push(s)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;d<g;d+=b)c.skinWeights.push(new THREE.Vector4(a.skinWeights[d],
+1<b?a.skinWeights[d+1]:0,2<b?a.skinWeights[d+2]:0,3<b?a.skinWeights[d+3]:0));if(a.skinIndices)for(d=0,g=a.skinIndices.length;d<g;d+=b)c.skinIndices.push(new THREE.Vector4(a.skinIndices[d],1<b?a.skinIndices[d+1]:0,2<b?a.skinIndices[d+2]:0,3<b?a.skinIndices[d+3]:0));c.bones=a.bones;c.bones&&0<c.bones.length&&(c.skinWeights.length!==c.skinIndices.length||c.skinIndices.length!==c.vertices.length)&&console.warn("When skinning, number of vertices ("+c.vertices.length+"), skinIndices ("+c.skinIndices.length+
+"), and skinWeights ("+c.skinWeights.length+") should match.");c.animation=a.animation;c.animations=a.animations})();(function(b){if(void 0!==a.morphTargets){var d,g,h,k,l,n;d=0;for(g=a.morphTargets.length;d<g;d++)for(c.morphTargets[d]={},c.morphTargets[d].name=a.morphTargets[d].name,c.morphTargets[d].vertices=[],l=c.morphTargets[d].vertices,n=a.morphTargets[d].vertices,h=0,k=n.length;h<k;h+=3){var q=new THREE.Vector3;q.x=n[h]*b;q.y=n[h+1]*b;q.z=n[h+2]*b;l.push(q)}}if(void 0!==a.morphColors)for(d=
+0,g=a.morphColors.length;d<g;d++)for(c.morphColors[d]={},c.morphColors[d].name=a.morphColors[d].name,c.morphColors[d].colors=[],k=c.morphColors[d].colors,l=a.morphColors[d].colors,b=0,h=l.length;b<h;b+=3)n=new THREE.Color(16755200),n.setRGB(l[b],l[b+1],l[b+2]),k.push(n)})(d);c.computeFaceNormals();c.computeBoundingSphere();if(void 0===a.materials||0===a.materials.length)return{geometry:c};d=this.initMaterials(a.materials,b);this.needsTangents(d)&&c.computeTangents();return{geometry:c,materials:d}};THREE.LoadingManager=function(a,b,c){var d=this,e=0,f=0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){f++};this.itemEnd=function(a){e++;if(void 0!==d.onProgress)d.onProgress(a,e,f);if(e===f&&void 0!==d.onLoad)d.onLoad()}};THREE.DefaultLoadingManager=new THREE.LoadingManager;THREE.BufferGeometryLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
+THREE.BufferGeometryLoader.prototype={constructor:THREE.BufferGeometryLoader,load:function(a,b,c,d){var e=this;c=new THREE.XHRLoader;c.setCrossOrigin(this.crossOrigin);c.load(a,function(a){b(e.parse(JSON.parse(a)))})},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a){var b=new THREE.BufferGeometry,c=a.attributes,d=a.offsets;a=a.boundingSphere;for(var e in c){var f=c[e];b.attributes[e]={itemSize:f.itemSize,array:new self[f.type](f.array)}}void 0!==d&&(b.offsets=JSON.parse(JSON.stringify(d)));
+void 0!==a&&(b.boundingSphere=new THREE.Sphere((new THREE.Vector3).fromArray(void 0!==a.center?a.center:[0,0,0]),a.radius));return b}};THREE.MaterialLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
+THREE.MaterialLoader.prototype={constructor:THREE.MaterialLoader,load:function(a,b,c,d){var e=this;c=new THREE.XHRLoader;c.setCrossOrigin(this.crossOrigin);c.load(a,function(a){b(e.parse(JSON.parse(a)))})},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a){var b=new THREE[a.type];void 0!==a.color&&b.color.setHex(a.color);void 0!==a.ambient&&b.ambient.setHex(a.ambient);void 0!==a.emissive&&b.emissive.setHex(a.emissive);void 0!==a.specular&&b.specular.setHex(a.specular);void 0!==a.shininess&&
+(b.shininess=a.shininess);void 0!==a.vertexColors&&(b.vertexColors=a.vertexColors);void 0!==a.blending&&(b.blending=a.blending);void 0!==a.side&&(b.side=a.side);void 0!==a.opacity&&(b.opacity=a.opacity);void 0!==a.transparent&&(b.transparent=a.transparent);void 0!==a.wireframe&&(b.wireframe=a.wireframe);if(void 0!==a.materials)for(var c=0,d=a.materials.length;c<d;c++)b.materials.push(this.parse(a.materials[c]));return b}};THREE.ObjectLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
+THREE.ObjectLoader.prototype={constructor:THREE.ObjectLoader,load:function(a,b,c,d){var e=this;c=new THREE.XHRLoader(e.manager);c.setCrossOrigin(this.crossOrigin);c.load(a,function(a){b(e.parse(JSON.parse(a)))})},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a){var b=this.parseGeometries(a.geometries),c=this.parseMaterials(a.materials);return this.parseObject(a.object,b,c)},parseGeometries:function(a){var b={};if(void 0!==a)for(var c=new THREE.JSONLoader,d=new THREE.BufferGeometryLoader,
+e=0,f=a.length;e<f;e++){var g,h=a[e];switch(h.type){case "PlaneGeometry":g=new THREE.PlaneGeometry(h.width,h.height,h.widthSegments,h.heightSegments);break;case "BoxGeometry":case "CubeGeometry":g=new THREE.BoxGeometry(h.width,h.height,h.depth,h.widthSegments,h.heightSegments,h.depthSegments);break;case "CircleGeometry":g=new THREE.CircleGeometry(h.radius,h.segments);break;case "CylinderGeometry":g=new THREE.CylinderGeometry(h.radiusTop,h.radiusBottom,h.height,h.radialSegments,h.heightSegments,h.openEnded);
+break;case "SphereGeometry":g=new THREE.SphereGeometry(h.radius,h.widthSegments,h.heightSegments,h.phiStart,h.phiLength,h.thetaStart,h.thetaLength);break;case "IcosahedronGeometry":g=new THREE.IcosahedronGeometry(h.radius,h.detail);break;case "TorusGeometry":g=new THREE.TorusGeometry(h.radius,h.tube,h.radialSegments,h.tubularSegments,h.arc);break;case "TorusKnotGeometry":g=new THREE.TorusKnotGeometry(h.radius,h.tube,h.radialSegments,h.tubularSegments,h.p,h.q,h.heightScale);break;case "BufferGeometry":g=
+d.parse(h.data);break;case "Geometry":g=c.parse(h.data).geometry}g.uuid=h.uuid;void 0!==h.name&&(g.name=h.name);b[h.uuid]=g}return b},parseMaterials:function(a){var b={};if(void 0!==a)for(var c=new THREE.MaterialLoader,d=0,e=a.length;d<e;d++){var f=a[d],g=c.parse(f);g.uuid=f.uuid;void 0!==f.name&&(g.name=f.name);b[f.uuid]=g}return b},parseObject:function(){var a=new THREE.Matrix4;return function(b,c,d){var e;switch(b.type){case "Scene":e=new THREE.Scene;break;case "PerspectiveCamera":e=new THREE.PerspectiveCamera(b.fov,
+b.aspect,b.near,b.far);break;case "OrthographicCamera":e=new THREE.OrthographicCamera(b.left,b.right,b.top,b.bottom,b.near,b.far);break;case "AmbientLight":e=new THREE.AmbientLight(b.color);break;case "DirectionalLight":e=new THREE.DirectionalLight(b.color,b.intensity);break;case "PointLight":e=new THREE.PointLight(b.color,b.intensity,b.distance);break;case "SpotLight":e=new THREE.SpotLight(b.color,b.intensity,b.distance,b.angle,b.exponent);break;case "HemisphereLight":e=new THREE.HemisphereLight(b.color,
+b.groundColor,b.intensity);break;case "Mesh":e=c[b.geometry];var f=d[b.material];void 0===e&&console.error("THREE.ObjectLoader: Undefined geometry "+b.geometry);void 0===f&&console.error("THREE.ObjectLoader: Undefined material "+b.material);e=new THREE.Mesh(e,f);break;case "Sprite":f=d[b.material];void 0===f&&console.error("THREE.ObjectLoader: Undefined material "+b.material);e=new THREE.Sprite(f);break;default:e=new THREE.Object3D}e.uuid=b.uuid;void 0!==b.name&&(e.name=b.name);void 0!==b.matrix?
+(a.fromArray(b.matrix),a.decompose(e.position,e.quaternion,e.scale)):(void 0!==b.position&&e.position.fromArray(b.position),void 0!==b.rotation&&e.rotation.fromArray(b.rotation),void 0!==b.scale&&e.scale.fromArray(b.scale));void 0!==b.visible&&(e.visible=b.visible);void 0!==b.userData&&(e.userData=b.userData);if(void 0!==b.children)for(var g in b.children)e.add(this.parseObject(b.children[g],c,d));return e}}()};THREE.SceneLoader=function(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){};this.callbackSync=function(){};this.callbackProgress=function(){};this.geometryHandlers={};this.hierarchyHandlers={};this.addGeometryHandler("ascii",THREE.JSONLoader)};
+THREE.SceneLoader.prototype={constructor:THREE.SceneLoader,load:function(a,b,c,d){var e=this;c=new THREE.XHRLoader(e.manager);c.setCrossOrigin(this.crossOrigin);c.load(a,function(c){e.parse(JSON.parse(c),b,a)})},setCrossOrigin:function(a){this.crossOrigin=a},addGeometryHandler:function(a,b){this.geometryHandlers[a]={loaderClass:b}},addHierarchyHandler:function(a,b){this.hierarchyHandlers[a]={loaderClass:b}},parse:function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:s+a}function e(){f(B.scene,
+A.objects)}function f(a,b){var c,e,g,h,l,n;for(n in b){var q=B.objects[n],s=b[n];if(void 0===q){if(s.type&&s.type in p.hierarchyHandlers){if(void 0===s.loading){c={type:1,url:1,material:1,position:1,rotation:1,scale:1,visible:1,children:1,userData:1,skin:1,morph:1,mirroredLoop:1,duration:1};var u={},w;for(w in s)w in c||(u[w]=s[w]);r=B.materials[s.material];s.loading=!0;c=p.hierarchyHandlers[s.type].loaderObject;c.options?c.load(d(s.url,A.urlBaseType),k(n,a,r,s)):c.load(d(s.url,A.urlBaseType),k(n,
+a,r,s),u)}}else if(void 0!==s.geometry){if(t=B.geometries[s.geometry]){q=!1;r=B.materials[s.material];q=r instanceof THREE.ShaderMaterial;e=s.position;g=s.rotation;h=s.scale;c=s.matrix;l=s.quaternion;s.material||(r=new THREE.MeshFaceMaterial(B.face_materials[s.geometry]));r instanceof THREE.MeshFaceMaterial&&0===r.materials.length&&(r=new THREE.MeshFaceMaterial(B.face_materials[s.geometry]));if(r instanceof THREE.MeshFaceMaterial)for(u=0;u<r.materials.length;u++)q=q||r.materials[u]instanceof THREE.ShaderMaterial;
+q&&t.computeTangents();s.skin?q=new THREE.SkinnedMesh(t,r):s.morph?(q=new THREE.MorphAnimMesh(t,r),void 0!==s.duration&&(q.duration=s.duration),void 0!==s.time&&(q.time=s.time),void 0!==s.mirroredLoop&&(q.mirroredLoop=s.mirroredLoop),r.morphNormals&&t.computeMorphNormals()):q=new THREE.Mesh(t,r);q.name=n;c?(q.matrixAutoUpdate=!1,q.matrix.set(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11],c[12],c[13],c[14],c[15])):(q.position.fromArray(e),l?q.quaternion.fromArray(l):q.rotation.fromArray(g),
+q.scale.fromArray(h));q.visible=s.visible;q.castShadow=s.castShadow;q.receiveShadow=s.receiveShadow;a.add(q);B.objects[n]=q}}else if("AmbientLight"===s.type||"PointLight"===s.type||"DirectionalLight"===s.type||"SpotLight"===s.type||"HemisphereLight"===s.type||"AreaLight"===s.type){u=s.color;c=s.intensity;e=s.distance;g=s.position;h=s.rotation;switch(s.type){case "AmbientLight":y=new THREE.AmbientLight(u);break;case "PointLight":y=new THREE.PointLight(u,c,e);y.position.fromArray(g);break;case "DirectionalLight":y=
+new THREE.DirectionalLight(u,c);y.position.fromArray(s.direction);break;case "SpotLight":y=new THREE.SpotLight(u,c,e,1);y.angle=s.angle;y.position.fromArray(g);y.target.set(g[0],g[1]-e,g[2]);y.target.applyEuler(new THREE.Euler(h[0],h[1],h[2],"XYZ"));break;case "HemisphereLight":y=new THREE.DirectionalLight(u,c,e);y.target.set(g[0],g[1]-e,g[2]);y.target.applyEuler(new THREE.Euler(h[0],h[1],h[2],"XYZ"));break;case "AreaLight":y=new THREE.AreaLight(u,c),y.position.fromArray(g),y.width=s.size,y.height=
+s.size_y}a.add(y);y.name=n;B.lights[n]=y;B.objects[n]=y}else"PerspectiveCamera"===s.type||"OrthographicCamera"===s.type?(e=s.position,g=s.rotation,l=s.quaternion,"PerspectiveCamera"===s.type?v=new THREE.PerspectiveCamera(s.fov,s.aspect,s.near,s.far):"OrthographicCamera"===s.type&&(v=new THREE.OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far)),v.name=n,v.position.fromArray(e),void 0!==l?v.quaternion.fromArray(l):void 0!==g&&v.rotation.fromArray(g),a.add(v),B.cameras[n]=v,B.objects[n]=
+v):(e=s.position,g=s.rotation,h=s.scale,l=s.quaternion,q=new THREE.Object3D,q.name=n,q.position.fromArray(e),l?q.quaternion.fromArray(l):q.rotation.fromArray(g),q.scale.fromArray(h),q.visible=void 0!==s.visible?s.visible:!1,a.add(q),B.objects[n]=q,B.empties[n]=q);if(q){if(void 0!==s.userData)for(var L in s.userData)q.userData[L]=s.userData[L];if(void 0!==s.groups)for(u=0;u<s.groups.length;u++)c=s.groups[u],void 0===B.groups[c]&&(B.groups[c]=[]),B.groups[c].push(n)}}void 0!==q&&void 0!==s.children&&
+f(q,s.children)}}function g(a,b,c,d,f){var g=f.rotation,h=f.quaternion,k=f.scale;a.position.fromArray(f.position);h?a.quaternion.fromArray(h):a.rotation.fromArray(g);a.scale.fromArray(k);d&&a.traverse(function(a){a.material=d});var l=void 0!==f.visible?f.visible:!0;a.traverse(function(a){a.visible=l});c.add(a);a.name=b;B.objects[b]=a;e()}function h(a){return function(b,c){b.name=a;B.geometries[a]=b;B.face_materials[a]=c;e();L-=1;p.onLoadComplete();n()}}function k(a,b,c,d){return function(e){g(e.content?
+e.content:e.dae?e.scene:e,a,b,c,d);L-=1;p.onLoadComplete();n()}}function l(a){return function(b,c){b.name=a;B.geometries[a]=b;B.face_materials[a]=c}}function n(){p.callbackProgress({totalModels:N,totalTextures:J,loadedModels:N-L,loadedTextures:J-x},B);p.onLoadProgress();if(0===L&&0===x){for(var a=0;a<K.length;a++){var c=K[a],d=B.objects[c.targetName];d?c.object.target=d:(c.object.target=new THREE.Object3D,B.scene.add(c.object.target));c.object.target.userData.targetInverse=c.object}b(B)}}function q(a,
+b){b(a);if(void 0!==a.children)for(var c in a.children)q(a.children[c],b)}var p=this,s=THREE.Loader.prototype.extractUrlBase(c),t,r,v,w,u,y,L,x,N,J,B,K=[],A=a,G;for(G in this.geometryHandlers)a=this.geometryHandlers[G].loaderClass,this.geometryHandlers[G].loaderObject=new a;for(G in this.hierarchyHandlers)a=this.hierarchyHandlers[G].loaderClass,this.hierarchyHandlers[G].loaderObject=new a;x=L=0;B={scene:new THREE.Scene,geometries:{},face_materials:{},materials:{},textures:{},objects:{},cameras:{},
+lights:{},fogs:{},empties:{},groups:{}};A.transform&&(G=A.transform.position,a=A.transform.rotation,c=A.transform.scale,G&&B.scene.position.fromArray(G),a&&B.scene.rotation.fromArray(a),c&&B.scene.scale.fromArray(c),G||a||c)&&(B.scene.updateMatrix(),B.scene.updateMatrixWorld());G=function(a){return function(){x-=a;n();p.onLoadComplete()}};for(var D in A.fogs)a=A.fogs[D],"linear"===a.type?w=new THREE.Fog(0,a.near,a.far):"exp2"===a.type&&(w=new THREE.FogExp2(0,a.density)),a=a.color,w.color.setRGB(a[0],
+a[1],a[2]),B.fogs[D]=w;for(var C in A.geometries)w=A.geometries[C],w.type in this.geometryHandlers&&(L+=1,p.onLoadStart());for(var F in A.objects)q(A.objects[F],function(a){a.type&&a.type in p.hierarchyHandlers&&(L+=1,p.onLoadStart())});N=L;for(C in A.geometries)if(w=A.geometries[C],"cube"===w.type)t=new THREE.BoxGeometry(w.width,w.height,w.depth,w.widthSegments,w.heightSegments,w.depthSegments),t.name=C,B.geometries[C]=t;else if("plane"===w.type)t=new THREE.PlaneGeometry(w.width,w.height,w.widthSegments,
+w.heightSegments),t.name=C,B.geometries[C]=t;else if("sphere"===w.type)t=new THREE.SphereGeometry(w.radius,w.widthSegments,w.heightSegments),t.name=C,B.geometries[C]=t;else if("cylinder"===w.type)t=new THREE.CylinderGeometry(w.topRad,w.botRad,w.height,w.radSegs,w.heightSegs),t.name=C,B.geometries[C]=t;else if("torus"===w.type)t=new THREE.TorusGeometry(w.radius,w.tube,w.segmentsR,w.segmentsT),t.name=C,B.geometries[C]=t;else if("icosahedron"===w.type)t=new THREE.IcosahedronGeometry(w.radius,w.subdivisions),
+t.name=C,B.geometries[C]=t;else if(w.type in this.geometryHandlers){F={};for(u in w)"type"!==u&&"url"!==u&&(F[u]=w[u]);this.geometryHandlers[w.type].loaderObject.load(d(w.url,A.urlBaseType),h(C),F)}else"embedded"===w.type&&(F=A.embeds[w.id],F.metadata=A.metadata,F&&(F=this.geometryHandlers.ascii.loaderObject.parse(F,""),l(C)(F.geometry,F.materials)));for(var z in A.textures)if(C=A.textures[z],C.url instanceof Array)for(x+=C.url.length,u=0;u<C.url.length;u++)p.onLoadStart();else x+=1,p.onLoadStart();
+J=x;for(z in A.textures){C=A.textures[z];void 0!==C.mapping&&void 0!==THREE[C.mapping]&&(C.mapping=new THREE[C.mapping]);if(C.url instanceof Array){F=C.url.length;w=[];for(u=0;u<F;u++)w[u]=d(C.url[u],A.urlBaseType);u=(u=/\.dds$/i.test(w[0]))?THREE.ImageUtils.loadCompressedTextureCube(w,C.mapping,G(F)):THREE.ImageUtils.loadTextureCube(w,C.mapping,G(F))}else u=/\.dds$/i.test(C.url),F=d(C.url,A.urlBaseType),w=G(1),u=u?THREE.ImageUtils.loadCompressedTexture(F,C.mapping,w):THREE.ImageUtils.loadTexture(F,
+C.mapping,w),void 0!==THREE[C.minFilter]&&(u.minFilter=THREE[C.minFilter]),void 0!==THREE[C.magFilter]&&(u.magFilter=THREE[C.magFilter]),C.anisotropy&&(u.anisotropy=C.anisotropy),C.repeat&&(u.repeat.set(C.repeat[0],C.repeat[1]),1!==C.repeat[0]&&(u.wrapS=THREE.RepeatWrapping),1!==C.repeat[1]&&(u.wrapT=THREE.RepeatWrapping)),C.offset&&u.offset.set(C.offset[0],C.offset[1]),C.wrap&&(F={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping},void 0!==F[C.wrap[0]]&&(u.wrapS=F[C.wrap[0]]),void 0!==
+F[C.wrap[1]]&&(u.wrapT=F[C.wrap[1]]));B.textures[z]=u}var H,E;for(H in A.materials){z=A.materials[H];for(E in z.parameters)"envMap"===E||"map"===E||"lightMap"===E||"bumpMap"===E?z.parameters[E]=B.textures[z.parameters[E]]:"shading"===E?z.parameters[E]="flat"===z.parameters[E]?THREE.FlatShading:THREE.SmoothShading:"side"===E?z.parameters[E]="double"==z.parameters[E]?THREE.DoubleSide:"back"==z.parameters[E]?THREE.BackSide:THREE.FrontSide:"blending"===E?z.parameters[E]=z.parameters[E]in THREE?THREE[z.parameters[E]]:
+THREE.NormalBlending:"combine"===E?z.parameters[E]=z.parameters[E]in THREE?THREE[z.parameters[E]]:THREE.MultiplyOperation:"vertexColors"===E?"face"==z.parameters[E]?z.parameters[E]=THREE.FaceColors:z.parameters[E]&&(z.parameters[E]=THREE.VertexColors):"wrapRGB"===E&&(G=z.parameters[E],z.parameters[E]=new THREE.Vector3(G[0],G[1],G[2]));void 0!==z.parameters.opacity&&1>z.parameters.opacity&&(z.parameters.transparent=!0);z.parameters.normalMap?(G=THREE.ShaderLib.normalmap,C=THREE.UniformsUtils.clone(G.uniforms),
+u=z.parameters.color,F=z.parameters.specular,w=z.parameters.ambient,D=z.parameters.shininess,C.tNormal.value=B.textures[z.parameters.normalMap],z.parameters.normalScale&&C.uNormalScale.value.set(z.parameters.normalScale[0],z.parameters.normalScale[1]),z.parameters.map&&(C.tDiffuse.value=z.parameters.map,C.enableDiffuse.value=!0),z.parameters.envMap&&(C.tCube.value=z.parameters.envMap,C.enableReflection.value=!0,C.reflectivity.value=z.parameters.reflectivity),z.parameters.lightMap&&(C.tAO.value=z.parameters.lightMap,
+C.enableAO.value=!0),z.parameters.specularMap&&(C.tSpecular.value=B.textures[z.parameters.specularMap],C.enableSpecular.value=!0),z.parameters.displacementMap&&(C.tDisplacement.value=B.textures[z.parameters.displacementMap],C.enableDisplacement.value=!0,C.uDisplacementBias.value=z.parameters.displacementBias,C.uDisplacementScale.value=z.parameters.displacementScale),C.diffuse.value.setHex(u),C.specular.value.setHex(F),C.ambient.value.setHex(w),C.shininess.value=D,z.parameters.opacity&&(C.opacity.value=
+z.parameters.opacity),r=new THREE.ShaderMaterial({fragmentShader:G.fragmentShader,vertexShader:G.vertexShader,uniforms:C,lights:!0,fog:!0})):r=new THREE[z.type](z.parameters);r.name=H;B.materials[H]=r}for(H in A.materials)if(z=A.materials[H],z.parameters.materials){E=[];for(u=0;u<z.parameters.materials.length;u++)E.push(B.materials[z.parameters.materials[u]]);B.materials[H].materials=E}e();B.cameras&&A.defaults.camera&&(B.currentCamera=B.cameras[A.defaults.camera]);B.fogs&&A.defaults.fog&&(B.scene.fog=
+B.fogs[A.defaults.fog]);p.callbackSync(B);n()}};THREE.TextureLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};THREE.TextureLoader.prototype={constructor:THREE.TextureLoader,load:function(a,b,c,d){c=new THREE.ImageLoader(this.manager);c.setCrossOrigin(this.crossOrigin);c.load(a,function(a){a=new THREE.Texture(a);a.needsUpdate=!0;void 0!==b&&b(a)})},setCrossOrigin:function(a){this.crossOrigin=a}};THREE.Material=function(){this.id=THREE.MaterialIdCount++;this.uuid=THREE.Math.generateUUID();this.name="";this.side=THREE.FrontSide;this.opacity=1;this.transparent=!1;this.blending=THREE.NormalBlending;this.blendSrc=THREE.SrcAlphaFactor;this.blendDst=THREE.OneMinusSrcAlphaFactor;this.blendEquation=THREE.AddEquation;this.depthWrite=this.depthTest=!0;this.polygonOffset=!1;this.overdraw=this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.needsUpdate=this.visible=!0};
+THREE.Material.prototype={constructor:THREE.Material,setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else if(b in this){var d=this[b];d instanceof THREE.Color?d.set(c):d instanceof THREE.Vector3&&c instanceof THREE.Vector3?d.copy(c):this[b]="overdraw"==b?Number(c):c}}},clone:function(a){void 0===a&&(a=new THREE.Material);a.name=this.name;a.side=this.side;a.opacity=this.opacity;a.transparent=this.transparent;
+a.blending=this.blending;a.blendSrc=this.blendSrc;a.blendDst=this.blendDst;a.blendEquation=this.blendEquation;a.depthTest=this.depthTest;a.depthWrite=this.depthWrite;a.polygonOffset=this.polygonOffset;a.polygonOffsetFactor=this.polygonOffsetFactor;a.polygonOffsetUnits=this.polygonOffsetUnits;a.alphaTest=this.alphaTest;a.overdraw=this.overdraw;a.visible=this.visible;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.Material.prototype);
+THREE.MaterialIdCount=0;THREE.LineBasicMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.linewidth=1;this.linejoin=this.linecap="round";this.vertexColors=!1;this.fog=!0;this.setValues(a)};THREE.LineBasicMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.LineBasicMaterial.prototype.clone=function(){var a=new THREE.LineBasicMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.linewidth=this.linewidth;a.linecap=this.linecap;a.linejoin=this.linejoin;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.LineDashedMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.scale=this.linewidth=1;this.dashSize=3;this.gapSize=1;this.vertexColors=!1;this.fog=!0;this.setValues(a)};THREE.LineDashedMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.LineDashedMaterial.prototype.clone=function(){var a=new THREE.LineDashedMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.linewidth=this.linewidth;a.scale=this.scale;a.dashSize=this.dashSize;a.gapSize=this.gapSize;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.MeshBasicMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.envMap=this.specularMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphTargets=this.skinning=!1;this.setValues(a)};
+THREE.MeshBasicMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.MeshBasicMaterial.prototype.clone=function(){var a=new THREE.MeshBasicMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.lightMap=this.lightMap;a.specularMap=this.specularMap;a.envMap=this.envMap;a.combine=this.combine;a.reflectivity=this.reflectivity;a.refractionRatio=this.refractionRatio;a.fog=this.fog;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.wireframeLinecap=this.wireframeLinecap;a.wireframeLinejoin=
+this.wireframeLinejoin;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=this.morphTargets;return a};THREE.MeshLambertMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.ambient=new THREE.Color(16777215);this.emissive=new THREE.Color(0);this.wrapAround=!1;this.wrapRGB=new THREE.Vector3(1,1,1);this.envMap=this.specularMap=this.lightMap=this.map=null;this.combine=THREE.MultiplyOperation;this.reflectivity=1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=
+"round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshLambertMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.MeshLambertMaterial.prototype.clone=function(){var a=new THREE.MeshLambertMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.ambient.copy(this.ambient);a.emissive.copy(this.emissive);a.wrapAround=this.wrapAround;a.wrapRGB.copy(this.wrapRGB);a.map=this.map;a.lightMap=this.lightMap;a.specularMap=this.specularMap;a.envMap=this.envMap;a.combine=this.combine;a.reflectivity=this.reflectivity;a.refractionRatio=this.refractionRatio;a.fog=this.fog;a.shading=this.shading;
+a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.wireframeLinecap=this.wireframeLinecap;a.wireframeLinejoin=this.wireframeLinejoin;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.MeshPhongMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.ambient=new THREE.Color(16777215);this.emissive=new THREE.Color(0);this.specular=new THREE.Color(1118481);this.shininess=30;this.wrapAround=this.metal=!1;this.wrapRGB=new THREE.Vector3(1,1,1);this.bumpMap=this.lightMap=this.map=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new THREE.Vector2(1,1);this.envMap=this.specularMap=null;this.combine=THREE.MultiplyOperation;this.reflectivity=
+1;this.refractionRatio=0.98;this.fog=!0;this.shading=THREE.SmoothShading;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)};THREE.MeshPhongMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.MeshPhongMaterial.prototype.clone=function(){var a=new THREE.MeshPhongMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.ambient.copy(this.ambient);a.emissive.copy(this.emissive);a.specular.copy(this.specular);a.shininess=this.shininess;a.metal=this.metal;a.wrapAround=this.wrapAround;a.wrapRGB.copy(this.wrapRGB);a.map=this.map;a.lightMap=this.lightMap;a.bumpMap=this.bumpMap;a.bumpScale=this.bumpScale;a.normalMap=this.normalMap;a.normalScale.copy(this.normalScale);
+a.specularMap=this.specularMap;a.envMap=this.envMap;a.combine=this.combine;a.reflectivity=this.reflectivity;a.refractionRatio=this.refractionRatio;a.fog=this.fog;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.wireframeLinecap=this.wireframeLinecap;a.wireframeLinejoin=this.wireframeLinejoin;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.MeshDepthMaterial=function(a){THREE.Material.call(this);this.wireframe=this.morphTargets=!1;this.wireframeLinewidth=1;this.setValues(a)};THREE.MeshDepthMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshDepthMaterial.prototype.clone=function(){var a=new THREE.MeshDepthMaterial;THREE.Material.prototype.clone.call(this,a);a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;return a};THREE.MeshNormalMaterial=function(a){THREE.Material.call(this,a);this.shading=THREE.FlatShading;this.wireframe=!1;this.wireframeLinewidth=1;this.morphTargets=!1;this.setValues(a)};THREE.MeshNormalMaterial.prototype=Object.create(THREE.Material.prototype);THREE.MeshNormalMaterial.prototype.clone=function(){var a=new THREE.MeshNormalMaterial;THREE.Material.prototype.clone.call(this,a);a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;return a};THREE.MeshFaceMaterial=function(a){this.materials=a instanceof Array?a:[]};THREE.MeshFaceMaterial.prototype.clone=function(){for(var a=new THREE.MeshFaceMaterial,b=0;b<this.materials.length;b++)a.materials.push(this.materials[b].clone());return a};THREE.ParticleSystemMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.vertexColors=!1;this.fog=!0;this.setValues(a)};THREE.ParticleSystemMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.ParticleSystemMaterial.prototype.clone=function(){var a=new THREE.ParticleSystemMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.size=this.size;a.sizeAttenuation=this.sizeAttenuation;a.vertexColors=this.vertexColors;a.fog=this.fog;return a};THREE.ParticleBasicMaterial=THREE.ParticleSystemMaterial;THREE.ShaderMaterial=function(a){THREE.Material.call(this);this.vertexShader=this.fragmentShader="void main() {}";this.uniforms={};this.defines={};this.attributes=null;this.shading=THREE.SmoothShading;this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.vertexColors=THREE.NoColors;this.morphNormals=this.morphTargets=this.skinning=!1;this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;this.setValues(a)};
+THREE.ShaderMaterial.prototype=Object.create(THREE.Material.prototype);
+THREE.ShaderMaterial.prototype.clone=function(){var a=new THREE.ShaderMaterial;THREE.Material.prototype.clone.call(this,a);a.fragmentShader=this.fragmentShader;a.vertexShader=this.vertexShader;a.uniforms=THREE.UniformsUtils.clone(this.uniforms);a.attributes=this.attributes;a.defines=this.defines;a.shading=this.shading;a.wireframe=this.wireframe;a.wireframeLinewidth=this.wireframeLinewidth;a.fog=this.fog;a.lights=this.lights;a.vertexColors=this.vertexColors;a.skinning=this.skinning;a.morphTargets=
+this.morphTargets;a.morphNormals=this.morphNormals;return a};THREE.RawShaderMaterial=function(a){THREE.ShaderMaterial.call(this,a)};THREE.RawShaderMaterial.prototype=Object.create(THREE.ShaderMaterial.prototype);THREE.RawShaderMaterial.prototype.clone=function(){var a=new THREE.RawShaderMaterial;THREE.ShaderMaterial.prototype.clone.call(this,a);return a};THREE.SpriteMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.map=null;this.rotation=0;this.fog=!1;this.setValues(a)};THREE.SpriteMaterial.prototype=Object.create(THREE.Material.prototype);THREE.SpriteMaterial.prototype.clone=function(){var a=new THREE.SpriteMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.map=this.map;a.rotation=this.rotation;a.fog=this.fog;return a};THREE.SpriteCanvasMaterial=function(a){THREE.Material.call(this);this.color=new THREE.Color(16777215);this.program=function(a,c){};this.setValues(a)};THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype);THREE.SpriteCanvasMaterial.prototype.clone=function(){var a=new THREE.SpriteCanvasMaterial;THREE.Material.prototype.clone.call(this,a);a.color.copy(this.color);a.program=this.program;return a};THREE.ParticleCanvasMaterial=THREE.SpriteCanvasMaterial;THREE.Texture=function(a,b,c,d,e,f,g,h,k){this.id=THREE.TextureIdCount++;this.uuid=THREE.Math.generateUUID();this.name="";this.image=a;this.mipmaps=[];this.mapping=void 0!==b?b:new THREE.UVMapping;this.wrapS=void 0!==c?c:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==d?d:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==e?e:THREE.LinearFilter;this.minFilter=void 0!==f?f:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:THREE.RGBAFormat;this.type=void 0!==h?h:THREE.UnsignedByteType;
+this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this._needsUpdate=!1;this.onUpdate=null};
+THREE.Texture.prototype={constructor:THREE.Texture,get needsUpdate(){return this._needsUpdate},set needsUpdate(a){!0===a&&this.update();this._needsUpdate=a},clone:function(a){void 0===a&&(a=new THREE.Texture);a.image=this.image;a.mipmaps=this.mipmaps.slice(0);a.mapping=this.mapping;a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.format=this.format;a.type=this.type;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.generateMipmaps=
+this.generateMipmaps;a.premultiplyAlpha=this.premultiplyAlpha;a.flipY=this.flipY;a.unpackAlignment=this.unpackAlignment;return a},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,n){THREE.Texture.call(this,null,f,g,h,k,l,d,e,n);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.clone=function(){var a=new THREE.CompressedTexture;THREE.Texture.prototype.clone.call(this,a);return a};THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,n){THREE.Texture.call(this,null,f,g,h,k,l,d,e,n);this.image={data:a,width:b,height:c}};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.clone=function(){var a=new THREE.DataTexture;THREE.Texture.prototype.clone.call(this,a);return a};THREE.ParticleSystem=function(a,b){THREE.Object3D.call(this);this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.ParticleSystemMaterial({color:16777215*Math.random()});this.frustumCulled=this.sortParticles=!1};THREE.ParticleSystem.prototype=Object.create(THREE.Object3D.prototype);
+THREE.ParticleSystem.prototype.clone=function(a){void 0===a&&(a=new THREE.ParticleSystem(this.geometry,this.material));a.sortParticles=this.sortParticles;THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Line=function(a,b,c){THREE.Object3D.call(this);this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.LineBasicMaterial({color:16777215*Math.random()});this.type=void 0!==c?c:THREE.LineStrip};THREE.LineStrip=0;THREE.LinePieces=1;THREE.Line.prototype=Object.create(THREE.Object3D.prototype);THREE.Line.prototype.clone=function(a){void 0===a&&(a=new THREE.Line(this.geometry,this.material,this.type));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.geometry=void 0!==a?a:new THREE.Geometry;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random()});this.updateMorphTargets()};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);
+THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.morphTargets&&0<this.geometry.morphTargets.length){this.morphTargetBase=-1;this.morphTargetForcedOrder=[];this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var a=0,b=this.geometry.morphTargets.length;a<b;a++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[this.geometry.morphTargets[a].name]=a}};
+THREE.Mesh.prototype.getMorphTargetIndexByName=function(a){if(void 0!==this.morphTargetDictionary[a])return this.morphTargetDictionary[a];console.log("THREE.Mesh.getMorphTargetIndexByName: morph target "+a+" does not exist. Returning 0.");return 0};THREE.Mesh.prototype.clone=function(a,b){void 0===a&&(a=new THREE.Mesh(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a,b);return a};THREE.Bone=function(a){THREE.Object3D.call(this);this.skin=a;this.skinMatrix=new THREE.Matrix4;this.accumulatedSclWeight=this.accumulatedPosWeight=this.accumulatedRotWeight=0};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype);
+THREE.Bone.prototype.update=function(a,b){this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate)a?this.skinMatrix.multiplyMatrices(a,this.matrix):this.skinMatrix.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,b=!0,this.accumulatedSclWeight=this.accumulatedPosWeight=this.accumulatedRotWeight=0;for(var c=0,d=this.children.length;c<d;c++)this.children[c].update(this.skinMatrix,b)};THREE.Skeleton=function(a,b){this.useVertexTexture=void 0!==b?b:!0;this.bones=[];this.boneMatrices=[];var c,d,e,f,g;if(void 0!==a){for(var h=0;h<a.length;++h)d=a[h],e=d.pos,f=d.rotq,g=d.scl,c=this.addBone(),c.name=d.name,c.position.set(e[0],e[1],e[2]),c.quaternion.set(f[0],f[1],f[2],f[3]),void 0!==g?c.scale.set(g[0],g[1],g[2]):c.scale.set(1,1,1);for(h=0;h<a.length;++h)d=a[h],-1!==d.parent&&this.bones[d.parent].add(this.bones[h]);c=this.bones.length;this.useVertexTexture?(this.boneTextureHeight=this.boneTextureWidth=
+c=256<c?64:64<c?32:16<c?16:8,this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new THREE.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,THREE.RGBAFormat,THREE.FloatType),this.boneTexture.minFilter=THREE.NearestFilter,this.boneTexture.magFilter=THREE.NearestFilter,this.boneTexture.generateMipmaps=!1,this.boneTexture.flipY=!1):this.boneMatrices=new Float32Array(16*c)}};THREE.Skeleton.prototype=Object.create(THREE.Mesh.prototype);
+THREE.Skeleton.prototype.addBone=function(a){void 0===a&&(a=new THREE.Bone(this));this.bones.push(a);return a};THREE.Skeleton.prototype.calculateInverses=function(a){this.boneInverses=[];a=0;for(var b=this.bones.length;a<b;++a){var c=new THREE.Matrix4;c.getInverse(this.bones[a].skinMatrix);this.boneInverses.push(c)}};THREE.SkinnedMesh=function(a,b,c){THREE.Mesh.call(this,a,b);this.skeleton=new THREE.Skeleton(this.geometry&&this.geometry.bones,c);for(a=0;a<this.skeleton.bones.length;++a)b=this.skeleton.bones[a],void 0===b.parent&&this.add(b);this.identityMatrix=new THREE.Matrix4;this.pose()};THREE.SkinnedMesh.prototype=Object.create(THREE.Mesh.prototype);
+THREE.SkinnedMesh.prototype.updateMatrixWorld=function(){var a=new THREE.Matrix4;return function(b){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||b)this.parent?this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1;b=0;for(var c=this.children.length;b<c;b++){var d=this.children[b];d instanceof THREE.Bone?d.update(this.identityMatrix,!1):d.updateMatrixWorld(!0)}void 0===this.skeleton.boneInverses&&
+this.skeleton.calculateInverses();b=0;for(c=this.skeleton.bones.length;b<c;b++)a.multiplyMatrices(this.skeleton.bones[b].skinMatrix,this.skeleton.boneInverses[b]),a.flattenToArrayOffset(this.skeleton.boneMatrices,16*b);this.skeleton.useVertexTexture&&(this.skeleton.boneTexture.needsUpdate=!0)}}();THREE.SkinnedMesh.prototype.pose=function(){this.updateMatrixWorld(!0);this.normalizeSkinWeights()};
+THREE.SkinnedMesh.prototype.normalizeSkinWeights=function(){if(this.geometry instanceof THREE.Geometry)for(var a=0;a<this.geometry.skinIndices.length;a++){var b=this.geometry.skinWeights[a],c=1/b.lengthManhattan();Infinity!==c?b.multiplyScalar(c):b.set(1)}};THREE.SkinnedMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.SkinnedMesh(this.geometry,this.material,this.useVertexTexture));THREE.Mesh.prototype.clone.call(this,a);return a};THREE.MorphAnimMesh=function(a,b){THREE.Mesh.call(this,a,b);this.duration=1E3;this.mirroredLoop=!1;this.currentKeyframe=this.lastKeyframe=this.time=0;this.direction=1;this.directionBackwards=!1;this.setFrameRange(0,this.geometry.morphTargets.length-1)};THREE.MorphAnimMesh.prototype=Object.create(THREE.Mesh.prototype);THREE.MorphAnimMesh.prototype.setFrameRange=function(a,b){this.startKeyframe=a;this.endKeyframe=b;this.length=this.endKeyframe-this.startKeyframe+1};
+THREE.MorphAnimMesh.prototype.setDirectionForward=function(){this.direction=1;this.directionBackwards=!1};THREE.MorphAnimMesh.prototype.setDirectionBackward=function(){this.direction=-1;this.directionBackwards=!0};
+THREE.MorphAnimMesh.prototype.parseAnimations=function(){var a=this.geometry;a.animations||(a.animations={});for(var b,c=a.animations,d=/([a-z]+)(\d+)/,e=0,f=a.morphTargets.length;e<f;e++){var g=a.morphTargets[e].name.match(d);if(g&&1<g.length){g=g[1];c[g]||(c[g]={start:Infinity,end:-Infinity});var h=c[g];e<h.start&&(h.start=e);e>h.end&&(h.end=e);b||(b=g)}}a.firstAnimation=b};
+THREE.MorphAnimMesh.prototype.setAnimationLabel=function(a,b,c){this.geometry.animations||(this.geometry.animations={});this.geometry.animations[a]={start:b,end:c}};THREE.MorphAnimMesh.prototype.playAnimation=function(a,b){var c=this.geometry.animations[a];c?(this.setFrameRange(c.start,c.end),this.duration=(c.end-c.start)/b*1E3,this.time=0):console.warn("animation["+a+"] undefined")};
+THREE.MorphAnimMesh.prototype.updateAnimation=function(a){var b=this.duration/this.length;this.time+=this.direction*a;if(this.mirroredLoop){if(this.time>this.duration||0>this.time)this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),0>this.time&&(this.time=0,this.directionBackwards=!1)}else this.time%=this.duration,0>this.time&&(this.time+=this.duration);a=this.startKeyframe+THREE.Math.clamp(Math.floor(this.time/b),0,this.length-1);a!==this.currentKeyframe&&
+(this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a);b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b};
+THREE.MorphAnimMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.MorphAnimMesh(this.geometry,this.material));a.duration=this.duration;a.mirroredLoop=this.mirroredLoop;a.time=this.time;a.lastKeyframe=this.lastKeyframe;a.currentKeyframe=this.currentKeyframe;a.direction=this.direction;a.directionBackwards=this.directionBackwards;THREE.Mesh.prototype.clone.call(this,a);return a};THREE.LOD=function(){THREE.Object3D.call(this);this.objects=[]};THREE.LOD.prototype=Object.create(THREE.Object3D.prototype);THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);b=Math.abs(b);for(var c=0;c<this.objects.length&&!(b<this.objects[c].distance);c++);this.objects.splice(c,0,{distance:b,object:a});this.add(a)};THREE.LOD.prototype.getObjectForDistance=function(a){for(var b=1,c=this.objects.length;b<c&&!(a<this.objects[b].distance);b++);return this.objects[b-1].object};
+THREE.LOD.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c){if(1<this.objects.length){a.setFromMatrixPosition(c.matrixWorld);b.setFromMatrixPosition(this.matrixWorld);c=a.distanceTo(b);this.objects[0].object.visible=!0;for(var d=1,e=this.objects.length;d<e;d++)if(c>=this.objects[d].distance)this.objects[d-1].object.visible=!1,this.objects[d].object.visible=!0;else break;for(;d<e;d++)this.objects[d].object.visible=!1}}}();
+THREE.LOD.prototype.clone=function(a){void 0===a&&(a=new THREE.LOD);THREE.Object3D.prototype.clone.call(this,a);for(var b=0,c=this.objects.length;b<c;b++){var d=this.objects[b].object.clone();d.visible=0===b;a.addLevel(d,this.objects[b].distance)}return a};THREE.Sprite=function(){var a=new THREE.Float32Attribute(3,3);a.set([-0.5,-0.5,0,0.5,-0.5,0,0.5,0.5,0]);var b=new THREE.BufferGeometry;b.addAttribute("position",a);return function(a){THREE.Object3D.call(this);this.geometry=b;this.material=void 0!==a?a:new THREE.SpriteMaterial}}();THREE.Sprite.prototype=Object.create(THREE.Object3D.prototype);THREE.Sprite.prototype.updateMatrix=function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0};
+THREE.Sprite.prototype.clone=function(a){void 0===a&&(a=new THREE.Sprite(this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Particle=THREE.Sprite;THREE.Scene=function(){THREE.Object3D.call(this);this.overrideMaterial=this.fog=null;this.autoUpdate=!0;this.matrixAutoUpdate=!1;this.__lights=[];this.__objectsAdded=[];this.__objectsRemoved=[]};THREE.Scene.prototype=Object.create(THREE.Object3D.prototype);
+THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===this.__lights.indexOf(a)&&this.__lights.push(a),a.target&&void 0===a.target.parent&&this.add(a.target);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)){this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);-1!==b&&this.__objectsRemoved.splice(b,1)}this.dispatchEvent({type:"objectAdded",object:a});a.dispatchEvent({type:"addedToScene",scene:this});for(b=0;b<a.children.length;b++)this.__addObject(a.children[b])};
+THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){var b=this.__lights.indexOf(a);-1!==b&&this.__lights.splice(b,1);if(a.shadowCascadeArray)for(b=0;b<a.shadowCascadeArray.length;b++)this.__removeObject(a.shadowCascadeArray[b])}else a instanceof THREE.Camera||(this.__objectsRemoved.push(a),b=this.__objectsAdded.indexOf(a),-1!==b&&this.__objectsAdded.splice(b,1));this.dispatchEvent({type:"objectRemoved",object:a});a.dispatchEvent({type:"removedFromScene",scene:this});for(b=
+0;b<a.children.length;b++)this.__removeObject(a.children[b])};THREE.Scene.prototype.clone=function(a){void 0===a&&(a=new THREE.Scene);THREE.Object3D.prototype.clone.call(this,a);null!==this.fog&&(a.fog=this.fog.clone());null!==this.overrideMaterial&&(a.overrideMaterial=this.overrideMaterial.clone());a.autoUpdate=this.autoUpdate;a.matrixAutoUpdate=this.matrixAutoUpdate;return a};THREE.Fog=function(a,b,c){this.name="";this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.CanvasRenderer=function(a){function b(a,b,c,d){l(b);n(c);q(d);p(a.getStyle());A.stroke();qa.expandByScalar(2*b)}function c(a){s(a.getStyle());A.fill()}function d(a){e(a.target)}function e(a){var b=a.wrapS===THREE.RepeatWrapping,c=a.wrapT===THREE.RepeatWrapping,d=a.image,e=document.createElement("canvas");e.width=d.width;e.height=d.height;var f=e.getContext("2d");f.setTransform(1,0,0,-1,0,d.height);f.drawImage(d,0,0);Ga[a.id]=A.createPattern(e,!0===b&&!0===c?"repeat":!0===b&&!1===c?"repeat-x":
+!1===b&&!0===c?"repeat-y":"no-repeat")}function f(a,b,c,f,g,h,k,l,n,m,p,r,q){if(!(q instanceof THREE.DataTexture)){!1===q.hasEventListener("update",d)&&(void 0!==q.image&&0<q.image.width&&e(q),q.addEventListener("update",d));var t=Ga[q.id];if(void 0!==t){s(t);var t=q.offset.x/q.repeat.x,u=q.offset.y/q.repeat.y,w=q.image.width*q.repeat.x;q=q.image.height*q.repeat.y;k=(k+t)*w;l=(l+u)*q;c-=a;f-=b;g-=a;h-=b;n=(n+t)*w-k;m=(m+u)*q-l;p=(p+t)*w-k;r=(r+u)*q-l;q=n*r-p*m;0!==q&&(t=1/q,q=(r*c-m*g)*t,m=(r*f-m*
+h)*t,c=(n*g-p*c)*t,f=(n*h-p*f)*t,a=a-q*k-c*l,b=b-m*k-f*l,A.save(),A.transform(q,m,c,f,a,b),A.fill(),A.restore())}else s("rgba(0,0,0,1)"),A.fill()}}function g(a,b,c){var d=b.x-a.x,e=b.y-a.y,f=d*d+e*e;0!==f&&(c/=Math.sqrt(f),d*=c,e*=c,b.x+=d,b.y+=e,a.x-=d,a.y-=e)}function h(a){C!==a&&(C=A.globalAlpha=a)}function k(a){F!==a&&(a===THREE.NormalBlending?A.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?A.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(A.globalCompositeOperation=
+"darker"),F=a)}function l(a){E!==a&&(E=A.lineWidth=a)}function n(a){Q!==a&&(Q=A.lineCap=a)}function q(a){Y!==a&&(Y=A.lineJoin=a)}function p(a){z!==a&&(z=A.strokeStyle=a)}function s(a){H!==a&&(H=A.fillStyle=a)}function t(a,b){if(U!==a||la!==b)A.setLineDash([a,b]),U=a,la=b}console.log("THREE.CanvasRenderer",THREE.REVISION);var r=THREE.Math.smoothstep;a=a||{};var v=this,w,u,y,L=new THREE.Projector,x=void 0!==a.canvas?a.canvas:document.createElement("canvas"),N=x.width,J=x.height,B=Math.floor(N/2),K=
+Math.floor(J/2),A=x.getContext("2d",{alpha:!0===a.alpha}),G=new THREE.Color(0),D=0,C=1,F=0,z=null,H=null,E=null,Q=null,Y=null,U=null,la=0,W,R,I,da;new THREE.RenderableVertex;new THREE.RenderableVertex;var V,X,P,ga,wa,Ha,fa=new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;var za=new THREE.Color,Ia=new THREE.Color,Ea=new THREE.Color,Ga={},ha,Oa,Ra,Sa,Fa,ia,ma,ya=new THREE.Box2,Z=new THREE.Box2,qa=new THREE.Box2,ua=new THREE.Color,Ca=new THREE.Color,va=new THREE.Color,
+Da=new THREE.Vector3,Ja=new THREE.Vector3,ja=new THREE.Vector3,ra=new THREE.Matrix3;void 0===A.setLineDash&&(A.setLineDash=function(){});this.domElement=x;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.supportsVertexTextures=function(){};this.setFaceCulling=function(){};this.setSize=function(a,b,c){N=a*this.devicePixelRatio;
+J=b*this.devicePixelRatio;x.width=N;x.height=J;B=Math.floor(N/2);K=Math.floor(J/2);!1!==c&&(x.style.width=a+"px",x.style.height=b+"px");ya.min.set(-B,-K);ya.max.set(B,K);Z.min.set(-B,-K);Z.max.set(B,K);C=1;F=0;Y=Q=E=H=z=null;this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){A.setTransform(c*this.devicePixelRatio/N,0,0,-(d*this.devicePixelRatio)/J,a*this.devicePixelRatio,J-b*this.devicePixelRatio);A.translate(B,K)};this.setScissor=function(){};this.enableScissorTest=function(){};this.setClearColor=
+function(a,b){G.set(a);D=void 0!==b?b:1;Z.min.set(-B,-K);Z.max.set(B,K)};this.setClearColorHex=function(a,b){console.warn("DEPRECATED: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,b)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){!1===Z.empty()&&(Z.intersect(ya),Z.expandByScalar(2),1>D&&A.clearRect(Z.min.x|0,Z.min.y|0,Z.max.x-Z.min.x|0,Z.max.y-Z.min.y|0),0<D&&(k(THREE.NormalBlending),h(1),s("rgba("+Math.floor(255*G.r)+","+Math.floor(255*
+G.g)+","+Math.floor(255*G.b)+","+D+")"),A.fillRect(Z.min.x|0,Z.min.y|0,Z.max.x-Z.min.x|0,Z.max.y-Z.min.y|0)),Z.makeEmpty())};this.clearColor=function(){};this.clearDepth=function(){};this.clearStencil=function(){};this.render=function(a,x){if(!1===x instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0===this.autoClear&&this.clear();v.info.render.vertices=0;v.info.render.faces=0;w=L.projectScene(a,x,this.sortObjects,this.sortElements);
+u=w.elements;y=w.lights;W=x;ra.getNormalMatrix(x.matrixWorldInverse);ua.setRGB(0,0,0);Ca.setRGB(0,0,0);va.setRGB(0,0,0);for(var C=0,J=y.length;C<J;C++){var z=y[C],G=z.color;z instanceof THREE.AmbientLight?ua.add(G):z instanceof THREE.DirectionalLight?Ca.add(G):z instanceof THREE.PointLight&&va.add(G)}C=0;for(J=u.length;C<J;C++){var E=u[C],N=E.material;if(void 0!==N&&0!==N.opacity){qa.makeEmpty();if(E instanceof THREE.RenderableSprite){R=E;R.x*=B;R.y*=K;var z=R,H=E,G=N;h(G.opacity);k(G.blending);var m=
+H.scale.x*B,H=H.scale.y*K,E=0.5*Math.sqrt(m*m+H*H);qa.min.set(z.x-E,z.y-E);qa.max.set(z.x+E,z.y+E);if(G instanceof THREE.SpriteMaterial||G instanceof THREE.ParticleSystemMaterial){var D=G.map;if(null!==D){!1===D.hasEventListener("update",d)&&(void 0!==D.image&&0<D.image.width&&e(D),D.addEventListener("update",d));E=Ga[D.id];void 0!==E?s(E):s("rgba( 0, 0, 0, 1 )");var F=D.image,E=F.width*D.offset.x,N=F.height*D.offset.y,Q=F.width*D.repeat.x,D=F.height*D.repeat.y,F=m/Q,U=H/D;A.save();A.translate(z.x,
+z.y);0!==G.rotation&&A.rotate(G.rotation);A.translate(-m/2,-H/2);A.scale(F,U);A.translate(-E,-N);A.fillRect(E,N,Q,D)}else s(G.color.getStyle()),A.save(),A.translate(z.x,z.y),0!==G.rotation&&A.rotate(G.rotation),A.scale(m,-H),A.fillRect(-0.5,-0.5,1,1);A.restore()}else G instanceof THREE.SpriteCanvasMaterial&&(p(G.color.getStyle()),s(G.color.getStyle()),A.save(),A.translate(z.x,z.y),0!==G.rotation&&A.rotate(G.rotation),A.scale(m,H),G.program(A),A.restore())}else if(E instanceof THREE.RenderableLine){if(R=
+E.v1,I=E.v2,R.positionScreen.x*=B,R.positionScreen.y*=K,I.positionScreen.x*=B,I.positionScreen.y*=K,qa.setFromPoints([R.positionScreen,I.positionScreen]),!0===ya.isIntersectionBox(qa))if(z=R,G=I,m=E,H=N,h(H.opacity),k(H.blending),A.beginPath(),A.moveTo(z.positionScreen.x,z.positionScreen.y),A.lineTo(G.positionScreen.x,G.positionScreen.y),H instanceof THREE.LineBasicMaterial){l(H.linewidth);n(H.linecap);q(H.linejoin);if(H.vertexColors!==THREE.VertexColors)p(H.color.getStyle());else if(E=m.vertexColors[0].getStyle(),
+m=m.vertexColors[1].getStyle(),E===m)p(E);else{try{var Y=A.createLinearGradient(z.positionScreen.x,z.positionScreen.y,G.positionScreen.x,G.positionScreen.y);Y.addColorStop(0,E);Y.addColorStop(1,m)}catch(la){Y=E}p(Y)}A.stroke();qa.expandByScalar(2*H.linewidth)}else H instanceof THREE.LineDashedMaterial&&(l(H.linewidth),n(H.linecap),q(H.linejoin),p(H.color.getStyle()),t(H.dashSize,H.gapSize),A.stroke(),qa.expandByScalar(2*H.linewidth),t(null,null))}else if(E instanceof THREE.RenderableFace){R=E.v1;
+I=E.v2;da=E.v3;if(-1>R.positionScreen.z||1<R.positionScreen.z)continue;if(-1>I.positionScreen.z||1<I.positionScreen.z)continue;if(-1>da.positionScreen.z||1<da.positionScreen.z)continue;R.positionScreen.x*=B;R.positionScreen.y*=K;I.positionScreen.x*=B;I.positionScreen.y*=K;da.positionScreen.x*=B;da.positionScreen.y*=K;0<N.overdraw&&(g(R.positionScreen,I.positionScreen,N.overdraw),g(I.positionScreen,da.positionScreen,N.overdraw),g(da.positionScreen,R.positionScreen,N.overdraw));qa.setFromPoints([R.positionScreen,
+I.positionScreen,da.positionScreen]);if(!0===ya.isIntersectionBox(qa)){G=R;m=I;H=da;z=N;v.info.render.vertices+=3;v.info.render.faces++;h(z.opacity);k(z.blending);V=G.positionScreen.x;X=G.positionScreen.y;P=m.positionScreen.x;ga=m.positionScreen.y;wa=H.positionScreen.x;Ha=H.positionScreen.y;var N=V,Q=X,D=P,F=ga,U=wa,Db=Ha;A.beginPath();A.moveTo(N,Q);A.lineTo(D,F);A.lineTo(U,Db);A.closePath();if((z instanceof THREE.MeshLambertMaterial||z instanceof THREE.MeshPhongMaterial)&&null===z.map){za.copy(z.color);
+Ia.copy(z.emissive);z.vertexColors===THREE.FaceColors&&za.multiply(E.color);fa.copy(ua);Ja.copy(G.positionWorld).add(m.positionWorld).add(H.positionWorld).divideScalar(3);G=Ja;m=E.normalModel;H=fa;E=0;for(N=y.length;E<N;E++)Q=y[E],Ea.copy(Q.color),Q instanceof THREE.DirectionalLight?(D=Da.setFromMatrixPosition(Q.matrixWorld).normalize(),F=m.dot(D),0>=F||(F*=Q.intensity,H.add(Ea.multiplyScalar(F)))):Q instanceof THREE.PointLight&&(D=Da.setFromMatrixPosition(Q.matrixWorld),F=m.dot(Da.subVectors(D,G).normalize()),
+0>=F||(F*=0==Q.distance?1:1-Math.min(G.distanceTo(D)/Q.distance,1),0!=F&&(F*=Q.intensity,H.add(Ea.multiplyScalar(F)))));fa.multiply(za).add(Ia);!0===z.wireframe?b(fa,z.wireframeLinewidth,z.wireframeLinecap,z.wireframeLinejoin):c(fa)}else z instanceof THREE.MeshBasicMaterial||z instanceof THREE.MeshLambertMaterial||z instanceof THREE.MeshPhongMaterial?null!==z.map?z.map.mapping instanceof THREE.UVMapping&&(ha=E.uvs,f(V,X,P,ga,wa,Ha,ha[0].x,ha[0].y,ha[1].x,ha[1].y,ha[2].x,ha[2].y,z.map)):null!==z.envMap?
+z.envMap.mapping instanceof THREE.SphericalReflectionMapping?(ja.copy(E.vertexNormalsModel[0]).applyMatrix3(ra),Oa=0.5*ja.x+0.5,Ra=0.5*ja.y+0.5,ja.copy(E.vertexNormalsModel[1]).applyMatrix3(ra),Sa=0.5*ja.x+0.5,Fa=0.5*ja.y+0.5,ja.copy(E.vertexNormalsModel[2]).applyMatrix3(ra),ia=0.5*ja.x+0.5,ma=0.5*ja.y+0.5,f(V,X,P,ga,wa,Ha,Oa,Ra,Sa,Fa,ia,ma,z.envMap)):z.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(ja.copy(E.vertexNormalsModel[0]).applyMatrix3(ra),Oa=-0.5*ja.x+0.5,Ra=-0.5*ja.y+0.5,
+ja.copy(E.vertexNormalsModel[1]).applyMatrix3(ra),Sa=-0.5*ja.x+0.5,Fa=-0.5*ja.y+0.5,ja.copy(E.vertexNormalsModel[2]).applyMatrix3(ra),ia=-0.5*ja.x+0.5,ma=-0.5*ja.y+0.5,f(V,X,P,ga,wa,Ha,Oa,Ra,Sa,Fa,ia,ma,z.envMap)):(fa.copy(z.color),z.vertexColors===THREE.FaceColors&&fa.multiply(E.color),!0===z.wireframe?b(fa,z.wireframeLinewidth,z.wireframeLinecap,z.wireframeLinejoin):c(fa)):(z instanceof THREE.MeshDepthMaterial?fa.r=fa.g=fa.b=1-r(G.positionScreen.z*G.positionScreen.w,W.near,W.far):z instanceof THREE.MeshNormalMaterial?
+(ja.copy(E.normalModel).applyMatrix3(ra),fa.setRGB(ja.x,ja.y,ja.z).multiplyScalar(0.5).addScalar(0.5)):fa.setRGB(1,1,1),!0===z.wireframe?b(fa,z.wireframeLinewidth,z.wireframeLinecap,z.wireframeLinejoin):c(fa))}}Z.union(qa)}}}}};THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tconst float LOG2 = 1.442695;\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",
+envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\tuniform samplerCube envMap;\n\tuniform float flipEnvMap;\n\tuniform int combine;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\t\tuniform bool useRefract;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\n\tvec3 reflectVec;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\n\t\tif ( useRefract ) {\n\t\t\treflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t} else { \n\t\t\treflectVec = reflect( cameraToVertex, worldNormal );\n\t\t}\n\t#else\n\t\treflectVec = vReflect;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\t\tvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#endif\n\t#ifdef GAMMA_INPUT\n\t\tcubeColor.xyz *= cubeColor.xyz;\n\t#endif\n\tif ( combine == 1 ) {\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n\t} else if ( combine == 2 ) {\n\t\tgl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n\t} else {\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n\t}\n#endif",
+envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\n\tvarying vec3 vReflect;\n\tuniform float refractionRatio;\n\tuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#endif\n\t#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\t#endif\n\t#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t#endif\n#endif",
+envmap_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\n\tvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\n\tworldNormal = normalize( worldNormal );\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\tif ( useRefract ) {\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t} else {\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t}\n#endif",
+map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\n\tgl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\n#endif",map_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif",map_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",
+map_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\t#ifdef GAMMA_INPUT\n\t\ttexelColor.xyz *= texelColor.xyz;\n\t#endif\n\tgl_FragColor = gl_FragColor * texelColor;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tvarying vec2 vUv2;\n\tuniform sampler2D lightMap;\n#endif",lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\n\tvarying vec2 vUv2;\n#endif",
+lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tgl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\n\tvUv2 = uv2;\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",
+normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",
+specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",lights_lambert_pars_vertex:"uniform vec3 ambient;\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\n\tuniform vec3 wrapRGB;\n#endif",
+lights_lambert_vertex:"vLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\ntransformedNormal = normalize( transformedNormal );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\n\tvec3 dirVector = normalize( lDirection.xyz );\n\tfloat dotProduct = dot( transformedNormal, dirVector );\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\t#ifdef DOUBLE_SIDED\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\t\t#ifdef WRAP_AROUND\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t#endif\n\t#endif\n\t#ifdef WRAP_AROUND\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n\t\t#endif\n\t#endif\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n\t#ifdef DOUBLE_SIDED\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n\t#endif\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\t\tfloat lDistance = 1.0;\n\t\tif ( pointLightDistance[ i ] > 0.0 )\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\n\t\tlVector = normalize( lVector );\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\t\t\t#ifdef WRAP_AROUND\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t#endif\n\t\t#endif\n\t\t#ifdef WRAP_AROUND\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n\t\t\t#endif\n\t\t#endif\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n\t\t#endif\n\t}\n#endif\n#if MAX_SPOT_LIGHTS > 0\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\t\t\tspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n\t\t\tfloat lDistance = 1.0;\n\t\t\tif ( spotLightDistance[ i ] > 0.0 )\n\t\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\n\t\t\tlVector = normalize( lVector );\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\t\t\t\t#ifdef WRAP_AROUND\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t\t#endif\n\t\t\t#endif\n\t\t\t#ifdef WRAP_AROUND\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n\t\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n\t\t\t\t#endif\n\t\t\t#endif\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n\t\t\t#ifdef DOUBLE_SIDED\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n\t\t\t#endif\n\t\t}\n\t}\n#endif\n#if MAX_HEMI_LIGHTS > 0\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\n\t\tvec3 lVector = normalize( lDirection.xyz );\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\t\t#endif\n\t}\n#endif\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n#ifdef DOUBLE_SIDED\n\tvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n#endif",
+lights_phong_pars_vertex:"#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\tvarying vec3 vWorldPosition;\n#endif",lights_phong_vertex:"#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\tvWorldPosition = worldPosition.xyz;\n#endif",lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )\n\tvarying vec3 vWorldPosition;\n#endif\n#ifdef WRAP_AROUND\n\tuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",
+lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#ifdef DOUBLE_SIDED\n\tnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n#if MAX_POINT_LIGHTS > 0\n\tvec3 pointDiffuse = vec3( 0.0 );\n\tvec3 pointSpecular = vec3( 0.0 );\n\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\t\tfloat lDistance = 1.0;\n\t\tif ( pointLightDistance[ i ] > 0.0 )\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\n\t\tlVector = normalize( lVector );\n\t\tfloat dotProduct = dot( normal, lVector );\n\t\t#ifdef WRAP_AROUND\n\t\t\tfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n\t\t#else\n\t\t\tfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n\t\t#endif\n\t\tpointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\n\t\tvec3 pointHalfVector = normalize( lVector + viewPosition );\n\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\n\t\tfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );\n\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\n\t}\n#endif\n#if MAX_SPOT_LIGHTS > 0\n\tvec3 spotDiffuse = vec3( 0.0 );\n\tvec3 spotSpecular = vec3( 0.0 );\n\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz + vViewPosition.xyz;\n\t\tfloat lDistance = 1.0;\n\t\tif ( spotLightDistance[ i ] > 0.0 )\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\n\t\tlVector = normalize( lVector );\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\t\t\tspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n\t\t\tfloat dotProduct = dot( normal, lVector );\n\t\t\t#ifdef WRAP_AROUND\n\t\t\t\tfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n\t\t\t#else\n\t\t\t\tfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n\t\t\t#endif\n\t\t\tspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\n\t\t\tvec3 spotHalfVector = normalize( lVector + viewPosition );\n\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\n\t\t\tfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n\t\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );\n\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\n\t\t}\n\t}\n#endif\n#if MAX_DIR_LIGHTS > 0\n\tvec3 dirDiffuse = vec3( 0.0 );\n\tvec3 dirSpecular = vec3( 0.0 );\n\tfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\n\t\tvec3 dirVector = normalize( lDirection.xyz );\n\t\tfloat dotProduct = dot( normal, dirVector );\n\t\t#ifdef WRAP_AROUND\n\t\t\tfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\n\t\t\tfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\n\t\t\tvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n\t\t#else\n\t\t\tfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n\t\t#endif\n\t\tdirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\n\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\n\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\n\t\tfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );\n\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n\t}\n#endif\n#if MAX_HEMI_LIGHTS > 0\n\tvec3 hemiDiffuse = vec3( 0.0 );\n\tvec3 hemiSpecular = vec3( 0.0 );\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\n\t\tvec3 lVector = normalize( lDirection.xyz );\n\t\tfloat dotProduct = dot( normal, lVector );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\t\themiDiffuse += diffuse * hemiColor;\n\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\n\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\n\t\tfloat hemiSpecularWeightSky = specularStrength * max( pow( hemiDotNormalHalfSky, shininess ), 0.0 );\n\t\tvec3 lVectorGround = -lVector;\n\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\n\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\n\t\tfloat hemiSpecularWeightGround = specularStrength * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );\n\t\tfloat dotProductGround = dot( normal, lVectorGround );\n\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );\n\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );\n\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n\t}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\n\ttotalDiffuse += dirDiffuse;\n\ttotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\n\ttotalDiffuse += hemiDiffuse;\n\ttotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\n\ttotalDiffuse += pointDiffuse;\n\ttotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\n\ttotalDiffuse += spotDiffuse;\n\ttotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\n\tgl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\n\tgl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif",
+color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tgl_FragColor = gl_FragColor * vec4( vColor, 1.0 );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\t#ifdef GAMMA_INPUT\n\t\tvColor = color * color;\n\t#else\n\t\tvColor = color;\n\t#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneGlobalMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",
+skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\t#ifdef USE_MORPHTARGETS\n\tvec4 skinVertex = vec4( morphed, 1.0 );\n\t#else\n\tvec4 skinVertex = vec4( position, 1.0 );\n\t#endif\n\tvec4 skinned = boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n#endif",
+morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\tvec3 morphed = vec3( 0.0 );\n\tmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\tmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\tmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\tmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\tmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\tmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\tmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\tmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n\tmorphed += position;\n#endif",
+default_vertex:"vec4 mvPosition;\n#ifdef USE_SKINNING\n\tmvPosition = modelViewMatrix * skinned;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\n\tmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\n\tmvPosition = modelViewMatrix * vec4( position, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tvec3 morphedNormal = vec3( 0.0 );\n\tmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n\tmorphedNormal += normal;\n#endif",
+skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = skinWeight.x * boneMatX;\n\tskinMatrix \t+= skinWeight.y * boneMatY;\n\tskinMatrix \t+= skinWeight.z * boneMatZ;\n\tskinMatrix \t+= skinWeight.w * boneMatW;\n\t#ifdef USE_MORPHNORMALS\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n\t#else\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n\t#endif\n#endif",defaultnormal_vertex:"vec3 objectNormal;\n#ifdef USE_SKINNING\n\tobjectNormal = skinnedNormal.xyz;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\n\tobjectNormal = morphedNormal;\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\n\tobjectNormal = normal;\n#endif\n#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;",
+shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\tuniform sampler2D shadowMap[ MAX_SHADOWS ];\n\tuniform vec2 shadowMapSize[ MAX_SHADOWS ];\n\tuniform float shadowDarkness[ MAX_SHADOWS ];\n\tuniform float shadowBias[ MAX_SHADOWS ];\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\tfloat unpackDepth( const in vec4 rgba_depth ) {\n\t\tconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n\t\tfloat depth = dot( rgba_depth, bit_shift );\n\t\treturn depth;\n\t}\n#endif",
+shadowmap_fragment:"#ifdef USE_SHADOWMAP\n\t#ifdef SHADOWMAP_DEBUG\n\t\tvec3 frustumColors[3];\n\t\tfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\n\t\tfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\n\t\tfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n\t#endif\n\t#ifdef SHADOWMAP_CASCADE\n\t\tint inFrustumCount = 0;\n\t#endif\n\tfloat fDepth;\n\tvec3 shadowColor = vec3( 1.0 );\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\t\tvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\t#ifdef SHADOWMAP_CASCADE\n\t\t\tinFrustumCount += int( inFrustum );\n\t\t\tbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n\t\t#else\n\t\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\t#endif\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t\tshadowCoord.z += shadowBias[ i ];\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\t\tfloat shadow = 0.0;\n\t\t\t\tconst float shadowDelta = 1.0 / 9.0;\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\t\t\t\tfloat dx0 = -1.25 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.25 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.25 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.25 * yPixelOffset;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\t\t\t\tif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\t\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\t\tfloat shadow = 0.0;\n\t\t\t\tfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\n\t\t\t\tfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\n\t\t\t\tfloat dx0 = -1.0 * xPixelOffset;\n\t\t\t\tfloat dy0 = -1.0 * yPixelOffset;\n\t\t\t\tfloat dx1 = 1.0 * xPixelOffset;\n\t\t\t\tfloat dy1 = 1.0 * yPixelOffset;\n\t\t\t\tmat3 shadowKernel;\n\t\t\t\tmat3 depthKernel;\n\t\t\t\tdepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\n\t\t\t\tdepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\n\t\t\t\tdepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\n\t\t\t\tdepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\n\t\t\t\tdepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\n\t\t\t\tdepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\n\t\t\t\tdepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\n\t\t\t\tdepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\n\t\t\t\tdepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\n\t\t\t\tvec3 shadowZ = vec3( shadowCoord.z );\n\t\t\t\tshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\n\t\t\t\tshadowKernel[0] *= vec3(0.25);\n\t\t\t\tshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\n\t\t\t\tshadowKernel[1] *= vec3(0.25);\n\t\t\t\tshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\n\t\t\t\tshadowKernel[2] *= vec3(0.25);\n\t\t\t\tvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\n\t\t\t\tshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\n\t\t\t\tshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\n\t\t\t\tvec4 shadowValues;\n\t\t\t\tshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\n\t\t\t\tshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\n\t\t\t\tshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\n\t\t\t\tshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\n\t\t\t\tshadow = dot( shadowValues, vec4( 1.0 ) );\n\t\t\t\tshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n\t\t\t#else\n\t\t\t\tvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\n\t\t\t\tfloat fDepth = unpackDepth( rgbaDepth );\n\t\t\t\tif ( fDepth < shadowCoord.z )\n\t\t\t\t\tshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n\t\t\t#endif\n\t\t}\n\t\t#ifdef SHADOWMAP_DEBUG\n\t\t\t#ifdef SHADOWMAP_CASCADE\n\t\t\t\tif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\n\t\t\t#else\n\t\t\t\tif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\n\t\t\t#endif\n\t\t#endif\n\t}\n\t#ifdef GAMMA_OUTPUT\n\t\tshadowColor *= shadowColor;\n\t#endif\n\tgl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif",
+shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\tvarying vec4 vShadowCoord[ MAX_SHADOWS ];\n\tuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\t}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\n\tgl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",
+logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max(1e-6, gl_Position.w + 1.0)) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\t#extension GL_EXT_frag_depth : enable\n\t\tvarying float vFragDepth;\n\t#endif\n#endif",logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif"};THREE.UniformsUtils={merge:function(a){var b,c,d,e={};for(b=0;b<a.length;b++)for(c in d=this.clone(a[b]),d)e[c]=d[c];return e},clone:function(a){var b,c,d,e={};for(b in a)for(c in e[b]={},a[b])d=a[b][c],e[b][c]=d instanceof THREE.Color||d instanceof THREE.Vector2||d instanceof THREE.Vector3||d instanceof THREE.Vector4||d instanceof THREE.Matrix4||d instanceof THREE.Texture?d.clone():d instanceof Array?d.slice():d;return e}};THREE.UniformsLib={common:{diffuse:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},map:{type:"t",value:null},offsetRepeat:{type:"v4",value:new THREE.Vector4(0,0,1,1)},lightMap:{type:"t",value:null},specularMap:{type:"t",value:null},envMap:{type:"t",value:null},flipEnvMap:{type:"f",value:-1},useRefract:{type:"i",value:0},reflectivity:{type:"f",value:1},refractionRatio:{type:"f",value:0.98},combine:{type:"i",value:0},morphTargetInfluences:{type:"f",value:0}},bump:{bumpMap:{type:"t",
+value:null},bumpScale:{type:"f",value:1}},normalmap:{normalMap:{type:"t",value:null},normalScale:{type:"v2",value:new THREE.Vector2(1,1)}},fog:{fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}},lights:{ambientLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]},directionalLightColor:{type:"fv",value:[]},hemisphereLightDirection:{type:"fv",value:[]},hemisphereLightSkyColor:{type:"fv",
+value:[]},hemisphereLightGroundColor:{type:"fv",value:[]},pointLightColor:{type:"fv",value:[]},pointLightPosition:{type:"fv",value:[]},pointLightDistance:{type:"fv1",value:[]},spotLightColor:{type:"fv",value:[]},spotLightPosition:{type:"fv",value:[]},spotLightDirection:{type:"fv",value:[]},spotLightDistance:{type:"fv1",value:[]},spotLightAngleCos:{type:"fv1",value:[]},spotLightExponent:{type:"fv1",value:[]}},particle:{psColor:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},size:{type:"f",
+value:1},scale:{type:"f",value:1},map:{type:"t",value:null},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}},shadowmap:{shadowMap:{type:"tv",value:[]},shadowMapSize:{type:"v2v",value:[]},shadowBias:{type:"fv1",value:[]},shadowDarkness:{type:"fv1",value:[]},shadowMatrix:{type:"m4v",value:[]}}};THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,THREE.UniformsLib.shadowmap]),vertexShader:[THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,
+THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.skinbase_vertex,"\t#ifdef USE_ENVMAP",THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,"\t#endif",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),
+fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_fragment,
+THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{ambient:{type:"c",value:new THREE.Color(16777215)},
+emissive:{type:"c",value:new THREE.Color(0)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),vertexShader:["#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif",THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_lambert_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,
+THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,
+THREE.ShaderChunk.lights_lambert_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,
+"void main() {\n\tgl_FragColor = vec4( vec3( 1.0 ), opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,"\t#ifdef DOUBLE_SIDED\n\t\tif ( gl_FrontFacing )\n\t\t\tgl_FragColor.xyz *= vLightFront;\n\t\telse\n\t\t\tgl_FragColor.xyz *= vLightBack;\n\t#else\n\t\tgl_FragColor.xyz *= vLightFront;\n\t#endif",THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,
+THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.bump,THREE.UniformsLib.normalmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{ambient:{type:"c",value:new THREE.Color(16777215)},emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c",value:new THREE.Color(1118481)},shininess:{type:"f",value:30},wrapRGB:{type:"v3",
+value:new THREE.Vector3(1,1,1)}}]),vertexShader:["#define PHONG\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_phong_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,
+THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,"\tvNormal = normalize( transformedNormal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"\tvViewPosition = -mvPosition.xyz;",THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,
+THREE.ShaderChunk.lights_phong_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform vec3 ambient;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.lights_phong_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,
+THREE.ShaderChunk.bumpmap_pars_fragment,THREE.ShaderChunk.normalmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( vec3( 1.0 ), opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,
+THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.particle,THREE.UniformsLib.shadowmap]),vertexShader:["uniform float size;\nuniform float scale;",THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\tgl_Position = projectionMatrix * mvPosition;",
+THREE.ShaderChunk.logdepthbuf_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.map_particle_fragment,
+THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:["uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;",THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,
+"void main() {",THREE.ShaderChunk.color_vertex,"\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;",THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,
+"void main() {\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tgl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.logdepthbuf_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f",value:1}},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.morphtarget_vertex,
+THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float mNear;\nuniform float mFar;\nuniform float opacity;",THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\tfloat color = 1.0 - smoothstep( mNear, mFar, depth );\n\tgl_FragColor = vec4( vec3( color ), opacity );\n}"].join("\n")},
+normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvNormal = normalize( normalMatrix * normal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vNormal;",THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );",
+THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},normalmap:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i",value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null},tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},
+tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new THREE.Vector2(1,1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},diffuse:{type:"c",value:new THREE.Color(16777215)},specular:{type:"c",value:new THREE.Color(1118481)},ambient:{type:"c",value:new THREE.Color(16777215)},shininess:{type:"f",value:30},opacity:{type:"f",value:1},useRefract:{type:"i",value:0},refractionRatio:{type:"f",value:0.98},reflectivity:{type:"f",value:0.5},uOffset:{type:"v2",value:new THREE.Vector2(0,
+0)},uRepeat:{type:"v2",value:new THREE.Vector2(1,1)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 ambient;\nuniform vec3 diffuse;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\nuniform bool enableDiffuse;\nuniform bool enableSpecular;\nuniform bool enableAO;\nuniform bool enableReflection;\nuniform sampler2D tDiffuse;\nuniform sampler2D tNormal;\nuniform sampler2D tSpecular;\nuniform sampler2D tAO;\nuniform samplerCube tCube;\nuniform vec2 uNormalScale;\nuniform bool useRefract;\nuniform float refractionRatio;\nuniform float reflectivity;\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\n\tuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\n\tuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\n\tuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\n\tuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\n\tuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n\tuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n\tuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\n\tuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\n\tuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n\tuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\n\tuniform vec3 wrapRGB;\n#endif\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;",
+THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\tgl_FragColor = vec4( vec3( 1.0 ), opacity );\n\tvec3 specularTex = vec3( 1.0 );\n\tvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\n\tnormalTex.xy *= uNormalScale;\n\tnormalTex = normalize( normalTex );\n\tif( enableDiffuse ) {\n\t\t#ifdef GAMMA_INPUT\n\t\t\tvec4 texelColor = texture2D( tDiffuse, vUv );\n\t\t\ttexelColor.xyz *= texelColor.xyz;\n\t\t\tgl_FragColor = gl_FragColor * texelColor;\n\t\t#else\n\t\t\tgl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n\t\t#endif\n\t}\n\tif( enableAO ) {\n\t\t#ifdef GAMMA_INPUT\n\t\t\tvec4 aoColor = texture2D( tAO, vUv );\n\t\t\taoColor.xyz *= aoColor.xyz;\n\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n\t\t#else\n\t\t\tgl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n\t\t#endif\n\t}\n\tif( enableSpecular )\n\t\tspecularTex = texture2D( tSpecular, vUv ).xyz;\n\tmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\n\tvec3 finalNormal = tsb * normalTex;\n\t#ifdef FLIP_SIDED\n\t\tfinalNormal = -finalNormal;\n\t#endif\n\tvec3 normal = normalize( finalNormal );\n\tvec3 viewPosition = normalize( vViewPosition );\n\t#if MAX_POINT_LIGHTS > 0\n\t\tvec3 pointDiffuse = vec3( 0.0 );\n\t\tvec3 pointSpecular = vec3( 0.0 );\n\t\tfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\t\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\t\tvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\n\t\t\tfloat pointDistance = 1.0;\n\t\t\tif ( pointLightDistance[ i ] > 0.0 )\n\t\t\t\tpointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\n\t\t\tpointVector = normalize( pointVector );\n\t\t\t#ifdef WRAP_AROUND\n\t\t\t\tfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\n\t\t\t\tfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\n\t\t\t\tvec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n\t\t\t#else\n\t\t\t\tfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n\t\t\t#endif\n\t\t\tpointDiffuse += pointDistance * pointLightColor[ i ] * diffuse * pointDiffuseWeight;\n\t\t\tvec3 pointHalfVector = normalize( pointVector + viewPosition );\n\t\t\tfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\n\t\t\tfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n\t\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( pointVector, pointHalfVector ), 5.0 );\n\t\t\tpointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\n\t\t}\n\t#endif\n\t#if MAX_SPOT_LIGHTS > 0\n\t\tvec3 spotDiffuse = vec3( 0.0 );\n\t\tvec3 spotSpecular = vec3( 0.0 );\n\t\tfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\t\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\t\tvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\n\t\t\tfloat spotDistance = 1.0;\n\t\t\tif ( spotLightDistance[ i ] > 0.0 )\n\t\t\t\tspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\n\t\t\tspotVector = normalize( spotVector );\n\t\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\n\t\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\t\t\t\tspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n\t\t\t\t#ifdef WRAP_AROUND\n\t\t\t\t\tfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\n\t\t\t\t\tfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\n\t\t\t\t\tvec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n\t\t\t\t#else\n\t\t\t\t\tfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\n\t\t\t\t#endif\n\t\t\t\tspotDiffuse += spotDistance * spotLightColor[ i ] * diffuse * spotDiffuseWeight * spotEffect;\n\t\t\t\tvec3 spotHalfVector = normalize( spotVector + viewPosition );\n\t\t\t\tfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\n\t\t\t\tfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n\t\t\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( spotVector, spotHalfVector ), 5.0 );\n\t\t\t\tspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\n\t\t\t}\n\t\t}\n\t#endif\n\t#if MAX_DIR_LIGHTS > 0\n\t\tvec3 dirDiffuse = vec3( 0.0 );\n\t\tvec3 dirSpecular = vec3( 0.0 );\n\t\tfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\n\t\t\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\n\t\t\tvec3 dirVector = normalize( lDirection.xyz );\n\t\t\t#ifdef WRAP_AROUND\n\t\t\t\tfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\n\t\t\t\tfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\n\t\t\t\tvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n\t\t\t#else\n\t\t\t\tfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n\t\t\t#endif\n\t\t\tdirDiffuse += directionalLightColor[ i ] * diffuse * dirDiffuseWeight;\n\t\t\tvec3 dirHalfVector = normalize( dirVector + viewPosition );\n\t\t\tfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\n\t\t\tfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n\t\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\t\tvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\n\t\t\tdirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n\t\t}\n\t#endif\n\t#if MAX_HEMI_LIGHTS > 0\n\t\tvec3 hemiDiffuse = vec3( 0.0 );\n\t\tvec3 hemiSpecular = vec3( 0.0 );\n\t\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\t\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\n\t\t\tvec3 lVector = normalize( lDirection.xyz );\n\t\t\tfloat dotProduct = dot( normal, lVector );\n\t\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\t\tvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\t\t\themiDiffuse += diffuse * hemiColor;\n\t\t\tvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\n\t\t\tfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\n\t\t\tfloat hemiSpecularWeightSky = specularTex.r * max( pow( hemiDotNormalHalfSky, shininess ), 0.0 );\n\t\t\tvec3 lVectorGround = -lVector;\n\t\t\tvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\n\t\t\tfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\n\t\t\tfloat hemiSpecularWeightGround = specularTex.r * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );\n\t\t\tfloat dotProductGround = dot( normal, lVectorGround );\n\t\t\tfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\n\t\t\tvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\n\t\t\tvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\n\t\t\themiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n\t\t}\n\t#endif\n\tvec3 totalDiffuse = vec3( 0.0 );\n\tvec3 totalSpecular = vec3( 0.0 );\n\t#if MAX_DIR_LIGHTS > 0\n\t\ttotalDiffuse += dirDiffuse;\n\t\ttotalSpecular += dirSpecular;\n\t#endif\n\t#if MAX_HEMI_LIGHTS > 0\n\t\ttotalDiffuse += hemiDiffuse;\n\t\ttotalSpecular += hemiSpecular;\n\t#endif\n\t#if MAX_POINT_LIGHTS > 0\n\t\ttotalDiffuse += pointDiffuse;\n\t\ttotalSpecular += pointSpecular;\n\t#endif\n\t#if MAX_SPOT_LIGHTS > 0\n\t\ttotalDiffuse += spotDiffuse;\n\t\ttotalSpecular += spotSpecular;\n\t#endif\n\t#ifdef METAL\n\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\n\t#else\n\t\tgl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n\t#endif\n\tif ( enableReflection ) {\n\t\tvec3 vReflect;\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tif ( useRefract ) {\n\t\t\tvReflect = refract( cameraToVertex, normal, refractionRatio );\n\t\t} else {\n\t\t\tvReflect = reflect( cameraToVertex, normal );\n\t\t}\n\t\tvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n\t\t#ifdef GAMMA_INPUT\n\t\t\tcubeColor.xyz *= cubeColor.xyz;\n\t\t#endif\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * reflectivity );\n\t}",
+THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\nuniform bool enableDisplacement;\n#ifdef VERTEX_TEXTURES\n\tuniform sampler2D tDisplacement;\n\tuniform float uDisplacementScale;\n\tuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;",
+THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,"\t#ifdef USE_SKINNING\n\t\tvNormal = normalize( normalMatrix * skinnedNormal.xyz );\n\t\tvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\n\t\tvTangent = normalize( normalMatrix * skinnedTangent.xyz );\n\t#else\n\t\tvNormal = normalize( normalMatrix * normal );\n\t\tvTangent = normalize( normalMatrix * tangent.xyz );\n\t#endif\n\tvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\n\tvUv = uv * uRepeat + uOffset;\n\tvec3 displacedPosition;\n\t#ifdef VERTEX_TEXTURES\n\t\tif ( enableDisplacement ) {\n\t\t\tvec3 dv = texture2D( tDisplacement, uv ).xyz;\n\t\t\tfloat df = uDisplacementScale * dv.x + uDisplacementBias;\n\t\t\tdisplacedPosition = position + normalize( normal ) * df;\n\t\t} else {\n\t\t\t#ifdef USE_SKINNING\n\t\t\t\tvec4 skinVertex = vec4( position, 1.0 );\n\t\t\t\tvec4 skinned = boneMatX * skinVertex * skinWeight.x;\n\t\t\t\tskinned \t += boneMatY * skinVertex * skinWeight.y;\n\t\t\t\tskinned \t += boneMatZ * skinVertex * skinWeight.z;\n\t\t\t\tskinned \t += boneMatW * skinVertex * skinWeight.w;\n\t\t\t\tdisplacedPosition = skinned.xyz;\n\t\t\t#else\n\t\t\t\tdisplacedPosition = position;\n\t\t\t#endif\n\t\t}\n\t#else\n\t\t#ifdef USE_SKINNING\n\t\t\tvec4 skinVertex = vec4( position, 1.0 );\n\t\t\tvec4 skinned = boneMatX * skinVertex * skinWeight.x;\n\t\t\tskinned \t += boneMatY * skinVertex * skinWeight.y;\n\t\t\tskinned \t += boneMatZ * skinVertex * skinWeight.z;\n\t\t\tskinned \t += boneMatW * skinVertex * skinWeight.w;\n\t\t\tdisplacedPosition = skinned.xyz;\n\t\t#else\n\t\t\tdisplacedPosition = position;\n\t\t#endif\n\t#endif\n\tvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\n\tvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;",
+THREE.ShaderChunk.logdepthbuf_vertex,"\tvWorldPosition = worldPosition.xyz;\n\tvViewPosition = -mvPosition.xyz;\n\t#ifdef USE_SHADOWMAP\n\t\tfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n\t\t\tvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n\t\t}\n\t#endif\n}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:["varying vec3 vWorldPosition;",THREE.ShaderChunk.logdepthbuf_pars_vertex,"void main() {\n\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\tvWorldPosition = worldPosition.xyz;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
+THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;",THREE.ShaderChunk.logdepthbuf_pars_fragment,"void main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",THREE.ShaderChunk.logdepthbuf_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.logdepthbuf_pars_vertex,
+"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\n\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\n\tres -= res.xxyz * bit_mask;\n\treturn res;\n}\nvoid main() {",
+THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}};THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type?g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=m.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}
+function c(a,b){var c=b.geometry,g=a.faces3,h=3*g.length,k=1*g.length,l=3*g.length,g=d(b,a),n=f(g),p=e(g),q=g.vertexColors?g.vertexColors:!1;a.__vertexArray=new Float32Array(3*h);p&&(a.__normalArray=new Float32Array(3*h));c.hasTangents&&(a.__tangentArray=new Float32Array(4*h));q&&(a.__colorArray=new Float32Array(3*h));n&&(0<c.faceVertexUvs.length&&(a.__uvArray=new Float32Array(2*h)),1<c.faceVertexUvs.length&&(a.__uv2Array=new Float32Array(2*h)));b.geometry.skinWeights.length&&b.geometry.skinIndices.length&&
+(a.__skinIndexArray=new Float32Array(4*h),a.__skinWeightArray=new Float32Array(4*h));c=null!==pb&&21845<k?Uint32Array:Uint16Array;a.__typeArray=c;a.__faceArray=new c(3*k);a.__lineArray=new c(2*l);if(a.numMorphTargets)for(a.__morphTargetsArrays=[],c=0,n=a.numMorphTargets;c<n;c++)a.__morphTargetsArrays.push(new Float32Array(3*h));if(a.numMorphNormals)for(a.__morphNormalsArrays=[],c=0,n=a.numMorphNormals;c<n;c++)a.__morphNormalsArrays.push(new Float32Array(3*h));a.__webglFaceCount=3*k;a.__webglLineCount=
+2*l;if(g.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var r in g.attributes){var k=g.attributes[r],l={},s;for(s in k)l[s]=k[s];if(!l.__webglInitialized||l.createUniqueBuffers)l.__webglInitialized=!0,c=1,"v2"===l.type?c=2:"v3"===l.type?c=3:"v4"===l.type?c=4:"c"===l.type&&(c=3),l.size=c,l.array=new Float32Array(h*c),l.buffer=m.createBuffer(),l.buffer.belongsToAttribute=r,k.needsUpdate=!0,l.__original=k;a.__webglCustomAttributesList.push(l)}}a.__inittedArrays=
+!0}function d(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function e(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function f(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function g(a,b,c,d){for(var e in b){var f=b[e],g=c[e];if(0<=
+f)if(g){var h=g.itemSize;m.bindBuffer(m.ARRAY_BUFFER,g.buffer);k(f);m.vertexAttribPointer(f,h,m.FLOAT,!1,0,d*h*4)}else a.defaultAttributeValues&&(2===a.defaultAttributeValues[e].length?m.vertexAttrib2fv(f,a.defaultAttributeValues[e]):3===a.defaultAttributeValues[e].length&&m.vertexAttrib3fv(f,a.defaultAttributeValues[e]))}l()}function h(){for(var a=0,b=Ka.length;a<b;a++)Ka[a]=0}function k(a){Ka[a]=1;0===ob[a]&&(m.enableVertexAttribArray(a),ob[a]=1)}function l(){for(var a=0,b=ob.length;a<b;a++)ob[a]!==
+Ka[a]&&(m.disableVertexAttribArray(a),ob[a]=0)}function n(a,b){return a.z!==b.z?b.z-a.z:a.id-b.id}function q(a,b){return b[0]-a[0]}function p(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)Ia=wa=null,fa=za=ha=Ga=ma=ia=Oa=-1,cb=!0,a[d].render(b,c,ja,ra),Ia=wa=null,fa=za=ha=Ga=ma=ia=Oa=-1,cb=!0}function s(a,b,c,d,e,f,g,h){var k,m,l,n;b?(m=a.length-1,n=b=-1):(m=0,b=a.length,n=1);for(var p=m;p!==b;p+=n)if(k=a[p],k.render){m=k.object;l=k.buffer;if(h)k=h;else{k=k[c];if(!k)continue;g&&P.setBlending(k.blending,
+k.blendEquation,k.blendSrc,k.blendDst);P.setDepthTest(k.depthTest);P.setDepthWrite(k.depthWrite);G(k.polygonOffset,k.polygonOffsetFactor,k.polygonOffsetUnits)}P.setMaterialFaces(k);l instanceof THREE.BufferGeometry?P.renderBufferDirect(d,e,f,k,l,m):P.renderBuffer(d,e,f,k,l,m)}}function t(a,b,c,d,e,f,g){for(var h,k,m=0,l=a.length;m<l;m++)if(h=a[m],k=h.object,k.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&P.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);P.setDepthTest(h.depthTest);
+P.setDepthWrite(h.depthWrite);G(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}P.renderImmediateObject(c,d,e,h,k)}}function r(a,d){var e,f,g;if(void 0===a.__webglInit&&(a.__webglInit=!0,a._modelViewMatrix=new THREE.Matrix4,a._normalMatrix=new THREE.Matrix3,f=a.geometry,void 0!==f&&void 0===f.__webglInit))if(f.__webglInit=!0,f.addEventListener("dispose",Eb),f instanceof THREE.BufferGeometry)for(g in f.attributes){var h="index"===g?m.ELEMENT_ARRAY_BUFFER:m.ARRAY_BUFFER,k=f.attributes[g];
+k.buffer=m.createBuffer();m.bindBuffer(h,k.buffer);m.bufferData(h,k.array,m.STATIC_DRAW)}else if(a instanceof THREE.Mesh)for(e in g=a.material,void 0===f.geometryGroups&&f.makeGroups(g instanceof THREE.MeshFaceMaterial,pb?4294967296:65535),f.geometryGroups){if(g=f.geometryGroups[e],!g.__webglVertexBuffer){h=g;h.__webglVertexBuffer=m.createBuffer();h.__webglNormalBuffer=m.createBuffer();h.__webglTangentBuffer=m.createBuffer();h.__webglColorBuffer=m.createBuffer();h.__webglUVBuffer=m.createBuffer();
+h.__webglUV2Buffer=m.createBuffer();h.__webglSkinIndicesBuffer=m.createBuffer();h.__webglSkinWeightsBuffer=m.createBuffer();h.__webglFaceBuffer=m.createBuffer();h.__webglLineBuffer=m.createBuffer();var l=k=void 0;if(h.numMorphTargets)for(h.__webglMorphTargetsBuffers=[],k=0,l=h.numMorphTargets;k<l;k++)h.__webglMorphTargetsBuffers.push(m.createBuffer());if(h.numMorphNormals)for(h.__webglMorphNormalsBuffers=[],k=0,l=h.numMorphNormals;k<l;k++)h.__webglMorphNormalsBuffers.push(m.createBuffer());P.info.memory.geometries++;
+c(g,a);f.verticesNeedUpdate=!0;f.morphTargetsNeedUpdate=!0;f.elementsNeedUpdate=!0;f.uvsNeedUpdate=!0;f.normalsNeedUpdate=!0;f.tangentsNeedUpdate=!0;f.colorsNeedUpdate=!0}}else a instanceof THREE.Line?f.__webglVertexBuffer||(g=f,g.__webglVertexBuffer=m.createBuffer(),g.__webglColorBuffer=m.createBuffer(),g.__webglLineDistanceBuffer=m.createBuffer(),P.info.memory.geometries++,g=f,h=g.vertices.length,g.__vertexArray=new Float32Array(3*h),g.__colorArray=new Float32Array(3*h),g.__lineDistanceArray=new Float32Array(1*
+h),g.__webglLineCount=h,b(g,a),f.verticesNeedUpdate=!0,f.colorsNeedUpdate=!0,f.lineDistancesNeedUpdate=!0):a instanceof THREE.ParticleSystem&&!f.__webglVertexBuffer&&(g=f,g.__webglVertexBuffer=m.createBuffer(),g.__webglColorBuffer=m.createBuffer(),P.info.memory.geometries++,g=f,h=g.vertices.length,g.__vertexArray=new Float32Array(3*h),g.__colorArray=new Float32Array(3*h),g.__sortArray=[],g.__webglParticleCount=h,b(g,a),f.verticesNeedUpdate=!0,f.colorsNeedUpdate=!0);if(void 0===a.__webglActive){if(a instanceof
+THREE.Mesh)if(f=a.geometry,f instanceof THREE.BufferGeometry)v(d.__webglObjects,f,a);else{if(f instanceof THREE.Geometry)for(e in f.geometryGroups)g=f.geometryGroups[e],v(d.__webglObjects,g,a)}else a instanceof THREE.Line||a instanceof THREE.ParticleSystem?(f=a.geometry,v(d.__webglObjects,f,a)):a instanceof THREE.ImmediateRenderObject||a.immediateRenderCallback?d.__webglObjectsImmediate.push({id:null,object:a,opaque:null,transparent:null,z:0}):a instanceof THREE.Sprite?d.__webglSprites.push(a):a instanceof
+THREE.LensFlare&&d.__webglFlares.push(a);a.__webglActive=!0}}function v(a,b,c){a.push({id:null,buffer:b,object:c,opaque:null,transparent:null,z:0})}function w(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function u(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function y(a,b){a instanceof THREE.Mesh||a instanceof THREE.ParticleSystem||a instanceof THREE.Line?L(b.__webglObjects,a):a instanceof THREE.Sprite?x(b.__webglSprites,a):a instanceof THREE.LensFlare?
+x(b.__webglFlares,a):(a instanceof THREE.ImmediateRenderObject||a.immediateRenderCallback)&&L(b.__webglObjectsImmediate,a);delete a.__webglActive}function L(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function x(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function N(a,b,c,d,e){Ea=0;d.needsUpdate&&(d.program&&Fb(d),P.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(P.maxMorphTargets));
+var f=!1,g=d.program,h=g.uniforms,k=d.uniforms;g.id!==wa&&(m.useProgram(g.program),wa=g.id,f=!0);d.id!==fa&&(fa=d.id,f=!0);if(f||a!==Ia)m.uniformMatrix4fv(h.projectionMatrix,!1,a.projectionMatrix.elements),da&&m.uniform1f(h.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==Ia&&(Ia=a);if(d.skinning)if(Gb&&e.skeleton.useVertexTexture){if(null!==h.boneTexture){var l=J();m.uniform1i(h.boneTexture,l);P.setTexture(e.skeleton.boneTexture,l)}null!==h.boneTextureWidth&&m.uniform1i(h.boneTextureWidth,e.skeleton.boneTextureWidth);
+null!==h.boneTextureHeight&&m.uniform1i(h.boneTextureHeight,e.skeleton.boneTextureHeight)}else null!==h.boneGlobalMatrices&&m.uniformMatrix4fv(h.boneGlobalMatrices,!1,e.skeleton.boneMatrices);if(f){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(cb){var n,p=l=0,q=0,r,s,t,u=Bb,w=u.directional.colors,
+v=u.directional.positions,y=u.point.colors,A=u.point.positions,L=u.point.distances,x=u.spot.colors,G=u.spot.positions,C=u.spot.distances,E=u.spot.directions,N=u.spot.anglesCos,F=u.spot.exponents,Q=u.hemi.skyColors,I=u.hemi.groundColors,U=u.hemi.positions,Y=0,ga=0,R=0,X=0,$=0,aa=0,ba=0,Z=0,W=n=0;c=t=W=0;for(f=b.length;c<f;c++)if(n=b[c],!n.onlyShadow)if(r=n.color,s=n.intensity,t=n.distance,n instanceof THREE.AmbientLight)n.visible&&(P.gammaInput?(l+=r.r*r.r,p+=r.g*r.g,q+=r.b*r.b):(l+=r.r,p+=r.g,q+=
+r.b));else if(n instanceof THREE.DirectionalLight){if($+=1,n.visible&&(oa.setFromMatrixPosition(n.matrixWorld),xa.setFromMatrixPosition(n.target.matrixWorld),oa.sub(xa),oa.normalize(),0!==oa.x||0!==oa.y||0!==oa.z))n=3*Y,v[n]=oa.x,v[n+1]=oa.y,v[n+2]=oa.z,P.gammaInput?B(w,n,r,s*s):K(w,n,r,s),Y+=1}else n instanceof THREE.PointLight?(aa+=1,n.visible&&(W=3*ga,P.gammaInput?B(y,W,r,s*s):K(y,W,r,s),xa.setFromMatrixPosition(n.matrixWorld),A[W]=xa.x,A[W+1]=xa.y,A[W+2]=xa.z,L[ga]=t,ga+=1)):n instanceof THREE.SpotLight?
+(ba+=1,n.visible&&(W=3*R,P.gammaInput?B(x,W,r,s*s):K(x,W,r,s),xa.setFromMatrixPosition(n.matrixWorld),G[W]=xa.x,G[W+1]=xa.y,G[W+2]=xa.z,C[R]=t,oa.copy(xa),xa.setFromMatrixPosition(n.target.matrixWorld),oa.sub(xa),oa.normalize(),E[W]=oa.x,E[W+1]=oa.y,E[W+2]=oa.z,N[R]=Math.cos(n.angle),F[R]=n.exponent,R+=1)):n instanceof THREE.HemisphereLight&&(Z+=1,n.visible&&(oa.setFromMatrixPosition(n.matrixWorld),oa.normalize(),0!==oa.x||0!==oa.y||0!==oa.z))&&(t=3*X,U[t]=oa.x,U[t+1]=oa.y,U[t+2]=oa.z,r=n.color,n=
+n.groundColor,P.gammaInput?(s*=s,B(Q,t,r,s),B(I,t,n,s)):(K(Q,t,r,s),K(I,t,n,s)),X+=1);c=3*Y;for(f=Math.max(w.length,3*$);c<f;c++)w[c]=0;c=3*ga;for(f=Math.max(y.length,3*aa);c<f;c++)y[c]=0;c=3*R;for(f=Math.max(x.length,3*ba);c<f;c++)x[c]=0;c=3*X;for(f=Math.max(Q.length,3*Z);c<f;c++)Q[c]=0;c=3*X;for(f=Math.max(I.length,3*Z);c<f;c++)I[c]=0;u.directional.length=Y;u.point.length=ga;u.spot.length=R;u.hemi.length=X;u.ambient[0]=l;u.ambient[1]=p;u.ambient[2]=q;cb=!1}c=Bb;k.ambientLightColor.value=c.ambient;
+k.directionalLightColor.value=c.directional.colors;k.directionalLightDirection.value=c.directional.positions;k.pointLightColor.value=c.point.colors;k.pointLightPosition.value=c.point.positions;k.pointLightDistance.value=c.point.distances;k.spotLightColor.value=c.spot.colors;k.spotLightPosition.value=c.spot.positions;k.spotLightDistance.value=c.spot.distances;k.spotLightDirection.value=c.spot.directions;k.spotLightAngleCos.value=c.spot.anglesCos;k.spotLightExponent.value=c.spot.exponents;k.hemisphereLightSkyColor.value=
+c.hemi.skyColors;k.hemisphereLightGroundColor.value=c.hemi.groundColors;k.hemisphereLightDirection.value=c.hemi.positions}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){k.opacity.value=d.opacity;P.gammaInput?k.diffuse.value.copyGammaToLinear(d.color):k.diffuse.value=d.color;k.map.value=d.map;k.lightMap.value=d.lightMap;k.specularMap.value=d.specularMap;d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale);d.normalMap&&
+(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale));var V;d.map?V=d.map:d.specularMap?V=d.specularMap:d.normalMap?V=d.normalMap:d.bumpMap&&(V=d.bumpMap);void 0!==V&&(c=V.offset,V=V.repeat,k.offsetRepeat.value.set(c.x,c.y,V.x,V.y));k.envMap.value=d.envMap;k.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio;k.combine.value=d.combine;k.useRefract.value=d.envMap&&d.envMap.mapping instanceof
+THREE.CubeRefractionMapping}d instanceof THREE.LineBasicMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.ParticleSystemMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size,k.scale.value=H.height/2,k.map.value=d.map):d instanceof THREE.MeshPhongMaterial?(k.shininess.value=
+d.shininess,P.gammaInput?(k.ambient.value.copyGammaToLinear(d.ambient),k.emissive.value.copyGammaToLinear(d.emissive),k.specular.value.copyGammaToLinear(d.specular)):(k.ambient.value=d.ambient,k.emissive.value=d.emissive,k.specular.value=d.specular),d.wrapAround&&k.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshLambertMaterial?(P.gammaInput?(k.ambient.value.copyGammaToLinear(d.ambient),k.emissive.value.copyGammaToLinear(d.emissive)):(k.ambient.value=d.ambient,k.emissive.value=d.emissive),d.wrapAround&&
+k.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshDepthMaterial?(k.mNear.value=a.near,k.mFar.value=a.far,k.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(k.opacity.value=d.opacity);if(e.receiveShadow&&!d._shadowPass&&k.shadowMatrix)for(c=V=0,f=b.length;c<f;c++)l=b[c],l.castShadow&&(l instanceof THREE.SpotLight||l instanceof THREE.DirectionalLight&&!l.shadowCascade)&&(k.shadowMap.value[V]=l.shadowMap,k.shadowMapSize.value[V]=l.shadowMapSize,k.shadowMatrix.value[V]=l.shadowMatrix,
+k.shadowDarkness.value[V]=l.shadowDarkness,k.shadowBias.value[V]=l.shadowBias,V++);b=d.uniformsList;k=0;for(V=b.length;k<V;k++)if(f=g.uniforms[b[k][1]])if(c=b[k][0],p=c.type,l=c.value,"i"===p)m.uniform1i(f,l);else if("f"===p)m.uniform1f(f,l);else if("v2"===p)m.uniform2f(f,l.x,l.y);else if("v3"===p)m.uniform3f(f,l.x,l.y,l.z);else if("v4"===p)m.uniform4f(f,l.x,l.y,l.z,l.w);else if("c"===p)m.uniform3f(f,l.r,l.g,l.b);else if("iv1"===p)m.uniform1iv(f,l);else if("iv"===p)m.uniform3iv(f,l);else if("fv1"===
+p)m.uniform1fv(f,l);else if("fv"===p)m.uniform3fv(f,l);else if("v2v"===p){void 0===c._array&&(c._array=new Float32Array(2*l.length));p=0;for(q=l.length;p<q;p++)u=2*p,c._array[u]=l[p].x,c._array[u+1]=l[p].y;m.uniform2fv(f,c._array)}else if("v3v"===p){void 0===c._array&&(c._array=new Float32Array(3*l.length));p=0;for(q=l.length;p<q;p++)u=3*p,c._array[u]=l[p].x,c._array[u+1]=l[p].y,c._array[u+2]=l[p].z;m.uniform3fv(f,c._array)}else if("v4v"===p){void 0===c._array&&(c._array=new Float32Array(4*l.length));
+p=0;for(q=l.length;p<q;p++)u=4*p,c._array[u]=l[p].x,c._array[u+1]=l[p].y,c._array[u+2]=l[p].z,c._array[u+3]=l[p].w;m.uniform4fv(f,c._array)}else if("m3"===p)m.uniformMatrix3fv(f,!1,l.elements);else if("m3v"===p){void 0===c._array&&(c._array=new Float32Array(9*l.length));p=0;for(q=l.length;p<q;p++)l[p].flattenToArrayOffset(c._array,9*p);m.uniformMatrix3fv(f,!1,c._array)}else if("m4"===p)m.uniformMatrix4fv(f,!1,l.elements);else if("m4v"===p){void 0===c._array&&(c._array=new Float32Array(16*l.length));
+p=0;for(q=l.length;p<q;p++)l[p].flattenToArrayOffset(c._array,16*p);m.uniformMatrix4fv(f,!1,c._array)}else if("t"===p){if(u=l,l=J(),m.uniform1i(f,l),u)if(u.image instanceof Array&&6===u.image.length){if(c=u,f=l,6===c.image.length)if(c.needsUpdate){c.image.__webglTextureCube||(c.addEventListener("dispose",Hb),c.image.__webglTextureCube=m.createTexture(),P.info.memory.textures++);m.activeTexture(m.TEXTURE0+f);m.bindTexture(m.TEXTURE_CUBE_MAP,c.image.__webglTextureCube);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,
+c.flipY);f=c instanceof THREE.CompressedTexture;l=[];for(p=0;6>p;p++)P.autoScaleCubemaps&&!f?(q=l,u=p,w=c.image[p],y=dc,w.width<=y&&w.height<=y||(A=Math.max(w.width,w.height),v=Math.floor(w.width*y/A),y=Math.floor(w.height*y/A),A=document.createElement("canvas"),A.width=v,A.height=y,A.getContext("2d").drawImage(w,0,0,w.width,w.height,0,0,v,y),w=A),q[u]=w):l[p]=c.image[p];p=l[0];q=THREE.Math.isPowerOfTwo(p.width)&&THREE.Math.isPowerOfTwo(p.height);u=z(c.format);w=z(c.type);D(m.TEXTURE_CUBE_MAP,c,q);
+for(p=0;6>p;p++)if(f)for(y=l[p].mipmaps,A=0,L=y.length;A<L;A++)v=y[A],c.format!==THREE.RGBAFormat?m.compressedTexImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,A,u,v.width,v.height,0,v.data):m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,A,u,v.width,v.height,0,u,w,v.data);else m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,0,u,u,w,l[p]);c.generateMipmaps&&q&&m.generateMipmap(m.TEXTURE_CUBE_MAP);c.needsUpdate=!1;if(c.onUpdate)c.onUpdate()}else m.activeTexture(m.TEXTURE0+f),m.bindTexture(m.TEXTURE_CUBE_MAP,c.image.__webglTextureCube)}else u instanceof
+THREE.WebGLRenderTargetCube?(c=u,m.activeTexture(m.TEXTURE0+l),m.bindTexture(m.TEXTURE_CUBE_MAP,c.__webglTexture)):P.setTexture(u,l)}else if("tv"===p){void 0===c._array&&(c._array=[]);p=0;for(q=c.value.length;p<q;p++)c._array[p]=J();m.uniform1iv(f,c._array);p=0;for(q=c.value.length;p<q;p++)u=c.value[p],l=c._array[p],u&&P.setTexture(u,l)}else console.warn("THREE.WebGLRenderer: Unknown uniform type: "+p);(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition&&
+(xa.setFromMatrixPosition(a.matrixWorld),m.uniform3f(h.cameraPosition,xa.x,xa.y,xa.z));(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==h.viewMatrix&&m.uniformMatrix4fv(h.viewMatrix,!1,a.matrixWorldInverse.elements)}m.uniformMatrix4fv(h.modelViewMatrix,!1,e._modelViewMatrix.elements);h.normalMatrix&&m.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrix.elements);null!==h.modelMatrix&&m.uniformMatrix4fv(h.modelMatrix,
+!1,e.matrixWorld.elements);return g}function J(){var a=Ea;a>=Cb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+Cb);Ea+=1;return a}function B(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function K(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function A(a){a!==ua&&(m.lineWidth(a),ua=a)}function G(a,b,c){ya!==a&&(a?m.enable(m.POLYGON_OFFSET_FILL):m.disable(m.POLYGON_OFFSET_FILL),ya=a);!a||Z===b&&qa===c||(m.polygonOffset(b,c),Z=b,qa=c)}function D(a,
+b,c){c?(m.texParameteri(a,m.TEXTURE_WRAP_S,z(b.wrapS)),m.texParameteri(a,m.TEXTURE_WRAP_T,z(b.wrapT)),m.texParameteri(a,m.TEXTURE_MAG_FILTER,z(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,z(b.minFilter))):(m.texParameteri(a,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_MAG_FILTER,F(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,F(b.minFilter)));db&&b.type!==THREE.FloatType&&(1<b.anisotropy||b.__oldAnisotropy)&&(m.texParameterf(a,
+db.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,Ib)),b.__oldAnisotropy=b.anisotropy)}function C(a,b){m.bindRenderbuffer(m.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_COMPONENT16,b.width,b.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_STENCIL,b.width,b.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,
+a)):m.renderbufferStorage(m.RENDERBUFFER,m.RGBA4,b.width,b.height)}function F(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?m.NEAREST:m.LINEAR}function z(a){if(a===THREE.RepeatWrapping)return m.REPEAT;if(a===THREE.ClampToEdgeWrapping)return m.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return m.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return m.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return m.NEAREST_MIPMAP_NEAREST;if(a===
+THREE.NearestMipMapLinearFilter)return m.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return m.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return m.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return m.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return m.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return m.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return m.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return m.UNSIGNED_SHORT_5_6_5;if(a===
+THREE.ByteType)return m.BYTE;if(a===THREE.ShortType)return m.SHORT;if(a===THREE.UnsignedShortType)return m.UNSIGNED_SHORT;if(a===THREE.IntType)return m.INT;if(a===THREE.UnsignedIntType)return m.UNSIGNED_INT;if(a===THREE.FloatType)return m.FLOAT;if(a===THREE.AlphaFormat)return m.ALPHA;if(a===THREE.RGBFormat)return m.RGB;if(a===THREE.RGBAFormat)return m.RGBA;if(a===THREE.LuminanceFormat)return m.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return m.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return m.FUNC_ADD;
+if(a===THREE.SubtractEquation)return m.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return m.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return m.ZERO;if(a===THREE.OneFactor)return m.ONE;if(a===THREE.SrcColorFactor)return m.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return m.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return m.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return m.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return m.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return m.ONE_MINUS_DST_ALPHA;
+if(a===THREE.DstColorFactor)return m.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return m.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return m.SRC_ALPHA_SATURATE;if(void 0!==Pa){if(a===THREE.RGB_S3TC_DXT1_Format)return Pa.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return Pa.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return Pa.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return Pa.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",
+THREE.REVISION);a=a||{};var H=void 0!==a.canvas?a.canvas:document.createElement("canvas"),E=void 0!==a.context?a.context:null,Q=void 0!==a.precision?a.precision:"highp",Y=void 0!==a.alpha?a.alpha:!1,U=void 0!==a.depth?a.depth:!0,la=void 0!==a.stencil?a.stencil:!0,W=void 0!==a.antialias?a.antialias:!1,R=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,I=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,da=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,V=new THREE.Color(0),
+X=0;this.domElement=H;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.gammaOutput=this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=
+8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var P=this,ga=[],wa=null,Ha=null,fa=-1,za=null,Ia=null,Ea=0,Ga=-1,ha=-1,Oa=-1,Ra=-1,Sa=-1,Fa=-1,ia=-1,ma=-1,ya=null,Z=null,qa=null,ua=null,Ca=0,va=0,Da=H.width,Ja=H.height,ja=0,ra=0,Ka=new Uint8Array(16),ob=new Uint8Array(16),Ab=new THREE.Frustum,Pb=new THREE.Matrix4,cc=new THREE.Matrix4,xa=new THREE.Vector3,
+oa=new THREE.Vector3,cb=!0,Bb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},m,sb,xb,db,Pa,pb;(function(){try{var a={alpha:Y,depth:U,stencil:la,antialias:W,premultipliedAlpha:R,preserveDrawingBuffer:I};m=E||H.getContext("webgl",a)||H.getContext("experimental-webgl",a);if(null===m)throw"Error creating WebGL context.";
+}catch(b){console.error(b)}sb=m.getExtension("OES_texture_float");m.getExtension("OES_texture_float_linear");xb=m.getExtension("OES_standard_derivatives");db=m.getExtension("EXT_texture_filter_anisotropic")||m.getExtension("MOZ_EXT_texture_filter_anisotropic")||m.getExtension("WEBKIT_EXT_texture_filter_anisotropic");Pa=m.getExtension("WEBGL_compressed_texture_s3tc")||m.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||m.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");pb=m.getExtension("OES_element_index_uint");
+null===sb&&console.log("THREE.WebGLRenderer: Float textures not supported.");null===xb&&console.log("THREE.WebGLRenderer: Standard derivatives not supported.");null===db&&console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");null===Pa&&console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");null===pb&&console.log("THREE.WebGLRenderer: elementindex as unsigned integer not supported.");void 0===m.getShaderPrecisionFormat&&(m.getShaderPrecisionFormat=function(){return{rangeMin:1,
+rangeMax:1,precision:1}});da&&m.getExtension("EXT_frag_depth")})();m.clearColor(0,0,0,1);m.clearDepth(1);m.clearStencil(0);m.enable(m.DEPTH_TEST);m.depthFunc(m.LEQUAL);m.frontFace(m.CCW);m.cullFace(m.BACK);m.enable(m.CULL_FACE);m.enable(m.BLEND);m.blendEquation(m.FUNC_ADD);m.blendFunc(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA);m.viewport(Ca,va,Da,Ja);m.clearColor(V.r,V.g,V.b,X);this.context=m;var Cb=m.getParameter(m.MAX_TEXTURE_IMAGE_UNITS),Db=m.getParameter(m.MAX_VERTEX_TEXTURE_IMAGE_UNITS);m.getParameter(m.MAX_TEXTURE_SIZE);
+var dc=m.getParameter(m.MAX_CUBE_MAP_TEXTURE_SIZE),Ib=db?m.getParameter(db.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,Jb=0<Db,Gb=Jb&&sb;Pa&&m.getParameter(m.COMPRESSED_TEXTURE_FORMATS);var ec=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.HIGH_FLOAT),qc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.LOW_FLOAT);var rc=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.HIGH_FLOAT),sc=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,
+m.LOW_FLOAT);var tc=0<ec.precision&&0<rc.precision,Kb=0<qc.precision&&0<sc.precision;"highp"!==Q||tc||(Kb?(Q="mediump",console.warn("WebGLRenderer: highp not supported, using mediump")):(Q="lowp",console.warn("WebGLRenderer: highp and mediump not supported, using lowp")));"mediump"!==Q||Kb||(Q="lowp",console.warn("WebGLRenderer: mediump not supported, using lowp"));this.getContext=function(){return m};this.supportsVertexTextures=function(){return Jb};this.supportsFloatTextures=function(){return sb};
+this.supportsStandardDerivatives=function(){return xb};this.supportsCompressedTextureS3TC=function(){return Pa};this.getMaxAnisotropy=function(){return Ib};this.getPrecision=function(){return Q};this.setSize=function(a,b,c){H.width=a*this.devicePixelRatio;H.height=b*this.devicePixelRatio;!1!==c&&(H.style.width=a+"px",H.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Ca=a*this.devicePixelRatio;va=b*this.devicePixelRatio;Da=c*this.devicePixelRatio;Ja=d*this.devicePixelRatio;
+m.viewport(Ca,va,Da,Ja)};this.setScissor=function(a,b,c,d){m.scissor(a*this.devicePixelRatio,b*this.devicePixelRatio,c*this.devicePixelRatio,d*this.devicePixelRatio)};this.enableScissorTest=function(a){a?m.enable(m.SCISSOR_TEST):m.disable(m.SCISSOR_TEST)};this.setClearColor=function(a,b){V.set(a);X=void 0!==b?b:1;m.clearColor(V.r,V.g,V.b,X)};this.setClearColorHex=function(a,b){console.warn("DEPRECATED: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,b)};
+this.getClearColor=function(){return V};this.getClearAlpha=function(){return X};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=m.COLOR_BUFFER_BIT;if(void 0===b||b)d|=m.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=m.STENCIL_BUFFER_BIT;m.clear(d)};this.clearColor=function(){m.clear(m.COLOR_BUFFER_BIT)};this.clearDepth=function(){m.clear(m.DEPTH_BUFFER_BIT)};this.clearStencil=function(){m.clear(m.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=
+function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.updateShadowMap=function(a,b){wa=null;fa=za=ma=ia=Oa=-1;cb=!0;ha=Ga=-1;this.shadowMapPlugin.update(a,b)};var Eb=function(a){a=a.target;a.removeEventListener("dispose",Eb);a.__webglInit=void 0;if(a instanceof THREE.BufferGeometry){var b=a.attributes,c;for(c in b)void 0!==b[c].buffer&&m.deleteBuffer(b[c].buffer);P.info.memory.geometries--}else if(void 0!==a.geometryGroups)for(b in a.geometryGroups){c=
+a.geometryGroups[b];if(void 0!==c.numMorphTargets)for(var d=0,e=c.numMorphTargets;d<e;d++)m.deleteBuffer(c.__webglMorphTargetsBuffers[d]);if(void 0!==c.numMorphNormals)for(d=0,e=c.numMorphNormals;d<e;d++)m.deleteBuffer(c.__webglMorphNormalsBuffers[d]);Qb(c)}else Qb(a)},Hb=function(a){a=a.target;a.removeEventListener("dispose",Hb);a.image&&a.image.__webglTextureCube?m.deleteTexture(a.image.__webglTextureCube):a.__webglInit&&(a.__webglInit=!1,m.deleteTexture(a.__webglTexture));P.info.memory.textures--},
+Rb=function(a){a=a.target;a.removeEventListener("dispose",Rb);if(a&&a.__webglTexture)if(m.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)m.deleteFramebuffer(a.__webglFramebuffer[b]),m.deleteRenderbuffer(a.__webglRenderbuffer[b]);else m.deleteFramebuffer(a.__webglFramebuffer),m.deleteRenderbuffer(a.__webglRenderbuffer);P.info.memory.textures--},Sb=function(a){a=a.target;a.removeEventListener("dispose",Sb);Fb(a)},Qb=function(a){void 0!==a.__webglVertexBuffer&&
+m.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&m.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&m.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&m.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&m.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&m.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&m.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&m.deleteBuffer(a.__webglSkinWeightsBuffer);
+void 0!==a.__webglFaceBuffer&&m.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&m.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&&m.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)m.deleteBuffer(a.__webglCustomAttributesList[b].buffer);P.info.memory.geometries--},Fb=function(a){var b=a.program;if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=ga.length;a<c;a++)if(d=ga[a],d.program===
+b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(!0===e){e=[];a=0;for(c=ga.length;a<c;a++)d=ga[a],d.program!==b&&e.push(d);ga=e;m.deleteProgram(b);P.info.memory.programs--}}};this.renderBufferImmediate=function(a,b,c){h();a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=m.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=m.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=m.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=
+m.createBuffer());a.hasPositions&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglVertexBuffer),m.bufferData(m.ARRAY_BUFFER,a.positionArray,m.DYNAMIC_DRAW),k(b.attributes.position),m.vertexAttribPointer(b.attributes.position,3,m.FLOAT,!1,0,0));if(a.hasNormals){m.bindBuffer(m.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,p,n,q,r,s,u,t,w=3*a.count;for(t=0;t<w;t+=9)u=a.normalArray,d=u[t],e=u[t+1],f=u[t+2],g=u[t+3],n=u[t+4],r=u[t+5],p=u[t+6],q=u[t+7],s=u[t+8],d=(d+g+p)/3,e=(e+
+n+q)/3,f=(f+r+s)/3,u[t]=d,u[t+1]=e,u[t+2]=f,u[t+3]=d,u[t+4]=e,u[t+5]=f,u[t+6]=d,u[t+7]=e,u[t+8]=f}m.bufferData(m.ARRAY_BUFFER,a.normalArray,m.DYNAMIC_DRAW);k(b.attributes.normal);m.vertexAttribPointer(b.attributes.normal,3,m.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglUvBuffer),m.bufferData(m.ARRAY_BUFFER,a.uvArray,m.DYNAMIC_DRAW),k(b.attributes.uv),m.vertexAttribPointer(b.attributes.uv,2,m.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(m.bindBuffer(m.ARRAY_BUFFER,
+a.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,a.colorArray,m.DYNAMIC_DRAW),k(b.attributes.color),m.vertexAttribPointer(b.attributes.color,3,m.FLOAT,!1,0,0));l();m.drawArrays(m.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(!1!==d.visible){var k=N(a,b,c,d,f);a=k.attributes;b=e.attributes;c=!1;k=16777215*e.id+2*k.id+(d.wireframe?1:0);k!==za&&(za=k,c=!0);c&&h();if(f instanceof THREE.Mesh)if(f=b.index){var l;f.array instanceof Uint32Array?(k=m.UNSIGNED_INT,l=4):(k=
+m.UNSIGNED_SHORT,l=2);e=e.offsets;if(0===e.length)c&&(g(d,a,b,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f.buffer)),m.drawElements(m.TRIANGLES,f.array.length,k,0),P.info.render.calls++,P.info.render.vertices+=f.array.length,P.info.render.faces+=f.array.length/3;else{c=!0;for(var p=0,n=e.length;p<n;p++){var q=e[p].index;c&&(g(d,a,b,q),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f.buffer));m.drawElements(m.TRIANGLES,e[p].count,k,e[p].start*l);P.info.render.calls++;P.info.render.vertices+=e[p].count;P.info.render.faces+=
+e[p].count/3}}}else c&&g(d,a,b,0),d=e.attributes.position,m.drawArrays(m.TRIANGLES,0,d.array.length/3),P.info.render.calls++,P.info.render.vertices+=d.array.length/3,P.info.render.faces+=d.array.length/9;else if(f instanceof THREE.ParticleSystem)c&&g(d,a,b,0),d=b.position,m.drawArrays(m.POINTS,0,d.array.length/3),P.info.render.calls++,P.info.render.points+=d.array.length/3;else if(f instanceof THREE.Line)if(k=f.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,A(d.linewidth),f=b.index)if(f.array instanceof
+Uint32Array?(k=m.UNSIGNED_INT,l=4):(k=m.UNSIGNED_SHORT,l=2),e=e.offsets,0===e.length)c&&(g(d,a,b,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f.buffer)),m.drawElements(m.LINES,f.array.length,k,0),P.info.render.calls++,P.info.render.vertices+=f.array.length;else for(1<e.length&&(c=!0),p=0,n=e.length;p<n;p++)q=e[p].index,c&&(g(d,a,b,q),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f.buffer)),m.drawElements(m.LINES,e[p].count,k,e[p].start*l),P.info.render.calls++,P.info.render.vertices+=e[p].count;else c&&g(d,a,b,0),
+d=b.position,m.drawArrays(k,0,d.array.length/3),P.info.render.calls++,P.info.render.points+=d.array.length/3}};this.renderBuffer=function(a,b,c,d,e,f){if(!1!==d.visible){var g,p;c=N(a,b,c,d,f);b=c.attributes;a=!1;c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==za&&(za=c,a=!0);a&&h();if(!d.morphTargets&&0<=b.position)a&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),k(b.position),m.vertexAttribPointer(b.position,3,m.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;-1!==f.morphTargetBase&&
+0<=c.position?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]),k(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0)):0<=c.position&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),k(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){var n=0;p=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;n<d.numSupportedMorphTargets&&n<p.length;)0<=c["morphTarget"+n]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[p[n]]),
+k(c["morphTarget"+n]),m.vertexAttribPointer(c["morphTarget"+n],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+n]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[p[n]]),k(c["morphNormal"+n]),m.vertexAttribPointer(c["morphNormal"+n],3,m.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[n]=g[p[n]],n++}else{p=[];g=f.morphTargetInfluences;var r,s=g.length;for(r=0;r<s;r++)n=g[r],0<n&&p.push([n,r]);p.length>d.numSupportedMorphTargets?(p.sort(q),p.length=d.numSupportedMorphTargets):p.length>
+d.numSupportedMorphNormals?p.sort(q):0===p.length&&p.push([0,0]);for(n=0;n<d.numSupportedMorphTargets;)p[n]?(r=p[n][1],0<=c["morphTarget"+n]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),k(c["morphTarget"+n]),m.vertexAttribPointer(c["morphTarget"+n],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+n]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),k(c["morphNormal"+n]),m.vertexAttribPointer(c["morphNormal"+n],3,m.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[n]=
+g[r]):f.__webglMorphTargetInfluences[n]=0,n++}null!==d.program.uniforms.morphTargetInfluences&&m.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,p=e.__webglCustomAttributesList.length;g<p;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(m.bindBuffer(m.ARRAY_BUFFER,c.buffer),k(b[c.buffer.belongsToAttribute]),m.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,m.FLOAT,!1,0,0));0<=b.color&&
+(0<f.geometry.colors.length||0<f.geometry.faces.length?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglColorBuffer),k(b.color),m.vertexAttribPointer(b.color,3,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));0<=b.normal&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglNormalBuffer),k(b.normal),m.vertexAttribPointer(b.normal,3,m.FLOAT,!1,0,0));0<=b.tangent&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglTangentBuffer),k(b.tangent),m.vertexAttribPointer(b.tangent,4,m.FLOAT,!1,
+0,0));0<=b.uv&&(f.geometry.faceVertexUvs[0]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUVBuffer),k(b.uv),m.vertexAttribPointer(b.uv,2,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv,d.defaultAttributeValues.uv));0<=b.uv2&&(f.geometry.faceVertexUvs[1]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUV2Buffer),k(b.uv2),m.vertexAttribPointer(b.uv2,2,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv2,d.defaultAttributeValues.uv2));d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(m.bindBuffer(m.ARRAY_BUFFER,
+e.__webglSkinIndicesBuffer),k(b.skinIndex),m.vertexAttribPointer(b.skinIndex,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),k(b.skinWeight),m.vertexAttribPointer(b.skinWeight,4,m.FLOAT,!1,0,0));0<=b.lineDistance&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglLineDistanceBuffer),k(b.lineDistance),m.vertexAttribPointer(b.lineDistance,1,m.FLOAT,!1,0,0))}l();f instanceof THREE.Mesh?(f=e.__typeArray===Uint32Array?m.UNSIGNED_INT:m.UNSIGNED_SHORT,d.wireframe?(A(d.wireframeLinewidth),a&&
+m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),m.drawElements(m.LINES,e.__webglLineCount,f,0)):(a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),m.drawElements(m.TRIANGLES,e.__webglFaceCount,f,0)),P.info.render.calls++,P.info.render.vertices+=e.__webglFaceCount,P.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,A(d.linewidth),m.drawArrays(f,0,e.__webglLineCount),P.info.render.calls++):f instanceof THREE.ParticleSystem&&
+(m.drawArrays(m.POINTS,0,e.__webglParticleCount),P.info.render.calls++,P.info.render.points+=e.__webglParticleCount)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,k=a.__lights,l=a.fog;fa=-1;cb=!0;!0===a.autoUpdate&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);Pb.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);
+Ab.setFromMatrix(Pb);this.autoUpdateObjects&&this.initWebGLObjects(a);p(this.renderPluginsPre,a,b);P.info.render.calls=0;P.info.render.vertices=0;P.info.render.faces=0;P.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.id=d,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||Ab.intersectsObject(g))){var q=
+g;q._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,q.matrixWorld);q._normalMatrix.getNormalMatrix(q._modelViewMatrix);var q=f,r=q.object,u=q.buffer,w=r.geometry,r=r.material;r instanceof THREE.MeshFaceMaterial?(r=r.materials[w instanceof THREE.BufferGeometry?0:u.materialIndex],r.transparent?(q.transparent=r,q.opaque=null):(q.opaque=r,q.transparent=null)):r&&(r.transparent?(q.transparent=r,q.opaque=null):(q.opaque=r,q.transparent=null));f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?
+f.z=g.renderDepth:(xa.setFromMatrixPosition(g.matrixWorld),xa.applyProjection(Pb),f.z=xa.z))}this.sortObjects&&h.sort(n);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(g._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,g.matrixWorld),g._normalMatrix.getNormalMatrix(g._modelViewMatrix),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,
+d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),G(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),s(a.__webglObjects,!1,"",b,k,l,!0,d),t(a.__webglObjectsImmediate,"",b,k,l,!1,d)):(d=null,this.setBlending(THREE.NoBlending),s(a.__webglObjects,!0,"opaque",b,k,l,!1,d),t(a.__webglObjectsImmediate,"opaque",b,k,l,!1,d),s(a.__webglObjects,!1,"transparent",b,k,l,!0,d),t(a.__webglObjectsImmediate,"transparent",b,k,l,!0,d));p(this.renderPluginsPost,a,b);c&&
+c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(m.bindTexture(m.TEXTURE_CUBE_MAP,c.__webglTexture),m.generateMipmap(m.TEXTURE_CUBE_MAP),m.bindTexture(m.TEXTURE_CUBE_MAP,null)):(m.bindTexture(m.TEXTURE_2D,c.__webglTexture),m.generateMipmap(m.TEXTURE_2D),m.bindTexture(m.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=N(a,b,c,d,e);za=-1;P.setMaterialFaces(d);
+e.immediateRenderCallback?e.immediateRenderCallback(f,m,Ab):e.render(function(a){P.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;)r(a.__objectsAdded[0],a),a.__objectsAdded.splice(0,1);for(;a.__objectsRemoved.length;)y(a.__objectsRemoved[0],a),a.__objectsRemoved.splice(0,1);for(var b=0,g=a.__webglObjects.length;b<g;b++){var h=a.__webglObjects[b].object;
+void 0===h.__webglInit&&(void 0!==h.__webglActive&&y(h,a),r(h,a));var k=h,l=k.geometry,p=void 0,n=void 0,s=void 0;if(l instanceof THREE.BufferGeometry){var t=m.DYNAMIC_DRAW,v=l.attributes,A=void 0,B=void 0;for(A in v)B=v[A],B.needsUpdate&&("index"===A?(m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,B.buffer),m.bufferData(m.ELEMENT_ARRAY_BUFFER,B.array,t)):(m.bindBuffer(m.ARRAY_BUFFER,B.buffer),m.bufferData(m.ARRAY_BUFFER,B.array,t)),B.needsUpdate=!1)}else if(k instanceof THREE.Mesh){for(var z=0,L=l.geometryGroupsList.length;z<
+L;z++)if(p=l.geometryGroupsList[z],s=d(k,p),l.buffersNeedUpdate&&c(p,k),n=s.attributes&&w(s),l.verticesNeedUpdate||l.morphTargetsNeedUpdate||l.elementsNeedUpdate||l.uvsNeedUpdate||l.normalsNeedUpdate||l.colorsNeedUpdate||l.tangentsNeedUpdate||n){var x=p,G=k,C=m.DYNAMIC_DRAW,E=!l.dynamic,J=s;if(x.__inittedArrays){var H=e(J),P=J.vertexColors?J.vertexColors:!1,N=f(J),K=H===THREE.SmoothShading,D=void 0,F=void 0,Q=void 0,I=void 0,U=void 0,fa=void 0,Y=void 0,ga=void 0,R=void 0,V=void 0,W=void 0,$=void 0,
+aa=void 0,ba=void 0,wa=void 0,X=void 0,Z=void 0,da=void 0,Ia=void 0,Ga=void 0,Ea=void 0,ia=void 0,za=void 0,ja=void 0,Ha=void 0,la=void 0,oa=void 0,qa=void 0,ra=void 0,ha=void 0,ya=void 0,Fa=void 0,Ca=void 0,Da=void 0,ma=void 0,Ka=void 0,ua=void 0,va=void 0,Oa=void 0,Ja=void 0,ab=0,bb=0,Ra=0,Sa=0,Pa=0,eb=0,Ta=0,qb=0,Ya=0,ta=0,Aa=0,O=0,Qa=void 0,fb=x.__vertexArray,cb=x.__uvArray,db=x.__uv2Array,tb=x.__normalArray,Ua=x.__tangentArray,gb=x.__colorArray,Va=x.__skinIndexArray,Wa=x.__skinWeightArray,ob=
+x.__morphTargetsArrays,sb=x.__morphNormalsArrays,pb=x.__webglCustomAttributesList,M=void 0,Tb=x.__faceArray,ub=x.__lineArray,La=G.geometry,Ab=La.elementsNeedUpdate,xb=La.uvsNeedUpdate,Db=La.normalsNeedUpdate,Gb=La.tangentsNeedUpdate,Hb=La.colorsNeedUpdate,Jb=La.morphTargetsNeedUpdate,fc=La.vertices,ea=x.faces3,hb=La.faces,Bb=La.faceVertexUvs[0],Cb=La.faceVertexUvs[1],gc=La.skinIndices,Ub=La.skinWeights,Vb=La.morphTargets,Eb=La.morphNormals;if(La.verticesNeedUpdate){D=0;for(F=ea.length;D<F;D++)I=hb[ea[D]],
+$=fc[I.a],aa=fc[I.b],ba=fc[I.c],fb[bb]=$.x,fb[bb+1]=$.y,fb[bb+2]=$.z,fb[bb+3]=aa.x,fb[bb+4]=aa.y,fb[bb+5]=aa.z,fb[bb+6]=ba.x,fb[bb+7]=ba.y,fb[bb+8]=ba.z,bb+=9;m.bindBuffer(m.ARRAY_BUFFER,x.__webglVertexBuffer);m.bufferData(m.ARRAY_BUFFER,fb,C)}if(Jb)for(ma=0,Ka=Vb.length;ma<Ka;ma++){D=Aa=0;for(F=ea.length;D<F;D++)Oa=ea[D],I=hb[Oa],$=Vb[ma].vertices[I.a],aa=Vb[ma].vertices[I.b],ba=Vb[ma].vertices[I.c],ua=ob[ma],ua[Aa]=$.x,ua[Aa+1]=$.y,ua[Aa+2]=$.z,ua[Aa+3]=aa.x,ua[Aa+4]=aa.y,ua[Aa+5]=aa.z,ua[Aa+6]=
+ba.x,ua[Aa+7]=ba.y,ua[Aa+8]=ba.z,J.morphNormals&&(K?(Ja=Eb[ma].vertexNormals[Oa],da=Ja.a,Ia=Ja.b,Ga=Ja.c):Ga=Ia=da=Eb[ma].faceNormals[Oa],va=sb[ma],va[Aa]=da.x,va[Aa+1]=da.y,va[Aa+2]=da.z,va[Aa+3]=Ia.x,va[Aa+4]=Ia.y,va[Aa+5]=Ia.z,va[Aa+6]=Ga.x,va[Aa+7]=Ga.y,va[Aa+8]=Ga.z),Aa+=9;m.bindBuffer(m.ARRAY_BUFFER,x.__webglMorphTargetsBuffers[ma]);m.bufferData(m.ARRAY_BUFFER,ob[ma],C);J.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,x.__webglMorphNormalsBuffers[ma]),m.bufferData(m.ARRAY_BUFFER,sb[ma],C))}if(Ub.length){D=
+0;for(F=ea.length;D<F;D++)I=hb[ea[D]],ja=Ub[I.a],Ha=Ub[I.b],la=Ub[I.c],Wa[ta]=ja.x,Wa[ta+1]=ja.y,Wa[ta+2]=ja.z,Wa[ta+3]=ja.w,Wa[ta+4]=Ha.x,Wa[ta+5]=Ha.y,Wa[ta+6]=Ha.z,Wa[ta+7]=Ha.w,Wa[ta+8]=la.x,Wa[ta+9]=la.y,Wa[ta+10]=la.z,Wa[ta+11]=la.w,oa=gc[I.a],qa=gc[I.b],ra=gc[I.c],Va[ta]=oa.x,Va[ta+1]=oa.y,Va[ta+2]=oa.z,Va[ta+3]=oa.w,Va[ta+4]=qa.x,Va[ta+5]=qa.y,Va[ta+6]=qa.z,Va[ta+7]=qa.w,Va[ta+8]=ra.x,Va[ta+9]=ra.y,Va[ta+10]=ra.z,Va[ta+11]=ra.w,ta+=12;0<ta&&(m.bindBuffer(m.ARRAY_BUFFER,x.__webglSkinIndicesBuffer),
+m.bufferData(m.ARRAY_BUFFER,Va,C),m.bindBuffer(m.ARRAY_BUFFER,x.__webglSkinWeightsBuffer),m.bufferData(m.ARRAY_BUFFER,Wa,C))}if(Hb&&P){D=0;for(F=ea.length;D<F;D++)I=hb[ea[D]],Y=I.vertexColors,ga=I.color,3===Y.length&&P===THREE.VertexColors?(Ea=Y[0],ia=Y[1],za=Y[2]):za=ia=Ea=ga,gb[Ya]=Ea.r,gb[Ya+1]=Ea.g,gb[Ya+2]=Ea.b,gb[Ya+3]=ia.r,gb[Ya+4]=ia.g,gb[Ya+5]=ia.b,gb[Ya+6]=za.r,gb[Ya+7]=za.g,gb[Ya+8]=za.b,Ya+=9;0<Ya&&(m.bindBuffer(m.ARRAY_BUFFER,x.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,gb,C))}if(Gb&&
+La.hasTangents){D=0;for(F=ea.length;D<F;D++)I=hb[ea[D]],R=I.vertexTangents,wa=R[0],X=R[1],Z=R[2],Ua[Ta]=wa.x,Ua[Ta+1]=wa.y,Ua[Ta+2]=wa.z,Ua[Ta+3]=wa.w,Ua[Ta+4]=X.x,Ua[Ta+5]=X.y,Ua[Ta+6]=X.z,Ua[Ta+7]=X.w,Ua[Ta+8]=Z.x,Ua[Ta+9]=Z.y,Ua[Ta+10]=Z.z,Ua[Ta+11]=Z.w,Ta+=12;m.bindBuffer(m.ARRAY_BUFFER,x.__webglTangentBuffer);m.bufferData(m.ARRAY_BUFFER,Ua,C)}if(Db&&H){D=0;for(F=ea.length;D<F;D++)if(I=hb[ea[D]],U=I.vertexNormals,fa=I.normal,3===U.length&&K)for(ha=0;3>ha;ha++)Fa=U[ha],tb[eb]=Fa.x,tb[eb+1]=Fa.y,
+tb[eb+2]=Fa.z,eb+=3;else for(ha=0;3>ha;ha++)tb[eb]=fa.x,tb[eb+1]=fa.y,tb[eb+2]=fa.z,eb+=3;m.bindBuffer(m.ARRAY_BUFFER,x.__webglNormalBuffer);m.bufferData(m.ARRAY_BUFFER,tb,C)}if(xb&&Bb&&N){D=0;for(F=ea.length;D<F;D++)if(Q=ea[D],V=Bb[Q],void 0!==V)for(ha=0;3>ha;ha++)Ca=V[ha],cb[Ra]=Ca.x,cb[Ra+1]=Ca.y,Ra+=2;0<Ra&&(m.bindBuffer(m.ARRAY_BUFFER,x.__webglUVBuffer),m.bufferData(m.ARRAY_BUFFER,cb,C))}if(xb&&Cb&&N){D=0;for(F=ea.length;D<F;D++)if(Q=ea[D],W=Cb[Q],void 0!==W)for(ha=0;3>ha;ha++)Da=W[ha],db[Sa]=
+Da.x,db[Sa+1]=Da.y,Sa+=2;0<Sa&&(m.bindBuffer(m.ARRAY_BUFFER,x.__webglUV2Buffer),m.bufferData(m.ARRAY_BUFFER,db,C))}if(Ab){D=0;for(F=ea.length;D<F;D++)Tb[Pa]=ab,Tb[Pa+1]=ab+1,Tb[Pa+2]=ab+2,Pa+=3,ub[qb]=ab,ub[qb+1]=ab+1,ub[qb+2]=ab,ub[qb+3]=ab+2,ub[qb+4]=ab+1,ub[qb+5]=ab+2,qb+=6,ab+=3;m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,x.__webglFaceBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER,Tb,C);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,x.__webglLineBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER,ub,C)}if(pb)for(ha=0,ya=pb.length;ha<
+ya;ha++)if(M=pb[ha],M.__original.needsUpdate){O=0;if(1===M.size)if(void 0===M.boundTo||"vertices"===M.boundTo)for(D=0,F=ea.length;D<F;D++)I=hb[ea[D]],M.array[O]=M.value[I.a],M.array[O+1]=M.value[I.b],M.array[O+2]=M.value[I.c],O+=3;else{if("faces"===M.boundTo)for(D=0,F=ea.length;D<F;D++)Qa=M.value[ea[D]],M.array[O]=Qa,M.array[O+1]=Qa,M.array[O+2]=Qa,O+=3}else if(2===M.size)if(void 0===M.boundTo||"vertices"===M.boundTo)for(D=0,F=ea.length;D<F;D++)I=hb[ea[D]],$=M.value[I.a],aa=M.value[I.b],ba=M.value[I.c],
+M.array[O]=$.x,M.array[O+1]=$.y,M.array[O+2]=aa.x,M.array[O+3]=aa.y,M.array[O+4]=ba.x,M.array[O+5]=ba.y,O+=6;else{if("faces"===M.boundTo)for(D=0,F=ea.length;D<F;D++)ba=aa=$=Qa=M.value[ea[D]],M.array[O]=$.x,M.array[O+1]=$.y,M.array[O+2]=aa.x,M.array[O+3]=aa.y,M.array[O+4]=ba.x,M.array[O+5]=ba.y,O+=6}else if(3===M.size){var sa;sa="c"===M.type?["r","g","b"]:["x","y","z"];if(void 0===M.boundTo||"vertices"===M.boundTo)for(D=0,F=ea.length;D<F;D++)I=hb[ea[D]],$=M.value[I.a],aa=M.value[I.b],ba=M.value[I.c],
+M.array[O]=$[sa[0]],M.array[O+1]=$[sa[1]],M.array[O+2]=$[sa[2]],M.array[O+3]=aa[sa[0]],M.array[O+4]=aa[sa[1]],M.array[O+5]=aa[sa[2]],M.array[O+6]=ba[sa[0]],M.array[O+7]=ba[sa[1]],M.array[O+8]=ba[sa[2]],O+=9;else if("faces"===M.boundTo)for(D=0,F=ea.length;D<F;D++)ba=aa=$=Qa=M.value[ea[D]],M.array[O]=$[sa[0]],M.array[O+1]=$[sa[1]],M.array[O+2]=$[sa[2]],M.array[O+3]=aa[sa[0]],M.array[O+4]=aa[sa[1]],M.array[O+5]=aa[sa[2]],M.array[O+6]=ba[sa[0]],M.array[O+7]=ba[sa[1]],M.array[O+8]=ba[sa[2]],O+=9;else if("faceVertices"===
+M.boundTo)for(D=0,F=ea.length;D<F;D++)Qa=M.value[ea[D]],$=Qa[0],aa=Qa[1],ba=Qa[2],M.array[O]=$[sa[0]],M.array[O+1]=$[sa[1]],M.array[O+2]=$[sa[2]],M.array[O+3]=aa[sa[0]],M.array[O+4]=aa[sa[1]],M.array[O+5]=aa[sa[2]],M.array[O+6]=ba[sa[0]],M.array[O+7]=ba[sa[1]],M.array[O+8]=ba[sa[2]],O+=9}else if(4===M.size)if(void 0===M.boundTo||"vertices"===M.boundTo)for(D=0,F=ea.length;D<F;D++)I=hb[ea[D]],$=M.value[I.a],aa=M.value[I.b],ba=M.value[I.c],M.array[O]=$.x,M.array[O+1]=$.y,M.array[O+2]=$.z,M.array[O+3]=
+$.w,M.array[O+4]=aa.x,M.array[O+5]=aa.y,M.array[O+6]=aa.z,M.array[O+7]=aa.w,M.array[O+8]=ba.x,M.array[O+9]=ba.y,M.array[O+10]=ba.z,M.array[O+11]=ba.w,O+=12;else if("faces"===M.boundTo)for(D=0,F=ea.length;D<F;D++)ba=aa=$=Qa=M.value[ea[D]],M.array[O]=$.x,M.array[O+1]=$.y,M.array[O+2]=$.z,M.array[O+3]=$.w,M.array[O+4]=aa.x,M.array[O+5]=aa.y,M.array[O+6]=aa.z,M.array[O+7]=aa.w,M.array[O+8]=ba.x,M.array[O+9]=ba.y,M.array[O+10]=ba.z,M.array[O+11]=ba.w,O+=12;else if("faceVertices"===M.boundTo)for(D=0,F=
+ea.length;D<F;D++)Qa=M.value[ea[D]],$=Qa[0],aa=Qa[1],ba=Qa[2],M.array[O]=$.x,M.array[O+1]=$.y,M.array[O+2]=$.z,M.array[O+3]=$.w,M.array[O+4]=aa.x,M.array[O+5]=aa.y,M.array[O+6]=aa.z,M.array[O+7]=aa.w,M.array[O+8]=ba.x,M.array[O+9]=ba.y,M.array[O+10]=ba.z,M.array[O+11]=ba.w,O+=12;m.bindBuffer(m.ARRAY_BUFFER,M.buffer);m.bufferData(m.ARRAY_BUFFER,M.array,C)}E&&(delete x.__inittedArrays,delete x.__colorArray,delete x.__normalArray,delete x.__tangentArray,delete x.__uvArray,delete x.__uv2Array,delete x.__faceArray,
+delete x.__vertexArray,delete x.__lineArray,delete x.__skinIndexArray,delete x.__skinWeightArray)}}l.verticesNeedUpdate=!1;l.morphTargetsNeedUpdate=!1;l.elementsNeedUpdate=!1;l.uvsNeedUpdate=!1;l.normalsNeedUpdate=!1;l.colorsNeedUpdate=!1;l.tangentsNeedUpdate=!1;l.buffersNeedUpdate=!1;s.attributes&&u(s)}else if(k instanceof THREE.Line){s=d(k,l);n=s.attributes&&w(s);if(l.verticesNeedUpdate||l.colorsNeedUpdate||l.lineDistancesNeedUpdate||n){var Xa=l,Wb=m.DYNAMIC_DRAW,Lb=void 0,Mb=void 0,Nb=void 0,Xb=
+void 0,pa=void 0,Yb=void 0,Fb=Xa.vertices,Ib=Xa.colors,Kb=Xa.lineDistances,Qb=Fb.length,Rb=Ib.length,Sb=Kb.length,Zb=Xa.__vertexArray,$b=Xa.__colorArray,lc=Xa.__lineDistanceArray,dc=Xa.colorsNeedUpdate,ec=Xa.lineDistancesNeedUpdate,hc=Xa.__webglCustomAttributesList,ac=void 0,mc=void 0,Ba=void 0,yb=void 0,Ma=void 0,na=void 0;if(Xa.verticesNeedUpdate){for(Lb=0;Lb<Qb;Lb++)Xb=Fb[Lb],pa=3*Lb,Zb[pa]=Xb.x,Zb[pa+1]=Xb.y,Zb[pa+2]=Xb.z;m.bindBuffer(m.ARRAY_BUFFER,Xa.__webglVertexBuffer);m.bufferData(m.ARRAY_BUFFER,
+Zb,Wb)}if(dc){for(Mb=0;Mb<Rb;Mb++)Yb=Ib[Mb],pa=3*Mb,$b[pa]=Yb.r,$b[pa+1]=Yb.g,$b[pa+2]=Yb.b;m.bindBuffer(m.ARRAY_BUFFER,Xa.__webglColorBuffer);m.bufferData(m.ARRAY_BUFFER,$b,Wb)}if(ec){for(Nb=0;Nb<Sb;Nb++)lc[Nb]=Kb[Nb];m.bindBuffer(m.ARRAY_BUFFER,Xa.__webglLineDistanceBuffer);m.bufferData(m.ARRAY_BUFFER,lc,Wb)}if(hc)for(ac=0,mc=hc.length;ac<mc;ac++)if(na=hc[ac],na.needsUpdate&&(void 0===na.boundTo||"vertices"===na.boundTo)){pa=0;yb=na.value.length;if(1===na.size)for(Ba=0;Ba<yb;Ba++)na.array[Ba]=na.value[Ba];
+else if(2===na.size)for(Ba=0;Ba<yb;Ba++)Ma=na.value[Ba],na.array[pa]=Ma.x,na.array[pa+1]=Ma.y,pa+=2;else if(3===na.size)if("c"===na.type)for(Ba=0;Ba<yb;Ba++)Ma=na.value[Ba],na.array[pa]=Ma.r,na.array[pa+1]=Ma.g,na.array[pa+2]=Ma.b,pa+=3;else for(Ba=0;Ba<yb;Ba++)Ma=na.value[Ba],na.array[pa]=Ma.x,na.array[pa+1]=Ma.y,na.array[pa+2]=Ma.z,pa+=3;else if(4===na.size)for(Ba=0;Ba<yb;Ba++)Ma=na.value[Ba],na.array[pa]=Ma.x,na.array[pa+1]=Ma.y,na.array[pa+2]=Ma.z,na.array[pa+3]=Ma.w,pa+=4;m.bindBuffer(m.ARRAY_BUFFER,
+na.buffer);m.bufferData(m.ARRAY_BUFFER,na.array,Wb)}}l.verticesNeedUpdate=!1;l.colorsNeedUpdate=!1;l.lineDistancesNeedUpdate=!1;s.attributes&&u(s)}else if(k instanceof THREE.ParticleSystem){s=d(k,l);n=s.attributes&&w(s);if(l.verticesNeedUpdate||l.colorsNeedUpdate||k.sortParticles||n){var ib=l,ic=m.DYNAMIC_DRAW,Ob=k,Na=void 0,jb=void 0,kb=void 0,T=void 0,lb=void 0,rb=void 0,bc=ib.vertices,jc=bc.length,kc=ib.colors,nc=kc.length,vb=ib.__vertexArray,wb=ib.__colorArray,mb=ib.__sortArray,oc=ib.verticesNeedUpdate,
+pc=ib.colorsNeedUpdate,nb=ib.__webglCustomAttributesList,Za=void 0,zb=void 0,ca=void 0,$a=void 0,ka=void 0,S=void 0;if(Ob.sortParticles){cc.copy(Pb);cc.multiply(Ob.matrixWorld);for(Na=0;Na<jc;Na++)kb=bc[Na],xa.copy(kb),xa.applyProjection(cc),mb[Na]=[xa.z,Na];mb.sort(q);for(Na=0;Na<jc;Na++)kb=bc[mb[Na][1]],T=3*Na,vb[T]=kb.x,vb[T+1]=kb.y,vb[T+2]=kb.z;for(jb=0;jb<nc;jb++)T=3*jb,rb=kc[mb[jb][1]],wb[T]=rb.r,wb[T+1]=rb.g,wb[T+2]=rb.b;if(nb)for(Za=0,zb=nb.length;Za<zb;Za++)if(S=nb[Za],void 0===S.boundTo||
+"vertices"===S.boundTo)if(T=0,$a=S.value.length,1===S.size)for(ca=0;ca<$a;ca++)lb=mb[ca][1],S.array[ca]=S.value[lb];else if(2===S.size)for(ca=0;ca<$a;ca++)lb=mb[ca][1],ka=S.value[lb],S.array[T]=ka.x,S.array[T+1]=ka.y,T+=2;else if(3===S.size)if("c"===S.type)for(ca=0;ca<$a;ca++)lb=mb[ca][1],ka=S.value[lb],S.array[T]=ka.r,S.array[T+1]=ka.g,S.array[T+2]=ka.b,T+=3;else for(ca=0;ca<$a;ca++)lb=mb[ca][1],ka=S.value[lb],S.array[T]=ka.x,S.array[T+1]=ka.y,S.array[T+2]=ka.z,T+=3;else if(4===S.size)for(ca=0;ca<
+$a;ca++)lb=mb[ca][1],ka=S.value[lb],S.array[T]=ka.x,S.array[T+1]=ka.y,S.array[T+2]=ka.z,S.array[T+3]=ka.w,T+=4}else{if(oc)for(Na=0;Na<jc;Na++)kb=bc[Na],T=3*Na,vb[T]=kb.x,vb[T+1]=kb.y,vb[T+2]=kb.z;if(pc)for(jb=0;jb<nc;jb++)rb=kc[jb],T=3*jb,wb[T]=rb.r,wb[T+1]=rb.g,wb[T+2]=rb.b;if(nb)for(Za=0,zb=nb.length;Za<zb;Za++)if(S=nb[Za],S.needsUpdate&&(void 0===S.boundTo||"vertices"===S.boundTo))if($a=S.value.length,T=0,1===S.size)for(ca=0;ca<$a;ca++)S.array[ca]=S.value[ca];else if(2===S.size)for(ca=0;ca<$a;ca++)ka=
+S.value[ca],S.array[T]=ka.x,S.array[T+1]=ka.y,T+=2;else if(3===S.size)if("c"===S.type)for(ca=0;ca<$a;ca++)ka=S.value[ca],S.array[T]=ka.r,S.array[T+1]=ka.g,S.array[T+2]=ka.b,T+=3;else for(ca=0;ca<$a;ca++)ka=S.value[ca],S.array[T]=ka.x,S.array[T+1]=ka.y,S.array[T+2]=ka.z,T+=3;else if(4===S.size)for(ca=0;ca<$a;ca++)ka=S.value[ca],S.array[T]=ka.x,S.array[T+1]=ka.y,S.array[T+2]=ka.z,S.array[T+3]=ka.w,T+=4}if(oc||Ob.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,ib.__webglVertexBuffer),m.bufferData(m.ARRAY_BUFFER,
+vb,ic);if(pc||Ob.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,ib.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,wb,ic);if(nb)for(Za=0,zb=nb.length;Za<zb;Za++)if(S=nb[Za],S.needsUpdate||Ob.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,S.buffer),m.bufferData(m.ARRAY_BUFFER,S.array,ic)}l.verticesNeedUpdate=!1;l.colorsNeedUpdate=!1;s.attributes&&u(s)}}};this.initMaterial=function(a,b,c,d){var e,f,g,h;a.addEventListener("dispose",Sb);var k,l,p,n;a instanceof THREE.MeshDepthMaterial?n="depth":a instanceof THREE.MeshNormalMaterial?
+n="normal":a instanceof THREE.MeshBasicMaterial?n="basic":a instanceof THREE.MeshLambertMaterial?n="lambert":a instanceof THREE.MeshPhongMaterial?n="phong":a instanceof THREE.LineBasicMaterial?n="basic":a instanceof THREE.LineDashedMaterial?n="dashed":a instanceof THREE.ParticleSystemMaterial&&(n="particle_basic");n&&(e=THREE.ShaderLib[n],a.uniforms=THREE.UniformsUtils.clone(e.uniforms),a.vertexShader=e.vertexShader,a.fragmentShader=e.fragmentShader);p=h=g=f=e=0;for(var q=b.length;p<q;p++){var r=
+b[p];r.onlyShadow||!1===r.visible||(r instanceof THREE.DirectionalLight&&e++,r instanceof THREE.PointLight&&f++,r instanceof THREE.SpotLight&&g++,r instanceof THREE.HemisphereLight&&h++)}q=p=0;for(r=b.length;q<r;q++){var s=b[q];s.castShadow&&(s instanceof THREE.SpotLight&&p++,s instanceof THREE.DirectionalLight&&!s.shadowCascade&&p++)}b=p;Gb&&d&&d.skeleton&&d.skeleton.useVertexTexture?p=1024:(p=m.getParameter(m.MAX_VERTEX_UNIFORM_VECTORS),p=Math.floor((p-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&
+(p=Math.min(d.skeleton.bones.length,p),p<d.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.skeleton.bones.length+", this GPU supports just "+p+" (try OpenGL instead of ANGLE)")));c={precision:Q,supportsVertexTextures:Jb,map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:da,
+skinning:a.skinning,maxBones:p,useVertexTexture:Gb&&d&&d.skeleton&&d.skeleton.useVertexTexture,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxHemiLights:h,maxShadows:b,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow&&0<b,shadowMapType:this.shadowMapType,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,
+wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide};d=[];n?d.push(n):(d.push(a.fragmentShader),d.push(a.vertexShader));for(var u in a.defines)d.push(u),d.push(a.defines[u]);for(l in c)d.push(l),d.push(c[l]);n=d.join();var t;l=0;for(u=ga.length;l<u;l++)if(d=ga[l],d.code===n){t=d;t.usedTimes++;break}void 0===t&&(t=new THREE.WebGLProgram(this,n,a,c),ga.push(t),P.info.memory.programs=ga.length);a.program=t;t=a.program.attributes;if(a.morphTargets)for(a.numSupportedMorphTargets=
+0,u="morphTarget",l=0;l<this.maxMorphTargets;l++)n=u+l,0<=t[n]&&a.numSupportedMorphTargets++;if(a.morphNormals)for(a.numSupportedMorphNormals=0,u="morphNormal",l=0;l<this.maxMorphNormals;l++)n=u+l,0<=t[n]&&a.numSupportedMorphNormals++;a.uniformsList=[];for(k in a.uniforms)a.uniformsList.push([a.uniforms[k],k])};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?m.disable(m.CULL_FACE):(b===THREE.FrontFaceDirectionCW?m.frontFace(m.CW):m.frontFace(m.CCW),a===THREE.CullFaceBack?m.cullFace(m.BACK):
+a===THREE.CullFaceFront?m.cullFace(m.FRONT):m.cullFace(m.FRONT_AND_BACK),m.enable(m.CULL_FACE))};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide;a=a.side===THREE.BackSide;Ga!==b&&(b?m.disable(m.CULL_FACE):m.enable(m.CULL_FACE),Ga=b);ha!==a&&(a?m.frontFace(m.CW):m.frontFace(m.CCW),ha=a)};this.setDepthTest=function(a){ia!==a&&(a?m.enable(m.DEPTH_TEST):m.disable(m.DEPTH_TEST),ia=a)};this.setDepthWrite=function(a){ma!==a&&(m.depthMask(a),ma=a)};this.setBlending=function(a,b,c,d){a!==
+Oa&&(a===THREE.NoBlending?m.disable(m.BLEND):a===THREE.AdditiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.SRC_ALPHA,m.ONE)):a===THREE.SubtractiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.SRC_COLOR)):a===THREE.CustomBlending?m.enable(m.BLEND):(m.enable(m.BLEND),m.blendEquationSeparate(m.FUNC_ADD,m.FUNC_ADD),m.blendFuncSeparate(m.SRC_ALPHA,
+m.ONE_MINUS_SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA)),Oa=a);if(a===THREE.CustomBlending){if(b!==Ra&&(m.blendEquation(z(b)),Ra=b),c!==Sa||d!==Fa)m.blendFunc(z(c),z(d)),Sa=c,Fa=d}else Fa=Sa=Ra=null};this.setTexture=function(a,b){if(a.needsUpdate){a.__webglInit||(a.__webglInit=!0,a.addEventListener("dispose",Hb),a.__webglTexture=m.createTexture(),P.info.memory.textures++);m.activeTexture(m.TEXTURE0+b);m.bindTexture(m.TEXTURE_2D,a.__webglTexture);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,a.flipY);m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
+a.premultiplyAlpha);m.pixelStorei(m.UNPACK_ALIGNMENT,a.unpackAlignment);var c=a.image,d=THREE.Math.isPowerOfTwo(c.width)&&THREE.Math.isPowerOfTwo(c.height),e=z(a.format),f=z(a.type);D(m.TEXTURE_2D,a,d);var g=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<g.length&&d){for(var h=0,k=g.length;h<k;h++)c=g[h],m.texImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(a instanceof THREE.CompressedTexture)for(h=
+0,k=g.length;h<k;h++)c=g[h],a.format!==THREE.RGBAFormat?m.compressedTexImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,c.data):m.texImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);else if(0<g.length&&d){h=0;for(k=g.length;h<k;h++)c=g[h],m.texImage2D(m.TEXTURE_2D,h,e,e,f,c);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&m.generateMipmap(m.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()}else m.activeTexture(m.TEXTURE0+b),m.bindTexture(m.TEXTURE_2D,
+a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",Rb);a.__webglTexture=m.createTexture();P.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height),d=z(a.format),e=z(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture);
+D(m.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=m.createFramebuffer();a.__webglRenderbuffer[f]=m.createRenderbuffer();m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=m.TEXTURE_CUBE_MAP_POSITIVE_X+f;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[f]);m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,h,g.__webglTexture,0);C(a.__webglRenderbuffer[f],a)}c&&m.generateMipmap(m.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=m.createFramebuffer(),
+a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:m.createRenderbuffer(),m.bindTexture(m.TEXTURE_2D,a.__webglTexture),D(m.TEXTURE_2D,a,c),m.texImage2D(m.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=m.TEXTURE_2D,m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):
+a.depthBuffer&&a.stencilBuffer&&m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):C(a.__webglRenderbuffer,a),c&&m.generateMipmap(m.TEXTURE_2D);b?m.bindTexture(m.TEXTURE_CUBE_MAP,null):m.bindTexture(m.TEXTURE_2D,null);m.bindRenderbuffer(m.RENDERBUFFER,null);m.bindFramebuffer(m.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Da,a=Ja,d=Ca,e=va);b!==Ha&&(m.bindFramebuffer(m.FRAMEBUFFER,
+b),m.viewport(d,e,c,a),Ha=b);ja=c;ra=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:
+THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=null};
+THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){this.width=a;this.height=b},clone:function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;
+a.shareDepthFrom=this.shareDepthFrom;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLProgram=function(){var a=0;return function(b,c,d,e){var f=b.context,g=d.fragmentShader,h=d.vertexShader,k=d.uniforms,l=d.attributes,n=d.defines,q=d.index0AttributeName;void 0===q&&!0===e.morphTargets&&(q="position");var p="SHADOWMAP_TYPE_BASIC";e.shadowMapType===THREE.PCFShadowMap?p="SHADOWMAP_TYPE_PCF":e.shadowMapType===THREE.PCFSoftShadowMap&&(p="SHADOWMAP_TYPE_PCF_SOFT");var s,t;s=[];for(var r in n)t=n[r],!1!==t&&(t="#define "+r+" "+t,s.push(t));s=s.join("\n");n=f.createProgram();d instanceof
+THREE.RawShaderMaterial?b=d="":(d=["precision "+e.precision+" float;","precision "+e.precision+" int;",s,e.supportsVertexTextures?"#define VERTEX_TEXTURES":"",b.gammaInput?"#define GAMMA_INPUT":"",b.gammaOutput?"#define GAMMA_OUTPUT":"","#define MAX_DIR_LIGHTS "+e.maxDirLights,"#define MAX_POINT_LIGHTS "+e.maxPointLights,"#define MAX_SPOT_LIGHTS "+e.maxSpotLights,"#define MAX_HEMI_LIGHTS "+e.maxHemiLights,"#define MAX_SHADOWS "+e.maxShadows,"#define MAX_BONES "+e.maxBones,e.map?"#define USE_MAP":
+"",e.envMap?"#define USE_ENVMAP":"",e.lightMap?"#define USE_LIGHTMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.vertexColors?"#define USE_COLOR":"",e.skinning?"#define USE_SKINNING":"",e.useVertexTexture?"#define BONE_TEXTURE":"",e.morphTargets?"#define USE_MORPHTARGETS":"",e.morphNormals?"#define USE_MORPHNORMALS":"",e.wrapAround?"#define WRAP_AROUND":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":
+"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+p:"",e.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",e.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",e.sizeAttenuation?"#define USE_SIZEATTENUATION":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\n\tattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\n\tattribute vec3 morphTarget0;\n\tattribute vec3 morphTarget1;\n\tattribute vec3 morphTarget2;\n\tattribute vec3 morphTarget3;\n\t#ifdef USE_MORPHNORMALS\n\t\tattribute vec3 morphNormal0;\n\t\tattribute vec3 morphNormal1;\n\t\tattribute vec3 morphNormal2;\n\t\tattribute vec3 morphNormal3;\n\t#else\n\t\tattribute vec3 morphTarget4;\n\t\tattribute vec3 morphTarget5;\n\t\tattribute vec3 morphTarget6;\n\t\tattribute vec3 morphTarget7;\n\t#endif\n#endif\n#ifdef USE_SKINNING\n\tattribute vec4 skinIndex;\n\tattribute vec4 skinWeight;\n#endif\n"].join("\n"),
+b=["precision "+e.precision+" float;","precision "+e.precision+" int;",e.bumpMap||e.normalMap?"#extension GL_OES_standard_derivatives : enable":"",s,"#define MAX_DIR_LIGHTS "+e.maxDirLights,"#define MAX_POINT_LIGHTS "+e.maxPointLights,"#define MAX_SPOT_LIGHTS "+e.maxSpotLights,"#define MAX_HEMI_LIGHTS "+e.maxHemiLights,"#define MAX_SHADOWS "+e.maxShadows,e.alphaTest?"#define ALPHATEST "+e.alphaTest:"",b.gammaInput?"#define GAMMA_INPUT":"",b.gammaOutput?"#define GAMMA_OUTPUT":"",e.useFog&&e.fog?"#define USE_FOG":
+"",e.useFog&&e.fogExp?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.lightMap?"#define USE_LIGHTMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.vertexColors?"#define USE_COLOR":"",e.metal?"#define METAL":"",e.wrapAround?"#define WRAP_AROUND":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?
+"#define "+p:"",e.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",e.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n"));h=new THREE.WebGLShader(f,f.VERTEX_SHADER,d+h);g=new THREE.WebGLShader(f,f.FRAGMENT_SHADER,b+g);f.attachShader(n,h);f.attachShader(n,g);void 0!==q&&f.bindAttribLocation(n,0,q);f.linkProgram(n);!1===f.getProgramParameter(n,f.LINK_STATUS)&&(console.error("Could not initialise shader"),
+console.error("gl.VALIDATE_STATUS",f.getProgramParameter(n,f.VALIDATE_STATUS)),console.error("gl.getError()",f.getError()));""!==f.getProgramInfoLog(n)&&console.error("gl.getProgramInfoLog()",f.getProgramInfoLog(n));f.deleteShader(h);f.deleteShader(g);q="viewMatrix modelViewMatrix projectionMatrix normalMatrix modelMatrix cameraPosition morphTargetInfluences".split(" ");e.useVertexTexture?(q.push("boneTexture"),q.push("boneTextureWidth"),q.push("boneTextureHeight")):q.push("boneGlobalMatrices");e.logarithmicDepthBuffer&&
+q.push("logDepthBufFC");for(var v in k)q.push(v);k=q;v={};q=0;for(b=k.length;q<b;q++)p=k[q],v[p]=f.getUniformLocation(n,p);this.uniforms=v;q="position normal uv uv2 tangent color skinIndex skinWeight lineDistance".split(" ");for(k=0;k<e.maxMorphTargets;k++)q.push("morphTarget"+k);for(k=0;k<e.maxMorphNormals;k++)q.push("morphNormal"+k);for(var w in l)q.push(w);e=q;l={};w=0;for(k=e.length;w<k;w++)v=e[w],l[v]=f.getAttribLocation(n,v);this.attributes=l;this.id=a++;this.code=c;this.usedTimes=1;this.program=
+n;this.vertexShader=h;this.fragmentShader=g;return this}}();THREE.WebGLShader=function(){var a=function(a){a=a.split("\n");for(var c=0;c<a.length;c++)a[c]=c+1+": "+a[c];return a.join("\n")};return function(b,c,d){c=b.createShader(c);b.shaderSource(c,d);b.compileShader(c);!1===b.getShaderParameter(c,b.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile.");""!==b.getShaderInfoLog(c)&&(console.error("THREE.WebGLShader:","gl.getShaderInfoLog()",b.getShaderInfoLog(c)),console.error(a(d)));return c}}();THREE.RenderableVertex=function(){this.position=new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};THREE.RenderableFace=function(){this.id=0;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.normalModel=new THREE.Vector3;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsLength=0;this.material=this.color=null;this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2];this.z=0};THREE.RenderableObject=function(){this.id=0;this.object=null;this.z=0};THREE.RenderableSprite=function(){this.id=0;this.object=null;this.rotation=this.z=this.y=this.x=0;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.id=0;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.vertexColors=[new THREE.Color,new THREE.Color];this.material=null;this.z=0};THREE.GeometryUtils={merge:function(a,b,c){console.warn("DEPRECATED: GeometryUtils's .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");var d;b instanceof THREE.Mesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,b=b.geometry);a.merge(b,d,c)},randomPointInTriangle:function(){var a=new THREE.Vector3;return function(b,c,d){var e=new THREE.Vector3,f=THREE.Math.random16(),g=THREE.Math.random16();1<f+g&&(f=1-f,g=1-g);var h=1-f-g;e.copy(b);e.multiplyScalar(f);
+a.copy(c);a.multiplyScalar(g);e.add(a);a.copy(d);a.multiplyScalar(h);e.add(a);return e}}(),randomPointInFace:function(a,b,c){return THREE.GeometryUtils.randomPointInTriangle(b.vertices[a.a],b.vertices[a.b],b.vertices[a.c])},randomPointsInGeometry:function(a,b){function c(a){function b(c,d){if(d<c)return c;var e=c+Math.floor((d-c)/2);return l[e]>a?b(c,e-1):l[e]<a?b(e+1,d):e}return b(0,l.length-1)}var d,e,f=a.faces,g=a.vertices,h=f.length,k=0,l=[],n,q,p;for(e=0;e<h;e++)d=f[e],n=g[d.a],q=g[d.b],p=g[d.c],
+d._area=THREE.GeometryUtils.triangleArea(n,q,p),k+=d._area,l[e]=k;d=[];for(e=0;e<b;e++)g=THREE.Math.random16()*k,g=c(g),d[e]=THREE.GeometryUtils.randomPointInFace(f[g],a,!0);return d},triangleArea:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){a.subVectors(d,c);b.subVectors(e,c);a.cross(b);return 0.5*a.length()}}(),center:function(a){a.computeBoundingBox();var b=a.boundingBox,c=new THREE.Vector3;c.addVectors(b.min,b.max);c.multiplyScalar(-0.5);a.applyMatrix((new THREE.Matrix4).makeTranslation(c.x,
+c.y,c.z));a.computeBoundingBox();return c}};THREE.ImageUtils={crossOrigin:void 0,loadTexture:function(a,b,c,d){var e=new THREE.ImageLoader;e.crossOrigin=this.crossOrigin;var f=new THREE.Texture(void 0,b);b=e.load(a,function(){f.needsUpdate=!0;c&&c(f)},void 0,function(a){d&&d(a)});f.image=b;f.sourceFile=a;return f},loadCompressedTexture:function(a,b,c,d){var e=new THREE.CompressedTexture;e.mapping=b;var f=new XMLHttpRequest;f.onload=function(){var a=THREE.ImageUtils.parseDDS(f.response,!0);e.format=a.format;e.mipmaps=a.mipmaps;e.image.width=
+a.width;e.image.height=a.height;e.generateMipmaps=!1;e.needsUpdate=!0;c&&c(e)};f.onerror=d;f.open("GET",a,!0);f.responseType="arraybuffer";f.send(null);return e},loadTextureCube:function(a,b,c,d){var e=[];e.loadCount=0;d=new THREE.ImageLoader;d.crossOrigin=this.crossOrigin;var f=new THREE.Texture;f.image=e;void 0!==b&&(f.mapping=b);f.flipY=!1;b=0;for(var g=a.length;b<g;++b){var h=d.load(a[b],function(){e.loadCount+=1;6===e.loadCount&&(f.needsUpdate=!0,c&&c(f))});e[b]=h}return f},loadCompressedTextureCube:function(a,
+b,c,d){var e=[];e.loadCount=0;var f=new THREE.CompressedTexture;f.image=e;void 0!==b&&(f.mapping=b);f.flipY=!1;f.generateMipmaps=!1;b=function(a,b){return function(){var d=THREE.ImageUtils.parseDDS(a.response,!0);b.format=d.format;b.mipmaps=d.mipmaps;b.width=d.width;b.height=d.height;e.loadCount+=1;6===e.loadCount&&(f.format=d.format,f.needsUpdate=!0,c&&c(f))}};if(a instanceof Array)for(var g=0,h=a.length;g<h;++g){var k={};e[g]=k;var l=new XMLHttpRequest;l.onload=b(l,k);l.onerror=d;k=a[g];l.open("GET",
+k,!0);l.responseType="arraybuffer";l.send(null)}else l=new XMLHttpRequest,l.onload=function(){var a=THREE.ImageUtils.parseDDS(l.response,!0);if(a.isCubemap){for(var b=a.mipmaps.length/a.mipmapCount,d=0;d<b;d++){e[d]={mipmaps:[]};for(var g=0;g<a.mipmapCount;g++)e[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+g]),e[d].format=a.format,e[d].width=a.width,e[d].height=a.height}f.format=a.format;f.needsUpdate=!0;c&&c(f)}},l.onerror=d,l.open("GET",a,!0),l.responseType="arraybuffer",l.send(null);return f},loadDDSTexture:function(a,
+b,c,d){var e=[];e.loadCount=0;var f=new THREE.CompressedTexture;f.image=e;void 0!==b&&(f.mapping=b);f.flipY=!1;f.generateMipmaps=!1;var g=new XMLHttpRequest;g.onload=function(){var a=THREE.ImageUtils.parseDDS(g.response,!0);if(a.isCubemap)for(var b=a.mipmaps.length/a.mipmapCount,d=0;d<b;d++){e[d]={mipmaps:[]};for(var n=0;n<a.mipmapCount;n++)e[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+n]),e[d].format=a.format,e[d].width=a.width,e[d].height=a.height}else f.image.width=a.width,f.image.height=a.height,
+f.mipmaps=a.mipmaps;f.format=a.format;f.needsUpdate=!0;c&&c(f)};g.onerror=d;g.open("GET",a,!0);g.responseType="arraybuffer";g.send(null);return f},parseDDS:function(a,b){function c(a){return a.charCodeAt(0)+(a.charCodeAt(1)<<8)+(a.charCodeAt(2)<<16)+(a.charCodeAt(3)<<24)}function d(a,b,c,d){var e=c*d*4;a=new Uint8Array(a,b,e);for(var e=new Uint8Array(e),f=b=0,g=0;g<d;g++)for(var h=0;h<c;h++){var k=a[f];f++;var l=a[f];f++;var p=a[f];f++;var n=a[f];f++;e[b]=p;b++;e[b]=l;b++;e[b]=k;b++;e[b]=n;b++}return e}
+var e={mipmaps:[],width:0,height:0,format:null,mipmapCount:1},f=c("DXT1"),g=c("DXT3"),h=c("DXT5"),k=new Int32Array(a,0,31);if(542327876!==k[0])return console.error("ImageUtils.parseDDS(): Invalid magic number in DDS header"),e;if(!k[20]&4)return console.error("ImageUtils.parseDDS(): Unsupported format, must contain a FourCC code"),e;var l=k[21],n=!1;switch(l){case f:f=8;e.format=THREE.RGB_S3TC_DXT1_Format;break;case g:f=16;e.format=THREE.RGBA_S3TC_DXT3_Format;break;case h:f=16;e.format=THREE.RGBA_S3TC_DXT5_Format;
+break;default:if(32==k[22]&&k[23]&16711680&&k[24]&65280&&k[25]&255&&k[26]&4278190080)n=!0,f=64,e.format=THREE.RGBAFormat;else return console.error("ImageUtils.parseDDS(): Unsupported FourCC code: ",String.fromCharCode(l&255,l>>8&255,l>>16&255,l>>24&255)),e}e.mipmapCount=1;k[2]&131072&&!1!==b&&(e.mipmapCount=Math.max(1,k[7]));e.isCubemap=k[28]&512?!0:!1;e.width=k[4];e.height=k[3];for(var k=k[1]+4,g=e.width,h=e.height,l=e.isCubemap?6:1,q=0;q<l;q++){for(var p=0;p<e.mipmapCount;p++){if(n)var s=d(a,k,
+g,h),t=s.length;else t=Math.max(4,g)/4*Math.max(4,h)/4*f,s=new Uint8Array(a,k,t);e.mipmaps.push({data:s,width:g,height:h});k+=t;g=Math.max(0.5*g,1);h=Math.max(0.5*h,1)}g=e.width;h=e.height}return e},getNormalMap:function(a,b){var c=function(a){var b=Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);return[a[0]/b,a[1]/b,a[2]/b]};b|=1;var d=a.width,e=a.height,f=document.createElement("canvas");f.width=d;f.height=e;var g=f.getContext("2d");g.drawImage(a,0,0);for(var h=g.getImageData(0,0,d,e).data,k=g.createImageData(d,
+e),l=k.data,n=0;n<d;n++)for(var q=0;q<e;q++){var p=0>q-1?0:q-1,s=q+1>e-1?e-1:q+1,t=0>n-1?0:n-1,r=n+1>d-1?d-1:n+1,v=[],w=[0,0,h[4*(q*d+n)]/255*b];v.push([-1,0,h[4*(q*d+t)]/255*b]);v.push([-1,-1,h[4*(p*d+t)]/255*b]);v.push([0,-1,h[4*(p*d+n)]/255*b]);v.push([1,-1,h[4*(p*d+r)]/255*b]);v.push([1,0,h[4*(q*d+r)]/255*b]);v.push([1,1,h[4*(s*d+r)]/255*b]);v.push([0,1,h[4*(s*d+n)]/255*b]);v.push([-1,1,h[4*(s*d+t)]/255*b]);p=[];t=v.length;for(s=0;s<t;s++){var r=v[s],u=v[(s+1)%t],r=[r[0]-w[0],r[1]-w[1],r[2]-w[2]],
+u=[u[0]-w[0],u[1]-w[1],u[2]-w[2]];p.push(c([r[1]*u[2]-r[2]*u[1],r[2]*u[0]-r[0]*u[2],r[0]*u[1]-r[1]*u[0]]))}v=[0,0,0];for(s=0;s<p.length;s++)v[0]+=p[s][0],v[1]+=p[s][1],v[2]+=p[s][2];v[0]/=p.length;v[1]/=p.length;v[2]/=p.length;w=4*(q*d+n);l[w]=(v[0]+1)/2*255|0;l[w+1]=(v[1]+1)/2*255|0;l[w+2]=255*v[2]|0;l[w+3]=255}g.putImageData(k,0,0);return f},generateDataTexture:function(a,b,c){var d=a*b,e=new Uint8Array(3*d),f=Math.floor(255*c.r),g=Math.floor(255*c.g);c=Math.floor(255*c.b);for(var h=0;h<d;h++)e[3*
+h]=f,e[3*h+1]=g,e[3*h+2]=c;a=new THREE.DataTexture(e,a,b,THREE.RGBFormat);a.needsUpdate=!0;return a}};THREE.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new THREE.Object3D,d=0,e=b.length;d<e;d++)c.add(new THREE.Mesh(a,b[d]));return c},detach:function(a,b,c){a.applyMatrix(b.matrixWorld);b.remove(a);c.add(a)},attach:function(a,b,c){var d=new THREE.Matrix4;d.getInverse(c.matrixWorld);a.applyMatrix(d);b.remove(a);c.add(a)}};THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:150,divisions:10,getFace:function(){return this.faces[this.face][this.weight][this.style]},loadFace:function(a){var b=a.familyName.toLowerCase();this.faces[b]=this.faces[b]||{};this.faces[b][a.cssFontWeight]=this.faces[b][a.cssFontWeight]||{};this.faces[b][a.cssFontWeight][a.cssFontStyle]=a;return this.faces[b][a.cssFontWeight][a.cssFontStyle]=a},drawText:function(a){var b=this.getFace(),c=this.size/b.resolution,d=0,e=
+String(a).split(""),f=e.length,g=[];for(a=0;a<f;a++){var h=new THREE.Path,h=this.extractGlyphPoints(e[a],b,c,d,h),d=d+h.offset;g.push(h.path)}return{paths:g,offset:d/2}},extractGlyphPoints:function(a,b,c,d,e){var f=[],g,h,k,l,n,q,p,s,t,r,v,w=b.glyphs[a]||b.glyphs["?"];if(w){if(w.o)for(b=w._cachedOutline||(w._cachedOutline=w.o.split(" ")),l=b.length,a=0;a<l;)switch(k=b[a++],k){case "m":k=b[a++]*c+d;n=b[a++]*c;e.moveTo(k,n);break;case "l":k=b[a++]*c+d;n=b[a++]*c;e.lineTo(k,n);break;case "q":k=b[a++]*
+c+d;n=b[a++]*c;s=b[a++]*c+d;t=b[a++]*c;e.quadraticCurveTo(s,t,k,n);if(g=f[f.length-1])for(q=g.x,p=g.y,g=1,h=this.divisions;g<=h;g++){var u=g/h;THREE.Shape.Utils.b2(u,q,s,k);THREE.Shape.Utils.b2(u,p,t,n)}break;case "b":if(k=b[a++]*c+d,n=b[a++]*c,s=b[a++]*c+d,t=b[a++]*-c,r=b[a++]*c+d,v=b[a++]*-c,e.bezierCurveTo(k,n,s,t,r,v),g=f[f.length-1])for(q=g.x,p=g.y,g=1,h=this.divisions;g<=h;g++)u=g/h,THREE.Shape.Utils.b3(u,q,s,r,k),THREE.Shape.Utils.b3(u,p,t,v,n)}return{offset:w.ha*c,path:e}}}};
+THREE.FontUtils.generateShapes=function(a,b){b=b||{};var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f;c=THREE.FontUtils.drawText(a).paths;d=[];e=0;for(f=c.length;e<f;e++)Array.prototype.push.apply(d,c[e].toShapes());return d};
+(function(a){var b=function(a){for(var b=a.length,e=0,f=b-1,g=0;g<b;f=g++)e+=a[f].x*a[g].y-a[g].x*a[f].y;return 0.5*e};a.Triangulate=function(a,d){var e=a.length;if(3>e)return null;var f=[],g=[],h=[],k,l,n;if(0<b(a))for(l=0;l<e;l++)g[l]=l;else for(l=0;l<e;l++)g[l]=e-1-l;var q=2*e;for(l=e-1;2<e;){if(0>=q--){console.log("Warning, unable to triangulate polygon!");break}k=l;e<=k&&(k=0);l=k+1;e<=l&&(l=0);n=l+1;e<=n&&(n=0);var p;a:{var s=p=void 0,t=void 0,r=void 0,v=void 0,w=void 0,u=void 0,y=void 0,L=
+void 0,s=a[g[k]].x,t=a[g[k]].y,r=a[g[l]].x,v=a[g[l]].y,w=a[g[n]].x,u=a[g[n]].y;if(1E-10>(r-s)*(u-t)-(v-t)*(w-s))p=!1;else{var x=void 0,N=void 0,J=void 0,B=void 0,K=void 0,A=void 0,G=void 0,D=void 0,C=void 0,F=void 0,C=D=G=L=y=void 0,x=w-r,N=u-v,J=s-w,B=t-u,K=r-s,A=v-t;for(p=0;p<e;p++)if(y=a[g[p]].x,L=a[g[p]].y,!(y===s&&L===t||y===r&&L===v||y===w&&L===u)&&(G=y-s,D=L-t,C=y-r,F=L-v,y-=w,L-=u,C=x*F-N*C,G=K*D-A*G,D=J*L-B*y,-1E-10<=C&&-1E-10<=D&&-1E-10<=G)){p=!1;break a}p=!0}}if(p){f.push([a[g[k]],a[g[l]],
+a[g[n]]]);h.push([g[k],g[l],g[n]]);k=l;for(n=l+1;n<e;k++,n++)g[k]=g[n];e--;q=2*e}}return d?h:f};a.Triangulate.area=b;return a})(THREE.FontUtils);self._typeface_js={faces:THREE.FontUtils.faces,loadFace:THREE.FontUtils.loadFace};THREE.typeface_js=self._typeface_js;THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(a){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){a=this.getUtoTmapping(a);return this.getPoint(a)};THREE.Curve.prototype.getPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c};
+THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b};
+THREE.Curve.prototype.updateArcLengths=function(){this.needsUpdate=!0;this.getLengths()};THREE.Curve.prototype.getUtoTmapping=function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0<k)h=d-1;else{h=d;break}d=h;if(c[d]==f)return d/(e-1);g=c[d];return c=(d+(f-g)/(c[d+1]-g))/(e-1)};THREE.Curve.prototype.getTangent=function(a){var b=a-1E-4;a+=1E-4;0>b&&(b=0);1<a&&(a=1);b=this.getPoint(b);return this.getPoint(a).clone().sub(b).normalize()};
+THREE.Curve.prototype.getTangentAt=function(a){a=this.getUtoTmapping(a);return this.getTangent(a)};
+THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a,b,c,d,e){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){a=0.5*(c-a);d=0.5*(d-b);var f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}};
+THREE.Curve.create=function(a,b){a.prototype=Object.create(THREE.Curve.prototype);a.prototype.getPoint=b;return a};THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=!1};THREE.CurvePath.prototype=Object.create(THREE.Curve.prototype);THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new THREE.LineCurve(b,a))};
+THREE.CurvePath.prototype.getPoint=function(a){var b=a*this.getLength(),c=this.getCurveLengths();for(a=0;a<c.length;){if(c[a]>=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]};
+THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;c<d;c++)b+=this.curves[c].getLength(),a.push(b);return this.cacheLengths=a};
+THREE.CurvePath.prototype.getBoundingBox=function(){var a=this.getPoints(),b,c,d,e,f,g;b=c=Number.NEGATIVE_INFINITY;e=f=Number.POSITIVE_INFINITY;var h,k,l,n,q=a[0]instanceof THREE.Vector3;n=q?new THREE.Vector3:new THREE.Vector2;k=0;for(l=a.length;k<l;k++)h=a[k],h.x>b?b=h.x:h.x<e&&(e=h.x),h.y>c?c=h.y:h.y<f&&(f=h.y),q&&(h.z>d?d=h.z:h.z<g&&(g=h.z)),n.add(h);a={minX:e,minY:f,maxX:b,maxY:c};q&&(a.maxZ=d,a.minZ=g);return a};
+THREE.CurvePath.prototype.createPointsGeometry=function(a){a=this.getPoints(a,!0);return this.createGeometry(a)};THREE.CurvePath.prototype.createSpacedPointsGeometry=function(a){a=this.getSpacedPoints(a,!0);return this.createGeometry(a)};THREE.CurvePath.prototype.createGeometry=function(a){for(var b=new THREE.Geometry,c=0;c<a.length;c++)b.vertices.push(new THREE.Vector3(a[c].x,a[c].y,a[c].z||0));return b};THREE.CurvePath.prototype.addWrapPath=function(a){this.bends.push(a)};
+THREE.CurvePath.prototype.getTransformedPoints=function(a,b){var c=this.getPoints(a),d,e;b||(b=this.bends);d=0;for(e=b.length;d<e;d++)c=this.getWrapPoints(c,b[d]);return c};THREE.CurvePath.prototype.getTransformedSpacedPoints=function(a,b){var c=this.getSpacedPoints(a),d,e;b||(b=this.bends);d=0;for(e=b.length;d<e;d++)c=this.getWrapPoints(c,b[d]);return c};
+THREE.CurvePath.prototype.getWrapPoints=function(a,b){var c=this.getBoundingBox(),d,e,f,g,h,k;d=0;for(e=a.length;d<e;d++)f=a[d],g=f.x,h=f.y,k=g/c.maxX,k=b.getUtoTmapping(k,g),g=b.getPoint(k),k=b.getTangent(k),k.set(-k.y,k.x).multiplyScalar(h),f.x=g.x+k.x,f.y=g.y+k.y;return a};THREE.Gyroscope=function(){THREE.Object3D.call(this)};THREE.Gyroscope.prototype=Object.create(THREE.Object3D.prototype);
+THREE.Gyroscope.prototype.updateMatrixWorld=function(a){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorld.decompose(this.translationWorld,this.quaternionWorld,this.scaleWorld),this.matrix.decompose(this.translationObject,this.quaternionObject,this.scaleObject),this.matrixWorld.compose(this.translationWorld,this.quaternionObject,this.scaleWorld)):this.matrixWorld.copy(this.matrix),
+this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b<c;b++)this.children[b].updateMatrixWorld(a)};THREE.Gyroscope.prototype.translationWorld=new THREE.Vector3;THREE.Gyroscope.prototype.translationObject=new THREE.Vector3;THREE.Gyroscope.prototype.quaternionWorld=new THREE.Quaternion;THREE.Gyroscope.prototype.quaternionObject=new THREE.Quaternion;THREE.Gyroscope.prototype.scaleWorld=new THREE.Vector3;THREE.Gyroscope.prototype.scaleObject=new THREE.Vector3;THREE.Path=function(a){THREE.CurvePath.call(this);this.actions=[];a&&this.fromPoints(a)};THREE.Path.prototype=Object.create(THREE.CurvePath.prototype);THREE.PathActions={MOVE_TO:"moveTo",LINE_TO:"lineTo",QUADRATIC_CURVE_TO:"quadraticCurveTo",BEZIER_CURVE_TO:"bezierCurveTo",CSPLINE_THRU:"splineThru",ARC:"arc",ELLIPSE:"ellipse"};THREE.Path.prototype.fromPoints=function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;b<c;b++)this.lineTo(a[b].x,a[b].y)};
+THREE.Path.prototype.moveTo=function(a,b){var c=Array.prototype.slice.call(arguments);this.actions.push({action:THREE.PathActions.MOVE_TO,args:c})};THREE.Path.prototype.lineTo=function(a,b){var c=Array.prototype.slice.call(arguments),d=this.actions[this.actions.length-1].args,d=new THREE.LineCurve(new THREE.Vector2(d[d.length-2],d[d.length-1]),new THREE.Vector2(a,b));this.curves.push(d);this.actions.push({action:THREE.PathActions.LINE_TO,args:c})};
+THREE.Path.prototype.quadraticCurveTo=function(a,b,c,d){var e=Array.prototype.slice.call(arguments),f=this.actions[this.actions.length-1].args,f=new THREE.QuadraticBezierCurve(new THREE.Vector2(f[f.length-2],f[f.length-1]),new THREE.Vector2(a,b),new THREE.Vector2(c,d));this.curves.push(f);this.actions.push({action:THREE.PathActions.QUADRATIC_CURVE_TO,args:e})};
+THREE.Path.prototype.bezierCurveTo=function(a,b,c,d,e,f){var g=Array.prototype.slice.call(arguments),h=this.actions[this.actions.length-1].args,h=new THREE.CubicBezierCurve(new THREE.Vector2(h[h.length-2],h[h.length-1]),new THREE.Vector2(a,b),new THREE.Vector2(c,d),new THREE.Vector2(e,f));this.curves.push(h);this.actions.push({action:THREE.PathActions.BEZIER_CURVE_TO,args:g})};
+THREE.Path.prototype.splineThru=function(a){var b=Array.prototype.slice.call(arguments),c=this.actions[this.actions.length-1].args,c=[new THREE.Vector2(c[c.length-2],c[c.length-1])];Array.prototype.push.apply(c,a);c=new THREE.SplineCurve(c);this.curves.push(c);this.actions.push({action:THREE.PathActions.CSPLINE_THRU,args:b})};THREE.Path.prototype.arc=function(a,b,c,d,e,f){var g=this.actions[this.actions.length-1].args;this.absarc(a+g[g.length-2],b+g[g.length-1],c,d,e,f)};
+THREE.Path.prototype.absarc=function(a,b,c,d,e,f){this.absellipse(a,b,c,c,d,e,f)};THREE.Path.prototype.ellipse=function(a,b,c,d,e,f,g){var h=this.actions[this.actions.length-1].args;this.absellipse(a+h[h.length-2],b+h[h.length-1],c,d,e,f,g)};THREE.Path.prototype.absellipse=function(a,b,c,d,e,f,g){var h=Array.prototype.slice.call(arguments),k=new THREE.EllipseCurve(a,b,c,d,e,f,g);this.curves.push(k);k=k.getPoint(1);h.push(k.x);h.push(k.y);this.actions.push({action:THREE.PathActions.ELLIPSE,args:h})};
+THREE.Path.prototype.getSpacedPoints=function(a,b){a||(a=40);for(var c=[],d=0;d<a;d++)c.push(this.getPoint(d/a));return c};
+THREE.Path.prototype.getPoints=function(a,b){if(this.useSpacedPoints)return console.log("tata"),this.getSpacedPoints(a,b);a=a||12;var c=[],d,e,f,g,h,k,l,n,q,p,s,t,r;d=0;for(e=this.actions.length;d<e;d++)switch(f=this.actions[d],g=f.action,f=f.args,g){case THREE.PathActions.MOVE_TO:c.push(new THREE.Vector2(f[0],f[1]));break;case THREE.PathActions.LINE_TO:c.push(new THREE.Vector2(f[0],f[1]));break;case THREE.PathActions.QUADRATIC_CURVE_TO:h=f[2];k=f[3];q=f[0];p=f[1];0<c.length?(g=c[c.length-1],s=g.x,
+t=g.y):(g=this.actions[d-1].args,s=g[g.length-2],t=g[g.length-1]);for(f=1;f<=a;f++)r=f/a,g=THREE.Shape.Utils.b2(r,s,q,h),r=THREE.Shape.Utils.b2(r,t,p,k),c.push(new THREE.Vector2(g,r));break;case THREE.PathActions.BEZIER_CURVE_TO:h=f[4];k=f[5];q=f[0];p=f[1];l=f[2];n=f[3];0<c.length?(g=c[c.length-1],s=g.x,t=g.y):(g=this.actions[d-1].args,s=g[g.length-2],t=g[g.length-1]);for(f=1;f<=a;f++)r=f/a,g=THREE.Shape.Utils.b3(r,s,q,l,h),r=THREE.Shape.Utils.b3(r,t,p,n,k),c.push(new THREE.Vector2(g,r));break;case THREE.PathActions.CSPLINE_THRU:g=
+this.actions[d-1].args;r=[new THREE.Vector2(g[g.length-2],g[g.length-1])];g=a*f[0].length;r=r.concat(f[0]);r=new THREE.SplineCurve(r);for(f=1;f<=g;f++)c.push(r.getPointAt(f/g));break;case THREE.PathActions.ARC:h=f[0];k=f[1];p=f[2];l=f[3];g=f[4];q=!!f[5];s=g-l;t=2*a;for(f=1;f<=t;f++)r=f/t,q||(r=1-r),r=l+r*s,g=h+p*Math.cos(r),r=k+p*Math.sin(r),c.push(new THREE.Vector2(g,r));break;case THREE.PathActions.ELLIPSE:for(h=f[0],k=f[1],p=f[2],n=f[3],l=f[4],g=f[5],q=!!f[6],s=g-l,t=2*a,f=1;f<=t;f++)r=f/t,q||
+(r=1-r),r=l+r*s,g=h+p*Math.cos(r),r=k+n*Math.sin(r),c.push(new THREE.Vector2(g,r))}d=c[c.length-1];1E-10>Math.abs(d.x-c[0].x)&&1E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);b&&c.push(c[0]);return c};
+THREE.Path.prototype.toShapes=function(a,b){function c(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c],f=new THREE.Shape;f.actions=e.actions;f.curves=e.curves;b.push(f)}return b}function d(a,b){for(var c=b.length,d=!1,e=c-1,f=0;f<c;e=f++){var g=b[e],h=b[f],k=h.x-g.x,l=h.y-g.y;if(1E-10<Math.abs(l)){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.y<g.y||a.y>h.y))if(a.y==g.y){if(a.x==g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0==e)return!0;0>e||(d=!d)}}else if(a.y==g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=
+h.x))return!0}return d}var e=function(a){var b,c,d,e,f=[],g=new THREE.Path;b=0;for(c=a.length;b<c;b++)d=a[b],e=d.args,d=d.action,d==THREE.PathActions.MOVE_TO&&0!=g.actions.length&&(f.push(g),g=new THREE.Path),g[d].apply(g,e);0!=g.actions.length&&f.push(g);return f}(this.actions);if(0==e.length)return[];if(!0===b)return c(e);var f,g,h,k=[];if(1==e.length)return g=e[0],h=new THREE.Shape,h.actions=g.actions,h.curves=g.curves,k.push(h),k;var l=!THREE.Shape.Utils.isClockWise(e[0].getPoints()),l=a?!l:l;
+h=[];var n=[],q=[],p=0,s;n[p]=void 0;q[p]=[];var t,r;t=0;for(r=e.length;t<r;t++)g=e[t],s=g.getPoints(),f=THREE.Shape.Utils.isClockWise(s),(f=a?!f:f)?(!l&&n[p]&&p++,n[p]={s:new THREE.Shape,p:s},n[p].s.actions=g.actions,n[p].s.curves=g.curves,l&&p++,q[p]=[]):q[p].push({h:g,p:s[0]});if(!n[0])return c(e);if(1<n.length){t=!1;r=[];g=0;for(e=n.length;g<e;g++)h[g]=[];g=0;for(e=n.length;g<e;g++)for(f=q[g],l=0;l<f.length;l++){p=f[l];s=!0;for(var v=0;v<n.length;v++)d(p.p,n[v].p)&&(g!=v&&r.push({froms:g,tos:v,
+hole:l}),s?(s=!1,h[v].push(p)):t=!0);s&&h[g].push(p)}0<r.length&&(t||(q=h))}t=0;for(r=n.length;t<r;t++)for(h=n[t].s,k.push(h),g=q[t],e=0,f=g.length;e<f;e++)h.holes.push(g[e].h);return k};THREE.Shape=function(){THREE.Path.apply(this,arguments);this.holes=[]};THREE.Shape.prototype=Object.create(THREE.Path.prototype);THREE.Shape.prototype.extrude=function(a){return new THREE.ExtrudeGeometry(this,a)};THREE.Shape.prototype.makeGeometry=function(a){return new THREE.ShapeGeometry(this,a)};THREE.Shape.prototype.getPointsHoles=function(a){var b,c=this.holes.length,d=[];for(b=0;b<c;b++)d[b]=this.holes[b].getTransformedPoints(a,this.bends);return d};
+THREE.Shape.prototype.getSpacedPointsHoles=function(a){var b,c=this.holes.length,d=[];for(b=0;b<c;b++)d[b]=this.holes[b].getTransformedSpacedPoints(a,this.bends);return d};THREE.Shape.prototype.extractAllPoints=function(a){return{shape:this.getTransformedPoints(a),holes:this.getPointsHoles(a)}};THREE.Shape.prototype.extractPoints=function(a){return this.useSpacedPoints?this.extractAllSpacedPoints(a):this.extractAllPoints(a)};
+THREE.Shape.prototype.extractAllSpacedPoints=function(a){return{shape:this.getTransformedSpacedPoints(a),holes:this.getSpacedPointsHoles(a)}};
+THREE.Shape.Utils={triangulateShape:function(a,b){function c(a,b,c){return a.x!=b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function d(a,b,d,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-d.x,l=e.y-d.y,n=a.x-d.x,q=a.y-d.y,J=h*k-g*l,B=h*n-g*q;if(1E-10<Math.abs(J)){if(0<J){if(0>B||B>J)return[];k=l*n-k*q;if(0>k||k>J)return[]}else{if(0<B||B<J)return[];k=l*n-k*q;if(0<k||k<J)return[]}if(0==k)return!f||0!=B&&B!=J?[a]:[];if(k==J)return!f||0!=B&&B!=J?[b]:[];if(0==B)return[d];
+if(B==J)return[e];f=k/J;return[{x:a.x+f*g,y:a.y+f*h}]}if(0!=B||l*n!=k*q)return[];h=0==g&&0==h;k=0==k&&0==l;if(h&&k)return a.x!=d.x||a.y!=d.y?[]:[a];if(h)return c(d,e,a)?[a]:[];if(k)return c(a,b,d)?[d]:[];0!=g?(a.x<b.x?(g=a,k=a.x,h=b,a=b.x):(g=b,k=b.x,h=a,a=a.x),d.x<e.x?(b=d,J=d.x,l=e,d=e.x):(b=e,J=e.x,l=d,d=d.x)):(a.y<b.y?(g=a,k=a.y,h=b,a=b.y):(g=b,k=b.y,h=a,a=a.y),d.y<e.y?(b=d,J=d.y,l=e,d=e.y):(b=e,J=e.y,l=d,d=d.y));return k<=J?a<J?[]:a==J?f?[]:[b]:a<=d?[b,h]:[b,l]:k>d?[]:k==d?f?[]:[g]:a<=d?[g,h]:
+[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return 1E-10<Math.abs(a)?(b=g*c-d*b,0<a?0<=e&&0<=b:0<=e||0<=b):0<e}var f,g,h,k,l,n={};h=a.concat();f=0;for(g=b.length;f<g;f++)Array.prototype.push.apply(h,b[f]);f=0;for(g=h.length;f<g;f++)l=h[f].x+":"+h[f].y,void 0!==n[l]&&console.log("Duplicate point",l),n[l]=f;f=function(a,b){function c(a,b){var d=h.length-1,f=a-1;0>f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;
+d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;c<h.length;c++)if(e=c+1,e%=h.length,e=d(a,b,h[c],h[e],!0),0<e.length)return!0;return!1}function g(a,c){var e,f,h,k;for(e=0;e<l.length;e++)for(f=b[l[e]],h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=d(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,l=[],n,q,N,J,B,K=[],A,G,D,C=0;for(n=b.length;C<n;C++)l.push(C);A=0;for(var F=2*l.length;0<l.length;){F--;if(0>F){console.log("Infinite Loop! Holes left:"+
+l.length+", Probably Hole outside Shape!");break}for(q=A;q<h.length;q++){N=h[q];n=-1;for(C=0;C<l.length;C++)if(J=l[C],B=N.x+":"+N.y+":"+J,void 0===K[B]){k=b[J];for(G=0;G<k.length;G++)if(J=k[G],c(q,G)&&!f(N,J)&&!g(N,J)){n=G;l.splice(C,1);A=h.slice(0,q+1);J=h.slice(q);G=k.slice(n);D=k.slice(0,n+1);h=A.concat(G).concat(D).concat(J);A=q;break}if(0<=n)break;K[B]=!0}if(0<=n)break}}return h}(a,b);var q=THREE.FontUtils.Triangulate(f,!1);f=0;for(g=q.length;f<g;f++)for(k=q[f],h=0;3>h;h++)l=k[h].x+":"+k[h].y,
+l=n[l],void 0!==l&&(k[h]=l);return q.concat()},isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,
+b)+this.b3p1(a,c)+this.b3p2(a,d)+this.b3p3(a,e)}};THREE.LineCurve=function(a,b){this.v1=a;this.v2=b};THREE.LineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.LineCurve.prototype.getPoint=function(a){var b=this.v2.clone().sub(this.v1);b.multiplyScalar(a).add(this.v1);return b};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(a){return this.v2.clone().sub(this.v1).normalize()};THREE.QuadraticBezierCurve=function(a,b,c){this.v0=a;this.v1=b;this.v2=c};THREE.QuadraticBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(b,a)};
+THREE.QuadraticBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.y,this.v1.y,this.v2.y);b=new THREE.Vector2(b,a);b.normalize();return b};THREE.CubicBezierCurve=function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d};THREE.CubicBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.CubicBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(b,a)};
+THREE.CubicBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);b=new THREE.Vector2(b,a);b.normalize();return b};THREE.SplineCurve=function(a){this.points=void 0==a?[]:a};THREE.SplineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.SplineCurve.prototype.getPoint=function(a){var b=new THREE.Vector2,c=[],d=this.points,e;e=(d.length-1)*a;a=Math.floor(e);e-=a;c[0]=0==a?a:a-1;c[1]=a;c[2]=a>d.length-2?d.length-1:a+1;c[3]=a>d.length-3?d.length-1:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b};THREE.EllipseCurve=function(a,b,c,d,e,f,g){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);
+THREE.EllipseCurve.prototype.getPoint=function(a){var b;b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);b=this.aY+this.yRadius*Math.sin(b);return new THREE.Vector2(a,b)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)});THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;a*=d.length-1;e=Math.floor(a);a-=e;c[0]=0==e?e:e-1;c[1]=e;c[2]=e>d.length-2?d.length-1:e+1;c[3]=e>d.length-3?d.length-1:e+2;e=d[c[0]];var f=d[c[1]],g=d[c[2]],c=d[c[3]];b.x=THREE.Curve.Utils.interpolate(e.x,f.x,g.x,c.x,a);b.y=THREE.Curve.Utils.interpolate(e.y,f.y,g.y,c.y,a);b.z=THREE.Curve.Utils.interpolate(e.z,f.z,g.z,c.z,a);return b});THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;e=(d.length-0)*a;a=Math.floor(e);e-=a;a+=0<a?0:(Math.floor(Math.abs(a)/d.length)+1)*d.length;c[0]=(a-1)%d.length;c[1]=a%d.length;c[2]=(a+1)%d.length;c[3]=(a+2)%d.length;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);b.z=THREE.Curve.Utils.interpolate(d[c[0]].z,
+d[c[1]].z,d[c[2]].z,d[c[3]].z,e);return b});THREE.AnimationHandler=function(){var a=[],b={},c={update:function(b){for(var c=0;c<a.length;c++)a[c].update(b)},addToUpdate:function(b){-1===a.indexOf(b)&&a.push(b)},removeFromUpdate:function(b){b=a.indexOf(b);-1!==b&&a.splice(b,1)},add:function(a){void 0!==b[a.name]&&console.log("THREE.AnimationHandler.add: Warning! "+a.name+" already exists in library. Overwriting.");b[a.name]=a;if(!0!==a.initialized){for(var c=0;c<a.hierarchy.length;c++){for(var d=0;d<a.hierarchy[c].keys.length;d++)if(0>a.hierarchy[c].keys[d].time&&
+(a.hierarchy[c].keys[d].time=0),void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=(new THREE.Quaternion).fromArray(h)}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;d<a.hierarchy[c].keys.length;d++)for(var k=0;k<a.hierarchy[c].keys[d].morphTargets.length;k++){var l=a.hierarchy[c].keys[d].morphTargets[k];h[l]=-1}a.hierarchy[c].usedMorphTargets=h;for(d=
+0;d<a.hierarchy[c].keys.length;d++){var n={};for(l in h){for(k=0;k<a.hierarchy[c].keys[d].morphTargets.length;k++)if(a.hierarchy[c].keys[d].morphTargets[k]===l){n[l]=a.hierarchy[c].keys[d].morphTargetsInfluences[k];break}k===a.hierarchy[c].keys[d].morphTargets.length&&(n[l]=0)}a.hierarchy[c].keys[d].morphTargetsInfluences=n}}for(d=1;d<a.hierarchy[c].keys.length;d++)a.hierarchy[c].keys[d].time===a.hierarchy[c].keys[d-1].time&&(a.hierarchy[c].keys.splice(d,1),d--);for(d=0;d<a.hierarchy[c].keys.length;d++)a.hierarchy[c].keys[d].index=
+d}a.initialized=!0}},remove:function(a){void 0===b[a]&&console.log("THREE.AnimationHandler.add: Warning! "+a+" doesn't exists in library. Doing nothing.");b[a]=void 0},get:function(a){if("string"===typeof a)return b[a]?b[a]:null},parse:function(a){var b=[];if(a instanceof THREE.SkinnedMesh)for(var c=0;c<a.skeleton.bones.length;c++)b.push(a.skeleton.bones[c]);else d(a,b);return b}},d=function(a,b){b.push(a);for(var c=0;c<a.children.length;c++)d(a.children[c],b)};c.LINEAR=0;c.CATMULLROM=1;c.CATMULLROM_FORWARD=
+2;return c}();THREE.Animation=function(a,b){this.root=a;this.data=THREE.AnimationHandler.get(b);this.hierarchy=THREE.AnimationHandler.parse(a);this.currentTime=0;this.timeScale=1;this.isPlaying=!1;this.loop=this.isPaused=!0;this.weight=0;this.interpolationType=THREE.AnimationHandler.LINEAR};THREE.Animation.prototype.keyTypes=["pos","rot","scl"];THREE.Animation.prototype.play=function(a,b){this.currentTime=void 0!==a?a:0;this.weight=void 0!==b?b:1;this.isPlaying=!0;this.isPaused=!1;this.reset();THREE.AnimationHandler.addToUpdate(this)};
+THREE.Animation.prototype.pause=function(){!0===this.isPaused?THREE.AnimationHandler.addToUpdate(this):THREE.AnimationHandler.removeFromUpdate(this);this.isPaused=!this.isPaused};THREE.Animation.prototype.stop=function(){this.isPaused=this.isPlaying=!1;THREE.AnimationHandler.removeFromUpdate(this)};
+THREE.Animation.prototype.reset=function(){for(var a=0,b=this.hierarchy.length;a<b;a++){var c=this.hierarchy[a];c.matrixAutoUpdate=!0;void 0===c.animationCache&&(c.animationCache={});void 0===c.animationCache[this.data.name]&&(c.animationCache[this.data.name]={},c.animationCache[this.data.name].prevKey={pos:0,rot:0,scl:0},c.animationCache[this.data.name].nextKey={pos:0,rot:0,scl:0},c.animationCache[this.data.name].originalMatrix=c instanceof THREE.Bone?c.skinMatrix:c.matrix);for(var c=c.animationCache[this.data.name],
+d=0;3>d;d++){for(var e=this.keyTypes[d],f=this.data.hierarchy[a].keys[0],g=this.getNextKeyWith(e,a,1);g.time<this.currentTime&&g.index>f.index;)f=g,g=this.getNextKeyWith(e,a,g.index+1);c.prevKey[e]=f;c.nextKey[e]=g}}};
+THREE.Animation.prototype.update=function(){var a=[],b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Quaternion,e=function(a,b){var c=[],d=[],e,q,p,s,t,r;e=(a.length-1)*b;q=Math.floor(e);e-=q;c[0]=0===q?q:q-1;c[1]=q;c[2]=q>a.length-2?q:q+1;c[3]=q>a.length-3?q:q+2;q=a[c[0]];s=a[c[1]];t=a[c[2]];r=a[c[3]];c=e*e;p=e*c;d[0]=f(q[0],s[0],t[0],r[0],e,c,p);d[1]=f(q[1],s[1],t[1],r[1],e,c,p);d[2]=f(q[2],s[2],t[2],r[2],e,c,p);return d},f=function(a,b,c,d,e,f,p){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*
+p+(-3*(b-c)-2*a-d)*f+a*e+b};return function(f){if(!1!==this.isPlaying&&(this.currentTime+=f*this.timeScale,0!==this.weight)){var h;f=this.data.length;if(!0===this.loop&&this.currentTime>f)this.currentTime%=f,this.reset();else if(!1===this.loop&&this.currentTime>f){this.stop();return}f=0;for(var k=this.hierarchy.length;f<k;f++)for(var l=this.hierarchy[f],n=l.animationCache[this.data.name],q=0;3>q;q++){h=this.keyTypes[q];var p=n.prevKey[h],s=n.nextKey[h];if(s.time<=this.currentTime){p=this.data.hierarchy[f].keys[0];
+for(s=this.getNextKeyWith(h,f,1);s.time<this.currentTime&&s.index>p.index;)p=s,s=this.getNextKeyWith(h,f,s.index+1);n.prevKey[h]=p;n.nextKey[h]=s}l.matrixAutoUpdate=!0;l.matrixWorldNeedsUpdate=!0;var t=(this.currentTime-p.time)/(s.time-p.time),r=p[h],v=s[h];0>t&&(t=0);1<t&&(t=1);if("pos"===h)if(h=l.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=r[0]+(v[0]-r[0])*t,c.y=r[1]+(v[1]-r[1])*t,c.z=r[2]+(v[2]-r[2])*t,l instanceof THREE.Bone&&(p=this.weight/(this.weight+l.accumulatedPosWeight),
+h.lerp(c,p),l.accumulatedPosWeight+=this.weight);else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)a[0]=this.getPrevKeyWith("pos",f,p.index-1).pos,a[1]=r,a[2]=v,a[3]=this.getNextKeyWith("pos",f,s.index+1).pos,t=0.33*t+0.33,s=e(a,t),l instanceof THREE.Bone?(p=this.weight/(this.weight+l.accumulatedPosWeight),l.accumulatedPosWeight+=this.weight):p=1,h.x+=(s[0]-h.x)*p,h.y+=(s[1]-h.y)*p,h.z+=(s[2]-h.z)*p,this.interpolationType===
+THREE.AnimationHandler.CATMULLROM_FORWARD&&(t=e(a,1.01*t),b.set(t[0],t[1],t[2]),b.sub(h),b.y=0,b.normalize(),h=Math.atan2(b.x,b.z),l.rotation.set(0,h,0))}else"rot"===h?(THREE.Quaternion.slerp(r,v,d,t),l instanceof THREE.Bone?0===l.accumulatedRotWeight?(l.quaternion.copy(d),l.accumulatedRotWeight=this.weight):(p=this.weight/(this.weight+l.accumulatedRotWeight),THREE.Quaternion.slerp(l.quaternion,d,l.quaternion,p),l.accumulatedRotWeight+=this.weight):l.quaternion.copy(d)):"scl"===h&&(h=l.scale,c.x=
+r[0]+(v[0]-r[0])*t,c.y=r[1]+(v[1]-r[1])*t,c.z=r[2]+(v[2]-r[2])*t,l instanceof THREE.Bone&&(p=this.weight/(this.weight+l.accumulatedSclWeight),h.lerp(c,p),l.accumulatedSclWeight+=this.weight))}return!0}}}();
+THREE.Animation.prototype.getNextKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c<d.length-1?c:d.length-1:c%d.length;c<d.length;c++)if(void 0!==d[c][a])return d[c];return this.data.hierarchy[b].keys[0]};
+THREE.Animation.prototype.getPrevKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?0<c?c:0:0<=c?c:c+d.length;0<=c;c--)if(void 0!==d[c][a])return d[c];return this.data.hierarchy[b].keys[d.length-1]};THREE.KeyFrameAnimation=function(a,b){this.root=a;this.data=THREE.AnimationHandler.get(b);this.hierarchy=THREE.AnimationHandler.parse(a);this.currentTime=0;this.timeScale=0.001;this.isPlaying=!1;this.loop=this.isPaused=!0;for(var c=0,d=this.hierarchy.length;c<d;c++){var e=this.data.hierarchy[c].sids,f=this.hierarchy[c];if(this.data.hierarchy[c].keys.length&&e){for(var g=0;g<e.length;g++){var h=e[g],k=this.getNextKeyWith(h,c,0);k&&k.apply(h)}f.matrixAutoUpdate=!1;this.data.hierarchy[c].node.updateMatrix();
+f.matrixWorldNeedsUpdate=!0}}};
+THREE.KeyFrameAnimation.prototype.play=function(a){this.currentTime=void 0!==a?a:0;if(!1===this.isPlaying){this.isPlaying=!0;var b=this.hierarchy.length,c,d;for(a=0;a<b;a++)c=this.hierarchy[a],d=this.data.hierarchy[a],void 0===d.animationCache&&(d.animationCache={},d.animationCache.prevKey=null,d.animationCache.nextKey=null,d.animationCache.originalMatrix=c instanceof THREE.Bone?c.skinMatrix:c.matrix),c=this.data.hierarchy[a].keys,c.length&&(d.animationCache.prevKey=c[0],d.animationCache.nextKey=
+c[1],this.startTime=Math.min(c[0].time,this.startTime),this.endTime=Math.max(c[c.length-1].time,this.endTime));this.update(0)}this.isPaused=!1;THREE.AnimationHandler.addToUpdate(this)};THREE.KeyFrameAnimation.prototype.pause=function(){this.isPaused?THREE.AnimationHandler.addToUpdate(this):THREE.AnimationHandler.removeFromUpdate(this);this.isPaused=!this.isPaused};
+THREE.KeyFrameAnimation.prototype.stop=function(){this.isPaused=this.isPlaying=!1;THREE.AnimationHandler.removeFromUpdate(this);for(var a=0;a<this.data.hierarchy.length;a++){var b=this.hierarchy[a],c=this.data.hierarchy[a];if(void 0!==c.animationCache){var d=c.animationCache.originalMatrix;b instanceof THREE.Bone?(d.copy(b.skinMatrix),b.skinMatrix=d):(d.copy(b.matrix),b.matrix=d);delete c.animationCache}}};
+THREE.KeyFrameAnimation.prototype.update=function(a){if(!1!==this.isPlaying){this.currentTime+=a*this.timeScale;a=this.data.length;!0===this.loop&&this.currentTime>a&&(this.currentTime%=a);this.currentTime=Math.min(this.currentTime,a);a=0;for(var b=this.hierarchy.length;a<b;a++){var c=this.hierarchy[a],d=this.data.hierarchy[a],e=d.keys,d=d.animationCache;if(e.length){var f=d.prevKey,g=d.nextKey;if(g.time<=this.currentTime){for(;g.time<this.currentTime&&g.index>f.index;)f=g,g=e[f.index+1];d.prevKey=
+f;d.nextKey=g}g.time>=this.currentTime?f.interpolate(g,this.currentTime):f.interpolate(g,g.time);this.data.hierarchy[a].node.updateMatrix();c.matrixWorldNeedsUpdate=!0}}}};THREE.KeyFrameAnimation.prototype.getNextKeyWith=function(a,b,c){b=this.data.hierarchy[b].keys;for(c%=b.length;c<b.length;c++)if(b[c].hasTarget(a))return b[c];return b[0]};
+THREE.KeyFrameAnimation.prototype.getPrevKeyWith=function(a,b,c){b=this.data.hierarchy[b].keys;for(c=0<=c?c:c+b.length;0<=c;c--)if(b[c].hasTarget(a))return b[c];return b[b.length-1]};THREE.MorphAnimation=function(a){this.mesh=a;this.frames=a.morphTargetInfluences.length;this.currentTime=0;this.duration=1E3;this.loop=!0;this.isPlaying=!1};
+THREE.MorphAnimation.prototype={play:function(){this.isPlaying=!0},pause:function(){this.isPlaying=!1},update:function(){var a=0,b=0;return function(c){if(!1!==this.isPlaying){this.currentTime+=c;!0===this.loop&&this.currentTime>this.duration&&(this.currentTime%=this.duration);this.currentTime=Math.min(this.currentTime,this.duration);c=this.duration/this.frames;var d=Math.floor(this.currentTime/c);d!=b&&(this.mesh.morphTargetInfluences[a]=0,this.mesh.morphTargetInfluences[b]=1,this.mesh.morphTargetInfluences[d]=
+0,a=b,b=d);this.mesh.morphTargetInfluences[d]=this.currentTime%c/c;this.mesh.morphTargetInfluences[a]=1-this.mesh.morphTargetInfluences[d]}}}()};THREE.CubeCamera=function(a,b,c){THREE.Object3D.call(this);var d=new THREE.PerspectiveCamera(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new THREE.Vector3(1,0,0));this.add(d);var e=new THREE.PerspectiveCamera(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new THREE.Vector3(-1,0,0));this.add(e);var f=new THREE.PerspectiveCamera(90,1,a,b);f.up.set(0,0,1);f.lookAt(new THREE.Vector3(0,1,0));this.add(f);var g=new THREE.PerspectiveCamera(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new THREE.Vector3(0,-1,0));this.add(g);var h=new THREE.PerspectiveCamera(90,
+1,a,b);h.up.set(0,-1,0);h.lookAt(new THREE.Vector3(0,0,1));this.add(h);var k=new THREE.PerspectiveCamera(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new THREE.Vector3(0,0,-1));this.add(k);this.renderTarget=new THREE.WebGLRenderTargetCube(c,c,{format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter});this.updateCubeMap=function(a,b){var c=this.renderTarget,p=c.generateMipmaps;c.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=
+2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.generateMipmaps=p;c.activeCubeFace=5;a.render(b,k,c)}};THREE.CubeCamera.prototype=Object.create(THREE.Object3D.prototype);THREE.CombinedCamera=function(a,b,c,d,e,f,g){THREE.Camera.call(this);this.fov=c;this.left=-a/2;this.right=a/2;this.top=b/2;this.bottom=-b/2;this.cameraO=new THREE.OrthographicCamera(a/-2,a/2,b/2,b/-2,f,g);this.cameraP=new THREE.PerspectiveCamera(c,a/b,d,e);this.zoom=1;this.toPerspective()};THREE.CombinedCamera.prototype=Object.create(THREE.Camera.prototype);
+THREE.CombinedCamera.prototype.toPerspective=function(){this.near=this.cameraP.near;this.far=this.cameraP.far;this.cameraP.fov=this.fov/this.zoom;this.cameraP.updateProjectionMatrix();this.projectionMatrix=this.cameraP.projectionMatrix;this.inPerspectiveMode=!0;this.inOrthographicMode=!1};
+THREE.CombinedCamera.prototype.toOrthographic=function(){var a=this.cameraP.aspect,b=(this.cameraP.near+this.cameraP.far)/2,b=Math.tan(this.fov/2)*b,a=2*b*a/2,b=b/this.zoom,a=a/this.zoom;this.cameraO.left=-a;this.cameraO.right=a;this.cameraO.top=b;this.cameraO.bottom=-b;this.cameraO.updateProjectionMatrix();this.near=this.cameraO.near;this.far=this.cameraO.far;this.projectionMatrix=this.cameraO.projectionMatrix;this.inPerspectiveMode=!1;this.inOrthographicMode=!0};
+THREE.CombinedCamera.prototype.setSize=function(a,b){this.cameraP.aspect=a/b;this.left=-a/2;this.right=a/2;this.top=b/2;this.bottom=-b/2};THREE.CombinedCamera.prototype.setFov=function(a){this.fov=a;this.inPerspectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.updateProjectionMatrix=function(){this.inPerspectiveMode?this.toPerspective():(this.toPerspective(),this.toOrthographic())};
+THREE.CombinedCamera.prototype.setLens=function(a,b){void 0===b&&(b=24);var c=2*THREE.Math.radToDeg(Math.atan(b/(2*a)));this.setFov(c);return c};THREE.CombinedCamera.prototype.setZoom=function(a){this.zoom=a;this.inPerspectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.toFrontView=function(){this.rotation.x=0;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};
+THREE.CombinedCamera.prototype.toBackView=function(){this.rotation.x=0;this.rotation.y=Math.PI;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toLeftView=function(){this.rotation.x=0;this.rotation.y=-Math.PI/2;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toRightView=function(){this.rotation.x=0;this.rotation.y=Math.PI/2;this.rotation.z=0;this.rotationAutoUpdate=!1};
+THREE.CombinedCamera.prototype.toTopView=function(){this.rotation.x=-Math.PI/2;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toBottomView=function(){this.rotation.x=Math.PI/2;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.BoxGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,r){var v,w=h.widthSegments,u=h.heightSegments,y=e/2,L=f/2,x=h.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)v="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)v="y",u=h.depthSegments;else if("z"===a&&"y"===b||"y"===a&&"z"===b)v="x",w=h.depthSegments;var N=w+1,J=u+1,B=e/w,K=f/u,A=new THREE.Vector3;A[v]=0<g?1:-1;for(e=0;e<J;e++)for(f=0;f<N;f++){var G=new THREE.Vector3;G[a]=(f*B-y)*c;G[b]=(e*K-L)*d;G[v]=g;h.vertices.push(G)}for(e=
+0;e<u;e++)for(f=0;f<w;f++)L=f+N*e,a=f+N*(e+1),b=f+1+N*(e+1),c=f+1+N*e,d=new THREE.Vector2(f/w,1-e/u),g=new THREE.Vector2(f/w,1-(e+1)/u),v=new THREE.Vector2((f+1)/w,1-(e+1)/u),y=new THREE.Vector2((f+1)/w,1-e/u),L=new THREE.Face3(L+x,a+x,c+x),L.normal.copy(A),L.vertexNormals.push(A.clone(),A.clone(),A.clone()),L.materialIndex=r,h.faces.push(L),h.faceVertexUvs[0].push([d,g,y]),L=new THREE.Face3(a+x,b+x,c+x),L.normal.copy(A),L.vertexNormals.push(A.clone(),A.clone(),A.clone()),L.materialIndex=r,h.faces.push(L),
+h.faceVertexUvs[0].push([g.clone(),v,y.clone()])}THREE.Geometry.call(this);this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.widthSegments=d||1;this.heightSegments=e||1;this.depthSegments=f||1;var h=this;d=a/2;e=b/2;f=c/2;g("z","y",-1,-1,c,b,d,0);g("z","y",1,-1,c,b,-d,1);g("x","z",1,1,a,c,e,2);g("x","z",1,-1,a,c,-e,3);g("x","y",1,-1,a,b,f,4);g("x","y",-1,-1,a,b,-f,5);this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CircleGeometry=function(a,b,c,d){THREE.Geometry.call(this);this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};a=a||50;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e,f=[];e=new THREE.Vector3;var g=new THREE.Vector2(0.5,0.5);this.vertices.push(e);f.push(g);for(e=0;e<=b;e++){var h=new THREE.Vector3,k=c+e/b*d;h.x=a*Math.cos(k);h.y=a*Math.sin(k);this.vertices.push(h);f.push(new THREE.Vector2((h.x/a+1)/2,(h.y/a+1)/2))}c=new THREE.Vector3(0,0,1);for(e=1;e<=
+b;e++)this.faces.push(new THREE.Face3(e,e+1,0,[c.clone(),c.clone(),c.clone()])),this.faceVertexUvs[0].push([f[e].clone(),f[e+1].clone(),g.clone()]);this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,a)};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CubeGeometry=function(a,b,c,d,e,f){console.warn("DEPRECATED: THREE.CubeGeometry is deprecated. Use THREE.BoxGeometry instead.");return new THREE.BoxGeometry(a,b,c,d,e,f)};THREE.CylinderGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f};a=void 0!==a?a:20;b=void 0!==b?b:20;c=void 0!==c?c:100;d=d||8;e=e||1;f=void 0!==f?f:!1;var g=c/2,h,k,l=[],n=[];for(k=0;k<=e;k++){var q=[],p=[],s=k/e,t=s*(b-a)+a;for(h=0;h<=d;h++){var r=h/d,v=new THREE.Vector3;v.x=t*Math.sin(r*Math.PI*2);v.y=-s*c+g;v.z=t*Math.cos(r*Math.PI*2);this.vertices.push(v);q.push(this.vertices.length-1);p.push(new THREE.Vector2(r,
+1-s))}l.push(q);n.push(p)}c=(b-a)/c;for(h=0;h<d;h++)for(0!==a?(q=this.vertices[l[0][h]].clone(),p=this.vertices[l[0][h+1]].clone()):(q=this.vertices[l[1][h]].clone(),p=this.vertices[l[1][h+1]].clone()),q.setY(Math.sqrt(q.x*q.x+q.z*q.z)*c).normalize(),p.setY(Math.sqrt(p.x*p.x+p.z*p.z)*c).normalize(),k=0;k<e;k++){var s=l[k][h],t=l[k+1][h],r=l[k+1][h+1],v=l[k][h+1],w=q.clone(),u=q.clone(),y=p.clone(),L=p.clone(),x=n[k][h].clone(),N=n[k+1][h].clone(),J=n[k+1][h+1].clone(),B=n[k][h+1].clone();this.faces.push(new THREE.Face3(s,
+t,v,[w,u,L]));this.faceVertexUvs[0].push([x,N,B]);this.faces.push(new THREE.Face3(t,r,v,[u.clone(),y,L.clone()]));this.faceVertexUvs[0].push([N.clone(),J,B.clone()])}if(!1===f&&0<a)for(this.vertices.push(new THREE.Vector3(0,g,0)),h=0;h<d;h++)s=l[0][h],t=l[0][h+1],r=this.vertices.length-1,w=new THREE.Vector3(0,1,0),u=new THREE.Vector3(0,1,0),y=new THREE.Vector3(0,1,0),x=n[0][h].clone(),N=n[0][h+1].clone(),J=new THREE.Vector2(N.x,0),this.faces.push(new THREE.Face3(s,t,r,[w,u,y])),this.faceVertexUvs[0].push([x,
+N,J]);if(!1===f&&0<b)for(this.vertices.push(new THREE.Vector3(0,-g,0)),h=0;h<d;h++)s=l[k][h+1],t=l[k][h],r=this.vertices.length-1,w=new THREE.Vector3(0,-1,0),u=new THREE.Vector3(0,-1,0),y=new THREE.Vector3(0,-1,0),x=n[k][h+1].clone(),N=n[k][h].clone(),J=new THREE.Vector2(N.x,1),this.faces.push(new THREE.Face3(s,t,r,[w,u,y])),this.faceVertexUvs[0].push([x,N,J]);this.computeFaceNormals()};THREE.CylinderGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),a=a instanceof Array?a:[a],this.shapebb=a[a.length-1].getBoundingBox(),this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],b)};
+THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||console.log("die");return b.clone().multiplyScalar(c).add(a)}function d(a,b,c){var d=THREE.Math.sign,e=1,e=a.x-b.x,f=a.y-b.y,g=c.x-a.x,h=c.y-a.y,k=e*e+f*f;if(1E-10<Math.abs(e*h-f*g)){var l=Math.sqrt(k),d=Math.sqrt(g*g+h*h),k=b.x-f/l;b=b.y+e/l;g=((c.x-h/d-k)*h-(c.y+g/d-b)*g)/(e*h-f*g);c=k+e*g-a.x;a=b+f*g-a.y;e=c*c+a*a;if(2>=e)return new THREE.Vector2(c,a);e=Math.sqrt(e/2)}else a=!1,1E-10<e?1E-10<g&&(a=!0):-1E-10>e?-1E-10>g&&
+(a=!0):d(f)==d(h)&&(a=!0),a?(c=-f,a=e,e=Math.sqrt(k)):(c=e,a=f,e=Math.sqrt(k/2));return new THREE.Vector2(c/e,a/e)}function e(c,d){var e,f;for(I=c.length;0<=--I;){e=I;f=I-1;0>f&&(f=c.length-1);for(var g=0,h=s+2*n,g=0;g<h;g++){var k=la*g,l=la*(g+1),p=d+e+k,k=d+f+k,q=d+f+l,l=d+e+l,r=c,t=g,w=h,v=e,A=f,p=p+D,k=k+D,q=q+D,l=l+D;G.faces.push(new THREE.Face3(p,k,l,null,null,u));G.faces.push(new THREE.Face3(k,q,l,null,null,u));p=y.generateSideWallUV(G,a,r,b,p,k,q,l,t,w,v,A);G.faceVertexUvs[0].push([p[0],p[1],
+p[3]]);G.faceVertexUvs[0].push([p[1],p[2],p[3]])}}}function f(a,b,c){G.vertices.push(new THREE.Vector3(a,b,c))}function g(c,d,e,f){c+=D;d+=D;e+=D;G.faces.push(new THREE.Face3(c,d,e,null,null,w));c=f?y.generateBottomUV(G,a,b,c,d,e):y.generateTopUV(G,a,b,c,d,e);G.faceVertexUvs[0].push(c)}var h=void 0!==b.amount?b.amount:100,k=void 0!==b.bevelThickness?b.bevelThickness:6,l=void 0!==b.bevelSize?b.bevelSize:k-2,n=void 0!==b.bevelSegments?b.bevelSegments:3,q=void 0!==b.bevelEnabled?b.bevelEnabled:!0,p=
+void 0!==b.curveSegments?b.curveSegments:12,s=void 0!==b.steps?b.steps:1,t=b.extrudePath,r,v=!1,w=b.material,u=b.extrudeMaterial,y=void 0!==b.UVGenerator?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,L,x,N,J;t&&(r=t.getSpacedPoints(s),v=!0,q=!1,L=void 0!==b.frames?b.frames:new THREE.TubeGeometry.FrenetFrames(t,s,!1),x=new THREE.Vector3,N=new THREE.Vector3,J=new THREE.Vector3);q||(l=k=n=0);var B,K,A,G=this,D=this.vertices.length,t=a.extractPoints(p),p=t.shape,C=t.holes;if(t=!THREE.Shape.Utils.isClockWise(p)){p=
+p.reverse();K=0;for(A=C.length;K<A;K++)B=C[K],THREE.Shape.Utils.isClockWise(B)&&(C[K]=B.reverse());t=!1}var F=THREE.Shape.Utils.triangulateShape(p,C),z=p;K=0;for(A=C.length;K<A;K++)B=C[K],p=p.concat(B);var H,E,Q,Y,U,la=p.length,W,R=F.length,t=[],I=0;Q=z.length;H=Q-1;for(E=I+1;I<Q;I++,H++,E++)H===Q&&(H=0),E===Q&&(E=0),t[I]=d(z[I],z[H],z[E]);var da=[],V,X=t.concat();K=0;for(A=C.length;K<A;K++){B=C[K];V=[];I=0;Q=B.length;H=Q-1;for(E=I+1;I<Q;I++,H++,E++)H===Q&&(H=0),E===Q&&(E=0),V[I]=d(B[I],B[H],B[E]);
+da.push(V);X=X.concat(V)}for(H=0;H<n;H++){Q=H/n;Y=k*(1-Q);E=l*Math.sin(Q*Math.PI/2);I=0;for(Q=z.length;I<Q;I++)U=c(z[I],t[I],E),f(U.x,U.y,-Y);K=0;for(A=C.length;K<A;K++)for(B=C[K],V=da[K],I=0,Q=B.length;I<Q;I++)U=c(B[I],V[I],E),f(U.x,U.y,-Y)}E=l;for(I=0;I<la;I++)U=q?c(p[I],X[I],E):p[I],v?(N.copy(L.normals[0]).multiplyScalar(U.x),x.copy(L.binormals[0]).multiplyScalar(U.y),J.copy(r[0]).add(N).add(x),f(J.x,J.y,J.z)):f(U.x,U.y,0);for(Q=1;Q<=s;Q++)for(I=0;I<la;I++)U=q?c(p[I],X[I],E):p[I],v?(N.copy(L.normals[Q]).multiplyScalar(U.x),
+x.copy(L.binormals[Q]).multiplyScalar(U.y),J.copy(r[Q]).add(N).add(x),f(J.x,J.y,J.z)):f(U.x,U.y,h/s*Q);for(H=n-1;0<=H;H--){Q=H/n;Y=k*(1-Q);E=l*Math.sin(Q*Math.PI/2);I=0;for(Q=z.length;I<Q;I++)U=c(z[I],t[I],E),f(U.x,U.y,h+Y);K=0;for(A=C.length;K<A;K++)for(B=C[K],V=da[K],I=0,Q=B.length;I<Q;I++)U=c(B[I],V[I],E),v?f(U.x,U.y+r[s-1].y,r[s-1].x+Y):f(U.x,U.y,h+Y)}(function(){if(q){var a;a=0*la;for(I=0;I<R;I++)W=F[I],g(W[2]+a,W[1]+a,W[0]+a,!0);a=s+2*n;a*=la;for(I=0;I<R;I++)W=F[I],g(W[0]+a,W[1]+a,W[2]+a,!1)}else{for(I=
+0;I<R;I++)W=F[I],g(W[2],W[1],W[0],!0);for(I=0;I<R;I++)W=F[I],g(W[0]+la*s,W[1]+la*s,W[2]+la*s,!1)}})();(function(){var a=0;e(z,a);a+=z.length;K=0;for(A=C.length;K<A;K++)B=C[K],e(B,a),a+=B.length})()};
+THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(a,b,c,d,e,f){b=a.vertices[e].x;e=a.vertices[e].y;c=a.vertices[f].x;f=a.vertices[f].y;return[new THREE.Vector2(a.vertices[d].x,a.vertices[d].y),new THREE.Vector2(b,e),new THREE.Vector2(c,f)]},generateBottomUV:function(a,b,c,d,e,f){return this.generateTopUV(a,b,c,d,e,f)},generateSideWallUV:function(a,b,c,d,e,f,g,h,k,l,n,q){b=a.vertices[e].x;c=a.vertices[e].y;e=a.vertices[e].z;d=a.vertices[f].x;k=a.vertices[f].y;f=a.vertices[f].z;l=a.vertices[g].x;
+n=a.vertices[g].y;g=a.vertices[g].z;q=a.vertices[h].x;var p=a.vertices[h].y;a=a.vertices[h].z;return 0.01>Math.abs(c-k)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(l,1-g),new THREE.Vector2(q,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(k,1-f),new THREE.Vector2(n,1-g),new THREE.Vector2(p,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2;
+THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);!1===a instanceof Array&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;c<d;c++)this.addShape(a[c],b);return this};
+THREE.ShapeGeometry.prototype.addShape=function(a,b){void 0===b&&(b={});var c=b.material,d=void 0===b.UVGenerator?THREE.ExtrudeGeometry.WorldUVGenerator:b.UVGenerator,e,f,g,h=this.vertices.length;e=a.extractPoints(void 0!==b.curveSegments?b.curveSegments:12);var k=e.shape,l=e.holes;if(!THREE.Shape.Utils.isClockWise(k))for(k=k.reverse(),e=0,f=l.length;e<f;e++)g=l[e],THREE.Shape.Utils.isClockWise(g)&&(l[e]=g.reverse());var n=THREE.Shape.Utils.triangulateShape(k,l);e=0;for(f=l.length;e<f;e++)g=l[e],
+k=k.concat(g);l=k.length;f=n.length;for(e=0;e<l;e++)g=k[e],this.vertices.push(new THREE.Vector3(g.x,g.y,0));for(e=0;e<f;e++)l=n[e],k=l[0]+h,g=l[1]+h,l=l[2]+h,this.faces.push(new THREE.Face3(k,g,l,null,null,c)),this.faceVertexUvs[0].push(d.generateBottomUV(this,a,b,k,g,l))};THREE.LatheGeometry=function(a,b,c,d){THREE.Geometry.call(this);b=b||12;c=c||0;d=d||2*Math.PI;for(var e=1/(a.length-1),f=1/b,g=0,h=b;g<=h;g++)for(var k=c+g*f*d,l=Math.cos(k),n=Math.sin(k),k=0,q=a.length;k<q;k++){var p=a[k],s=new THREE.Vector3;s.x=l*p.x-n*p.y;s.y=n*p.x+l*p.y;s.z=p.z;this.vertices.push(s)}c=a.length;g=0;for(h=b;g<h;g++)for(k=0,q=a.length-1;k<q;k++){b=n=k+c*g;d=n+c;var l=n+1+c,n=n+1,p=g*f,s=k*e,t=p+f,r=s+e;this.faces.push(new THREE.Face3(b,d,n));this.faceVertexUvs[0].push([new THREE.Vector2(p,
+s),new THREE.Vector2(t,s),new THREE.Vector2(p,r)]);this.faces.push(new THREE.Face3(d,l,n));this.faceVertexUvs[0].push([new THREE.Vector2(t,s),new THREE.Vector2(t,r),new THREE.Vector2(p,r)])}this.mergeVertices();this.computeFaceNormals();this.computeVertexNormals()};THREE.LatheGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.PlaneGeometry=function(a,b,c,d){THREE.Geometry.call(this);this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};var e=a/2,f=b/2;c=c||1;d=d||1;var g=c+1,h=d+1,k=a/c,l=b/d,n=new THREE.Vector3(0,0,1);for(a=0;a<h;a++){var q=a*l-f;for(b=0;b<g;b++)this.vertices.push(new THREE.Vector3(b*k-e,-q,0))}for(a=0;a<d;a++)for(b=0;b<c;b++){var p=b+g*a,e=b+g*(a+1),f=b+1+g*(a+1),h=b+1+g*a,k=new THREE.Vector2(b/c,1-a/d),l=new THREE.Vector2(b/c,1-(a+1)/d),q=new THREE.Vector2((b+1)/c,1-(a+1)/d),s=new THREE.Vector2((b+
+1)/c,1-a/d),p=new THREE.Face3(p,e,h);p.normal.copy(n);p.vertexNormals.push(n.clone(),n.clone(),n.clone());this.faces.push(p);this.faceVertexUvs[0].push([k,l,s]);p=new THREE.Face3(e,f,h);p.normal.copy(n);p.vertexNormals.push(n.clone(),n.clone(),n.clone());this.faces.push(p);this.faceVertexUvs[0].push([l.clone(),q,s.clone()])}};THREE.PlaneGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.RingGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);a=a||0;b=b||50;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(3,d):8;var g,h=[],k=a,l=(b-a)/d;for(a=0;a<=d;a++){for(g=0;g<=c;g++){var n=new THREE.Vector3,q=e+g/c*f;n.x=k*Math.cos(q);n.y=k*Math.sin(q);this.vertices.push(n);h.push(new THREE.Vector2((n.x/b+1)/2,(n.y/b+1)/2))}k+=l}b=new THREE.Vector3(0,0,1);for(a=0;a<d;a++)for(e=a*c,g=0;g<=c;g++)q=g+e,f=q+a,l=q+c+a,n=q+c+1+a,this.faces.push(new THREE.Face3(f,
+l,n,[b.clone(),b.clone(),b.clone()])),this.faceVertexUvs[0].push([h[f].clone(),h[l].clone(),h[n].clone()]),f=q+a,l=q+c+1+a,n=q+1+a,this.faces.push(new THREE.Face3(f,l,n,[b.clone(),b.clone(),b.clone()])),this.faceVertexUvs[0].push([h[f].clone(),h[l].clone(),h[n].clone()]);this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,k)};THREE.RingGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.SphereGeometry=function(a,b,c,d,e,f,g){THREE.Geometry.call(this);this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||50;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;var h,k,l=[],n=[];for(k=0;k<=c;k++){var q=[],p=[];for(h=0;h<=b;h++){var s=h/b,t=k/c,r=new THREE.Vector3;r.x=-a*Math.cos(d+s*e)*Math.sin(f+t*g);r.y=a*Math.cos(f+t*g);r.z=
+a*Math.sin(d+s*e)*Math.sin(f+t*g);this.vertices.push(r);q.push(this.vertices.length-1);p.push(new THREE.Vector2(s,1-t))}l.push(q);n.push(p)}for(k=0;k<c;k++)for(h=0;h<b;h++){d=l[k][h+1];e=l[k][h];f=l[k+1][h];g=l[k+1][h+1];var q=this.vertices[d].clone().normalize(),p=this.vertices[e].clone().normalize(),s=this.vertices[f].clone().normalize(),t=this.vertices[g].clone().normalize(),r=n[k][h+1].clone(),v=n[k][h].clone(),w=n[k+1][h].clone(),u=n[k+1][h+1].clone();Math.abs(this.vertices[d].y)===a?(r.x=(r.x+
+v.x)/2,this.faces.push(new THREE.Face3(d,f,g,[q,s,t])),this.faceVertexUvs[0].push([r,w,u])):Math.abs(this.vertices[f].y)===a?(w.x=(w.x+u.x)/2,this.faces.push(new THREE.Face3(d,e,f,[q,p,s])),this.faceVertexUvs[0].push([r,v,w])):(this.faces.push(new THREE.Face3(d,e,g,[q,p,t])),this.faceVertexUvs[0].push([r,v,u]),this.faces.push(new THREE.Face3(e,f,g,[p.clone(),s,t.clone()])),this.faceVertexUvs[0].push([v.clone(),w,u.clone()]))}this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,
+a)};THREE.SphereGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TextGeometry=function(a,b){b=b||{};var c=THREE.FontUtils.generateShapes(a,b);b.amount=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);THREE.ExtrudeGeometry.call(this,c,b)};THREE.TextGeometry.prototype=Object.create(THREE.ExtrudeGeometry.prototype);THREE.TorusGeometry=function(a,b,c,d,e){THREE.Geometry.call(this);this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};a=a||100;b=b||40;c=c||8;d=d||6;e=e||2*Math.PI;for(var f=new THREE.Vector3,g=[],h=[],k=0;k<=c;k++)for(var l=0;l<=d;l++){var n=l/d*e,q=k/c*Math.PI*2;f.x=a*Math.cos(n);f.y=a*Math.sin(n);var p=new THREE.Vector3;p.x=(a+b*Math.cos(q))*Math.cos(n);p.y=(a+b*Math.cos(q))*Math.sin(n);p.z=b*Math.sin(q);this.vertices.push(p);g.push(new THREE.Vector2(l/d,k/c));h.push(p.clone().sub(f).normalize())}for(k=
+1;k<=c;k++)for(l=1;l<=d;l++)a=(d+1)*k+l-1,b=(d+1)*(k-1)+l-1,e=(d+1)*(k-1)+l,f=(d+1)*k+l,n=new THREE.Face3(a,b,f,[h[a].clone(),h[b].clone(),h[f].clone()]),this.faces.push(n),this.faceVertexUvs[0].push([g[a].clone(),g[b].clone(),g[f].clone()]),n=new THREE.Face3(b,e,f,[h[b].clone(),h[e].clone(),h[f].clone()]),this.faces.push(n),this.faceVertexUvs[0].push([g[b].clone(),g[e].clone(),g[f].clone()]);this.computeFaceNormals()};THREE.TorusGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TorusKnotGeometry=function(a,b,c,d,e,f,g){function h(a,b,c,d,e){var f=Math.cos(a),g=Math.sin(a);a*=b/c;b=Math.cos(a);f*=d*(2+b)*0.5;g=d*(2+b)*g*0.5;d=e*d*Math.sin(a)*0.5;return new THREE.Vector3(f,g,d)}THREE.Geometry.call(this);this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,p:e,q:f,heightScale:g};a=a||100;b=b||40;c=c||64;d=d||8;e=e||2;f=f||3;g=g||1;for(var k=Array(c),l=new THREE.Vector3,n=new THREE.Vector3,q=new THREE.Vector3,p=0;p<c;++p){k[p]=Array(d);var s=p/c*2*e*Math.PI,
+t=h(s,f,e,a,g),s=h(s+0.01,f,e,a,g);l.subVectors(s,t);n.addVectors(s,t);q.crossVectors(l,n);n.crossVectors(q,l);q.normalize();n.normalize();for(s=0;s<d;++s){var r=s/d*2*Math.PI,v=-b*Math.cos(r),r=b*Math.sin(r),w=new THREE.Vector3;w.x=t.x+v*n.x+r*q.x;w.y=t.y+v*n.y+r*q.y;w.z=t.z+v*n.z+r*q.z;k[p][s]=this.vertices.push(w)-1}}for(p=0;p<c;++p)for(s=0;s<d;++s)e=(p+1)%c,f=(s+1)%d,a=k[p][s],b=k[e][s],e=k[e][f],f=k[p][f],g=new THREE.Vector2(p/c,s/d),l=new THREE.Vector2((p+1)/c,s/d),n=new THREE.Vector2((p+1)/
+c,(s+1)/d),q=new THREE.Vector2(p/c,(s+1)/d),this.faces.push(new THREE.Face3(a,b,f)),this.faceVertexUvs[0].push([g,l,q]),this.faces.push(new THREE.Face3(b,e,f)),this.faceVertexUvs[0].push([l.clone(),n,q.clone()]);this.computeFaceNormals();this.computeVertexNormals()};THREE.TorusKnotGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TubeGeometry=function(a,b,c,d,e){THREE.Geometry.call(this);this.parameters={path:a,segments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var f=[],g,h,k=b+1,l,n,q,p,s=new THREE.Vector3,t,r,v;t=new THREE.TubeGeometry.FrenetFrames(a,b,e);r=t.normals;v=t.binormals;this.tangents=t.tangents;this.normals=r;this.binormals=v;for(t=0;t<k;t++)for(f[t]=[],l=t/(k-1),p=a.getPointAt(l),g=r[t],h=v[t],l=0;l<d;l++)n=l/d*2*Math.PI,q=-c*Math.cos(n),n=c*Math.sin(n),s.copy(p),s.x+=q*g.x+n*
+h.x,s.y+=q*g.y+n*h.y,s.z+=q*g.z+n*h.z,f[t][l]=this.vertices.push(new THREE.Vector3(s.x,s.y,s.z))-1;for(t=0;t<b;t++)for(l=0;l<d;l++)k=e?(t+1)%b:t+1,s=(l+1)%d,a=f[t][l],c=f[k][l],k=f[k][s],s=f[t][s],r=new THREE.Vector2(t/b,l/d),v=new THREE.Vector2((t+1)/b,l/d),g=new THREE.Vector2((t+1)/b,(l+1)/d),h=new THREE.Vector2(t/b,(l+1)/d),this.faces.push(new THREE.Face3(a,c,s)),this.faceVertexUvs[0].push([r,v,h]),this.faces.push(new THREE.Face3(c,k,s)),this.faceVertexUvs[0].push([v.clone(),g,h.clone()]);this.computeFaceNormals();
+this.computeVertexNormals()};THREE.TubeGeometry.prototype=Object.create(THREE.Geometry.prototype);
+THREE.TubeGeometry.FrenetFrames=function(a,b,c){new THREE.Vector3;var d=new THREE.Vector3;new THREE.Vector3;var e=[],f=[],g=[],h=new THREE.Vector3,k=new THREE.Matrix4;b+=1;var l,n,q;this.tangents=e;this.normals=f;this.binormals=g;for(l=0;l<b;l++)n=l/(b-1),e[l]=a.getTangentAt(n),e[l].normalize();f[0]=new THREE.Vector3;g[0]=new THREE.Vector3;a=Number.MAX_VALUE;l=Math.abs(e[0].x);n=Math.abs(e[0].y);q=Math.abs(e[0].z);l<=a&&(a=l,d.set(1,0,0));n<=a&&(a=n,d.set(0,1,0));q<=a&&d.set(0,0,1);h.crossVectors(e[0],
+d).normalize();f[0].crossVectors(e[0],h);g[0].crossVectors(e[0],f[0]);for(l=1;l<b;l++)f[l]=f[l-1].clone(),g[l]=g[l-1].clone(),h.crossVectors(e[l-1],e[l]),1E-4<h.length()&&(h.normalize(),d=Math.acos(THREE.Math.clamp(e[l-1].dot(e[l]),-1,1)),f[l].applyMatrix4(k.makeRotationAxis(h,d))),g[l].crossVectors(e[l],f[l]);if(c)for(d=Math.acos(THREE.Math.clamp(f[0].dot(f[b-1]),-1,1)),d/=b-1,0<e[0].dot(h.crossVectors(f[0],f[b-1]))&&(d=-d),l=1;l<b;l++)f[l].applyMatrix4(k.makeRotationAxis(e[l],d*l)),g[l].crossVectors(e[l],
+f[l])};THREE.PolyhedronGeometry=function(a,b,c,d){function e(a){var b=a.normalize().clone();b.index=k.vertices.push(b)-1;var c=Math.atan2(a.z,-a.x)/2/Math.PI+0.5;a=Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+0.5;b.uv=new THREE.Vector2(c,1-a);return b}function f(a,b,c){var d=new THREE.Face3(a.index,b.index,c.index,[a.clone(),b.clone(),c.clone()]);k.faces.push(d);v.copy(a).add(b).add(c).divideScalar(3);d=Math.atan2(v.z,-v.x);k.faceVertexUvs[0].push([h(a.uv,a,d),h(b.uv,b,d),h(c.uv,c,d)])}function g(a,
+b){var c=Math.pow(2,b);Math.pow(4,b);for(var d=e(k.vertices[a.a]),g=e(k.vertices[a.b]),h=e(k.vertices[a.c]),l=[],n=0;n<=c;n++){l[n]=[];for(var p=e(d.clone().lerp(h,n/c)),q=e(g.clone().lerp(h,n/c)),r=c-n,s=0;s<=r;s++)l[n][s]=0==s&&n==c?p:e(p.clone().lerp(q,s/r))}for(n=0;n<c;n++)for(s=0;s<2*(c-n)-1;s++)d=Math.floor(s/2),0==s%2?f(l[n][d+1],l[n+1][d],l[n][d]):f(l[n][d+1],l[n+1][d+1],l[n+1][d])}function h(a,b,c){0>c&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/
+Math.PI+0.5,a.y));return a.clone()}THREE.Geometry.call(this);c=c||1;d=d||0;for(var k=this,l=0,n=a.length;l<n;l+=3)e(new THREE.Vector3(a[l],a[l+1],a[l+2]));a=this.vertices;for(var q=[],p=l=0,n=b.length;l<n;l+=3,p++){var s=a[b[l]],t=a[b[l+1]],r=a[b[l+2]];q[p]=new THREE.Face3(s.index,t.index,r.index,[s.clone(),t.clone(),r.clone()])}for(var v=new THREE.Vector3,l=0,n=q.length;l<n;l++)g(q[l],d);l=0;for(n=this.faceVertexUvs[0].length;l<n;l++)b=this.faceVertexUvs[0][l],d=b[0].x,a=b[1].x,q=b[2].x,p=Math.max(d,
+Math.max(a,q)),s=Math.min(d,Math.min(a,q)),0.9<p&&0.1>s&&(0.2>d&&(b[0].x+=1),0.2>a&&(b[1].x+=1),0.2>q&&(b[2].x+=1));l=0;for(n=this.vertices.length;l<n;l++)this.vertices[l].multiplyScalar(c);this.mergeVertices();this.computeFaceNormals();this.boundingSphere=new THREE.Sphere(new THREE.Vector3,c)};THREE.PolyhedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.IcosahedronGeometry=function(a,b){this.parameters={radius:a,detail:b};var c=(1+Math.sqrt(5))/2;THREE.PolyhedronGeometry.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b)};THREE.IcosahedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.OctahedronGeometry=function(a,b){this.parameters={radius:a,detail:b};THREE.PolyhedronGeometry.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b)};THREE.OctahedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.TetrahedronGeometry=function(a,b){THREE.PolyhedronGeometry.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b)};THREE.TetrahedronGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ParametricGeometry=function(a,b,c){THREE.Geometry.call(this);var d=this.vertices,e=this.faces,f=this.faceVertexUvs[0],g,h,k,l,n=b+1;for(g=0;g<=c;g++)for(l=g/c,h=0;h<=b;h++)k=h/b,k=a(k,l),d.push(k);var q,p,s,t;for(g=0;g<c;g++)for(h=0;h<b;h++)a=g*n+h,d=g*n+h+1,l=(g+1)*n+h+1,k=(g+1)*n+h,q=new THREE.Vector2(h/b,g/c),p=new THREE.Vector2((h+1)/b,g/c),s=new THREE.Vector2((h+1)/b,(g+1)/c),t=new THREE.Vector2(h/b,(g+1)/c),e.push(new THREE.Face3(a,d,k)),f.push([q,p,t]),e.push(new THREE.Face3(d,l,k)),
+f.push([p.clone(),s,t.clone()]);this.computeFaceNormals();this.computeVertexNormals()};THREE.ParametricGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.AxisHelper=function(a){a=a||1;var b=new THREE.Geometry;b.vertices.push(new THREE.Vector3,new THREE.Vector3(a,0,0),new THREE.Vector3,new THREE.Vector3(0,a,0),new THREE.Vector3,new THREE.Vector3(0,0,a));b.colors.push(new THREE.Color(16711680),new THREE.Color(16755200),new THREE.Color(65280),new THREE.Color(11206400),new THREE.Color(255),new THREE.Color(43775));a=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});THREE.Line.call(this,b,a,THREE.LinePieces)};
+THREE.AxisHelper.prototype=Object.create(THREE.Line.prototype);THREE.ArrowHelper=function(a,b,c,d,e,f){THREE.Object3D.call(this);void 0===d&&(d=16776960);void 0===c&&(c=1);void 0===e&&(e=0.2*c);void 0===f&&(f=0.2*e);this.position=b;b=new THREE.Geometry;b.vertices.push(new THREE.Vector3(0,0,0));b.vertices.push(new THREE.Vector3(0,1,0));this.line=new THREE.Line(b,new THREE.LineBasicMaterial({color:d}));this.line.matrixAutoUpdate=!1;this.add(this.line);b=new THREE.CylinderGeometry(0,0.5,1,5,1);b.applyMatrix((new THREE.Matrix4).makeTranslation(0,-0.5,0));this.cone=
+new THREE.Mesh(b,new THREE.MeshBasicMaterial({color:d}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(a);this.setLength(c,e,f)};THREE.ArrowHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.ArrowHelper.prototype.setDirection=function(){var a=new THREE.Vector3,b;return function(c){0.99999<c.y?this.quaternion.set(0,0,0,1):-0.99999>c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();
+THREE.ArrowHelper.prototype.setLength=function(a,b,c){void 0===b&&(b=0.2*a);void 0===c&&(c=0.2*b);this.line.scale.set(1,a,1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};THREE.BoxHelper=function(a){var b=[new THREE.Vector3(1,1,1),new THREE.Vector3(-1,1,1),new THREE.Vector3(-1,-1,1),new THREE.Vector3(1,-1,1),new THREE.Vector3(1,1,-1),new THREE.Vector3(-1,1,-1),new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,-1,-1)];this.vertices=b;var c=new THREE.Geometry;c.vertices.push(b[0],b[1],b[1],b[2],b[2],b[3],b[3],b[0],b[4],b[5],b[5],b[6],b[6],b[7],b[7],b[4],b[0],b[4],b[1],b[5],b[2],b[6],b[3],b[7]);THREE.Line.call(this,c,new THREE.LineBasicMaterial({color:16776960}),THREE.LinePieces);
+void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.Line.prototype);
+THREE.BoxHelper.prototype.update=function(a){var b=a.geometry;null===b.boundingBox&&b.computeBoundingBox();var c=b.boundingBox.min,b=b.boundingBox.max,d=this.vertices;d[0].set(b.x,b.y,b.z);d[1].set(c.x,b.y,b.z);d[2].set(c.x,c.y,b.z);d[3].set(b.x,c.y,b.z);d[4].set(b.x,b.y,c.z);d[5].set(c.x,b.y,c.z);d[6].set(c.x,c.y,c.z);d[7].set(b.x,c.y,c.z);this.geometry.computeBoundingSphere();this.geometry.verticesNeedUpdate=!0;this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld};THREE.BoundingBoxHelper=function(a,b){var c=void 0!==b?b:8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.BoxGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200);
+b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.Line.call(this,d,e,THREE.LinePieces);this.camera=a;this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()};
+THREE.CameraHelper.prototype=Object.create(THREE.Line.prototype);
+THREE.CameraHelper.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Camera,c=new THREE.Projector;return function(){function d(d,g,h,k){a.set(g,h,k);c.unprojectVector(a,b);d=e.pointMap[d];if(void 0!==d)for(g=0,h=d.length;g<h;g++)e.geometry.vertices[d[g]].copy(a)}var e=this;b.projectionMatrix.copy(this.camera.projectionMatrix);d("c",0,0,-1);d("t",0,0,1);d("n1",-1,-1,-1);d("n2",1,-1,-1);d("n3",-1,1,-1);d("n4",1,1,-1);d("f1",-1,-1,1);d("f2",1,-1,1);d("f3",-1,1,1);d("f4",1,1,1);d("u1",0.7,
+1.1,-1);d("u2",-0.7,1.1,-1);d("u3",0,2,-1);d("cf1",-1,0,1);d("cf2",1,0,1);d("cf3",0,-1,1);d("cf4",0,1,1);d("cn1",-1,0,-1);d("cn2",1,0,-1);d("cn3",0,-1,-1);d("cn4",0,1,-1);this.geometry.verticesNeedUpdate=!0}}();THREE.DirectionalLightHelper=function(a,b){THREE.Object3D.call(this);this.light=a;this.light.updateMatrixWorld();this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;b=b||1;var c=new THREE.Geometry;c.vertices.push(new THREE.Vector3(-b,b,0),new THREE.Vector3(b,b,0),new THREE.Vector3(b,-b,0),new THREE.Vector3(-b,-b,0),new THREE.Vector3(-b,b,0));var d=new THREE.LineBasicMaterial({fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightPlane=new THREE.Line(c,d);this.add(this.lightPlane);
+c=new THREE.Geometry;c.vertices.push(new THREE.Vector3,new THREE.Vector3);d=new THREE.LineBasicMaterial({fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.targetLine=new THREE.Line(c,d);this.add(this.targetLine);this.update()};THREE.DirectionalLightHelper.prototype=Object.create(THREE.Object3D.prototype);
+THREE.DirectionalLightHelper.prototype.dispose=function(){this.lightPlane.geometry.dispose();this.lightPlane.material.dispose();this.targetLine.geometry.dispose();this.targetLine.material.dispose()};
+THREE.DirectionalLightHelper.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);c.subVectors(b,a);this.lightPlane.lookAt(c);this.lightPlane.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.targetLine.geometry.vertices[1].copy(c);this.targetLine.geometry.verticesNeedUpdate=!0;this.targetLine.material.color.copy(this.lightPlane.material.color)}}();THREE.EdgesHelper=function(a,b){var c=void 0!==b?b:16777215,d=[0,0],e={},f=function(a,b){return a-b},g=["a","b","c"],h=new THREE.BufferGeometry,k=a.geometry.clone();k.mergeVertices();k.computeFaceNormals();for(var l=k.vertices,k=k.faces,n=0,q=0,p=k.length;q<p;q++)for(var s=k[q],t=0;3>t;t++){d[0]=s[g[t]];d[1]=s[g[(t+1)%3]];d.sort(f);var r=d.toString();void 0===e[r]?(e[r]={vert1:d[0],vert2:d[1],face1:q,face2:void 0},n++):e[r].face2=q}h.addAttribute("position",new THREE.Float32Attribute(2*n,3));d=h.attributes.position.array;
+f=0;for(r in e)if(g=e[r],void 0===g.face2||0.9999>k[g.face1].normal.dot(k[g.face2].normal))n=l[g.vert1],d[f++]=n.x,d[f++]=n.y,d[f++]=n.z,n=l[g.vert2],d[f++]=n.x,d[f++]=n.y,d[f++]=n.z;THREE.Line.call(this,h,new THREE.LineBasicMaterial({color:c}),THREE.LinePieces);this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld};THREE.EdgesHelper.prototype=Object.create(THREE.Line.prototype);THREE.FaceNormalsHelper=function(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16776960;d=void 0!==d?d:1;b=new THREE.Geometry;c=0;for(var e=this.object.geometry.faces.length;c<e;c++)b.vertices.push(new THREE.Vector3,new THREE.Vector3);THREE.Line.call(this,b,new THREE.LineBasicMaterial({color:a,linewidth:d}),THREE.LinePieces);this.matrixAutoUpdate=!1;this.normalMatrix=new THREE.Matrix3;this.update()};THREE.FaceNormalsHelper.prototype=Object.create(THREE.Line.prototype);
+THREE.FaceNormalsHelper.prototype.update=function(){var a=this.geometry.vertices,b=this.object,c=b.geometry.vertices,d=b.geometry.faces,e=b.matrixWorld;b.updateMatrixWorld(!0);this.normalMatrix.getNormalMatrix(e);for(var f=b=0,g=d.length;b<g;b++,f+=2){var h=d[b];a[f].copy(c[h.a]).add(c[h.b]).add(c[h.c]).divideScalar(3).applyMatrix4(e);a[f+1].copy(h.normal).applyMatrix3(this.normalMatrix).normalize().multiplyScalar(this.size).add(a[f])}this.geometry.verticesNeedUpdate=!0;return this};THREE.GridHelper=function(a,b){var c=new THREE.Geometry,d=new THREE.LineBasicMaterial({vertexColors:THREE.VertexColors});this.color1=new THREE.Color(4473924);this.color2=new THREE.Color(8947848);for(var e=-a;e<=a;e+=b){c.vertices.push(new THREE.Vector3(-a,0,e),new THREE.Vector3(a,0,e),new THREE.Vector3(e,0,-a),new THREE.Vector3(e,0,a));var f=0===e?this.color1:this.color2;c.colors.push(f,f,f,f)}THREE.Line.call(this,c,d,THREE.LinePieces)};THREE.GridHelper.prototype=Object.create(THREE.Line.prototype);
+THREE.GridHelper.prototype.setColors=function(a,b){this.color1.set(a);this.color2.set(b);this.geometry.colorsNeedUpdate=!0};THREE.HemisphereLightHelper=function(a,b,c,d){THREE.Object3D.call(this);this.light=a;this.light.updateMatrixWorld();this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.colors=[new THREE.Color,new THREE.Color];a=new THREE.SphereGeometry(b,4,2);a.applyMatrix((new THREE.Matrix4).makeRotationX(-Math.PI/2));for(b=0;8>b;b++)a.faces[b].color=this.colors[4>b?0:1];b=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(a,b);this.add(this.lightSphere);
+this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()};
+THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrixWorld=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};
+THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SkeletonHelper=function(a){for(var b=a.skeleton,c=new THREE.Geometry,d=0;d<b.bones.length;d++)b.bones[d].parent instanceof THREE.Bone&&(c.vertices.push(new THREE.Vector3),c.vertices.push(new THREE.Vector3),c.colors.push(new THREE.Color(0,0,1)),c.colors.push(new THREE.Color(0,1,0)));d=new THREE.LineBasicMaterial({vertexColors:!0,depthTest:!1,depthWrite:!1,transparent:!0});THREE.Line.call(this,c,d,THREE.LinePieces);this.skeleton=b;this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.update()};
+THREE.SkeletonHelper.prototype=Object.create(THREE.Line.prototype);THREE.SkeletonHelper.prototype.update=function(){for(var a=this.geometry,b=0,c=0;c<this.skeleton.bones.length;c++){var d=this.skeleton.bones[c];d.parent instanceof THREE.Bone&&(a.vertices[b].setFromMatrixPosition(d.skinMatrix),a.vertices[b+1].setFromMatrixPosition(d.parent.skinMatrix),b+=2)}a.verticesNeedUpdate=!0;a.computeBoundingSphere()};THREE.SpotLightHelper=function(a){THREE.Object3D.call(this);this.light=a;this.light.updateMatrixWorld();this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;a=new THREE.CylinderGeometry(0,1,1,8,1,!0);a.applyMatrix((new THREE.Matrix4).makeTranslation(0,-0.5,0));a.applyMatrix((new THREE.Matrix4).makeRotationX(-Math.PI/2));var b=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});this.cone=new THREE.Mesh(a,b);this.add(this.cone);this.update()};THREE.SpotLightHelper.prototype=Object.create(THREE.Object3D.prototype);
+THREE.SpotLightHelper.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};THREE.SpotLightHelper.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){var c=this.light.distance?this.light.distance:1E4,d=c*Math.tan(this.light.angle);this.cone.scale.set(d,d,c);a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(b.sub(a));this.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}();THREE.VertexNormalsHelper=function(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;b=void 0!==c?c:16711680;d=void 0!==d?d:1;c=new THREE.Geometry;a=a.geometry.faces;for(var e=0,f=a.length;e<f;e++)for(var g=0,h=a[e].vertexNormals.length;g<h;g++)c.vertices.push(new THREE.Vector3),c.vertices.push(new THREE.Vector3);THREE.Line.call(this,c,new THREE.LineBasicMaterial({color:b,linewidth:d}),THREE.LinePieces);this.matrixAutoUpdate=!1;this.normalMatrix=new THREE.Matrix3;this.update()};
+THREE.VertexNormalsHelper.prototype=Object.create(THREE.Line.prototype);
+THREE.VertexNormalsHelper.prototype.update=function(a){var b=new THREE.Vector3;return function(a){a=["a","b","c","d"];this.object.updateMatrixWorld(!0);this.normalMatrix.getNormalMatrix(this.object.matrixWorld);for(var d=this.geometry.vertices,e=this.object.geometry.vertices,f=this.object.geometry.faces,g=this.object.matrixWorld,h=0,k=0,l=f.length;k<l;k++)for(var n=f[k],q=0,p=n.vertexNormals.length;q<p;q++){var s=n.vertexNormals[q];d[h].copy(e[n[a[q]]]).applyMatrix4(g);b.copy(s).applyMatrix3(this.normalMatrix).normalize().multiplyScalar(this.size);
+b.add(d[h]);h+=1;d[h].copy(b);h+=1}this.geometry.verticesNeedUpdate=!0;return this}}();THREE.VertexTangentsHelper=function(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;b=void 0!==c?c:255;d=void 0!==d?d:1;c=new THREE.Geometry;a=a.geometry.faces;for(var e=0,f=a.length;e<f;e++)for(var g=0,h=a[e].vertexTangents.length;g<h;g++)c.vertices.push(new THREE.Vector3),c.vertices.push(new THREE.Vector3);THREE.Line.call(this,c,new THREE.LineBasicMaterial({color:b,linewidth:d}),THREE.LinePieces);this.matrixAutoUpdate=!1;this.update()};THREE.VertexTangentsHelper.prototype=Object.create(THREE.Line.prototype);
+THREE.VertexTangentsHelper.prototype.update=function(a){var b=new THREE.Vector3;return function(a){a=["a","b","c","d"];this.object.updateMatrixWorld(!0);for(var d=this.geometry.vertices,e=this.object.geometry.vertices,f=this.object.geometry.faces,g=this.object.matrixWorld,h=0,k=0,l=f.length;k<l;k++)for(var n=f[k],q=0,p=n.vertexTangents.length;q<p;q++){var s=n.vertexTangents[q];d[h].copy(e[n[a[q]]]).applyMatrix4(g);b.copy(s).transformDirection(g).multiplyScalar(this.size);b.add(d[h]);h+=1;d[h].copy(b);
+h+=1}this.geometry.verticesNeedUpdate=!0;return this}}();THREE.WireframeHelper=function(a,b){var c=void 0!==b?b:16777215,d=[0,0],e={},f=function(a,b){return a-b},g=["a","b","c"],h=new THREE.BufferGeometry;if(a.geometry instanceof THREE.Geometry){for(var k=a.geometry.vertices,l=a.geometry.faces,n=0,q=new Uint32Array(6*l.length),p=0,s=l.length;p<s;p++)for(var t=l[p],r=0;3>r;r++){d[0]=t[g[r]];d[1]=t[g[(r+1)%3]];d.sort(f);var v=d.toString();void 0===e[v]&&(q[2*n]=d[0],q[2*n+1]=d[1],e[v]=!0,n++)}h.addAttribute("position",new THREE.Float32Attribute(2*n,3));d=
+h.attributes.position.array;p=0;for(s=n;p<s;p++)for(r=0;2>r;r++)n=k[q[2*p+r]],g=6*p+3*r,d[g+0]=n.x,d[g+1]=n.y,d[g+2]=n.z}else if(a.geometry instanceof THREE.BufferGeometry&&void 0!==a.geometry.attributes.index){for(var k=a.geometry.attributes.position.array,s=a.geometry.attributes.index.array,l=a.geometry.offsets,n=0,q=new Uint32Array(2*s.length),t=0,w=l.length;t<w;++t)for(var r=l[t].start,v=l[t].count,g=l[t].index,p=r,u=r+v;p<u;p+=3)for(r=0;3>r;r++)d[0]=g+s[p+r],d[1]=g+s[p+(r+1)%3],d.sort(f),v=d.toString(),
+void 0===e[v]&&(q[2*n]=d[0],q[2*n+1]=d[1],e[v]=!0,n++);h.addAttribute("position",new THREE.Float32Attribute(2*n,3));d=h.attributes.position.array;p=0;for(s=n;p<s;p++)for(r=0;2>r;r++)g=6*p+3*r,n=3*q[2*p+r],d[g+0]=k[n],d[g+1]=k[n+1],d[g+2]=k[n+2]}else if(a.geometry instanceof THREE.BufferGeometry)for(k=a.geometry.attributes.position.array,n=k.length/3,q=n/3,h.addAttribute("position",new THREE.Float32Attribute(2*n,3)),d=h.attributes.position.array,p=0,s=q;p<s;p++)for(r=0;3>r;r++)g=18*p+6*r,q=9*p+3*r,
+d[g+0]=k[q],d[g+1]=k[q+1],d[g+2]=k[q+2],n=9*p+(r+1)%3*3,d[g+3]=k[n],d[g+4]=k[n+1],d[g+5]=k[n+2];THREE.Line.call(this,h,new THREE.LineBasicMaterial({color:c}),THREE.LinePieces);this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld};THREE.WireframeHelper.prototype=Object.create(THREE.Line.prototype);THREE.ImmediateRenderObject=function(){THREE.Object3D.call(this);this.render=function(a){}};THREE.ImmediateRenderObject.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);
+THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})};
+THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a<b;a++)c=this.lensFlares[a],c.x=this.positionScreen.x+d*c.distance,c.y=this.positionScreen.y+e*c.distance,c.wantedRotation=c.x*Math.PI*0.25,c.rotation+=0.25*(c.wantedRotation-c.rotation)};THREE.MorphBlendMesh=function(a,b){THREE.Mesh.call(this,a,b);this.animationsMap={};this.animationsList=[];var c=this.geometry.morphTargets.length;this.createAnimation("__default",0,c-1,c/1);this.setAnimationWeight("__default",1)};THREE.MorphBlendMesh.prototype=Object.create(THREE.Mesh.prototype);
+THREE.MorphBlendMesh.prototype.createAnimation=function(a,b,c,d){b={startFrame:b,endFrame:c,length:c-b+1,fps:d,duration:(c-b)/d,lastFrame:0,currentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1};this.animationsMap[a]=b;this.animationsList.push(b)};
+THREE.MorphBlendMesh.prototype.autoCreateAnimations=function(a){for(var b=/([a-z]+)(\d+)/,c,d={},e=this.geometry,f=0,g=e.morphTargets.length;f<g;f++){var h=e.morphTargets[f].name.match(b);if(h&&1<h.length){var k=h[1];d[k]||(d[k]={start:Infinity,end:-Infinity});h=d[k];f<h.start&&(h.start=f);f>h.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,a);this.firstAnimation=c};
+THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};
+THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};
+THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};
+THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b<c;b++){var d=this.animationsList[b];if(d.active){var e=d.duration/d.length;d.time+=d.direction*a;if(d.mirroredLoop){if(d.time>d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.startFrame+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;
+f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);this.morphTargetInfluences[d.currentFrame]=e*g;this.morphTargetInfluences[d.lastFrame]=(1-e)*g}}};THREE.LensFlarePlugin=function(){function a(a,c){var d=b.createProgram(),e=b.createShader(b.FRAGMENT_SHADER),f=b.createShader(b.VERTEX_SHADER),g="precision "+c+" float;\n";b.shaderSource(e,g+a.fragmentShader);b.shaderSource(f,g+a.vertexShader);b.compileShader(e);b.compileShader(f);b.attachShader(d,e);b.attachShader(d,f);b.linkProgram(d);return d}var b,c,d,e,f,g,h,k,l,n,q,p,s;this.init=function(t){b=t.context;c=t;d=t.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);t=0;e[t++]=-1;e[t++]=-1;
+e[t++]=0;e[t++]=0;e[t++]=1;e[t++]=-1;e[t++]=1;e[t++]=0;e[t++]=1;e[t++]=1;e[t++]=1;e[t++]=1;e[t++]=-1;e[t++]=1;e[t++]=0;e[t++]=1;t=0;f[t++]=0;f[t++]=1;f[t++]=2;f[t++]=0;f[t++]=2;f[t++]=3;g=b.createBuffer();h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,g);b.bufferData(b.ARRAY_BUFFER,e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);k=b.createTexture();l=b.createTexture();b.bindTexture(b.TEXTURE_2D,k);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,
+0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,l);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);
+b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(n=!1,q=a(THREE.ShaderFlares.lensFlare,d)):(n=!0,q=a(THREE.ShaderFlares.lensFlareVertexTexture,d));p={};s={};p.vertex=b.getAttribLocation(q,"position");p.uv=b.getAttribLocation(q,"uv");s.renderType=b.getUniformLocation(q,"renderType");s.map=b.getUniformLocation(q,"map");s.occlusionMap=b.getUniformLocation(q,"occlusionMap");s.opacity=
+b.getUniformLocation(q,"opacity");s.color=b.getUniformLocation(q,"color");s.scale=b.getUniformLocation(q,"scale");s.rotation=b.getUniformLocation(q,"rotation");s.screenPosition=b.getUniformLocation(q,"screenPosition")};this.render=function(a,d,e,f){a=a.__webglFlares;var u=a.length;if(u){var y=new THREE.Vector3,L=f/e,x=0.5*e,N=0.5*f,J=16/f,B=new THREE.Vector2(J*L,J),K=new THREE.Vector3(1,1,0),A=new THREE.Vector2(1,1),G=s,J=p;b.useProgram(q);b.enableVertexAttribArray(p.vertex);b.enableVertexAttribArray(p.uv);
+b.uniform1i(G.occlusionMap,0);b.uniform1i(G.map,1);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(J.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(J.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.disable(b.CULL_FACE);b.depthMask(!1);var D,C,F,z,H;for(D=0;D<u;D++)if(J=16/f,B.set(J*L,J),z=a[D],y.set(z.matrixWorld.elements[12],z.matrixWorld.elements[13],z.matrixWorld.elements[14]),y.applyMatrix4(d.matrixWorldInverse),y.applyProjection(d.projectionMatrix),K.copy(y),A.x=K.x*x+x,
+A.y=K.y*N+N,n||0<A.x&&A.x<e&&0<A.y&&A.y<f)for(b.activeTexture(b.TEXTURE1),b.bindTexture(b.TEXTURE_2D,k),b.copyTexImage2D(b.TEXTURE_2D,0,b.RGB,A.x-8,A.y-8,16,16,0),b.uniform1i(G.renderType,0),b.uniform2f(G.scale,B.x,B.y),b.uniform3f(G.screenPosition,K.x,K.y,K.z),b.disable(b.BLEND),b.enable(b.DEPTH_TEST),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0),b.activeTexture(b.TEXTURE0),b.bindTexture(b.TEXTURE_2D,l),b.copyTexImage2D(b.TEXTURE_2D,0,b.RGBA,A.x-8,A.y-8,16,16,0),b.uniform1i(G.renderType,1),b.disable(b.DEPTH_TEST),
+b.activeTexture(b.TEXTURE1),b.bindTexture(b.TEXTURE_2D,k),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0),z.positionScreen.copy(K),z.customUpdateCallback?z.customUpdateCallback(z):z.updateLensFlares(),b.uniform1i(G.renderType,2),b.enable(b.BLEND),C=0,F=z.lensFlares.length;C<F;C++)H=z.lensFlares[C],0.001<H.opacity&&0.001<H.scale&&(K.x=H.x,K.y=H.y,K.z=H.z,J=H.size*H.scale/f,B.x=J*L,B.y=J,b.uniform3f(G.screenPosition,K.x,K.y,K.z),b.uniform2f(G.scale,B.x,B.y),b.uniform1f(G.rotation,H.rotation),b.uniform1f(G.opacity,
+H.opacity),b.uniform3f(G.color,H.color.r,H.color.g,H.color.b),c.setBlending(H.blending,H.blendEquation,H.blendSrc,H.blendDst),c.setTexture(H.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0));b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}};THREE.ShadowMapPlugin=function(){var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4,k=new THREE.Vector3,l=new THREE.Vector3,n=new THREE.Vector3;this.init=function(g){a=g.context;b=g;g=THREE.ShaderLib.depthRGBA;var h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,
+vertexShader:g.vertexShader,uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(q,p){var s,t,r,v,w,u,y,L,x,N=[];v=0;a.clearColor(1,1,1,1);a.disable(a.BLEND);a.enable(a.CULL_FACE);a.frontFace(a.CCW);b.shadowMapCullFace===THREE.CullFaceFront?
+a.cullFace(a.FRONT):a.cullFace(a.BACK);b.setDepthTest(!0);s=0;for(t=q.__lights.length;s<t;s++)if(r=q.__lights[s],r.castShadow)if(r instanceof THREE.DirectionalLight&&r.shadowCascade)for(w=0;w<r.shadowCascadeCount;w++){var J;if(r.shadowCascadeArray[w])J=r.shadowCascadeArray[w];else{x=r;y=w;J=new THREE.DirectionalLight;J.isVirtual=!0;J.onlyShadow=!0;J.castShadow=!0;J.shadowCameraNear=x.shadowCameraNear;J.shadowCameraFar=x.shadowCameraFar;J.shadowCameraLeft=x.shadowCameraLeft;J.shadowCameraRight=x.shadowCameraRight;
+J.shadowCameraBottom=x.shadowCameraBottom;J.shadowCameraTop=x.shadowCameraTop;J.shadowCameraVisible=x.shadowCameraVisible;J.shadowDarkness=x.shadowDarkness;J.shadowBias=x.shadowCascadeBias[y];J.shadowMapWidth=x.shadowCascadeWidth[y];J.shadowMapHeight=x.shadowCascadeHeight[y];J.pointsWorld=[];J.pointsFrustum=[];var B=J.pointsWorld;u=J.pointsFrustum;for(L=0;8>L;L++)B[L]=new THREE.Vector3,u[L]=new THREE.Vector3;B=x.shadowCascadeNearZ[y];x=x.shadowCascadeFarZ[y];u[0].set(-1,-1,B);u[1].set(1,-1,B);u[2].set(-1,
+1,B);u[3].set(1,1,B);u[4].set(-1,-1,x);u[5].set(1,-1,x);u[6].set(-1,1,x);u[7].set(1,1,x);J.originalCamera=p;u=new THREE.Gyroscope;u.position.copy(r.shadowCascadeOffset);u.add(J);u.add(J.target);p.add(u);r.shadowCascadeArray[w]=J;console.log("Created virtualLight",J)}y=r;B=w;x=y.shadowCascadeArray[B];x.position.copy(y.position);x.target.position.copy(y.target.position);x.lookAt(x.target);x.shadowCameraVisible=y.shadowCameraVisible;x.shadowDarkness=y.shadowDarkness;x.shadowBias=y.shadowCascadeBias[B];
+u=y.shadowCascadeNearZ[B];y=y.shadowCascadeFarZ[B];x=x.pointsFrustum;x[0].z=u;x[1].z=u;x[2].z=u;x[3].z=u;x[4].z=y;x[5].z=y;x[6].z=y;x[7].z=y;N[v]=J;v++}else N[v]=r,v++;s=0;for(t=N.length;s<t;s++){r=N[s];r.shadowMap||(w=THREE.LinearFilter,b.shadowMapType===THREE.PCFSoftShadowMap&&(w=THREE.NearestFilter),r.shadowMap=new THREE.WebGLRenderTarget(r.shadowMapWidth,r.shadowMapHeight,{minFilter:w,magFilter:w,format:THREE.RGBAFormat}),r.shadowMapSize=new THREE.Vector2(r.shadowMapWidth,r.shadowMapHeight),r.shadowMatrix=
+new THREE.Matrix4);if(!r.shadowCamera){if(r instanceof THREE.SpotLight)r.shadowCamera=new THREE.PerspectiveCamera(r.shadowCameraFov,r.shadowMapWidth/r.shadowMapHeight,r.shadowCameraNear,r.shadowCameraFar);else if(r instanceof THREE.DirectionalLight)r.shadowCamera=new THREE.OrthographicCamera(r.shadowCameraLeft,r.shadowCameraRight,r.shadowCameraTop,r.shadowCameraBottom,r.shadowCameraNear,r.shadowCameraFar);else{console.error("Unsupported light type for shadow");continue}q.add(r.shadowCamera);!0===
+q.autoUpdate&&q.updateMatrixWorld()}r.shadowCameraVisible&&!r.cameraHelper&&(r.cameraHelper=new THREE.CameraHelper(r.shadowCamera),r.shadowCamera.add(r.cameraHelper));if(r.isVirtual&&J.originalCamera==p){w=p;v=r.shadowCamera;u=r.pointsFrustum;x=r.pointsWorld;k.set(Infinity,Infinity,Infinity);l.set(-Infinity,-Infinity,-Infinity);for(y=0;8>y;y++)B=x[y],B.copy(u[y]),THREE.ShadowMapPlugin.__projector.unprojectVector(B,w),B.applyMatrix4(v.matrixWorldInverse),B.x<k.x&&(k.x=B.x),B.x>l.x&&(l.x=B.x),B.y<k.y&&
+(k.y=B.y),B.y>l.y&&(l.y=B.y),B.z<k.z&&(k.z=B.z),B.z>l.z&&(l.z=B.z);v.left=k.x;v.right=l.x;v.top=l.y;v.bottom=k.y;v.updateProjectionMatrix()}v=r.shadowMap;u=r.shadowMatrix;w=r.shadowCamera;w.position.setFromMatrixPosition(r.matrixWorld);n.setFromMatrixPosition(r.target.matrixWorld);w.lookAt(n);w.updateMatrixWorld();w.matrixWorldInverse.getInverse(w.matrixWorld);r.cameraHelper&&(r.cameraHelper.visible=r.shadowCameraVisible);r.shadowCameraVisible&&r.cameraHelper.update();u.set(0.5,0,0,0.5,0,0.5,0,0.5,
+0,0,0.5,0.5,0,0,0,1);u.multiply(w.projectionMatrix);u.multiply(w.matrixWorldInverse);h.multiplyMatrices(w.projectionMatrix,w.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(v);b.clear();x=q.__webglObjects;r=0;for(v=x.length;r<v;r++)y=x[r],u=y.object,y.render=!1,!u.visible||!u.castShadow||(u instanceof THREE.Mesh||u instanceof THREE.ParticleSystem)&&u.frustumCulled&&!g.intersectsObject(u)||(u._modelViewMatrix.multiplyMatrices(w.matrixWorldInverse,u.matrixWorld),y.render=!0);var K;r=0;for(v=
+x.length;r<v;r++)y=x[r],y.render&&(u=y.object,y=y.buffer,B=u.material instanceof THREE.MeshFaceMaterial?u.material.materials[0]:u.material,L=void 0!==u.geometry.morphTargets&&0<u.geometry.morphTargets.length&&B.morphTargets,K=u instanceof THREE.SkinnedMesh&&B.skinning,L=u.customDepthMaterial?u.customDepthMaterial:K?L?f:e:L?d:c,b.setMaterialFaces(B),y instanceof THREE.BufferGeometry?b.renderBufferDirect(w,q.__lights,null,L,y,u):b.renderBuffer(w,q.__lights,null,L,y,u));x=q.__webglObjectsImmediate;r=
+0;for(v=x.length;r<v;r++)y=x[r],u=y.object,u.visible&&u.castShadow&&(u._modelViewMatrix.multiplyMatrices(w.matrixWorldInverse,u.matrixWorld),b.renderImmediateObject(w,q.__lights,null,c,u))}s=b.getClearColor();t=b.getClearAlpha();a.clearColor(s.r,s.g,s.b,t);a.enable(a.BLEND);b.shadowMapCullFace===THREE.CullFaceFront&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;THREE.SpritePlugin=function(){var a,b,c,d,e,f,g,h,k,l,n,q,p,s,t,r,v;function w(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var u,y,L,x,N,J,B,K;this.init=function(w){u=w.context;y=w;x=new Float32Array([-0.5,-0.5,0,0,0.5,-0.5,1,0,0.5,0.5,1,1,-0.5,0.5,0,1]);N=new Uint16Array([0,1,2,0,2,3]);J=u.createBuffer();B=u.createBuffer();u.bindBuffer(u.ARRAY_BUFFER,J);u.bufferData(u.ARRAY_BUFFER,x,u.STATIC_DRAW);u.bindBuffer(u.ELEMENT_ARRAY_BUFFER,B);u.bufferData(u.ELEMENT_ARRAY_BUFFER,N,u.STATIC_DRAW);w=u.createProgram();
+var G=u.createShader(u.VERTEX_SHADER),D=u.createShader(u.FRAGMENT_SHADER);u.shaderSource(G,["precision "+y.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n"));
+u.shaderSource(D,["precision "+y.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n"));
+u.compileShader(G);u.compileShader(D);u.attachShader(w,G);u.attachShader(w,D);u.linkProgram(w);K=w;r=u.getAttribLocation(K,"position");v=u.getAttribLocation(K,"uv");a=u.getUniformLocation(K,"uvOffset");b=u.getUniformLocation(K,"uvScale");c=u.getUniformLocation(K,"rotation");d=u.getUniformLocation(K,"scale");e=u.getUniformLocation(K,"color");f=u.getUniformLocation(K,"map");g=u.getUniformLocation(K,"opacity");h=u.getUniformLocation(K,"modelViewMatrix");k=u.getUniformLocation(K,"projectionMatrix");l=
+u.getUniformLocation(K,"fogType");n=u.getUniformLocation(K,"fogDensity");q=u.getUniformLocation(K,"fogNear");p=u.getUniformLocation(K,"fogFar");s=u.getUniformLocation(K,"fogColor");t=u.getUniformLocation(K,"alphaTest");w=document.createElement("canvas");w.width=8;w.height=8;G=w.getContext("2d");G.fillStyle="#ffffff";G.fillRect(0,0,w.width,w.height);L=new THREE.Texture(w);L.needsUpdate=!0};this.render=function(A,x,D,C){D=A.__webglSprites;if(C=D.length){u.useProgram(K);u.enableVertexAttribArray(r);
+u.enableVertexAttribArray(v);u.disable(u.CULL_FACE);u.enable(u.BLEND);u.bindBuffer(u.ARRAY_BUFFER,J);u.vertexAttribPointer(r,2,u.FLOAT,!1,16,0);u.vertexAttribPointer(v,2,u.FLOAT,!1,16,8);u.bindBuffer(u.ELEMENT_ARRAY_BUFFER,B);u.uniformMatrix4fv(k,!1,x.projectionMatrix.elements);u.activeTexture(u.TEXTURE0);u.uniform1i(f,0);var F=0,z=0,H=A.fog;H?(u.uniform3f(s,H.color.r,H.color.g,H.color.b),H instanceof THREE.Fog?(u.uniform1f(q,H.near),u.uniform1f(p,H.far),u.uniform1i(l,1),z=F=1):H instanceof THREE.FogExp2&&
+(u.uniform1f(n,H.density),u.uniform1i(l,2),z=F=2)):(u.uniform1i(l,0),z=F=0);for(var E,N=[],H=0;H<C;H++)E=D[H],!1!==E.visible&&(E._modelViewMatrix.multiplyMatrices(x.matrixWorldInverse,E.matrixWorld),E.z=-E._modelViewMatrix.elements[14]);D.sort(w);for(H=0;H<C;H++)E=D[H],!1!==E.visible&&(x=E.material,u.uniform1f(t,x.alphaTest),u.uniformMatrix4fv(h,!1,E._modelViewMatrix.elements),N[0]=E.scale.x,N[1]=E.scale.y,E=A.fog&&x.fog?z:0,F!==E&&(u.uniform1i(l,E),F=E),null!==x.map?(u.uniform2f(a,x.map.offset.x,
+x.map.offset.y),u.uniform2f(b,x.map.repeat.x,x.map.repeat.y)):(u.uniform2f(a,0,0),u.uniform2f(b,1,1)),u.uniform1f(g,x.opacity),u.uniform3f(e,x.color.r,x.color.g,x.color.b),u.uniform1f(c,x.rotation),u.uniform2fv(d,N),y.setBlending(x.blending,x.blendEquation,x.blendSrc,x.blendDst),y.setDepthTest(x.depthTest),y.setDepthWrite(x.depthWrite),x.map&&x.map.image&&x.map.image.width?y.setTexture(x.map,0):y.setTexture(L,0),u.drawElements(u.TRIANGLES,6,u.UNSIGNED_SHORT,0));u.enable(u.CULL_FACE)}}};THREE.DepthPassPlugin=function(){this.enabled=!1;this.renderTarget=null;var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4;this.init=function(g){a=g.context;b=g;g=THREE.ShaderLib.depthRGBA;var h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,
+vertexShader:g.vertexShader,uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,b){this.enabled&&this.update(a,b)};this.update=function(k,l){var n,q,p,s,t,r;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);!0===k.autoUpdate&&k.updateMatrixWorld();l.matrixWorldInverse.getInverse(l.matrixWorld);h.multiplyMatrices(l.projectionMatrix,
+l.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(this.renderTarget);b.clear();r=k.__webglObjects;n=0;for(q=r.length;n<q;n++)p=r[n],t=p.object,p.render=!1,!t.visible||(t instanceof THREE.Mesh||t instanceof THREE.ParticleSystem)&&t.frustumCulled&&!g.intersectsObject(t)||(t._modelViewMatrix.multiplyMatrices(l.matrixWorldInverse,t.matrixWorld),p.render=!0);var v;n=0;for(q=r.length;n<q;n++)p=r[n],p.render&&(t=p.object,p=p.buffer,t instanceof THREE.ParticleSystem&&!t.customDepthMaterial||((v=
+t.material instanceof THREE.MeshFaceMaterial?t.material.materials[0]:t.material)&&b.setMaterialFaces(t.material),s=void 0!==t.geometry.morphTargets&&0<t.geometry.morphTargets.length&&v.morphTargets,v=t instanceof THREE.SkinnedMesh&&v.skinning,s=t.customDepthMaterial?t.customDepthMaterial:v?s?f:e:s?d:c,p instanceof THREE.BufferGeometry?b.renderBufferDirect(l,k.__lights,null,s,p,t):b.renderBuffer(l,k.__lights,null,s,p,t)));r=k.__webglObjectsImmediate;n=0;for(q=r.length;n<q;n++)p=r[n],t=p.object,t.visible&&
+(t._modelViewMatrix.multiplyMatrices(l.matrixWorldInverse,t.matrixWorld),b.renderImmediateObject(l,k.__lights,null,c,t));n=b.getClearColor();q=b.getClearAlpha();a.clearColor(n.r,n.g,n.b,q);a.enable(a.BLEND)}};THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = visibility.r / 9.0;\nvVisibility *= 1.0 - visibility.g / 9.0;\nvVisibility *= visibility.b / 9.0;\nvVisibility *= 1.0 - visibility.a / 9.0;\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",
+fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},lensFlare:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",
+fragmentShader:"precision mediump float;\nuniform lowp int renderType;\nuniform sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nfloat visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\nvisibility = ( 1.0 - visibility / 4.0 );\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * visibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"}};
diff --git a/basicsuite/webengine/description.txt b/basicsuite/webengine/description.txt
new file mode 100644
index 0000000..0a4cf41
--- /dev/null
+++ b/basicsuite/webengine/description.txt
@@ -0,0 +1,3 @@
+This example demonstrates the use of the QtWebEngine WebView with Qt Quick.
+
+Demo can be used to browse the internet (working network connection required) or run the offline web page demos.
diff --git a/basicsuite/webengine/exclude.txt b/basicsuite/webengine/exclude.txt
new file mode 100644
index 0000000..4efe135
--- /dev/null
+++ b/basicsuite/webengine/exclude.txt
@@ -0,0 +1,5 @@
+android-emulator
+linux-emulator
+linux-raspberrypi
+linux-beaglebone
+android-beaglebone
diff --git a/basicsuite/webengine/main.qml b/basicsuite/webengine/main.qml
new file mode 100644
index 0000000..d2f5184
--- /dev/null
+++ b/basicsuite/webengine/main.qml
@@ -0,0 +1,293 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of the examples of the Qt Enterprise Embedded.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.1
+import QtQuick.Controls.Styles 1.2
+import QtQuick.Layouts 1.1
+import QtWebEngine 0.9
+
+import "ui"
+
+Rectangle {
+ id: root
+ z: 0
+ visible: true
+ color: "black"
+
+ width: 1280
+ height: 800
+
+ property url defaultUrl: Qt.resolvedUrl("about:blank")
+ function load(url) { mainWebView.url = url }
+
+ ErrorPage {
+ id: errorPage
+ anchors.fill: parent
+ displayingError: false
+ }
+
+ WebEngineView {
+ id: mainWebView
+ anchors.fill: parent
+ url: defaultUrl
+ visible: !errorPage.displayingError
+ onLoadingChanged: {
+ if (!loading) {
+ addressBar.cursorPosition = 0
+ }
+ var loadError = loadRequest.errorDomain
+ if (loadError == WebEngineView.NoErrorDomain) {
+ errorPage.displayingError = false
+ return;
+ }
+ errorPage.displayingError = true
+ if (loadError == WebEngineView.InternalErrorDomain)
+ errorPage.mainMessage = "Internal error"
+ else if (loadError == WebEngineView.ConnectionErrorDomain)
+ errorPage.mainMessage = "Unable to connect to the Internet"
+ else if (loadError == WebEngineView.CertificateErrorDomain)
+ errorPage.mainMessage = "Certificate error"
+ else if (loadError == WebEngineView.DnsErrorDomain)
+ errorPage.mainMessage = "Unable to resolve the server's DNS address"
+ else // HTTP and FTP
+ errorPage.mainMessage = "Protocol error"
+ }
+ onActiveFocusChanged: activeFocus ? hideTimer.running = true : toolBar.state = "address"
+
+ Timer {
+ interval: 1500
+ running: false
+ onTriggered: defaultUrl = Qt.resolvedUrl("content/index.html")
+ Component.onCompleted: start()
+ }
+ }
+
+ MultiPointTouchArea {
+ z: showToolBarButton.z
+ width: parent.width
+ height: showToolBarButton.height + 15
+ enabled: toolBar.state == "hidden"
+
+ anchors.top: parent.top
+ onGestureStarted: {
+ showToolBarButton.clicked()
+ }
+ onReleased: {
+ showToolBarButton.clicked()
+ }
+ }
+
+ Rectangle {
+ z: 1
+ id: toolBar
+ color: "black"
+ opacity: 1
+
+ height: addressBar.height + showToolBarButton.height + 40
+ y: 0
+
+ Behavior on y {
+ enabled: toolBar.state != ""
+ NumberAnimation { duration: 250 }
+ }
+
+ Behavior on opacity {
+ enabled: toolBar.state != ""
+ NumberAnimation { duration: 250 }
+ }
+
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+
+ Timer {
+ id: hideTimer
+ interval: 2000
+ running: false
+ onTriggered: {
+ if (addressBar.activeFocus)
+ return;
+ toolBar.state = "hidden"
+ running = false
+ }
+ }
+
+ state: ""
+
+ states: [
+ State {
+ name: "hidden"
+ PropertyChanges { target: toolBar; y: showToolBarButton.height - toolBar.height }
+ PropertyChanges { target: toolBar; opacity: 0.5 }
+ },
+ State {
+ name: "address"
+ PropertyChanges { target: toolBar; y: 0 }
+ PropertyChanges { target: toolBar; opacity: 1 }
+ }
+ ]
+
+ RowLayout {
+ id: addressRow
+
+ Component {
+ id: navigationButtonStyle
+ ButtonStyle {
+ background: Rectangle {
+ anchors.fill: parent
+ color: control.pressed ? "grey" : "transparent"
+ radius: 5
+ Image {
+ anchors.fill: parent
+ anchors.margins: 6
+ source: control.icon
+ }
+ }
+ }
+ }
+ anchors {
+ top: parent.top
+ bottom: showToolBarButton.top
+ left: parent.left
+ right: parent.right
+ margins: 10
+ topMargin: 30
+ }
+ ToolButton {
+ id: backButton
+ Layout.fillHeight: true
+ Layout.minimumWidth: height
+ property string icon: "ui/icons/go-previous.png"
+ onClicked: mainWebView.goBack()
+ enabled: mainWebView.canGoBack
+ style: navigationButtonStyle
+ }
+ ToolButton {
+ id: forwardButton
+ Layout.fillHeight: true
+ Layout.minimumWidth: height
+ property string icon: "ui/icons/go-next.png"
+ onClicked: mainWebView.goForward()
+ enabled: mainWebView.canGoForward
+ style: navigationButtonStyle
+ }
+ ToolButton {
+ id: reloadButton
+ Layout.fillHeight: true
+ Layout.minimumWidth: height
+ property string icon: mainWebView.loading ? "ui/icons/process-stop.png" : "ui/icons/view-refresh.png"
+ onClicked: mainWebView.loading ? mainWebView.stop() : mainWebView.reload()
+ style: navigationButtonStyle
+ }
+ ToolButton {
+ id: homeButton
+ width: 20
+ Layout.fillHeight: true
+ Layout.minimumWidth: height
+ property string icon: "ui/icons/home.png"
+ onClicked: load(defaultUrl)
+ style: navigationButtonStyle
+ }
+ TextField {
+ id: addressBar
+ focus: true
+ textColor: "black"
+ implicitHeight: 50
+ font.pixelSize: 25
+ inputMethodHints: Qt.ImhUrlCharactersOnly | Qt.ImhNoPredictiveText
+ Image {
+ anchors {
+ right: parent.right
+ verticalCenter: addressBar.verticalCenter
+ rightMargin: 5
+ }
+ verticalAlignment: Image.AlignLeft
+ z: 2
+ id: faviconImage
+ width: 20; height: 20
+ source: mainWebView.icon
+ }
+ Layout.fillWidth: true
+ text: mainWebView.url
+ onAccepted: {
+ mainWebView.url = engine.fromUserInput(text)
+ }
+ }
+ }
+
+ ToolButton {
+ id: showToolBarButton
+ height: 30
+ width: height
+ property string icon: (toolBar.state == "hidden") ? "ui/icons/down.png" : "ui/icons/up.png"
+ style: navigationButtonStyle
+ onClicked: {
+ if (toolBar.state == "hidden") {
+ toolBar.state = "address"
+ addressBar.forceActiveFocus()
+ addressBar.selectAll()
+ } else
+ toolBar.state = "hidden"
+ }
+ anchors {
+ bottom: parent.bottom
+ horizontalCenter: parent.horizontalCenter
+ bottomMargin: (toolBar.state == "hidden") ? 0 : 5
+ }
+ }
+ }
+ ProgressBar {
+ id: progressBar
+ height: 5
+ z: toolBar.z + 1
+ visible: value != 0
+ anchors {
+ top: toolBar.bottom
+ left: parent.left
+ right: parent.right
+ }
+ minimumValue: 0
+ maximumValue: 100
+ value: (mainWebView.loadProgress < 100) ? mainWebView.loadProgress : 0
+ }
+}
diff --git a/basicsuite/webengine/preview_l.jpg b/basicsuite/webengine/preview_l.jpg
new file mode 100644
index 0000000..963258a
--- /dev/null
+++ b/basicsuite/webengine/preview_l.jpg
Binary files differ
diff --git a/basicsuite/webengine/title.txt b/basicsuite/webengine/title.txt
new file mode 100644
index 0000000..25a9f76
--- /dev/null
+++ b/basicsuite/webengine/title.txt
@@ -0,0 +1 @@
+011. QtWebEngine Web Browser Demo
diff --git a/basicsuite/webengine/ui/icons/down.png b/basicsuite/webengine/ui/icons/down.png
new file mode 100644
index 0000000..ec246e7
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/down.png
Binary files differ
diff --git a/basicsuite/webengine/ui/icons/go-next.png b/basicsuite/webengine/ui/icons/go-next.png
new file mode 100644
index 0000000..6ba21f8
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/go-next.png
Binary files differ
diff --git a/basicsuite/webengine/ui/icons/go-previous.png b/basicsuite/webengine/ui/icons/go-previous.png
new file mode 100644
index 0000000..e0753dd
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/go-previous.png
Binary files differ
diff --git a/basicsuite/webengine/ui/icons/home.png b/basicsuite/webengine/ui/icons/home.png
new file mode 100644
index 0000000..b241e02
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/home.png
Binary files differ
diff --git a/basicsuite/webengine/ui/icons/process-stop.png b/basicsuite/webengine/ui/icons/process-stop.png
new file mode 100644
index 0000000..c71d5a7
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/process-stop.png
Binary files differ
diff --git a/basicsuite/webengine/ui/icons/up.png b/basicsuite/webengine/ui/icons/up.png
new file mode 100644
index 0000000..5d33c4a
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/up.png
Binary files differ
diff --git a/basicsuite/webengine/ui/icons/view-refresh.png b/basicsuite/webengine/ui/icons/view-refresh.png
new file mode 100644
index 0000000..e7af6b3
--- /dev/null
+++ b/basicsuite/webengine/ui/icons/view-refresh.png
Binary files differ
diff --git a/basicsuite/webengine/webengine.pro b/basicsuite/webengine/webengine.pro
new file mode 100644
index 0000000..47bb4e4
--- /dev/null
+++ b/basicsuite/webengine/webengine.pro
@@ -0,0 +1,14 @@
+TARGET = webengine
+
+include(../shared/shared.pri)
+b2qtdemo_deploy_defaults()
+
+content.files = \
+ content \
+ ui \
+ *.qml
+content.path = $$DESTPATH
+
+OTHER_FILES += $${content.files}
+
+INSTALLS += target content
diff --git a/doc/b2qt-demos.qdoc b/doc/b2qt-demos.qdoc
index f985d8c..0a61968 100644
--- a/doc/b2qt-demos.qdoc
+++ b/doc/b2qt-demos.qdoc
@@ -106,17 +106,6 @@
*/
/*!
- \example photogallery
- \title Photo Gallery
- \ingroup b2qt-demos
- \brief A photo gallery implemented in QML.
-
- \image b2qt-demo-photogallery.jpg
-
- This is a simple photo gallery, showing images found in \c {/data/images} directory.
-*/
-
-/*!
\example qt5-cinematicdemo
\title Qt 5 Cinematic Demo
\ingroup b2qt-demos
@@ -136,21 +125,6 @@
*/
/*!
- \example qt5-launchpresentation
- \title Qt 5 Launch Presentation
- \ingroup b2qt-demos
- \brief A quick tour of what is new in Qt 5.
-
- \image b2qt-demo-qt5-launchpresentation.jpg
-
- This is an application written with Qt Quick, based on Qt 5.
-
- The source code is also available here: \l {https://qt.gitorious.org/qt-labs/qt5-launch-demo}.
- The demo makes use of the QML Presentation System, available from
- \c {ssh://codereview.qt-project.org/qt-labs/qml-presentation-system.git} repository.
-*/
-
-/*!
\example qt5-everywhere
\title Qt 5 Everywhere
\ingroup b2qt-demos
@@ -216,6 +190,17 @@
*/
/*!
+ \example enterprise-qtdatavis3d
+ \title Qt Data Visualization
+ \ingroup b2qt-demos
+ \brief An interactive showcase for Qt Data Visualization 3D.
+
+ \image b2qt-demo-enterprise-qtdatavis3d.jpg
+
+ This example demonstrates how to use the Qt Data Visualization module to display 3D data visualizations in QML.
+*/
+
+/*!
\example enterprise-gallery
\title Enterprise Controls Gallery
\ingroup b2qt-demos
@@ -232,3 +217,15 @@
\ingroup b2qt-demos
\brief Displays information and settings available for the Boot to Qt launcher.
*/
+
+/*!
+ \example webengine
+ \title Qt WebEngine Browser Demo
+ \ingroup b2qt-demos
+ \brief This example demonstrates the use of the QtWebEngine WebView with Qt Quick.
+
+ \image b2qt-demo-webengine.jpg
+
+ The example can be used to browse the internet (working network connection
+ required) or run the off-line WebGL demo.
+*/
diff --git a/doc/b2qt-demos.qdocconf b/doc/b2qt-demos.qdocconf
index 0a8712f..dfa494a 100644
--- a/doc/b2qt-demos.qdocconf
+++ b/doc/b2qt-demos.qdocconf
@@ -6,7 +6,7 @@ sourceencoding = UTF-8
project = QtEnterpriseEmbeddedDemos
description = Qt Enterprise Embedded Examples and Demos
-version = 2.1.0
+version = 3.1.1
sourcedirs = .
imagedirs += images
@@ -17,12 +17,11 @@ examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhc
examples.imageextensions = "*.png *.jpg *.gif"
exampledirs = ../basicsuite
-examplesinstallpath = ../../../Boot2Qt-2.x/sources/b2qt-demos/basicsuite
qhp.projects = QtEnterpriseEmbeddedDemos
qhp.QtEnterpriseEmbeddedDemos.file = b2qt-demos.qhp
-qhp.QtEnterpriseEmbeddedDemos.namespace = com.digia.b2qt-demos.210
+qhp.QtEnterpriseEmbeddedDemos.namespace = com.digia.b2qt-demos.311
qhp.QtEnterpriseEmbeddedDemos.virtualFolder = b2qt-demos
qhp.QtEnterpriseEmbeddedDemos.indexTitle = Qt Enterprise Embedded Examples and Demos
qhp.QtEnterpriseEmbeddedDemos.indexRoot =
diff --git a/doc/images/b2qt-demo-about-b2qt.jpg b/doc/images/b2qt-demo-about-b2qt.jpg
index f2eb2e0..b7c27dd 100644..120000
--- a/doc/images/b2qt-demo-about-b2qt.jpg
+++ b/doc/images/b2qt-demo-about-b2qt.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-camera.jpg b/doc/images/b2qt-demo-camera.jpg
index 3f15310..6989f2b 100644..120000
--- a/doc/images/b2qt-demo-camera.jpg
+++ b/doc/images/b2qt-demo-camera.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-controls-touch.jpg b/doc/images/b2qt-demo-controls-touch.jpg
index c57eac3..bd78fcf 100644..120000
--- a/doc/images/b2qt-demo-controls-touch.jpg
+++ b/doc/images/b2qt-demo-controls-touch.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-enterprise-charts.jpg b/doc/images/b2qt-demo-enterprise-charts.jpg
index 2776b0b..e2f9e6c 100644..120000
--- a/doc/images/b2qt-demo-enterprise-charts.jpg
+++ b/doc/images/b2qt-demo-enterprise-charts.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-enterprise-dashboard.jpg b/doc/images/b2qt-demo-enterprise-dashboard.jpg
index eb2e3b5..5a9e599 100644..120000
--- a/doc/images/b2qt-demo-enterprise-dashboard.jpg
+++ b/doc/images/b2qt-demo-enterprise-dashboard.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-enterprise-gallery.jpg b/doc/images/b2qt-demo-enterprise-gallery.jpg
index 8ddcad8..75dfea4 100644..120000
--- a/doc/images/b2qt-demo-enterprise-gallery.jpg
+++ b/doc/images/b2qt-demo-enterprise-gallery.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-enterprise-qtdatavis3d.jpg b/doc/images/b2qt-demo-enterprise-qtdatavis3d.jpg
new file mode 120000
index 0000000..0ac4dd3
--- /dev/null
+++ b/doc/images/b2qt-demo-enterprise-qtdatavis3d.jpg
@@ -0,0 +1 @@
+../../basicsuite/enterprise-qtdatavis3d/preview_l.jpg \ No newline at end of file
diff --git a/doc/images/b2qt-demo-graphicaleffects.jpg b/doc/images/b2qt-demo-graphicaleffects.jpg
index 80fbbd5..5a092e2 100644..120000
--- a/doc/images/b2qt-demo-graphicaleffects.jpg
+++ b/doc/images/b2qt-demo-graphicaleffects.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-launchersettings.jpg b/doc/images/b2qt-demo-launchersettings.jpg
new file mode 120000
index 0000000..0139c4c
--- /dev/null
+++ b/doc/images/b2qt-demo-launchersettings.jpg
@@ -0,0 +1 @@
+../../basicsuite/launchersettings/preview_l.jpg \ No newline at end of file
diff --git a/doc/images/b2qt-demo-mediaplayer.jpg b/doc/images/b2qt-demo-mediaplayer.jpg
index 0fff215..cce5a00 100644..120000
--- a/doc/images/b2qt-demo-mediaplayer.jpg
+++ b/doc/images/b2qt-demo-mediaplayer.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-photogallery.jpg b/doc/images/b2qt-demo-photogallery.jpg
deleted file mode 100644
index 0b67f1d..0000000
--- a/doc/images/b2qt-demo-photogallery.jpg
+++ /dev/null
Binary files differ
diff --git a/doc/images/b2qt-demo-qt5-cinematicdemo.jpg b/doc/images/b2qt-demo-qt5-cinematicdemo.jpg
index 21bb2f9..1cc8325 100644..120000
--- a/doc/images/b2qt-demo-qt5-cinematicdemo.jpg
+++ b/doc/images/b2qt-demo-qt5-cinematicdemo.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-qt5-everywhere.jpg b/doc/images/b2qt-demo-qt5-everywhere.jpg
index 1bb40bf..0c61cdb 100644..120000
--- a/doc/images/b2qt-demo-qt5-everywhere.jpg
+++ b/doc/images/b2qt-demo-qt5-everywhere.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-qt5-launchpresentation.jpg b/doc/images/b2qt-demo-qt5-launchpresentation.jpg
deleted file mode 100644
index 8decd76..0000000
--- a/doc/images/b2qt-demo-qt5-launchpresentation.jpg
+++ /dev/null
Binary files differ
diff --git a/doc/images/b2qt-demo-qt5-particlesdemo.jpg b/doc/images/b2qt-demo-qt5-particlesdemo.jpg
index fa0db59..42553b8 100644..120000
--- a/doc/images/b2qt-demo-qt5-particlesdemo.jpg
+++ b/doc/images/b2qt-demo-qt5-particlesdemo.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-sensorexplorer.jpg b/doc/images/b2qt-demo-sensorexplorer.jpg
index b0469e5..4c2797f 100644..120000
--- a/doc/images/b2qt-demo-sensorexplorer.jpg
+++ b/doc/images/b2qt-demo-sensorexplorer.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-sensors.jpg b/doc/images/b2qt-demo-sensors.jpg
index 7ce979d..4144c1c 100644..120000
--- a/doc/images/b2qt-demo-sensors.jpg
+++ b/doc/images/b2qt-demo-sensors.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-textinput.jpg b/doc/images/b2qt-demo-textinput.jpg
index 67a2917..ea9dcbe 100644..120000
--- a/doc/images/b2qt-demo-textinput.jpg
+++ b/doc/images/b2qt-demo-textinput.jpg
Binary files differ
diff --git a/doc/images/b2qt-demo-webengine.jpg b/doc/images/b2qt-demo-webengine.jpg
new file mode 120000
index 0000000..5d319d8
--- /dev/null
+++ b/doc/images/b2qt-demo-webengine.jpg
@@ -0,0 +1 @@
+../../basicsuite/webengine/preview_l.jpg \ No newline at end of file
diff --git a/doc/images/update-doc-images.sh b/doc/images/update-doc-images.sh
new file mode 100755
index 0000000..1463ac2
--- /dev/null
+++ b/doc/images/update-doc-images.sh
@@ -0,0 +1,2 @@
+rm b2qt-demo-*
+find ../../basicsuite/ -name "preview_l.jpg" -execdir sh -c 'ln -s ../../basicsuite/${PWD##*/}/preview_l.jpg ../../doc/images/b2qt-demo-${PWD##*/}.jpg' \;
diff --git a/videos/Qt_EnterpriseEmbedded_1080p.mp4 b/videos/Qt_EnterpriseEmbedded_1080p.mp4
new file mode 100644
index 0000000..993eb5c
--- /dev/null
+++ b/videos/Qt_EnterpriseEmbedded_1080p.mp4
Binary files differ